diff --git a/.dockerignore b/.dockerignore index 8c39dd615..b9c7d2f84 100644 --- a/.dockerignore +++ b/.dockerignore @@ -28,3 +28,4 @@ ./resources # Other stuff **/*.drawio.png +.mypy_baseline diff --git a/.github/workflows/ci-backend.yml b/.github/workflows/ci-backend.yml index a619f01c1..aca81a97d 100644 --- a/.github/workflows/ci-backend.yml +++ b/.github/workflows/ci-backend.yml @@ -99,3 +99,47 @@ jobs: run: | docker compose --file docker/compose/docker-compose.ci-test.yml logs docker compose --file docker/compose/docker-compose.ci-test.yml down + typing: + name: Check project typing + runs-on: ubuntu-24.04 + env: + DEFAULT_PYTHON: "3.12" + steps: + - name: Checkout + uses: actions/checkout@v6.0.1 + - name: Set up Python + id: setup-python + uses: actions/setup-python@v6.2.0 + with: + python-version: "${{ env.DEFAULT_PYTHON }}" + - name: Install uv + uses: astral-sh/setup-uv@v7.2.1 + with: + version: ${{ env.DEFAULT_UV_VERSION }} + enable-cache: true + python-version: ${{ steps.setup-python.outputs.python-version }} + - name: Install Python dependencies + run: | + uv sync \ + --python ${{ steps.setup-python.outputs.python-version }} \ + --group testing \ + --group typing \ + --frozen + - name: List installed Python dependencies + run: | + uv pip list + - name: Cache Mypy + uses: actions/cache@v5.0.3 + with: + path: .mypy_cache + # Keyed by OS, Python version, and dependency hashes + key: ${{ runner.os }}-mypy-py${{ env.DEFAULT_PYTHON }}-${{ hashFiles('pyproject.toml', 'uv.lock') }} + restore-keys: | + ${{ runner.os }}-mypy-py${{ env.DEFAULT_PYTHON }}- + ${{ runner.os }}-mypy- + - name: Check typing + run: | + uv run mypy \ + --show-error-codes \ + --warn-unused-configs \ + src/ | uv run mypy-baseline filter diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 3710e6589..3fa5a6870 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -106,7 +106,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3.12.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -180,20 +180,20 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3.12.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub if: needs.build-arch.outputs.push-external == 'true' - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to Quay.io if: needs.build-arch.outputs.push-external == 'true' - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: registry: quay.io username: ${{ secrets.QUAY_USERNAME }} diff --git a/.github/workflows/ci-frontend.yml b/.github/workflows/ci-frontend.yml index d800fe827..edf57c6b6 100644 --- a/.github/workflows/ci-frontend.yml +++ b/.github/workflows/ci-frontend.yml @@ -121,7 +121,7 @@ jobs: name: "E2E Tests (${{ matrix.shard-index }}/${{ matrix.shard-count }})" needs: install-dependencies runs-on: ubuntu-24.04 - container: mcr.microsoft.com/playwright:v1.57.0-noble + container: mcr.microsoft.com/playwright:v1.58.1-noble env: PLAYWRIGHT_BROWSERS_PATH: /ms-playwright PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml index ff05949ad..90aba1c14 100644 --- a/.github/workflows/ci-release.yml +++ b/.github/workflows/ci-release.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Wait for Docker build - uses: lewagon/wait-on-check-action@v1.4.1 + uses: lewagon/wait-on-check-action@v1.5.0 with: ref: ${{ github.sha }} check-name: 'Build Docker Image' @@ -155,6 +155,7 @@ jobs: version: ${{ steps.get-version.outputs.version }} prerelease: ${{ steps.get-version.outputs.prerelease }} publish: true + commitish: main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload release archive diff --git a/.mypy-baseline.txt b/.mypy-baseline.txt new file mode 100644 index 000000000..46dc72709 --- /dev/null +++ b/.mypy-baseline.txt @@ -0,0 +1,2474 @@ +src/documents/admin.py:0: error: "Callable[[DocumentAdmin, Any], Any]" has no attribute "short_description" [attr-defined] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/admin.py:0: error: Missing type parameters for generic type "ModelAdmin" [type-arg] +src/documents/admin.py:0: error: Missing type parameters for generic type "TabularInline" [type-arg] +src/documents/admin.py:0: error: Missing type parameters for generic type "TabularInline" [type-arg] +src/documents/admin.py:0: error: Skipping analyzing "auditlog.admin": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/admin.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/admin.py:0: error: Skipping analyzing "treenode.admin": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/barcodes.py:0: error: "Image" has no attribute "filename" [attr-defined] +src/documents/barcodes.py:0: error: Cannot find implementation or library stub for module named "zxingcpp" [import-not-found] +src/documents/barcodes.py:0: error: Skipping analyzing "pyzbar": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/bulk_download.py:0: error: Return type "None" of "add_document" incompatible with return type "Never" in supertype "BulkArchiveStrategy" [override] +src/documents/bulk_download.py:0: error: Return type "None" of "add_document" incompatible with return type "Never" in supertype "BulkArchiveStrategy" [override] +src/documents/bulk_download.py:0: error: Return type "None" of "add_document" incompatible with return type "Never" in supertype "BulkArchiveStrategy" [override] +src/documents/bulk_edit.py:0: error: "int" object is not iterable [misc] +src/documents/bulk_edit.py:0: error: "int" object is not iterable [misc] +src/documents/bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/bulk_edit.py:0: error: Incompatible return value type (got "Literal['ERROR']", expected "Literal['OK']") [return-value] +src/documents/bulk_edit.py:0: error: Incompatible type for lookup 'id': (got "Correspondent", expected "str | int") [misc] +src/documents/bulk_edit.py:0: error: Incompatible type for lookup 'id': (got "DocumentType", expected "str | int") [misc] +src/documents/bulk_edit.py:0: error: Incompatible type for lookup 'id': (got "StoragePath", expected "str | int") [misc] +src/documents/bulk_edit.py:0: error: Incompatible types in assignment (expression has type "dict_items[Any, Any] | list[tuple[int, None]]", variable has type "list[int] | dict[Any, Any]") [assignment] +src/documents/bulk_edit.py:0: error: Invalid index type "str" for "dict[FieldDataType, str]"; expected type "FieldDataType" [index] +src/documents/bulk_edit.py:0: error: List comprehension has incompatible type List[tuple[int, None]]; expected List[int] [misc] +src/documents/bulk_edit.py:0: error: Missing named argument "p" for "remove" of "PageList" [call-arg] +src/documents/bulk_edit.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/bulk_edit.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/bulk_edit.py:0: error: Need type annotation for "to_create" (hint: "to_create: list[] = ...") [var-annotated] +src/documents/caching.py:0: error: Argument 1 to "hexlify" has incompatible type "bytes | None"; expected "Buffer" [arg-type] +src/documents/caching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/caching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/caching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/caching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/caching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/caching.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/caching.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/caching.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/caching.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/caching.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/caching.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/caching.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/caching.py:0: error: Need type annotation for "_data" [var-annotated] +src/documents/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/classifier.py:0: error: "None" has no attribute "fit" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "fit" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "fit" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "fit" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "fit_transform" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "fit_transform" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "fit_transform" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "stem" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "stop_words_" [attr-defined] +src/documents/classifier.py:0: error: "None" has no attribute "transform" [attr-defined] +src/documents/classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "CountVectorizer", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "LabelBinarizer", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "MLPClassifier", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "MLPClassifier", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "MLPClassifier", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "MLPClassifier", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "MultiLabelBinarizer", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "DocumentClassifier") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "DocumentClassifier") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "DocumentClassifier") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "DocumentClassifier") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "frozenset[Any]", variable has type "None") [assignment] +src/documents/classifier.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/documents/classifier.py:0: error: List comprehension has incompatible type List[int]; expected List[list[int]] [misc] +src/documents/classifier.py:0: error: Module "sklearn.exceptions" has no attribute "InconsistentVersionWarning" [attr-defined] +src/documents/classifier.py:0: error: Skipping analyzing "nltk": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/classifier.py:0: error: Skipping analyzing "nltk.corpus": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/classifier.py:0: error: Skipping analyzing "nltk.stem": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/classifier.py:0: error: Skipping analyzing "nltk.tokenize": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/classifier.py:0: error: Unsupported right operand type for in ("None") [operator] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/conditionals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "input_doc" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "log" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "metadata" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "metadata" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "metadata" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "metadata" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "metadata" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "metadata" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "renew_logging_group" [attr-defined] +src/documents/consumer.py:0: error: "ConsumerPluginMixin" has no attribute "status_mgr" [attr-defined] +src/documents/consumer.py:0: error: "None" not callable [misc] +src/documents/consumer.py:0: error: "None" object is not iterable [misc] +src/documents/consumer.py:0: error: "get_page_count" of "DocumentParser" does not return a value (it only ever returns None) [func-returns-value] +src/documents/consumer.py:0: error: Argument "data_type" to "get_value_field_name" of "CustomFieldInstance" has incompatible type "str"; expected "FieldDataType" [arg-type] +src/documents/consumer.py:0: error: Argument "logger" to "run_subprocess" has incompatible type "LoggerAdapter[Logger]"; expected "Logger | None" [arg-type] +src/documents/consumer.py:0: error: Argument "text" to "_store" of "ConsumerPlugin" has incompatible type "Any | None"; expected "str" [arg-type] +src/documents/consumer.py:0: error: Argument 1 to "create_source_path_directory" has incompatible type "Path | None"; expected "Path" [arg-type] +src/documents/consumer.py:0: error: Argument 2 to "parse_w_workflow_placeholders" has incompatible type "str | None"; expected "str" [arg-type] +src/documents/consumer.py:0: error: Argument 3 to "parse_w_workflow_placeholders" has incompatible type "str | None"; expected "str" [arg-type] +src/documents/consumer.py:0: error: Argument 3 to "run_subprocess" has incompatible type "LoggerAdapter[Logger]"; expected "Logger | None" [arg-type] +src/documents/consumer.py:0: error: Argument 3 to "run_subprocess" has incompatible type "LoggerAdapter[Logger]"; expected "Logger | None" [arg-type] +src/documents/consumer.py:0: error: Argument 4 to "parse_w_workflow_placeholders" has incompatible type "str | None"; expected "str" [arg-type] +src/documents/consumer.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/consumer.py:0: error: Item "None" of "Document | None" has no attribute "deleted_at" [union-attr] +src/documents/consumer.py:0: error: Item "None" of "Document | None" has no attribute "filename" [union-attr] +src/documents/consumer.py:0: error: Item "None" of "Document | None" has no attribute "original_filename" [union-attr] +src/documents/consumer.py:0: error: Item "None" of "Document | None" has no attribute "pk" [union-attr] +src/documents/consumer.py:0: error: Item "None" of "Document | None" has no attribute "pk" [union-attr] +src/documents/consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/consumer.py:0: error: List item 2 has incompatible type "Path"; expected "str" [list-item] +src/documents/consumer.py:0: error: Too many arguments for "__init__" of "object" [call-arg] +src/documents/context_processors.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/converters.py:0: error: List item 3 has incompatible type "Path"; expected "str" [list-item] +src/documents/converters.py:0: error: List item 4 has incompatible type "Path"; expected "str" [list-item] +src/documents/converters.py:0: error: Skipping analyzing "img2pdf": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/data_models.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/data_models.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "str") [assignment] +src/documents/data_models.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "__iter__" (not iterable) [union-attr] +src/documents/data_models.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "__iter__" (not iterable) [union-attr] +src/documents/data_models.py:0: error: Item "list[str]" of "Any | list[str]" has no attribute "values_list" [union-attr] +src/documents/data_models.py:0: error: Item "list[str]" of "Any | list[str]" has no attribute "values_list" [union-attr] +src/documents/data_models.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/data_models.py:0: error: Value of type "Group | dict[Any, Any]" is not indexable [index] +src/documents/data_models.py:0: error: Value of type "Group | dict[Any, Any]" is not indexable [index] +src/documents/file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: "SharedByUser" has no attribute "model" [attr-defined] +src/documents/filters.py:0: error: "def wrapper(*args: Any, validation_prefix: Any = ..., **kwargs: Any) -> Any" has no attribute "__signature__" [attr-defined] +src/documents/filters.py:0: error: "type[Model]" has no attribute "objects" [attr-defined] +src/documents/filters.py:0: error: "type[Model]" has no attribute "objects" [attr-defined] +src/documents/filters.py:0: error: Argument "child" to "ListField" has incompatible type "BooleanField | None"; expected "Field[Any, Any, Any, Any]" [arg-type] +src/documents/filters.py:0: error: Argument "child" to "ListField" has incompatible type "BooleanField | None"; expected "Field[Any, Any, Any, Any]" [arg-type] +src/documents/filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "CharField", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "Field[Any, Any, Any, Any]", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "IntegerField", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "ListField", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "ListField", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "ListField", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "SelectField", variable has type "BooleanField | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "Sum", variable has type "Subquery | None") [assignment] +src/documents/filters.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "list[str]") [assignment] +src/documents/filters.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/filters.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/filters.py:0: error: Item "None" of "BooleanField | None" has no attribute "allow_null" [union-attr] +src/documents/filters.py:0: error: Missing type parameters for generic type "Callable" [type-arg] +src/documents/filters.py:0: error: Need type annotation for "_annotations" (hint: "_annotations: dict[, ] = ...") [var-annotated] +src/documents/filters.py:0: error: Need type annotation for "_model_serializer" [var-annotated] +src/documents/filters.py:0: error: Skipping analyzing "rest_framework_guardian.filters": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/filters.py:0: error: Value of type "Any | None" is not indexable [index] +src/documents/index.py:0: error: "ManualResults" has no attribute "formatter" [attr-defined] +src/documents/index.py:0: error: "ManualResults" has no attribute "fragmenter" [attr-defined] +src/documents/index.py:0: error: "ManualResults" has no attribute "top_n" [attr-defined] +src/documents/index.py:0: error: "ManualResults" has no attribute "top_n" [attr-defined] +src/documents/index.py:0: error: Argument 1 to "len" has incompatible type "ManualResults"; expected "Sized" [arg-type] +src/documents/index.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/index.py:0: error: Item "str" of "Any | str" has no attribute "id" [union-attr] +src/documents/index.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "set" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "tuple" [type-arg] +src/documents/index.py:0: error: Missing type parameters for generic type "tuple" [type-arg] +src/documents/index.py:0: error: Name "page" already defined on line 0 [no-redef] +src/documents/index.py:0: error: Need type annotation for "saved_results" (hint: "saved_results: dict[, ] = ...") [var-annotated] +src/documents/index.py:0: error: Need type annotation for "termCounts" [var-annotated] +src/documents/index.py:0: error: Skipping analyzing "whoosh": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.fields": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.highlight": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.idsets": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.index": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.qparser": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.qparser.dateparse": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.qparser.plugins": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.reading": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.scoring": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.searching": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.util.times": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Skipping analyzing "whoosh.writing": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/index.py:0: error: Value of type "ManualResults" is not indexable [index] +src/documents/loggers.py:0: error: "LoggingMixin" has no attribute "logging_name" [attr-defined] +src/documents/mail.py:0: error: Incompatible types in assignment (expression has type "Message[str, str]", variable has type "bytes") [assignment] +src/documents/management/commands/convert_mariadb_uuid.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/convert_mariadb_uuid.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/convert_mariadb_uuid.py:0: error: Need type annotation for "new_field" [var-annotated] +src/documents/management/commands/convert_mariadb_uuid.py:0: error: Need type annotation for "old_field" [var-annotated] +src/documents/management/commands/document_archiver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_archiver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_consumer.py:0: error: "str" has no attribute "is_file" [attr-defined] +src/documents/management/commands/document_consumer.py:0: error: Argument 1 to "track" of "FileStabilityTracker" has incompatible type "str"; expected "Path" [arg-type] +src/documents/management/commands/document_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_consumer.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "str") [assignment] +src/documents/management/commands/document_create_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_exporter.py:0: error: Argument 1 to "add" of "set" has incompatible type "Path"; expected "str" [arg-type] +src/documents/management/commands/document_exporter.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_exporter.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_exporter.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "Path") [assignment] +src/documents/management/commands/document_exporter.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/management/commands/document_exporter.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/management/commands/document_exporter.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/management/commands/document_exporter.py:0: error: Skipping analyzing "allauth.mfa.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/management/commands/document_exporter.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/management/commands/document_exporter.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/management/commands/document_fuzzy_match.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_fuzzy_match.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_importer.py:0: error: Argument 1 to "create_source_path_directory" has incompatible type "Path | None"; expected "Path" [arg-type] +src/documents/management/commands/document_importer.py:0: error: Argument 2 to "copy_file_with_basic_stats" has incompatible type "Path | None"; expected "Path | str" [arg-type] +src/documents/management/commands/document_importer.py:0: error: Attribute "version" already defined on line 0 [no-redef] +src/documents/management/commands/document_importer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_importer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_importer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_importer.py:0: error: Incompatible types in assignment (expression has type "str | None", base class "CryptMixin" defined the type as "str") [assignment] +src/documents/management/commands/document_importer.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/management/commands/document_importer.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/management/commands/document_importer.py:0: error: Missing type parameters for generic type "Generator" [type-arg] +src/documents/management/commands/document_importer.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/management/commands/document_importer.py:0: error: Need type annotation for "manifest_paths" (hint: "manifest_paths: list[] = ...") [var-annotated] +src/documents/management/commands/document_importer.py:0: error: Skipping analyzing "auditlog.registry": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/management/commands/document_index.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_index.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_llmindex.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_llmindex.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_renamer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_renamer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_retagger.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_retagger.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_thumbnails.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/document_thumbnails.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/document_thumbnails.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/loaddata_stdin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/loaddata_stdin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/loaddata_stdin.py:0: error: Incompatible types in assignment (expression has type "tuple[Callable[[Any, Any], TextIO | Any], None]", target has type "tuple[Callable[[str, Literal['r', 'rb']], BufferedReader[_BufferedReaderStream]]]") [assignment] +src/documents/management/commands/manage_superuser.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/manage_superuser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/mixins.py:0: error: Attribute "kdf_algorithm" already defined on line 0 [no-redef] +src/documents/management/commands/mixins.py:0: error: Attribute "key_iterations" already defined on line 0 [no-redef] +src/documents/management/commands/mixins.py:0: error: Attribute "key_size" already defined on line 0 [no-redef] +src/documents/management/commands/mixins.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/mixins.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/management/commands/mixins.py:0: error: Incompatible types in assignment (expression has type "list[dict[str, Sequence[str]]]", variable has type "CryptFields") [assignment] +src/documents/management/commands/mixins.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/management/commands/mixins.py:0: error: Unsupported operand types for // ("None" and "int") [operator] +src/documents/management/commands/prune_audit_logs.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/prune_audit_logs.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/management/commands/prune_audit_logs.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/matching.py:0: error: Argument 1 to "existing_document_matches_workflow" has incompatible type "ConsumableDocument | Document"; expected "Document" [arg-type] +src/documents/matching.py:0: error: Argument 1 to "issubset" of "set" has incompatible type "set[int] | None"; expected "Iterable[Any]" [arg-type] +src/documents/matching.py:0: error: Argument 1 to "matches" has incompatible type "WorkflowTrigger"; expected "MatchingModel" [arg-type] +src/documents/matching.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/matching.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/documents/matching.py:0: error: Incompatible types in assignment (expression has type "tuple[str]", variable has type "str") [assignment] +src/documents/matching.py:0: error: Incompatible types in assignment (expression has type "tuple[str]", variable has type "str") [assignment] +src/documents/matching.py:0: error: Incompatible types in assignment (expression has type "tuple[str]", variable has type "str") [assignment] +src/documents/matching.py:0: error: Incompatible types in assignment (expression has type "tuple[str]", variable has type "str") [assignment] +src/documents/matching.py:0: error: Unsupported left operand type for & ("None") [operator] +src/documents/matching.py:0: error: Unsupported left operand type for & ("None") [operator] +src/documents/matching.py:0: error: Value of type variable "AnyStr" of "fnmatch" cannot be "object" [type-var] +src/documents/migrations/0001_initial.py:0: error: Skipping analyzing "multiselectfield": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/migrations/0001_initial.py:0: error: Skipping analyzing "multiselectfield.db": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/migrations/0001_initial.py:0: error: Skipping analyzing "multiselectfield.db.fields": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/migrations/0008_sharelinkbundle.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/migrations/0008_sharelinkbundle.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/models.py:0: error: Could not resolve manager type for "documents.models.Document.deleted_objects" [django-manager-missing] +src/documents/models.py:0: error: Could not resolve manager type for "documents.models.Document.global_objects" [django-manager-missing] +src/documents/models.py:0: error: Could not resolve manager type for "documents.models.Document.objects" [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'custom_fields' for relation 'documents.models.CustomFieldInstance.document'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'documents' for relation 'documents.models.Document.correspondent'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'documents' for relation 'documents.models.Document.document_type'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'documents' for relation 'documents.models.Document.storage_path'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'fields' for relation 'documents.models.CustomFieldInstance.field'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'notes' for relation 'documents.models.Note.document'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'runs' for relation 'documents.models.WorkflowRun.workflow'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'share_links' for relation 'documents.models.ShareLink.document'. [django-manager-missing] +src/documents/models.py:0: error: Couldn't resolve related manager 'workflow_runs' for relation 'documents.models.WorkflowRun.document'. [django-manager-missing] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/models.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/models.py:0: error: Need type annotation for "created" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "created" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "created" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "document" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "document" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "document" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "document" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "expiration" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "field" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "file_version" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "note" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "owner" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "run_at" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "slug" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "type" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "user" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_bool" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_date" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_float" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_int" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_long_text" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_monetary" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_select" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_text" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "value_url" [var-annotated] +src/documents/models.py:0: error: Need type annotation for "workflow" [var-annotated] +src/documents/models.py:0: error: Signature of "delete" incompatible with supertype "django.db.models.base.Model" [override] +src/documents/models.py:0: error: Skipping analyzing "auditlog.registry": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/models.py:0: error: Skipping analyzing "django_softdelete.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/models.py:0: error: Skipping analyzing "multiselectfield": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/models.py:0: error: Skipping analyzing "treenode.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/parsers.py:0: error: Incompatible return value type (got "str | Any", expected "type[DocumentParser] | None") [return-value] +src/documents/parsers.py:0: error: Invalid index type "str | Any" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/documents/parsers.py:0: error: Value of type "str | None" is not indexable [index] +src/documents/parsers.py:0: error: Value of type "str | None" is not indexable [index] +src/documents/parsers.py:0: error: Value of type "str | None" is not indexable [index] +src/documents/parsers.py:0: error: Value of type "str | None" is not indexable [index] +src/documents/parsers.py:0: error: Value of type "str | None" is not indexable [index] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/permissions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/permissions.py:0: error: Item "list[str]" of "Any | list[str] | QuerySet[User, User]" has no attribute "exclude" [union-attr] +src/documents/permissions.py:0: error: Item "list[str]" of "Any | list[str] | QuerySet[User, User]" has no attribute "exists" [union-attr] +src/documents/permissions.py:0: error: Item "list[str]" of "Any | list[str] | QuerySet[User, User]" has no attribute "exists" [union-attr] +src/documents/permissions.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/permissions.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/plugins/helpers.py:0: error: "Collection[str]" has no attribute "update" [attr-defined] +src/documents/plugins/helpers.py:0: error: Argument 1 to "send" of "BaseStatusManager" has incompatible type "dict[str, Collection[str]]"; expected "dict[str, str | int | None]" [arg-type] +src/documents/plugins/helpers.py:0: error: Argument 1 to "send" of "BaseStatusManager" has incompatible type "dict[str, Collection[str]]"; expected "dict[str, str | int | None]" [arg-type] +src/documents/plugins/helpers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/plugins/helpers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/plugins/helpers.py:0: error: Skipping analyzing "channels_redis.pubsub": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/regex.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/regex.py:0: error: Library stubs not installed for "regex" [import-untyped] +src/documents/sanity_checker.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/sanity_checker.py:0: error: Cannot use Final inside a loop [misc] +src/documents/sanity_checker.py:0: error: Cannot use Final inside a loop [misc] +src/documents/sanity_checker.py:0: error: Cannot use Final inside a loop [misc] +src/documents/sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/sanity_checker.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/sanity_checker.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/sanity_checker.py:0: error: Incompatible type for "task_id" of "PaperlessTask" (got "UUID", expected "str | int | Combinable") [misc] +src/documents/sanity_checker.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/schema.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/schema.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/schema.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: "type[_MT?]" has no attribute "objects" [attr-defined] +src/documents/serialisers.py:0: error: "type[_MT?]" has no attribute "objects" [attr-defined] +src/documents/serialisers.py:0: error: "type[_MT?]" has no attribute "objects" [attr-defined] +src/documents/serialisers.py:0: error: Argument "choices" to "ChoiceField" has incompatible type "type[FieldDataType]"; expected "Sequence[Any]" [arg-type] +src/documents/serialisers.py:0: error: Argument "default" to "MultipleChoiceField" has incompatible type "set[DocumentSource]"; expected "set[str | int] | set[str] | set[int] | Callable[[], set[str | int] | set[str] | set[int]] | _Empty | None" [arg-type] +src/documents/serialisers.py:0: error: Argument 1 of "get_value" is incompatible with supertype "rest_framework.fields.Field"; supertype defines the argument type as "Mapping[Any, Any]" [override] +src/documents/serialisers.py:0: error: Argument 1 to "get_value_field_name" of "CustomFieldInstance" has incompatible type "str"; expected "FieldDataType" [arg-type] +src/documents/serialisers.py:0: error: Argument 1 to "int" has incompatible type "Any | Sequence[str]"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/documents/serialisers.py:0: error: Argument 1 to "int" has incompatible type "Any | Sequence[str]"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/documents/serialisers.py:0: error: Argument 1 to "int" has incompatible type "Any | Sequence[str]"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/documents/serialisers.py:0: error: Argument 1 to "int" has incompatible type "Any | Sequence[str]"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/documents/serialisers.py:0: error: Argument 1 to "len" has incompatible type "list[Any] | None"; expected "Sized" [arg-type] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/serialisers.py:0: error: Incompatible type for lookup 'pk': (got "str | None", expected "str | int") [misc] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "PrimaryKeyRelatedField[Tag]", base class "Field" defined the type as "BaseSerializer[Any]") [assignment] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "Sequence[str] | tuple[Lower]", variable has type "Sequence[str] | None") [assignment] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "WorkflowActionWebhookSerializer", variable has type "WorkflowActionEmailSerializer") [assignment] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "type[Correspondent]", variable has type "type[Tag] | None") [assignment] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "type[DocumentType]", variable has type "type[Tag] | None") [assignment] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "type[SearchResultListSerializer]", base class "Meta" defined the type as "type[OwnedObjectListSerializer]") [assignment] +src/documents/serialisers.py:0: error: Incompatible types in assignment (expression has type "type[StoragePath]", variable has type "type[Tag] | None") [assignment] +src/documents/serialisers.py:0: error: Item "Field[Any, Any, Any, Any]" of "Field[Any, Any, Any, Any] | None" has no attribute "fetch_documents" [union-attr] +src/documents/serialisers.py:0: error: Item "Field[Any, Any, Any, Any]" of "Field[Any, Any, Any, Any] | None" has no attribute "get_shared_object_pks" [union-attr] +src/documents/serialisers.py:0: error: Item "Field[Any, Any, Any, Any]" of "Field[Any, Any, Any, Any] | None" has no attribute "get_shared_object_pks" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Any | None" has no attribute "name" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Any | None" has no attribute "name" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Any | None" has no attribute "pk" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Any | None" has no attribute "version" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Field[Any, Any, Any, Any] | None" has no attribute "context" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Field[Any, Any, Any, Any] | None" has no attribute "context" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Field[Any, Any, Any, Any] | None" has no attribute "context" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Field[Any, Any, Any, Any] | None" has no attribute "fetch_documents" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Field[Any, Any, Any, Any] | None" has no attribute "get_shared_object_pks" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Field[Any, Any, Any, Any] | None" has no attribute "get_shared_object_pks" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "Match[str] | None" has no attribute "group" [union-attr] +src/documents/serialisers.py:0: error: Item "None" of "ObjectPermissionChecker | None" has no attribute "has_perm" [union-attr] +src/documents/serialisers.py:0: error: Item "list[str]" of "Any | list[str]" has no attribute "values_list" [union-attr] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Field" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Iterable" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ListSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ListSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "PrimaryKeyRelatedField" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "PrimaryKeyRelatedField" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "PrimaryKeyRelatedField" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "PrimaryKeyRelatedField" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/serialisers.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/serialisers.py:0: error: Need type annotation for "document" [var-annotated] +src/documents/serialisers.py:0: error: Need type annotation for "documents" [var-annotated] +src/documents/serialisers.py:0: error: Need type annotation for "permissions_dict" [var-annotated] +src/documents/serialisers.py:0: error: Skipping analyzing "auditlog.context": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/serialisers.py:0: error: Value of type "Any | None" is not indexable [index] +src/documents/serialisers.py:0: error: Value of type "Any | None" is not indexable [index] +src/documents/serialisers.py:0: error: Value of type "Match[str] | None" is not indexable [index] +src/documents/signals/handlers.py:0: error: "BaseDatabaseWrapper" has no attribute "close_pool" [attr-defined] +src/documents/signals/handlers.py:0: error: Argument 1 to "Path" has incompatible type "Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 1 to "Path" has incompatible type "Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 1 to "Path" has incompatible type "Path | Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 1 to "create_source_path_directory" has incompatible type "Path | Any | None"; expected "Path" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 1 to "move" has incompatible type "Path | Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 1 to "move" has incompatible type "Path | Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "apply_assignment_to_document" has incompatible type "Document | ConsumableDocument"; expected "Document" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "apply_removal_to_document" has incompatible type "Document | ConsumableDocument"; expected "Document" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "match_correspondents" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "match_document_types" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "match_storage_paths" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "match_tags" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 2 to "validate_move" has incompatible type "Path | Any | None"; expected "Path" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 3 to "validate_move" has incompatible type "Path | Any | None"; expected "Path" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 5 to "_suggestion_printer" has incompatible type "Any | None"; expected "MatchingModel" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 5 to "_suggestion_printer" has incompatible type "Any | None"; expected "MatchingModel" [arg-type] +src/documents/signals/handlers.py:0: error: Argument 5 to "_suggestion_printer" has incompatible type "Any | None"; expected "MatchingModel" [arg-type] +src/documents/signals/handlers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/signals/handlers.py:0: error: Incompatible return value type (got "tuple[DocumentMetadataOverrides | None, str]", expected "tuple[DocumentMetadataOverrides, str] | None") [return-value] +src/documents/signals/handlers.py:0: error: Incompatible types in assignment (expression has type "list[Tag]", variable has type "set[Tag]") [assignment] +src/documents/signals/handlers.py:0: error: Incompatible types in assignment (expression has type "tuple[Any, Any, Any]", variable has type "tuple[Any, Any]") [assignment] +src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "refresh_from_db" [union-attr] +src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "save" [union-attr] +src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "source_path" [union-attr] +src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "tags" [union-attr] +src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "tags" [union-attr] +src/documents/signals/handlers.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "title" [union-attr] +src/documents/signals/handlers.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/signals/handlers.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/signals/handlers.py:0: error: Item "None" of "Any | None" has no attribute "remove" [union-attr] +src/documents/signals/handlers.py:0: error: Item "None" of "Path | Any | None" has no attribute "is_file" [union-attr] +src/documents/signals/handlers.py:0: error: Item "None" of "Path | Any | None" has no attribute "is_file" [union-attr] +src/documents/signals/handlers.py:0: error: Missing return statement [return] +src/documents/signals/handlers.py:0: error: Unsupported right operand type for in ("Any | None") [operator] +src/documents/signals/handlers.py:0: error: Unsupported target for indexed assignment ("Any | None") [index] +src/documents/signals/handlers.py:0: error: Value of type variable "_StrPathT" of "move" cannot be "Path | Any | None" [type-var] +src/documents/signals/handlers.py:0: error: Value of type variable "_StrPathT" of "move" cannot be "Path | Any | None" [type-var] +src/documents/tasks.py:0: error: Argument 1 to "create_source_path_directory" has incompatible type "Path | None"; expected "Path" [arg-type] +src/documents/tasks.py:0: error: Argument 4 to "ConsumeTaskPlugin" has incompatible type "str"; expected "Path" [arg-type] +src/documents/tasks.py:0: error: Argument 5 to "ConsumeTaskPlugin" has incompatible type "str | None"; expected "str" [arg-type] +src/documents/tasks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tasks.py:0: error: Incompatible type for "task_id" of "PaperlessTask" (got "UUID", expected "str | int | Combinable") [misc] +src/documents/tasks.py:0: error: Incompatible type for "task_id" of "PaperlessTask" (got "UUID", expected "str | int | Combinable") [misc] +src/documents/tasks.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "str") [assignment] +src/documents/tasks.py:0: error: Incompatible types in assignment (expression has type "QuerySet[Document, Document]", variable has type "UnknownQuerySet[Document, Document]") [assignment] +src/documents/tasks.py:0: error: Incompatible types in assignment (expression has type "type[DocumentParser] | None", variable has type "type[DocumentParser]") [assignment] +src/documents/tasks.py:0: error: Missing type parameters for generic type "Task" [type-arg] +src/documents/tasks.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/tasks.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tasks.py:0: error: Skipping analyzing "whoosh.writing": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tasks.py:0: error: Value of type variable "_StrPathT" of "move" cannot be "Path | None" [type-var] +src/documents/templating/environment.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/templating/environment.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/templating/filepath.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/templating/filepath.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/templating/filepath.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/templating/filepath.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/templating/filepath.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/templating/filepath.py:0: error: Incompatible types in assignment (expression has type "QuerySet[Tag, Tag]", variable has type "list[Tag]") [assignment] +src/documents/templating/filepath.py:0: error: Need type annotation for "field_data" [var-annotated] +src/documents/templating/filters.py:0: error: Incompatible types in assignment (expression has type "date | None", variable has type "str | datetime") [assignment] +src/documents/templating/filters.py:0: error: Incompatible types in assignment (expression has type "datetime | None", variable has type "date | datetime | str") [assignment] +src/documents/templating/filters.py:0: error: Item "str" of "str | datetime" has no attribute "strftime" [union-attr] +src/documents/templating/utils.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/templating/workflows.py:0: error: Incompatible return value type (got "None", expected "str") [return-value] +src/documents/tests/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] +src/documents/tests/factories.py:0: error: Missing type parameters for generic type "DjangoModelFactory" [type-arg] +src/documents/tests/test_admin.py:0: error: "PaperlessUserForm" has no attribute "request" [attr-defined] +src/documents/tests/test_admin.py:0: error: "PaperlessUserForm" has no attribute "request" [attr-defined] +src/documents/tests/test_admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_admin.py:0: error: Module "django.utils.timezone" does not explicitly export attribute "datetime" [attr-defined] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "ai_enabled" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_logo" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_logo" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_logo" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_title" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_title" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "barcode_tag_mapping" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "color_conversion_strategy" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "language" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "llm_api_key" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "llm_api_key" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "llm_api_key" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "llm_embedding_backend" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "refresh_from_db" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "refresh_from_db" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/documents/tests/test_api_app_config.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "user_args" [union-attr] +src/documents/tests/test_api_bulk_download.py:0: error: Value of type variable "_StrPathT" of "copy" cannot be "Path | None" [type-var] +src/documents/tests/test_api_bulk_edit.py:0: error: "type[MatchingModel]" has no attribute "objects" [attr-defined] +src/documents/tests/test_api_bulk_edit.py:0: error: "type[MatchingModel]" has no attribute "objects" [attr-defined] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_bulk_edit.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_api_custom_fields.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_custom_fields.py:0: error: Value of type "Any | None" is not indexable [index] +src/documents/tests/test_api_documents.py:0: error: "None" object is not iterable [misc] +src/documents/tests/test_api_documents.py:0: error: "object" has no attribute "get" [attr-defined] +src/documents/tests/test_api_documents.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_api_documents.py:0: error: Argument 1 to "assertCountEqual" of "TestCase" has incompatible type "list[int] | None"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_api_documents.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_documents.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_documents.py:0: error: Item "None" of "SavedViewFilterRule | None" has no attribute "value" [union-attr] +src/documents/tests/test_api_documents.py:0: error: Value of type "object" is not indexable [index] +src/documents/tests/test_api_documents.py:0: error: Value of type "object" is not indexable [index] +src/documents/tests/test_api_documents.py:0: error: Value of type variable "_StrPathT" of "copy" cannot be "Path | None" [type-var] +src/documents/tests/test_api_documents.py:0: error: Value of type variable "_StrPathT" of "copy" cannot be "Path | None" [type-var] +src/documents/tests/test_api_email.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_email.py:0: error: Item "None" of "Path | None" has no attribute "stat" [union-attr] +src/documents/tests/test_api_email.py:0: error: Value of type variable "_StrPathT" of "copy" cannot be "Path | None" [type-var] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: List item 1 has incompatible type "list[str]"; expected "str" [list-item] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/tests/test_api_filter_by_custom_fields.py:0: error: Need type annotation for "documents" (hint: "documents: list[] = ...") [var-annotated] +src/documents/tests/test_api_objects.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_objects.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_permissions.py:0: error: Argument 2 to "get_perms" has incompatible type "Tag | None"; expected "Model" [arg-type] +src/documents/tests/test_api_permissions.py:0: error: Argument 2 to "get_perms" has incompatible type "Tag | None"; expected "Model" [arg-type] +src/documents/tests/test_api_permissions.py:0: error: Argument 2 to "has_perm" of "ObjectPermissionChecker" has incompatible type "Tag | None"; expected "Model" [arg-type] +src/documents/tests/test_api_permissions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_permissions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_permissions.py:0: error: Item "None" of "Tag | None" has no attribute "owner" [union-attr] +src/documents/tests/test_api_permissions.py:0: error: Item "None" of "Tag | None" has no attribute "owner" [union-attr] +src/documents/tests/test_api_permissions.py:0: error: Item "None" of "Tag | None" has no attribute "owner" [union-attr] +src/documents/tests/test_api_permissions.py:0: error: Skipping analyzing "allauth.mfa.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_api_permissions.py:0: error: Skipping analyzing "allauth.mfa.totp.internal": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_api_profile.py:0: error: "User" has no attribute "socialaccount_set"; maybe "mailaccount_set"? [attr-defined] +src/documents/tests/test_api_profile.py:0: error: "User" has no attribute "socialaccount_set"; maybe "mailaccount_set"? [attr-defined] +src/documents/tests/test_api_profile.py:0: error: "User" has no attribute "socialaccount_set"; maybe "mailaccount_set"? [attr-defined] +src/documents/tests/test_api_profile.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_profile.py:0: error: Item "None" of "Token | None" has no attribute "key" [union-attr] +src/documents/tests/test_api_profile.py:0: error: Skipping analyzing "allauth.mfa.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_api_profile.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_api_search.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_search.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_api_search.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_search.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_search.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_search.py:0: error: Need type annotation for "seen_ids" (hint: "seen_ids: list[] = ...") [var-annotated] +src/documents/tests/test_api_search.py:0: error: Skipping analyzing "whoosh.writing": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_api_status.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_status.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_status.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_status.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_api_uisettings.py:0: error: Argument 1 to "assertDictEqual" of "TestCase" has incompatible type "Any | None"; expected "Mapping[Any, object]" [arg-type] +src/documents/tests/test_api_workflows.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_workflows.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "Correspondent | None" has no attribute "pk" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowAction | None" has no attribute "assign_title" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowAction | None" has no attribute "id" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_custom_field_query" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_custom_field_query" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_all_tags" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_all_tags" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_any_correspondents" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_any_correspondents" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_any_document_types" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_any_document_types" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_any_storage_paths" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_any_storage_paths" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_correspondents" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_correspondents" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_document_types" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_document_types" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_storage_paths" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_storage_paths" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_tags" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_not_tags" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_tags" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "filter_has_tags" [union-attr] +src/documents/tests/test_api_workflows.py:0: error: Item "None" of "WorkflowTrigger | None" has no attribute "id" [union-attr] +src/documents/tests/test_barcodes.py:0: error: "GetReaderPluginMixin" has no attribute "dirs" [attr-defined] +src/documents/tests/test_barcodes.py:0: error: Argument 1 to "contextmanager" has incompatible type "Callable[[TestAsnBarcode, Path], BarcodePlugin]"; expected "Callable[[TestAsnBarcode, Path], Iterator[Never]]" [arg-type] +src/documents/tests/test_barcodes.py:0: error: Argument 1 to "contextmanager" has incompatible type "Callable[[TestTagBarcode, Path], BarcodePlugin]"; expected "Callable[[TestTagBarcode, Path], Iterator[Never]]" [arg-type] +src/documents/tests/test_barcodes.py:0: error: Argument 1 to "get_reader" of "GetReaderPluginMixin" has incompatible type "str"; expected "Path" [arg-type] +src/documents/tests/test_barcodes.py:0: error: Argument 3 to "BarcodePlugin" has incompatible type "DummyProgressManager"; expected "ProgressManager" [arg-type] +src/documents/tests/test_barcodes.py:0: error: Argument 3 to "BarcodePlugin" has incompatible type "DummyProgressManager"; expected "ProgressManager" [arg-type] +src/documents/tests/test_barcodes.py:0: error: Argument 3 to "BarcodePlugin" has incompatible type "DummyProgressManager"; expected "ProgressManager" [arg-type] +src/documents/tests/test_barcodes.py:0: error: Cannot find implementation or library stub for module named "zxingcpp" [import-not-found] +src/documents/tests/test_barcodes.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_barcodes.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "str") [assignment] +src/documents/tests/test_barcodes.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "barcode_string" [union-attr] +src/documents/tests/test_barcodes.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "barcodes_enabled" [union-attr] +src/documents/tests/test_barcodes.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/documents/tests/test_barcodes.py:0: error: Item "None" of "Document | None" has no attribute "archive_serial_number" [union-attr] +src/documents/tests/test_barcodes.py:0: error: Item "None" of "Tag | None" has no attribute "name" [union-attr] +src/documents/tests/test_barcodes.py:0: error: Item "None" of "Tag | None" has no attribute "name" [union-attr] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: Need type annotation for "reader" [var-annotated] +src/documents/tests/test_barcodes.py:0: error: The return type of a generator function should be "Generator" or one of its supertypes [misc] +src/documents/tests/test_barcodes.py:0: error: The return type of a generator function should be "Generator" or one of its supertypes [misc] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_correspondent" has incompatible type "None"; expected "Correspondent" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_correspondent" has incompatible type "int"; expected "Correspondent" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_document_type" has incompatible type "None"; expected "DocumentType" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_document_type" has incompatible type "int"; expected "DocumentType" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_storage_path" has incompatible type "None"; expected "StoragePath" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_storage_path" has incompatible type "int"; expected "StoragePath" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Argument 2 to "set_storage_path" has incompatible type "int"; expected "StoragePath" [arg-type] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_bulk_edit.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "None" of "CustomFieldInstance | None" has no attribute "value" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_bulk_edit.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_bulk_edit.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_bulk_edit.py:0: error: Unsupported operand types for - ("None" and "int") [operator] +src/documents/tests/test_caching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: "None" has no attribute "classes_" [attr-defined] +src/documents/tests/test_classifier.py:0: error: "None" has no attribute "classes_" [attr-defined] +src/documents/tests/test_classifier.py:0: error: "None" has no attribute "transform" [attr-defined] +src/documents/tests/test_classifier.py:0: error: Cannot assign to a method [method-assign] +src/documents/tests/test_classifier.py:0: error: Cannot assign to a method [method-assign] +src/documents/tests/test_classifier.py:0: error: Cannot assign to a method [method-assign] +src/documents/tests/test_classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_classifier.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | Any | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_consumer.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | Any | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_consumer.py:0: error: Argument 2 to "has_perm" of "ObjectPermissionChecker" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_consumer.py:0: error: Argument 2 to "has_perm" of "ObjectPermissionChecker" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_consumer.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_consumer.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "None") [assignment] +src/documents/tests/test_consumer.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/documents/tests/test_consumer.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Correspondent | Any | None" has no attribute "id" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_checksum" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "archive_serial_number" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "checksum" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "content" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "created" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "delete" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "delete" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "filename" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "pk" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "pk" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "source_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "source_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "source_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "thumbnail_path" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "DocumentType | Any | None" has no attribute "id" [union-attr] +src/documents/tests/test_consumer.py:0: error: Item "None" of "StoragePath | Any | None" has no attribute "id" [union-attr] +src/documents/tests/test_consumer.py:0: error: No overload variant of "copy" matches argument types "Any", "None" [call-overload] +src/documents/tests/test_delayedquery.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_delayedquery.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_delayedquery.py:0: error: Need type annotation for "tests" [var-annotated] +src/documents/tests/test_delayedquery.py:0: error: Skipping analyzing "whoosh": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_double_sided.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_double_sided.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_double_sided.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Any | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsNotFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Argument 1 to "assertIsNotFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_file_handling.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_file_handling.py:0: error: Skipping analyzing "auditlog.context": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_filters.py:0: error: Argument 1 to "localize_date" has incompatible type "list[object] | dict[Any, Any] | Literal[1698330605] | None"; expected "date | datetime | str" [arg-type] +src/documents/tests/test_filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_filters.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_index.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_index.py:0: error: Module "django.utils.timezone" does not explicitly export attribute "timezone" [attr-defined] +src/documents/tests/test_management.py:0: error: Argument 1 to "Path" has incompatible type "Path | None"; expected "str | PathLike[str]" [arg-type] +src/documents/tests/test_management.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_management.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_management.py:0: error: Argument 1 to "assertIsNotFile" of "FileSystemAssertsMixin" has incompatible type "Path | None"; expected "PathLike[Any] | str" [arg-type] +src/documents/tests/test_management.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_management.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_management_consumer.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management_exporter.py:0: error: Argument 1 to "call_command" has incompatible type "*list[object]"; expected "BaseCommand | str" [arg-type] +src/documents/tests/test_management_exporter.py:0: error: Argument 1 to "call_command" has incompatible type "*list[object]"; expected "BaseCommand | str" [arg-type] +src/documents/tests/test_management_exporter.py:0: error: Argument 1 to "call_command" has incompatible type "*list[object]"; expected "BaseCommand | str" [arg-type] +src/documents/tests/test_management_exporter.py:0: error: Argument 1 to "call_command" has incompatible type "*list[object]"; expected "BaseCommand | str" [arg-type] +src/documents/tests/test_management_exporter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_management_exporter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_management_exporter.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_management_exporter.py:0: error: Item "None" of "MailAccount | None" has no attribute "password" [union-attr] +src/documents/tests/test_management_exporter.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/tests/test_management_fuzzy.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_management_retagger.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_management_superuser.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_migration_share_link_bundle.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_migration_share_link_bundle.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_migration_share_link_bundle.py:0: error: Incompatible types in assignment (expression has type "str", base class "TestMigrations" defined the type as "None") [assignment] +src/documents/tests/test_migration_share_link_bundle.py:0: error: Incompatible types in assignment (expression has type "str", base class "TestMigrations" defined the type as "None") [assignment] +src/documents/tests/test_migration_share_link_bundle.py:0: error: Incompatible types in assignment (expression has type "str", base class "TestMigrations" defined the type as "None") [assignment] +src/documents/tests/test_migration_share_link_bundle.py:0: error: Incompatible types in assignment (expression has type "str", base class "TestMigrations" defined the type as "None") [assignment] +src/documents/tests/test_models.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_models.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_parsers.py:0: error: "None" not callable [misc] +src/documents/tests/test_parsers.py:0: error: "None" not callable [misc] +src/documents/tests/test_parsers.py:0: error: "None" not callable [misc] +src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_sanity_check.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_sanity_check.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_sanity_check.py:0: error: Invalid index type "None" for "dict[int, list[dict[Any, Any]]]"; expected type "int" [index] +src/documents/tests/test_share_link_bundles.py:0: error: "_MonkeyPatchedResponse" has no attribute "streaming_content" [attr-defined] +src/documents/tests/test_share_link_bundles.py:0: error: Argument 1 to "ZipFile" has incompatible type "Path | None"; expected "str | PathLike[str] | IO[bytes]" [arg-type] +src/documents/tests/test_share_link_bundles.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_share_link_bundles.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_share_link_bundles.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_share_link_bundles.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/tests/test_share_link_bundles.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/tests/test_share_link_bundles.py:0: error: Item "None" of "Path | None" has no attribute "exists" [union-attr] +src/documents/tests/test_share_link_bundles.py:0: error: Item "None" of "Path | None" has no attribute "exists" [union-attr] +src/documents/tests/test_share_link_bundles.py:0: error: Item "None" of "Path | None" has no attribute "read_bytes" [union-attr] +src/documents/tests/test_share_link_bundles.py:0: error: Item "None" of "Path | None" has no attribute "resolve" [union-attr] +src/documents/tests/test_tag_hierarchy.py:0: error: Argument 1 to "run_workflows" has incompatible type "int"; expected "WorkflowTriggerType" [arg-type] +src/documents/tests/test_tag_hierarchy.py:0: error: Argument 1 to "run_workflows" has incompatible type "int"; expected "WorkflowTriggerType" [arg-type] +src/documents/tests/test_tag_hierarchy.py:0: error: Argument 2 to "get" of "APIClient" has incompatible type "dict[str, object]"; expected "Mapping[str, str | bytes | float | Iterable[str | bytes | float]] | Iterable[tuple[str, str | bytes | float | Iterable[str | bytes | float]]] | None" [arg-type] +src/documents/tests/test_tag_hierarchy.py:0: error: Need type annotation for "context" (hint: "context: dict[, ] = ...") [var-annotated] +src/documents/tests/test_task_signals.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "str"; expected "Path" [arg-type] +src/documents/tests/test_task_signals.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "str"; expected "Path" [arg-type] +src/documents/tests/test_task_signals.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "str"; expected "Path" [arg-type] +src/documents/tests/test_task_signals.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "str"; expected "Path" [arg-type] +src/documents/tests/test_task_signals.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_task_signals.py:0: error: Need type annotation for "body" [var-annotated] +src/documents/tests/test_task_signals.py:0: error: Need type annotation for "body" [var-annotated] +src/documents/tests/test_task_signals.py:0: error: Need type annotation for "body" [var-annotated] +src/documents/tests/test_task_signals.py:0: error: Need type annotation for "body" [var-annotated] +src/documents/tests/test_tasks.py:0: error: Argument 2 to "assertIn" of "TestCase" has incompatible type "str | None"; expected "Iterable[Any] | Container[Any]" [arg-type] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_tasks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_views.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "render" [attr-defined] +src/documents/tests/test_views.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "render" [attr-defined] +src/documents/tests/test_views.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "url" [attr-defined] +src/documents/tests/test_views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_views.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_logo" [union-attr] +src/documents/tests/test_views.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_logo" [union-attr] +src/documents/tests/test_views.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/documents/tests/test_views.py:0: error: Item "None" of "SuggestionCacheData | None" has no attribute "suggestions" [union-attr] +src/documents/tests/test_views.py:0: error: Value of type "dict[str, Any] | None" is not indexable [index] +src/documents/tests/test_views.py:0: error: Value of type "dict[str, Any] | None" is not indexable [index] +src/documents/tests/test_views.py:0: error: Value of type "dict[str, Any] | None" is not indexable [index] +src/documents/tests/test_views.py:0: error: Value of type "dict[str, Any] | None" is not indexable [index] +src/documents/tests/test_views.py:0: error: Value of type "dict[str, Any] | None" is not indexable [index] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "files" to "__call__" of "Task" has incompatible type "None"; expected "dict[Any, Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Any | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "Path | str"; expected "Path" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_groups_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "get_users_with_perms" has incompatible type "Document | None"; expected "Model" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "list" has incompatible type "Group | dict[Any, Any]"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "list" has incompatible type "Group | dict[Any, Any]"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "list" has incompatible type "Group | dict[Any, Any]"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "list" has incompatible type "Group | dict[Any, Any]"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "list" has incompatible type "Group | dict[Any, Any]"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "list" has incompatible type "Group | dict[Any, Any]"; expected "Iterable[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "run_workflows" has incompatible type "int"; expected "WorkflowTriggerType" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "run_workflows" has incompatible type "int"; expected "WorkflowTriggerType" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 1 to "run_workflows" has incompatible type "int"; expected "WorkflowTriggerType" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 2 to "assertIn" of "TestCase" has incompatible type "str | None"; expected "Iterable[Any] | Container[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 2 to "assertIn" of "TestCase" has incompatible type "str | None"; expected "Iterable[Any] | Container[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Argument 2 to "assertIn" of "TestCase" has incompatible type "str | None"; expected "Iterable[Any] | Container[Any]" [arg-type] +src/documents/tests/test_workflows.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/test_workflows.py:0: error: Incompatible types in assignment (expression has type "Any | list[str]", variable has type "QuerySet[Any, Any]") [assignment] +src/documents/tests/test_workflows.py:0: error: Incompatible types in assignment (expression has type "Any | list[str]", variable has type "QuerySet[Any, Any]") [assignment] +src/documents/tests/test_workflows.py:0: error: Incompatible types in assignment (expression has type "Group | dict[Any, Any]", variable has type "QuerySet[Any, Any]") [assignment] +src/documents/tests/test_workflows.py:0: error: Incompatible types in assignment (expression has type "Group | dict[Any, Any]", variable has type "QuerySet[Any, Any]") [assignment] +src/documents/tests/test_workflows.py:0: error: Incompatible types in assignment (expression has type "Group | dict[Any, Any]", variable has type "QuerySet[Any, Any]") [assignment] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "Group" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "correspondent" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "custom_fields" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "document_type" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "owner" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "storage_path" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "tags" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Document | None" has no attribute "title" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Request | None" has no attribute "headers" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Request | None" has no attribute "headers" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Request | None" has no attribute "headers" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Request | None" has no attribute "headers" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Request | None" has no attribute "headers" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "None" of "Request | None" has no attribute "url" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "dict[Any, Any]" of "Group | dict[Any, Any]" has no attribute "count" [union-attr] +src/documents/tests/test_workflows.py:0: error: Item "str" of "Any | str" has no attribute "name" [union-attr] +src/documents/tests/test_workflows.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/tests/test_workflows.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/tests/test_workflows.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/tests/test_workflows.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/tests/test_workflows.py:0: error: Missing type parameters for generic type "QuerySet" [type-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/test_workflows.py:0: error: Too few arguments for "count" of "list" [call-arg] +src/documents/tests/utils.py:0: error: "Collection[str]" has no attribute "update" [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertEqual"; maybe "assertFilesEqual"? [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertEqual"; maybe "assertFilesEqual"? [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertFalse"; maybe "assertIsFile"? [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertFalse"; maybe "assertIsFile"? [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertTrue" [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertTrue" [attr-defined] +src/documents/tests/utils.py:0: error: "FileSystemAssertsMixin" has no attribute "assertTrue" [attr-defined] +src/documents/tests/utils.py:0: error: "GetConsumerMixin" has no attribute "dirs" [attr-defined] +src/documents/tests/utils.py:0: error: "GetConsumerMixin" has no attribute "dirs" [attr-defined] +src/documents/tests/utils.py:0: error: "GetConsumerMixin" has no attribute "dirs" [attr-defined] +src/documents/tests/utils.py:0: error: "setUp" undefined in superclass [misc] +src/documents/tests/utils.py:0: error: "setUp" undefined in superclass [misc] +src/documents/tests/utils.py:0: error: "setUp" undefined in superclass [misc] +src/documents/tests/utils.py:0: error: "tearDown" undefined in superclass [misc] +src/documents/tests/utils.py:0: error: "tearDown" undefined in superclass [misc] +src/documents/tests/utils.py:0: error: "tearDown" undefined in superclass [misc] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "archive_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "archive_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "archive_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "consumption_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "consumption_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "data_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "data_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "data_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "data_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "data_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "index_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "index_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "index_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "logging_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "logging_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "logging_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "media_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "media_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "media_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "media_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "media_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "media_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "originals_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "originals_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "originals_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "scratch_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "scratch_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "settings_override" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "settings_override" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "static_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "static_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "thumbnail_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "thumbnail_dir" [attr-defined] +src/documents/tests/utils.py:0: error: "type[dirs@34]" has no attribute "thumbnail_dir" [attr-defined] +src/documents/tests/utils.py:0: error: Cannot determine type of "apps" [has-type] +src/documents/tests/utils.py:0: error: First argument to namedtuple() should be "dirs", not "Dirs" [name-match] +src/documents/tests/utils.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/utils.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/tests/utils.py:0: error: Item "None" of "AppConfig | None" has no attribute "name" [union-attr] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "Callable" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/tests/utils.py:0: error: Missing type parameters for generic type "tuple" [type-arg] +src/documents/tests/utils.py:0: error: Need type annotation for "payloads" (hint: "payloads: list[] = ...") [var-annotated] +src/documents/utils.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "float | int") [assignment] +src/documents/utils.py:0: error: Incompatible types in assignment (expression has type "float | int", variable has type "int | None") [assignment] +src/documents/utils.py:0: error: Missing type parameters for generic type "CompletedProcess" [type-arg] +src/documents/validators.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/views.py:0: error: "BulkPermissionMixin" has no attribute "filter_queryset" [attr-defined] +src/documents/views.py:0: error: "BulkPermissionMixin" has no attribute "get_queryset" [attr-defined] +src/documents/views.py:0: error: "BulkPermissionMixin" has no attribute "queryset" [attr-defined] +src/documents/views.py:0: error: "BulkPermissionMixin" has no attribute "queryset" [attr-defined] +src/documents/views.py:0: error: "BulkPermissionMixin" has no attribute "request" [attr-defined] +src/documents/views.py:0: error: "get_serializer_context" undefined in superclass [misc] +src/documents/views.py:0: error: "object" not callable [operator] +src/documents/views.py:0: error: "type[Model]" has no attribute "objects" [attr-defined] +src/documents/views.py:0: error: Argument "path" to "EmailAttachment" has incompatible type "Path | None"; expected "Path" [arg-type] +src/documents/views.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/documents/views.py:0: error: Argument 2 to "match_correspondents" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/views.py:0: error: Argument 2 to "match_document_types" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/views.py:0: error: Argument 2 to "match_storage_paths" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/views.py:0: error: Argument 2 to "match_tags" has incompatible type "DocumentClassifier | None"; expected "DocumentClassifier" [arg-type] +src/documents/views.py:0: error: Argument 4 to "autocomplete" has incompatible type "User | AnonymousUser | None"; expected "User | None" [arg-type] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/views.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/views.py:0: error: Incompatible type for lookup 'owner': (got "User | AnonymousUser", expected "User | int | None") [misc] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "Any | None", variable has type "dict[Any, Any]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "QuerySet[Any, Any]", variable has type "list[Any]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "QuerySet[Any, Any]", variable has type "list[Document]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "bool", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "bool", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "bool", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "int", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str | None", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str | None", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "str", target has type "dict[str, str]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "tuple[type[IsAuthenticated]]", variable has type "tuple[type[IsAuthenticated], type[PaperlessObjectPermissions]]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "type[ArchiveOnlyStrategy]", variable has type "type[OriginalAndArchiveStrategy]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "type[DelayedMoreLikeThisQuery]", variable has type "type[DelayedFullTextQuery]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "type[DocumentSerializer]", variable has type "type[TrashSerializer]") [assignment] +src/documents/views.py:0: error: Incompatible types in assignment (expression has type "type[OriginalsOnlyStrategy]", variable has type "type[OriginalAndArchiveStrategy]") [assignment] +src/documents/views.py:0: error: Item "AnonymousUser" of "User | AnonymousUser" has no attribute "get_full_name" [union-attr] +src/documents/views.py:0: error: Item "BasePagination" of "BasePagination | None" has no attribute "get_page_size" [union-attr] +src/documents/views.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/views.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/views.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "app_logo" [union-attr] +src/documents/views.py:0: error: Item "None" of "BasePagination | None" has no attribute "get_page_size" [union-attr] +src/documents/views.py:0: error: Item "None" of "dict[str, _PingReply] | None" has no attribute "keys" [union-attr] +src/documents/views.py:0: error: Missing positional argument "request" in call to "email_documents" [call-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "GenericViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "ReadOnlyModelViewSet" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "Serializer" [type-arg] +src/documents/views.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/documents/views.py:0: error: Need type annotation for "authentication_classes" (hint: "authentication_classes: list[] = ...") [var-annotated] +src/documents/views.py:0: error: Need type annotation for "children_map" (hint: "children_map: dict[, ] = ...") [var-annotated] +src/documents/views.py:0: error: Need type annotation for "doc" [var-annotated] +src/documents/views.py:0: error: Need type annotation for "docs" (hint: "docs: list[] = ...") [var-annotated] +src/documents/views.py:0: error: Need type annotation for "permission_classes" (hint: "permission_classes: list[] = ...") [var-annotated] +src/documents/views.py:0: error: Need type annotation for "ui_settings" (hint: "ui_settings: dict[, ] = ...") [var-annotated] +src/documents/views.py:0: error: Skipping analyzing "auditlog.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/views.py:0: error: Skipping analyzing "langdetect": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/documents/views.py:0: error: TypedDict key must be a string literal; expected one of ("pk", "correspondent", "document_type", "storage_path", "tags", ...) [literal-required] +src/documents/views.py:0: error: Unsupported operand types for + ("None" and "int") [operator] +src/documents/views.py:0: error: Value of type "Iterable[Any]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[Any]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[Any]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[Any]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[CustomField]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[Group]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[MailAccount]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[MailRule]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[SavedView]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[User]" is not indexable [index] +src/documents/views.py:0: error: Value of type "Iterable[Workflow]" is not indexable [index] +src/documents/views.py:0: error: Value of type "dict[str, _PingReply] | None" is not indexable [index] +src/documents/workflows/actions.py:0: error: Argument "files" to "delay" of "Task" has incompatible type "dict[str, tuple[str, bytes, str]] | None"; expected "dict[Any, Any]" [arg-type] +src/documents/workflows/actions.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/actions.py:0: error: Function is missing a type annotation [no-untyped-def] +src/documents/workflows/actions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/workflows/actions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/workflows/actions.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/workflows/actions.py:0: error: Incompatible types in assignment (expression has type "Any | None", variable has type "Document") [assignment] +src/documents/workflows/actions.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "dict[Any, str]") [assignment] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "added" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "correspondent" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "correspondent" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "created" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "document_type" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "document_type" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "filename" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "original_filename" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "owner" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "pk" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "pk" [union-attr] +src/documents/workflows/actions.py:0: error: Item "ConsumableDocument" of "Document | ConsumableDocument" has no attribute "title" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "body" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "body" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "include_document" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "subject" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "subject" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "to" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionEmail | None" has no attribute "to" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "as_json" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "body" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "body" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "headers" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "headers" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "include_document" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "params" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "params" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "url" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "url" [union-attr] +src/documents/workflows/actions.py:0: error: Item "None" of "WorkflowActionWebhook | None" has no attribute "use_params" [union-attr] +src/documents/workflows/actions.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/workflows/actions.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/workflows/actions.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_change_groups"; maybe "assign_change_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_change_groups"; maybe "assign_change_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_change_users"; maybe "assign_change_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_change_users"; maybe "assign_change_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_custom_fields"; maybe "assign_custom_fields" or "assign_custom_fields_values"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_custom_fields"; maybe "assign_custom_fields" or "assign_custom_fields_values"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_tags"; maybe "assign_tags"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_tags"; maybe "assign_tags"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_view_groups"; maybe "assign_view_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_view_groups"; maybe "assign_view_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_view_users"; maybe "assign_view_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_assign_view_users"; maybe "assign_view_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_change_groups"; maybe "remove_change_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_change_groups"; maybe "remove_change_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_change_users"; maybe "remove_change_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_change_users"; maybe "remove_change_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_custom_fields"; maybe "remove_custom_fields" or "remove_all_custom_fields"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_custom_fields"; maybe "remove_custom_fields" or "remove_all_custom_fields"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_view_groups"; maybe "remove_view_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_view_groups"; maybe "remove_view_groups"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_view_users"; maybe "remove_view_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: "WorkflowAction" has no attribute "has_remove_view_users"; maybe "remove_view_users"? [attr-defined] +src/documents/workflows/mutations.py:0: error: Argument "data_type" to "get_value_field_name" of "CustomFieldInstance" has incompatible type "str"; expected "FieldDataType" [arg-type] +src/documents/workflows/mutations.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/mutations.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/mutations.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/mutations.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/mutations.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/workflows/mutations.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/workflows/mutations.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/documents/workflows/mutations.py:0: error: Need type annotation for "permissions" [var-annotated] +src/documents/workflows/utils.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "_format_ip_for_url" of "WebhookTransport" has incompatible type "str | int"; expected "str" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "Cookies | CookieJar | dict[str, str] | list[tuple[str, str]] | None" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "Headers | Mapping[str, str] | Mapping[bytes, bytes] | Sequence[tuple[str, str]] | Sequence[tuple[bytes, bytes]] | None" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "Mapping[str, Any] | None" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "Mapping[str, IO[bytes] | bytes | str | tuple[str | None, IO[bytes] | bytes | str] | tuple[str | None, IO[bytes] | bytes | str, str | None] | tuple[str | None, IO[bytes] | bytes | str, str | None, Mapping[str, str]]] | Sequence[tuple[str, IO[bytes] | bytes | str | tuple[str | None, IO[bytes] | bytes | str] | tuple[str | None, IO[bytes] | bytes | str, str | None] | tuple[str | None, IO[bytes] | bytes | str, str | None, Mapping[str, str]]]] | None" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "URL | str" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "bool | UseClientDefault" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "float | tuple[float | None, float | None, float | None, float | None] | Timeout | None | UseClientDefault" [arg-type] +src/documents/workflows/webhooks.py:0: error: Argument 1 to "post" of "Client" has incompatible type "**dict[str, str | dict[Any, Any] | None]"; expected "tuple[str | bytes, str | bytes] | Callable[[Request], Request] | Auth | UseClientDefault" [arg-type] +src/documents/workflows/webhooks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/documents/workflows/webhooks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/documents/workflows/webhooks.py:0: error: Incompatible return value type (got "str | int | None", expected "str | None") [return-value] +src/documents/workflows/webhooks.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/workflows/webhooks.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/documents/workflows/webhooks.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/adapter.py:0: error: Name "user" already defined on line 0 [no-redef] +src/paperless/adapter.py:0: error: Skipping analyzing "allauth.account.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/adapter.py:0: error: Skipping analyzing "allauth.core": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/adapter.py:0: error: Skipping analyzing "allauth.headless.tokens.strategies.sessions": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/adapter.py:0: error: Skipping analyzing "allauth.socialaccount.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/admin.py:0: error: "PaperlessUserForm" has no attribute "request" [attr-defined] +src/paperless/admin.py:0: error: "type[ModelForm[Any]]" has no attribute "request" [attr-defined] +src/paperless/admin.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/admin.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/admin.py:0: error: Item "None" of "dict[str, Any] | None" has no attribute "get" [union-attr] +src/paperless/admin.py:0: error: Missing type parameters for generic type "ModelForm" [type-arg] +src/paperless/admin.py:0: error: Missing type parameters for generic type "UserAdmin" [type-arg] +src/paperless/admin.py:0: error: Signature of "get_form" incompatible with supertype "django.contrib.admin.options.ModelAdmin" [override] +src/paperless/apps.py:0: error: Skipping analyzing "allauth.socialaccount.signals": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/asgi.py:0: error: Argument 1 to "URLRouter" has incompatible type "list[URLPattern]"; expected "list[_ExtendedURLPattern | URLRouter]" [arg-type] +src/paperless/auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/auth.py:0: error: No return value expected [return-value] +src/paperless/auth.py:0: error: No return value expected [return-value] +src/paperless/auth.py:0: error: Return type "None" of "__call__" incompatible with return type "HttpResponseBase | Awaitable[HttpResponseBase]" in supertype "django.contrib.auth.middleware.RemoteUserMiddleware" [override] +src/paperless/auth.py:0: error: Skipping analyzing "allauth.mfa.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/checks.py:0: error: Argument 1 to "append" of "list" has incompatible type "Warning"; expected "Error" [arg-type] +src/paperless/checks.py:0: error: Argument 2 to "path_check" has incompatible type "Path | None"; expected "Path" [arg-type] +src/paperless/checks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/checks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/config.py:0: error: Incompatible return value type (got "ApplicationConfiguration | None", expected "ApplicationConfiguration") [return-value] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "Any | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/config.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "str") [assignment] +src/paperless/consumers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/consumers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/consumers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/consumers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/consumers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/consumers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/consumers.py:0: error: Item "None" of "UserLazyObject | None" has no attribute "groups" [union-attr] +src/paperless/consumers.py:0: error: Item "None" of "UserLazyObject | None" has no attribute "id" [union-attr] +src/paperless/consumers.py:0: error: Item "None" of "UserLazyObject | None" has no attribute "id" [union-attr] +src/paperless/consumers.py:0: error: Item "None" of "UserLazyObject | None" has no attribute "is_authenticated" [union-attr] +src/paperless/consumers.py:0: error: Item "None" of "UserLazyObject | None" has no attribute "is_superuser" [union-attr] +src/paperless/consumers.py:0: error: Item "UserLazyObject" of "UserLazyObject | None" has no attribute "groups" [union-attr] +src/paperless/consumers.py:0: error: Item "UserLazyObject" of "UserLazyObject | None" has no attribute "id" [union-attr] +src/paperless/consumers.py:0: error: Item "UserLazyObject" of "UserLazyObject | None" has no attribute "id" [union-attr] +src/paperless/consumers.py:0: error: Item "UserLazyObject" of "UserLazyObject | None" has no attribute "is_superuser" [union-attr] +src/paperless/db_cache.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/db_cache.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/db_cache.py:0: error: Skipping analyzing "cachalot.api": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/db_cache.py:0: error: Skipping analyzing "cachalot.utils": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/middleware.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/middleware.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/migrations/0001_initial.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: "PasswordValidationMixin" has no attribute "instance" [attr-defined] +src/paperless/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/serialisers.py:0: error: Item "None" of "str | None" has no attribute "replace" [union-attr] +src/paperless/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/paperless/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/paperless/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/paperless/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/paperless/serialisers.py:0: error: Missing type parameters for generic type "ModelSerializer" [type-arg] +src/paperless/serialisers.py:0: error: Need type annotation for "auth_token" [var-annotated] +src/paperless/serialisers.py:0: error: Signature of "run_validation" incompatible with supertype "rest_framework.fields.Field" [override] +src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.mfa.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.mfa.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.mfa.totp.internal.auth": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/serialisers.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/settings.py:0: error: "Sequence[str]" has no attribute "append" [attr-defined] +src/paperless/settings.py:0: error: "Sequence[str]" has no attribute "insert" [attr-defined] +src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] +src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] +src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] +src/paperless/settings.py:0: error: "object" has no attribute "update" [attr-defined] +src/paperless/settings.py:0: error: Argument 1 to "_parse_ignore_dates" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless/settings.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/paperless/settings.py:0: error: Argument 1 to "int" has incompatible type "str | None"; expected "str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc" [arg-type] +src/paperless/settings.py:0: error: Argument 2 to "__get_path" has incompatible type "str | None"; expected "PathLike[Any] | str" [arg-type] +src/paperless/settings.py:0: error: Argument 2 to "getenv" has incompatible type "None"; expected "Collection[str]" [arg-type] +src/paperless/settings.py:0: error: Argument 2 to "getenv" has incompatible type "None"; expected "Collection[str]" [arg-type] +src/paperless/settings.py:0: error: Argument 2 to "getenv" has incompatible type "None"; expected "Collection[str]" [arg-type] +src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/settings.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/settings.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/settings.py:0: error: Incompatible return value type (got "set[date]", expected "set[datetime]") [return-value] +src/paperless/settings.py:0: error: Incompatible return value type (got "tuple[str | None, str, str, str, str]", expected "tuple[str, str, str, str, str]") [return-value] +src/paperless/settings.py:0: error: Incompatible types in assignment (expression has type "bool", variable has type "str") [assignment] +src/paperless/settings.py:0: error: Incompatible types in assignment (expression has type "set[datetime]", variable has type "set[date]") [assignment] +src/paperless/settings.py:0: error: Missing type parameters for generic type "PathLike" [type-arg] +src/paperless/settings.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/settings.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless/settings.py:0: error: No overload variant of "getenv" matches argument types "Collection[str]", "Collection[str]" [call-overload] +src/paperless/settings.py:0: error: Skipping analyzing "compression_middleware.middleware": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/test_adapter.py:0: error: Cannot assign to a method [method-assign] +src/paperless/tests/test_adapter.py:0: error: Cannot assign to a method [method-assign] +src/paperless/tests/test_adapter.py:0: error: Cannot assign to a method [method-assign] +src/paperless/tests/test_adapter.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_adapter.py:0: error: Skipping analyzing "allauth.account.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/tests/test_adapter.py:0: error: Skipping analyzing "allauth.core": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/tests/test_adapter.py:0: error: Skipping analyzing "allauth.socialaccount.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/tests/test_db_cache.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_db_cache.py:0: error: Skipping analyzing "cachalot.settings": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/tests/test_settings.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_settings.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_signals.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/paperless/tests/test_signals.py:0: error: Item "None" of "Any | None" has no attribute "get" [union-attr] +src/paperless/tests/test_utils.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/test_utils.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/test_utils.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/test_views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/test_views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: Item "None" of "BaseChannelLayer | None" has no attribute "group_send" [union-attr] +src/paperless/tests/test_websockets.py:0: error: TypedDict "_WebsocketTestScope" has no key "user" [typeddict-item] +src/paperless/tests/test_websockets.py:0: error: TypedDict "_WebsocketTestScope" has no key "user" [typeddict-item] +src/paperless/tests/test_websockets.py:0: error: TypedDict "_WebsocketTestScope" has no key "user" [typeddict-item] +src/paperless/tests/test_websockets.py:0: error: TypedDict "_WebsocketTestScope" has no key "user" [typeddict-item] +src/paperless/tests/test_websockets.py:0: error: TypedDict "_WebsocketTestScope" has no key "user" [typeddict-unknown-key] +src/paperless/urls.py:0: error: Argument 2 to "path" has incompatible type "_ASGIApplicationProtocol"; expected "Callable[..., HttpResponseBase]" [arg-type] +src/paperless/urls.py:0: error: Skipping analyzing "allauth.account": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/urls.py:0: error: Skipping analyzing "allauth.mfa.base": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/urls.py:0: error: Skipping analyzing "allauth.socialaccount": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/urls.py:0: error: Skipping analyzing "allauth.urls": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/validators.py:0: error: Argument 1 to "join" of "str" has incompatible type "Iterator[str | bytes] | Any"; expected "Iterable[str]" [arg-type] +src/paperless/validators.py:0: error: Incompatible types in assignment (expression has type "str | bytes", variable has type "str") [assignment] +src/paperless/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless/views.py:0: error: Incompatible type for "user" of "Token" (got "User | AnonymousUser", expected "User | Combinable") [misc] +src/paperless/views.py:0: error: Incompatible type for lookup 'user': (got "User | AnonymousUser", expected "User | int | None") [misc] +src/paperless/views.py:0: error: Item "AnonymousUser" of "User | AnonymousUser" has no attribute "socialaccount_set" [union-attr] +src/paperless/views.py:0: error: Item "None" of "Any | None" has no attribute "results" [union-attr] +src/paperless/views.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "ai_enabled" [union-attr] +src/paperless/views.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "llm_embedding_backend" [union-attr] +src/paperless/views.py:0: error: Item "None" of "Page[Any] | None" has no attribute "paginator" [union-attr] +src/paperless/views.py:0: error: Item "None" of "Page[Any] | None" has no attribute "paginator" [union-attr] +src/paperless/views.py:0: error: Item "None" of "Page[Any] | None" has no attribute "paginator" [union-attr] +src/paperless/views.py:0: error: Item "None" of "User | AnonymousUser | None" has no attribute "save" [union-attr] +src/paperless/views.py:0: error: Item "None" of "User | AnonymousUser | None" has no attribute "save" [union-attr] +src/paperless/views.py:0: error: Item "None" of "User | AnonymousUser | None" has no attribute "set_password" [union-attr] +src/paperless/views.py:0: error: Item "User" of "User | AnonymousUser" has no attribute "socialaccount_set" [union-attr] +src/paperless/views.py:0: error: Item "_SupportsPagination[Any]" of "_SupportsPagination[Any] | Any" has no attribute "values_list" [union-attr] +src/paperless/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/paperless/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/paperless/views.py:0: error: Skipping analyzing "allauth.mfa": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.mfa.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.mfa.base.internal.flows": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.mfa.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.mfa.recovery_codes.internal.flows": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.mfa.totp.internal": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.socialaccount.adapter": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless/views.py:0: error: Skipping analyzing "allauth.socialaccount.models": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless_ai/ai_classifier.py:0: error: Argument 1 to "parse_ai_response" has incompatible type "str"; expected "dict[Any, Any]" [arg-type] +src/paperless_ai/ai_classifier.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless_ai/ai_classifier.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless_ai/chat.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/chat.py:0: error: Item "AsyncGenerator[str, None]" of "Any | Generator[str, None, None] | AsyncGenerator[str, None]" has no attribute "__iter__" (not iterable) [union-attr] +src/paperless_ai/chat.py:0: error: Item "Response" of "Response | StreamingResponse | AsyncStreamingResponse | PydanticResponse" has no attribute "response_gen" [union-attr] +src/paperless_ai/client.py:0: error: Incompatible return value type (got "dict[str, Any]", expected "str") [return-value] +src/paperless_ai/indexing.py:0: error: Argument "persist_dir" to "from_defaults" of "StorageContext" has incompatible type "Path"; expected "str | None" [arg-type] +src/paperless_ai/indexing.py:0: error: Argument 1 to "from_persist_dir" of "FaissVectorStore" has incompatible type "Path"; expected "str" [arg-type] +src/paperless_ai/indexing.py:0: error: Argument 1 to "from_persist_dir" of "SimpleDocumentStore" has incompatible type "Path"; expected "str" [arg-type] +src/paperless_ai/indexing.py:0: error: Argument 1 to "from_persist_dir" of "SimpleIndexStore" has incompatible type "Path"; expected "str" [arg-type] +src/paperless_ai/indexing.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/indexing.py:0: error: Skipping analyzing "faiss": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless_ai/matching.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/matching.py:0: error: Missing type parameters for generic type "list" [type-arg] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_classifier.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_ai_indexing.py:0: error: Return type "list[float]" of "_aget_query_embedding" incompatible with return type "Coroutine[Any, Any, list[float]]" in supertype "llama_index.core.base.embeddings.base.BaseEmbedding" [override] +src/paperless_ai/tests/test_chat.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_chat.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_chat.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_chat.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_chat.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_client.py:0: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_embedding.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_ai/tests/test_matching.py:0: error: Argument "user" to "match_correspondents_by_name" has incompatible type "None"; expected "User" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Argument "user" to "match_document_types_by_name" has incompatible type "None"; expected "User" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Argument "user" to "match_storage_paths_by_name" has incompatible type "None"; expected "User" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Argument "user" to "match_tags_by_name" has incompatible type "None"; expected "User" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Argument "user" to "match_tags_by_name" has incompatible type "None"; expected "User" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Argument "user" to "match_tags_by_name" has incompatible type "None"; expected "User" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Argument 1 to "match_tags_by_name" has incompatible type "list[str | None]"; expected "list[str]" [arg-type] +src/paperless_ai/tests/test_matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_ai/tests/test_matching.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/admin.py:0: error: Missing type parameters for generic type "ModelAdmin" [type-arg] +src/paperless_mail/admin.py:0: error: Missing type parameters for generic type "ModelForm" [type-arg] +src/paperless_mail/mail.py:0: error: "Message[str, str]" has no attribute "_headers"; maybe "add_header"? [attr-defined] +src/paperless_mail/mail.py:0: error: "Message[str, str]" has no attribute "_headers"; maybe "add_header"? [attr-defined] +src/paperless_mail/mail.py:0: error: "Message[str, str]" has no attribute "_headers"; maybe "add_header"? [attr-defined] +src/paperless_mail/mail.py:0: error: "Message[str, str]" has no attribute "_headers"; maybe "add_header"? [attr-defined] +src/paperless_mail/mail.py:0: error: Argument "original_file" to "ConsumableDocument" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 1 to "TagMailAction" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "Header | list[Header] | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "Header | list[Header] | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "bool | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "bool | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "int | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "int | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "str | Iterable[str] | UidRange | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "str | Iterable[str] | UidRange | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "str | list[str] | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "AND" has incompatible type "**dict[str, date]"; expected "str | list[str] | None" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "flag" of "BaseMailBox" has incompatible type "list[str] | None"; expected "str | Iterable[str]" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 2 to "insert" of "list" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 3 to "post_consume" of "BaseMailAction" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/mail.py:0: error: Argument 4 to "uid" of "IMAP4" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/mail.py:0: error: Incompatible return value type (got "MailBoxUnencrypted", expected "MailBox") [return-value] +src/paperless_mail/mail.py:0: error: Incompatible type for "uid" of "ProcessedMail" (got "str | None", expected "str | int | Combinable") [misc] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "MailBox", variable has type "MailBoxUnencrypted") [assignment] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "MailBoxStartTls", variable has type "MailBoxUnencrypted") [assignment] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "str") [assignment] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "str", target has type "date") [assignment] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "str", target has type "date") [assignment] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "str", target has type "date") [assignment] +src/paperless_mail/mail.py:0: error: Incompatible types in assignment (expression has type "str", target has type "date") [assignment] +src/paperless_mail/mail.py:0: error: Missing type parameters for generic type "dict" [type-arg] +src/paperless_mail/management/commands/mail_fetcher.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/models.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/oauth.py:0: error: Argument "refresh_token" to "refresh_token" of "BaseOAuth2" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/oauth.py:0: error: Argument "refresh_token" to "refresh_token" of "BaseOAuth2" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/oauth.py:0: error: Argument 1 to "GoogleOAuth2" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/oauth.py:0: error: Argument 1 to "MicrosoftGraphOAuth2" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/oauth.py:0: error: Argument 2 to "GoogleOAuth2" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/oauth.py:0: error: Argument 2 to "MicrosoftGraphOAuth2" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_mail/oauth.py:0: error: Incompatible return value type (got "None", expected "GoogleOAuth2") [return-value] +src/paperless_mail/oauth.py:0: error: Incompatible return value type (got "None", expected "MicrosoftGraphOAuth2") [return-value] +src/paperless_mail/oauth.py:0: error: Incompatible types in assignment (expression has type "GoogleOAuth2", variable has type "None") [assignment] +src/paperless_mail/oauth.py:0: error: Incompatible types in assignment (expression has type "MicrosoftGraphOAuth2", variable has type "None") [assignment] +src/paperless_mail/parsers.py:0: error: "tuple[str, ...]" has no attribute "encode" [attr-defined] +src/paperless_mail/parsers.py:0: error: Argument 1 to "make_thumbnail_from_pdf" has incompatible type "None"; expected "Path" [arg-type] +src/paperless_mail/parsers.py:0: error: Argument 2 to "generate_pdf" of "MailDocumentParser" has incompatible type "int"; expected "PdfLayout | None" [arg-type] +src/paperless_mail/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/parsers.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "None") [assignment] +src/paperless_mail/parsers.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "None") [assignment] +src/paperless_mail/parsers.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "None") [assignment] +src/paperless_mail/parsers.py:0: error: Incompatible types in assignment (expression has type "int", variable has type "PdfLayout | None") [assignment] +src/paperless_mail/parsers.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/paperless_mail/parsers.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "tuple[str, ...]") [assignment] +src/paperless_mail/parsers.py:0: error: Item "None" of "EmailAddress | None" has no attribute "full" [union-attr] +src/paperless_mail/parsers.py:0: error: Item "None" of "EmailAddress | None" has no attribute "full" [union-attr] +src/paperless_mail/parsers.py:0: error: Need type annotation for "result" (hint: "result: list[] = ...") [var-annotated] +src/paperless_mail/preprocessor.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/preprocessor.py:0: error: Skipping analyzing "gnupg": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless_mail/serialisers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/serialisers.py:0: error: Missing type parameters for generic type "PrimaryKeyRelatedField" [type-arg] +src/paperless_mail/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: "BogusFolderManager" has no attribute "list" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "BogusFolderManager" has no attribute "list" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "BogusFolderManager" has no attribute "list" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "BogusFolderManager" has no attribute "list" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "MailMessage" has no attribute "flagged" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "MailMessage" has no attribute "flagged" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "MailMessage" has no attribute "seen" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "MailMessage" has no attribute "seen" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[att@480]" has no attribute "filename" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message2@426]" has no attribute "from_" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message2@426]" has no attribute "from_" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message2@426]" has no attribute "from_values" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message@419]" has no attribute "from_" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message@419]" has no attribute "from_values" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message@478]" has no attribute "subject" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: "type[message@531]" has no attribute "attachments" [attr-defined] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "MailboxFolderSelectError" has incompatible type "None"; expected "tuple[Any, ...]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "MailboxFolderSelectError" has incompatible type "None"; expected "tuple[Any, ...]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "MailboxLoginError" has incompatible type "str"; expected "tuple[Any, ...]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "MailboxLoginError" has incompatible type "str"; expected "tuple[Any, ...]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "MailboxLoginError" has incompatible type "str"; expected "tuple[Any, ...]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "MailboxLoginError" has incompatible type "str"; expected "tuple[Any, ...]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_correspondent" of "MailAccountHandler" has incompatible type "type[message2@426]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_correspondent" of "MailAccountHandler" has incompatible type "type[message2@426]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_correspondent" of "MailAccountHandler" has incompatible type "type[message@419]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_correspondent" of "MailAccountHandler" has incompatible type "type[message@419]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_correspondent" of "MailAccountHandler" has incompatible type "type[message@419]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_correspondent" of "MailAccountHandler" has incompatible type "type[message@419]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_title" of "MailAccountHandler" has incompatible type "type[message@478]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_title" of "MailAccountHandler" has incompatible type "type[message@478]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "_get_title" of "MailAccountHandler" has incompatible type "type[message@478]"; expected "MailMessage" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "filter" has incompatible type "Callable[[Any], bool]"; expected "Callable[[MailMessage], TypeGuard[Never]]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 1 to "filter" has incompatible type "Callable[[Any], bool]"; expected "Callable[[MailMessage], TypeGuard[Never]]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 2 to "_get_title" of "MailAccountHandler" has incompatible type "type[att@480]"; expected "MailAttachment" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 2 to "_get_title" of "MailAccountHandler" has incompatible type "type[att@480]"; expected "MailAttachment" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 2 to "_get_title" of "MailAccountHandler" has incompatible type "type[att@480]"; expected "MailAttachment" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Argument 2 to "assertIn" of "TestCase" has incompatible type "str | None"; expected "Iterable[Any] | Container[Any]" [arg-type] +src/paperless_mail/tests/test_mail.py:0: error: Dict entry 0 has incompatible type "str": "None"; expected "str": "str" [dict-item] +src/paperless_mail/tests/test_mail.py:0: error: Dict entry 0 has incompatible type "str": "int"; expected "str": "str" [dict-item] +src/paperless_mail/tests/test_mail.py:0: error: First argument to namedtuple() should be "att", not "Attachment" [name-match] +src/paperless_mail/tests/test_mail.py:0: error: First argument to namedtuple() should be "message", not "MailMessage" [name-match] +src/paperless_mail/tests/test_mail.py:0: error: First argument to namedtuple() should be "message", not "MailMessage" [name-match] +src/paperless_mail/tests/test_mail.py:0: error: First argument to namedtuple() should be "message", not "MailMessage" [name-match] +src/paperless_mail/tests/test_mail.py:0: error: First argument to namedtuple() should be "message2", not "MailMessage" [name-match] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[MailMessage]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[MailMessage]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[MailMessage]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[MailMessage]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[MailMessage]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[MailMessage]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[Never]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Incompatible types in assignment (expression has type "filter[Never]", variable has type "list[MailMessage]") [assignment] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "id" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "id" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "match" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "matching_algorithm" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "name" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "name" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "Correspondent | None" has no attribute "name" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Item "None" of "MailRule | None" has no attribute "name" [union-attr] +src/paperless_mail/tests/test_mail.py:0: error: Missing type parameters for generic type "AbstractContextManager" [type-arg] +src/paperless_mail/tests/test_mail.py:0: error: Module "django.utils.timezone" does not explicitly export attribute "datetime" [attr-defined] +src/paperless_mail/tests/test_mail_oauth.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "url" [attr-defined] +src/paperless_mail/tests/test_mail_oauth.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "url" [attr-defined] +src/paperless_mail/tests/test_mail_oauth.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "url" [attr-defined] +src/paperless_mail/tests/test_mail_oauth.py:0: error: "_MonkeyPatchedWSGIResponse" has no attribute "url" [attr-defined] +src/paperless_mail/tests/test_mail_oauth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail_oauth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail_oauth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_mail_oauth.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_mail/tests/test_parsers.py:0: error: Argument 1 to "extract_metadata" of "MailDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_mail/tests/test_parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_parsers.py:0: error: Item "None" of "Request | None" has no attribute "url" [union-attr] +src/paperless_mail/tests/test_parsers.py:0: error: Item "None" of "Request | None" has no attribute "url" [union-attr] +src/paperless_mail/tests/test_parsers_live.py:0: error: List item 0 has incompatible type "str | None"; expected "str | bytes | PathLike[str] | PathLike[bytes]" [list-item] +src/paperless_mail/tests/test_preprocessor.py:0: error: "Message[str, str]" has no attribute "_headers"; maybe "add_header"? [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "Message[str, str]" has no attribute "_headers"; maybe "add_header"? [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "TestMailMessageGpgDecryptor" has no attribute "messageEncryptor" [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "TestMailMessageGpgDecryptor" has no attribute "messageEncryptor" [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "TestMailMessageGpgDecryptor" has no attribute "messageEncryptor" [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "TestMailMessageGpgDecryptor" has no attribute "messageEncryptor" [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "TestMailMessageGpgDecryptor" has no attribute "messageEncryptor" [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: "type[TestMailMessageGpgDecryptor]" has no attribute "messageEncryptor" [attr-defined] +src/paperless_mail/tests/test_preprocessor.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/tests/test_preprocessor.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_preprocessor.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/tests/test_preprocessor.py:0: error: Skipping analyzing "gnupg": module is installed, but missing library stubs or py.typed marker [import-untyped] +src/paperless_mail/views.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_mail/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/views.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_mail/views.py:0: error: Incompatible types in assignment (expression has type "tuple[type[IsAuthenticated]]", variable has type "tuple[type[IsAuthenticated], type[PaperlessObjectPermissions]]") [assignment] +src/paperless_mail/views.py:0: error: Missing type parameters for generic type "GenericAPIView" [type-arg] +src/paperless_mail/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/paperless_mail/views.py:0: error: Missing type parameters for generic type "ModelViewSet" [type-arg] +src/paperless_mail/views.py:0: error: Missing type parameters for generic type "ReadOnlyModelViewSet" [type-arg] +src/paperless_remote/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_remote/parsers.py:0: error: "None" has no attribute "open" [attr-defined] +src/paperless_remote/parsers.py:0: error: Argument "engine" to "RemoteEngineConfig" has incompatible type "str | None"; expected "str" [arg-type] +src/paperless_remote/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_remote/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_remote/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_remote/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_remote/parsers.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "None") [assignment] +src/paperless_remote/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_remote/parsers.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/paperless_remote/parsers.py:0: error: Return type "RemoteEngineConfig" of "get_settings" incompatible with return type "OcrConfig" in supertype "paperless_tesseract.parsers.RasterisedDocumentParser" [override] +src/paperless_remote/signals.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_remote/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_remote/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_remote/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_remote/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_remote/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/checks.py:0: error: Argument 1 to "append" of "list" has incompatible type "Error"; expected "Warning" [arg-type] +src/paperless_tesseract/checks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_tesseract/checks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/checks.py:0: error: List item 0 has incompatible type "str | None"; expected "str | bytes | PathLike[str] | PathLike[bytes]" [list-item] +src/paperless_tesseract/parsers.py:0: error: Argument "logger" to "run_subprocess" has incompatible type "LoggerAdapter[Logger]"; expected "Logger | None" [arg-type] +src/paperless_tesseract/parsers.py:0: error: Argument "logger" to "run_subprocess" has incompatible type "LoggerAdapter[Logger]"; expected "Logger | None" [arg-type] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "str") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "Path", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/paperless_tesseract/parsers.py:0: error: List item 4 has incompatible type "Path"; expected "str" [list-item] +src/paperless_tesseract/parsers.py:0: error: List item 5 has incompatible type "Path"; expected "str" [list-item] +src/paperless_tesseract/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tesseract/tests/test_checks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_checks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_checks.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "assertIsFile" of "FileSystemAssertsMixin" has incompatible type "None"; expected "PathLike[Any] | str" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Argument 1 to "parse" of "RasterisedDocumentParser" has incompatible type "str"; expected "Path" [arg-type] +src/paperless_tesseract/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_parser.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tesseract/tests/test_parser.py:0: error: Item "None" of "str | None" has no attribute "strip" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "color_conversion_strategy" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "deskew" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "language" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "max_image_pixels" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "mode" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "output_type" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "pages" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "rotate_pages" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "rotate_pages_threshold" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "save" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "unpaper_clean" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "unpaper_clean" [union-attr] +src/paperless_tesseract/tests/test_parser_custom_settings.py:0: error: Item "None" of "ApplicationConfiguration | None" has no attribute "user_args" [union-attr] +src/paperless_text/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_text/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_text/parsers.py:0: error: Incompatible types in assignment (expression has type "str", variable has type "None") [assignment] +src/paperless_text/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_text/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tika/parsers.py:0: error: Argument 1 to "make_thumbnail_from_pdf" has incompatible type "None"; expected "Path" [arg-type] +src/paperless_tika/parsers.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/paperless_tika/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tika/parsers.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tika/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tika/parsers.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/paperless_tika/parsers.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/paperless_tika/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tika/signals.py:0: error: Function is missing a type annotation [no-untyped-def] +src/paperless_tika/tests/test_live_tika.py:0: error: Unsupported right operand type for in ("None") [operator] diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0ce2b210e..3664fb8e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,12 +49,12 @@ repos: - 'prettier-plugin-organize-imports@4.1.0' # Python hooks - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.14 + rev: v0.15.0 hooks: - id: ruff-check - id: ruff-format - repo: https://github.com/tox-dev/pyproject-fmt - rev: "v2.11.1" + rev: "v2.12.1" hooks: - id: pyproject-fmt # Dockerfile hooks diff --git a/Dockerfile b/Dockerfile index ba0592509..a92614b0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,7 @@ RUN set -eux \ # Purpose: Installs s6-overlay and rootfs # Comments: # - Don't leave anything extra in here either -FROM ghcr.io/astral-sh/uv:0.9.26-python3.12-trixie-slim AS s6-overlay-base +FROM ghcr.io/astral-sh/uv:0.9.29-python3.12-trixie-slim AS s6-overlay-base WORKDIR /usr/src/s6 diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml index d227ac038..ab4d3caac 100644 --- a/docker/compose/docker-compose.ci-test.yml +++ b/docker/compose/docker-compose.ci-test.yml @@ -4,7 +4,7 @@ # correct networking for the tests services: gotenberg: - image: docker.io/gotenberg/gotenberg:8.25 + image: docker.io/gotenberg/gotenberg:8.26 hostname: gotenberg container_name: gotenberg network_mode: host diff --git a/docker/compose/docker-compose.mariadb-tika.yml b/docker/compose/docker-compose.mariadb-tika.yml index 03601e63e..b6f84dd68 100644 --- a/docker/compose/docker-compose.mariadb-tika.yml +++ b/docker/compose/docker-compose.mariadb-tika.yml @@ -72,7 +72,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.25 + image: docker.io/gotenberg/gotenberg:8.26 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 19a164025..53e5aefc0 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -66,7 +66,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.25 + image: docker.io/gotenberg/gotenberg:8.26 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index 598328907..7e3d9b6b1 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -55,7 +55,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.25 + image: docker.io/gotenberg/gotenberg:8.26 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/docker/management_script.sh b/docker/management_script.sh index 91a6336d0..6d5e84549 100755 --- a/docker/management_script.sh +++ b/docker/management_script.sh @@ -7,6 +7,11 @@ cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then python3 manage.py management_command "$@" -elif [[ $(id -un) == "paperless" ]]; then +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py management_command "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py management_command "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/convert_mariadb_uuid b/docker/rootfs/usr/local/bin/convert_mariadb_uuid index 019c558f1..7adb0a1af 100755 --- a/docker/rootfs/usr/local/bin/convert_mariadb_uuid +++ b/docker/rootfs/usr/local/bin/convert_mariadb_uuid @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py convert_mariadb_uuid "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py convert_mariadb_uuid "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py convert_mariadb_uuid "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py convert_mariadb_uuid "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/createsuperuser b/docker/rootfs/usr/local/bin/createsuperuser index 2b56869f6..b91cee3c5 100755 --- a/docker/rootfs/usr/local/bin/createsuperuser +++ b/docker/rootfs/usr/local/bin/createsuperuser @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py createsuperuser "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py createsuperuser "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py createsuperuser "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py createsuperuser "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_archiver b/docker/rootfs/usr/local/bin/document_archiver index 8d7771d26..4200aa7aa 100755 --- a/docker/rootfs/usr/local/bin/document_archiver +++ b/docker/rootfs/usr/local/bin/document_archiver @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_archiver "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_archiver "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_archiver "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_archiver "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_create_classifier b/docker/rootfs/usr/local/bin/document_create_classifier index 23acc6741..23e3d3d82 100755 --- a/docker/rootfs/usr/local/bin/document_create_classifier +++ b/docker/rootfs/usr/local/bin/document_create_classifier @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_create_classifier "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_create_classifier "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_create_classifier "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_create_classifier "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_exporter b/docker/rootfs/usr/local/bin/document_exporter index d55f01d48..a82d70a16 100755 --- a/docker/rootfs/usr/local/bin/document_exporter +++ b/docker/rootfs/usr/local/bin/document_exporter @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_exporter "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_exporter "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_exporter "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_exporter "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_fuzzy_match b/docker/rootfs/usr/local/bin/document_fuzzy_match index c6e4edadc..b97c2a9ba 100755 --- a/docker/rootfs/usr/local/bin/document_fuzzy_match +++ b/docker/rootfs/usr/local/bin/document_fuzzy_match @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_fuzzy_match "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_fuzzy_match "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_fuzzy_match "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_fuzzy_match "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_importer b/docker/rootfs/usr/local/bin/document_importer index 07c92bb04..dbfb40a57 100755 --- a/docker/rootfs/usr/local/bin/document_importer +++ b/docker/rootfs/usr/local/bin/document_importer @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_importer "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_importer "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_importer "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_importer "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_index b/docker/rootfs/usr/local/bin/document_index index 47c893c10..b05f765da 100755 --- a/docker/rootfs/usr/local/bin/document_index +++ b/docker/rootfs/usr/local/bin/document_index @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_index "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_index "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_index "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_index "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_renamer b/docker/rootfs/usr/local/bin/document_renamer index 3406182ee..720edc0d8 100755 --- a/docker/rootfs/usr/local/bin/document_renamer +++ b/docker/rootfs/usr/local/bin/document_renamer @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_renamer "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_renamer "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_renamer "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_renamer "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_retagger b/docker/rootfs/usr/local/bin/document_retagger index b0d1047ff..6cbe03c19 100755 --- a/docker/rootfs/usr/local/bin/document_retagger +++ b/docker/rootfs/usr/local/bin/document_retagger @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_retagger "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_retagger "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_retagger "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_retagger "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_sanity_checker b/docker/rootfs/usr/local/bin/document_sanity_checker index d792124fc..8fff13a52 100755 --- a/docker/rootfs/usr/local/bin/document_sanity_checker +++ b/docker/rootfs/usr/local/bin/document_sanity_checker @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_sanity_checker "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_sanity_checker "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_sanity_checker "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_sanity_checker "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/document_thumbnails b/docker/rootfs/usr/local/bin/document_thumbnails index 71d80e00d..3c0f0de4c 100755 --- a/docker/rootfs/usr/local/bin/document_thumbnails +++ b/docker/rootfs/usr/local/bin/document_thumbnails @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py document_thumbnails "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_thumbnails "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py document_thumbnails "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py document_thumbnails "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/mail_fetcher b/docker/rootfs/usr/local/bin/mail_fetcher index 654c07389..762b850b9 100755 --- a/docker/rootfs/usr/local/bin/mail_fetcher +++ b/docker/rootfs/usr/local/bin/mail_fetcher @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py mail_fetcher "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py mail_fetcher "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py mail_fetcher "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py mail_fetcher "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/manage_superuser b/docker/rootfs/usr/local/bin/manage_superuser index a6e41168c..8f550cd1a 100755 --- a/docker/rootfs/usr/local/bin/manage_superuser +++ b/docker/rootfs/usr/local/bin/manage_superuser @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py manage_superuser "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py manage_superuser "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py manage_superuser "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py manage_superuser "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docker/rootfs/usr/local/bin/prune_audit_logs b/docker/rootfs/usr/local/bin/prune_audit_logs index 04446df17..8a3ab3299 100755 --- a/docker/rootfs/usr/local/bin/prune_audit_logs +++ b/docker/rootfs/usr/local/bin/prune_audit_logs @@ -6,7 +6,12 @@ set -e cd "${PAPERLESS_SRC_DIR}" if [[ -n "${USER_IS_NON_ROOT}" ]]; then - python3 manage.py prune_audit_logs "$@" -elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py prune_audit_logs "$@" +elif [[ $(id -u) == 0 ]]; then s6-setuidgid paperless python3 manage.py prune_audit_logs "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py prune_audit_logs "$@" +else + echo "Unknown user." + exit 1 fi diff --git a/docs/changelog.md b/docs/changelog.md index f222a7305..d6a87e299 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,24 @@ # Changelog +## paperless-ngx 2.20.6 + +### Bug Fixes + +- Fix: extract all ids for nested tags [@shamoon](https://github.com/shamoon) ([#11888](https://github.com/paperless-ngx/paperless-ngx/pull/11888)) +- Fixhancement: change date calculation for 'this year' to include future documents [@shamoon](https://github.com/shamoon) ([#11884](https://github.com/paperless-ngx/paperless-ngx/pull/11884)) +- Fix: Running management scripts under rootless could fail [@stumpylog](https://github.com/stumpylog) ([#11870](https://github.com/paperless-ngx/paperless-ngx/pull/11870)) +- Fix: use correct field id for overrides [@shamoon](https://github.com/shamoon) ([#11869](https://github.com/paperless-ngx/paperless-ngx/pull/11869)) + +### All App Changes + +
+3 changes + +- Fix: extract all ids for nested tags [@shamoon](https://github.com/shamoon) ([#11888](https://github.com/paperless-ngx/paperless-ngx/pull/11888)) +- Fixhancement: change date calculation for 'this year' to include future documents [@shamoon](https://github.com/shamoon) ([#11884](https://github.com/paperless-ngx/paperless-ngx/pull/11884)) +- Fix: use correct field id for overrides [@shamoon](https://github.com/shamoon) ([#11869](https://github.com/paperless-ngx/paperless-ngx/pull/11869)) +
+ ## paperless-ngx 2.20.5 ### Bug Fixes diff --git a/docs/development.md b/docs/development.md index de328e1f8..9d3b1460a 100644 --- a/docs/development.md +++ b/docs/development.md @@ -481,3 +481,147 @@ To get started: 5. The project is ready for debugging, start either run the fullstack debug or individual debug processes. Yo spin up the project without debugging run the task **Project Start: Run all Services** + +## Developing Date Parser Plugins + +Paperless-ngx uses a plugin system for date parsing, allowing you to extend or replace the default date parsing behavior. Plugins are discovered using [Python entry points](https://setuptools.pypa.io/en/latest/userguide/entry_point.html). + +### Creating a Date Parser Plugin + +To create a custom date parser plugin, you need to: + +1. Create a class that inherits from `DateParserPluginBase` +2. Implement the required abstract method +3. Register your plugin via an entry point + +#### 1. Implementing the Parser Class + +Your parser must extend `documents.plugins.date_parsing.DateParserPluginBase` and implement the `parse` method: + +```python +from collections.abc import Iterator +import datetime + +from documents.plugins.date_parsing import DateParserPluginBase + + +class MyDateParserPlugin(DateParserPluginBase): + """ + Custom date parser implementation. + """ + + def parse(self, filename: str, content: str) -> Iterator[datetime.datetime]: + """ + Parse dates from the document's filename and content. + + Args: + filename: The original filename of the document + content: The extracted text content of the document + + Yields: + datetime.datetime: Valid datetime objects found in the document + """ + # Your parsing logic here + # Use self.config to access configuration settings + + # Example: parse dates from filename first + if self.config.filename_date_order: + # Your filename parsing logic + yield some_datetime + + # Then parse dates from content + # Your content parsing logic + yield another_datetime +``` + +#### 2. Configuration and Helper Methods + +Your parser instance is initialized with a `DateParserConfig` object accessible via `self.config`. This provides: + +- `languages: list[str]` - List of language codes for date parsing +- `timezone_str: str` - Timezone string for date localization +- `ignore_dates: set[datetime.date]` - Dates that should be filtered out +- `reference_time: datetime.datetime` - Current time for filtering future dates +- `filename_date_order: str | None` - Date order preference for filenames (e.g., "DMY", "MDY") +- `content_date_order: str` - Date order preference for content + +The base class provides two helper methods you can use: + +```python +def _parse_string( + self, + date_string: str, + date_order: str, +) -> datetime.datetime | None: + """ + Parse a single date string using dateparser with configured settings. + """ + +def _filter_date( + self, + date: datetime.datetime | None, +) -> datetime.datetime | None: + """ + Validate a parsed datetime against configured rules. + Filters out dates before 1900, future dates, and ignored dates. + """ +``` + +#### 3. Resource Management (Optional) + +If your plugin needs to acquire or release resources (database connections, API clients, etc.), override the context manager methods. Paperless-ngx will always use plugins as context managers, ensuring resources can be released even in the event of errors. + +#### 4. Registering Your Plugin + +Register your plugin using a setuptools entry point in your package's `pyproject.toml`: + +```toml +[project.entry-points."paperless_ngx.date_parsers"] +my_parser = "my_package.parsers:MyDateParserPlugin" +``` + +The entry point name (e.g., `"my_parser"`) is used for sorting when multiple plugins are found. Paperless-ngx will use the first plugin alphabetically by name if multiple plugins are discovered. + +### Plugin Discovery + +Paperless-ngx automatically discovers and loads date parser plugins at runtime. The discovery process: + +1. Queries the `paperless_ngx.date_parsers` entry point group +2. Validates that each plugin is a subclass of `DateParserPluginBase` +3. Sorts valid plugins alphabetically by entry point name +4. Uses the first valid plugin, or falls back to the default `RegexDateParserPlugin` if none are found + +If multiple plugins are installed, a warning is logged indicating which plugin was selected. + +### Example: Simple Date Parser + +Here's a minimal example that only looks for ISO 8601 dates: + +```python +import datetime +import re +from collections.abc import Iterator + +from documents.plugins.date_parsing.base import DateParserPluginBase + + +class ISODateParserPlugin(DateParserPluginBase): + """ + Parser that only matches ISO 8601 formatted dates (YYYY-MM-DD). + """ + + ISO_REGEX = re.compile(r"\b(\d{4}-\d{2}-\d{2})\b") + + def parse(self, filename: str, content: str) -> Iterator[datetime.datetime]: + # Combine filename and content for searching + text = f"{filename} {content}" + + for match in self.ISO_REGEX.finditer(text): + date_string = match.group(1) + # Use helper method to parse with configured timezone + date = self._parse_string(date_string, "YMD") + # Use helper method to validate the date + filtered_date = self._filter_date(date) + if filtered_date is not None: + yield filtered_date +``` diff --git a/docs/usage.md b/docs/usage.md index f652164da..1e339b61e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -562,8 +562,8 @@ you may want to adjust these settings to prevent abuse. #### Workflow placeholders -Titles can be assigned by workflows using [Jinja templates](https://jinja.palletsprojects.com/en/3.1.x/templates/). -This allows for complex logic to be used to generate the title, including [logical structures](https://jinja.palletsprojects.com/en/3.1.x/templates/#list-of-control-structures) +Titles and webhook payloads can be generated by workflows using [Jinja templates](https://jinja.palletsprojects.com/en/3.1.x/templates/). +This allows for complex logic to be used, including [logical structures](https://jinja.palletsprojects.com/en/3.1.x/templates/#list-of-control-structures) and [filters](https://jinja.palletsprojects.com/en/3.1.x/templates/#id11). The template is provided as a string. @@ -586,7 +586,7 @@ applied. You can use the following placeholders in the template with any trigger - `{{added_time}}`: added time in HH:MM format - `{{original_filename}}`: original file name without extension - `{{filename}}`: current file name without extension -- `{{doc_title}}`: current document title +- `{{doc_title}}`: current document title (cannot be used in title assignment) The following placeholders are only available for "added" or "updated" triggers diff --git a/pyproject.toml b/pyproject.toml index b25c4ea34..fe50ee95d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "paperless-ngx" -version = "2.20.5" +version = "2.20.6" description = "A community-supported supercharged document management system: scan, index and archive all your physical documents" readme = "README.md" requires-python = ">=3.10" @@ -27,9 +27,9 @@ dependencies = [ # WARNING: django does not use semver. # Only patch versions are guaranteed to not introduce breaking changes. "django~=5.2.10", - "django-allauth[mfa,socialaccount]~=65.13.1", + "django-allauth[mfa,socialaccount]~=65.14.0", "django-auditlog~=3.4.1", - "django-cachalot~=2.8.0", + "django-cachalot~=2.9.0", "django-celery-results~=2.6.0", "django-compression-middleware~=0.5.0", "django-cors-headers~=4.9.0", @@ -42,7 +42,7 @@ dependencies = [ "djangorestframework~=3.16", "djangorestframework-guardian~=0.4.0", "drf-spectacular~=0.28", - "drf-spectacular-sidecar~=2025.10.1", + "drf-spectacular-sidecar~=2026.1.1", "drf-writable-nested~=0.7.1", "faiss-cpu>=1.10", "filelock~=3.20.0", @@ -76,7 +76,7 @@ dependencies = [ "sentence-transformers>=4.1", "setproctitle~=1.3.4", "tika-client~=0.10.0", - "torch~=2.9.1", + "torch~=2.10.0", "tqdm~=4.67.1", "watchfiles>=1.1.1", "whitenoise~=6.11", @@ -94,7 +94,7 @@ optional-dependencies.postgres = [ "psycopg-pool==3.3", ] optional-dependencies.webserver = [ - "granian[uvloop]~=2.6.0", + "granian[uvloop]~=2.7.0", ] [dependency-groups] @@ -129,7 +129,7 @@ testing = [ lint = [ "pre-commit~=4.5.1", "pre-commit-uv~=4.2.0", - "ruff~=0.14.0", + "ruff~=0.15.0", ] typing = [ @@ -138,8 +138,11 @@ typing = [ "django-stubs[compatible-mypy]", "djangorestframework-stubs[compatible-mypy]", "lxml-stubs", + "microsoft-python-type-stubs @ git+https://github.com/microsoft/python-type-stubs.git", "mypy", + "mypy-baseline", "types-bleach", + "types-channels", "types-colorama", "types-dateparser", "types-markdown", @@ -159,6 +162,11 @@ environments = [ "sys_platform == 'linux'", ] +[[tool.uv.index]] +name = "pytorch-cpu" +url = "https://download.pytorch.org/whl/cpu" +explicit = true + [tool.uv.sources] # Markers are chosen to select these almost exclusively when building the Docker image psycopg-c = [ @@ -174,11 +182,6 @@ torch = [ { index = "pytorch-cpu" }, ] -[[tool.uv.index]] -name = "pytorch-cpu" -url = "https://download.pytorch.org/whl/cpu" -explicit = true - [tool.ruff] target-version = "py310" line-length = 88 @@ -306,12 +309,20 @@ markers = [ "gotenberg: Tests requiring Gotenberg service", "tika: Tests requiring Tika service", "greenmail: Tests requiring Greenmail service", + "date_parsing: Tests which cover date parsing from content or filename", ] [tool.pytest_env] PAPERLESS_DISABLE_DBHANDLER = "true" PAPERLESS_CACHE_BACKEND = "django.core.cache.backends.locmem.LocMemCache" +[tool.coverage.report] +exclude_also = [ + "if settings.AUDIT_LOG_ENABLED:", + "if AUDIT_LOG_ENABLED:", + "if TYPE_CHECKING:", +] + [tool.coverage.run] source = [ "src/", @@ -323,13 +334,6 @@ omit = [ "paperless/auth.py", ] -[tool.coverage.report] -exclude_also = [ - "if settings.AUDIT_LOG_ENABLED:", - "if AUDIT_LOG_ENABLED:", - "if TYPE_CHECKING:", -] - [tool.mypy] mypy_path = "src" plugins = [ @@ -345,3 +349,8 @@ warn_unused_ignores = true [tool.django-stubs] django_settings_module = "paperless.settings" + +[tool.mypy-baseline] +baseline_path = ".mypy-baseline.txt" +sort_baseline = true +ignore_categories = [ "note" ] diff --git a/src-ui/e2e/document-list/document-list.spec.ts b/src-ui/e2e/document-list/document-list.spec.ts index 0a7b54fcb..9aa4d2fdc 100644 --- a/src-ui/e2e/document-list/document-list.spec.ts +++ b/src-ui/e2e/document-list/document-list.spec.ts @@ -180,6 +180,9 @@ test('bulk edit', async ({ page }) => { await page.locator('pngx-document-card-small').nth(2).click() await page.getByRole('button', { name: 'Tags' }).click() + await page + .getByRole('textbox', { name: 'Filter tags' }) + .fill('TagWithPartial') await page.getByRole('menuitem', { name: 'TagWithPartial' }).click() await page.getByRole('button', { name: 'Apply' }).click() diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 63fdc9d90..726625ff6 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -5,14 +5,14 @@ Close - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/alert/alert.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/alert/alert.ts 50 Slide of - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/carousel/carousel.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/carousel/carousel.ts 131,135 Currently selected slide number read by screen reader @@ -20,114 +20,114 @@ Previous - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/carousel/carousel.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/carousel/carousel.ts 159,162 Next - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/carousel/carousel.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/carousel/carousel.ts 202,203 Select month - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation-select.ts 91 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation-select.ts 91 Select year - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation-select.ts 91 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation-select.ts 91 Previous month - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation.ts 83,85 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation.ts 112 Next month - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation.ts 112 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/datepicker/datepicker-navigation.ts 112 «« - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 « - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 » - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 »» - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 First - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 Previous - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 Next - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 Last - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/pagination/pagination-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/pagination/pagination-config.ts 20 @@ -135,105 +135,105 @@ - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/progressbar/progressbar.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/progressbar/progressbar.ts 41,42 HH - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Hours - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 MM - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Minutes - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Increment hours - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Decrement hours - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Increment minutes - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Decrement minutes - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 SS - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Seconds - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Increment seconds - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Decrement seconds - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/timepicker/timepicker-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/timepicker/timepicker-config.ts 21 Close - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.0.8_@angular+core@21.0.8_@angular+_10d73c77295ba72902d3ca052f5fa6a3/node_modules/src/toast/toast-config.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@20.0.0_@angular+common@21.1.2_@angular+core@21.1.2_@angular+_0ae6084f45398d2eea75800b78d6d6df/node_modules/src/toast/toast-config.ts 54 @@ -348,19 +348,19 @@ src/app/components/manage/management-list/management-list.component.html - 182 + 198 src/app/components/manage/management-list/management-list.component.html - 182 + 198 src/app/components/manage/management-list/management-list.component.html - 182 + 198 src/app/components/manage/management-list/management-list.component.html - 182 + 198 @@ -621,7 +621,7 @@ src/app/components/manage/saved-views/saved-views.component.html - 74 + 75 @@ -755,6 +755,10 @@ src/app/components/common/input/document-link/document-link.component.html 58 + + src/app/components/common/page-header/page-header.component.html + 30 + src/app/components/common/permissions-dialog/permissions-dialog.component.html 23 @@ -805,23 +809,23 @@ src/app/components/manage/management-list/management-list.component.html - 83 + 99 src/app/components/manage/management-list/management-list.component.html - 83 + 99 src/app/components/manage/management-list/management-list.component.html - 83 + 99 src/app/components/manage/management-list/management-list.component.html - 83 + 99 src/app/components/manage/saved-views/saved-views.component.html - 68 + 69 src/app/components/manage/workflows/workflows.component.html @@ -1607,7 +1611,7 @@ src/app/components/manage/saved-views/saved-views.component.html - 73 + 74 @@ -1946,19 +1950,19 @@ src/app/components/manage/management-list/management-list.component.html - 69 + 85 src/app/components/manage/management-list/management-list.component.html - 69 + 85 src/app/components/manage/management-list/management-list.component.html - 69 + 85 src/app/components/manage/management-list/management-list.component.html - 69 + 85 src/app/components/manage/workflows/workflows.component.html @@ -2058,19 +2062,19 @@ src/app/components/manage/management-list/management-list.component.html - 75 + 91 src/app/components/manage/management-list/management-list.component.html - 75 + 91 src/app/components/manage/management-list/management-list.component.html - 75 + 91 src/app/components/manage/management-list/management-list.component.html - 75 + 91 src/app/components/manage/saved-views/saved-views.component.html @@ -2412,39 +2416,39 @@ src/app/components/manage/management-list/management-list.component.html - 152 + 168 src/app/components/manage/management-list/management-list.component.html - 152 + 168 src/app/components/manage/management-list/management-list.component.html - 152 + 168 src/app/components/manage/management-list/management-list.component.html - 152 + 168 src/app/components/manage/management-list/management-list.component.html - 171 + 187 src/app/components/manage/management-list/management-list.component.html - 171 + 187 src/app/components/manage/management-list/management-list.component.html - 171 + 187 src/app/components/manage/management-list/management-list.component.html - 171 + 187 src/app/components/manage/management-list/management-list.component.ts - 249 + 253 src/app/components/manage/saved-views/saved-views.component.html @@ -2478,11 +2482,11 @@ src/app/components/manage/management-list/management-list.component.ts - 245 + 249 src/app/components/manage/management-list/management-list.component.ts - 386 + 414 @@ -2516,15 +2520,15 @@ src/app/components/manage/mail/mail.component.ts - 192 + 201 src/app/components/manage/mail/mail.component.ts - 293 + 302 src/app/components/manage/management-list/management-list.component.ts - 388 + 416 src/app/components/manage/workflows/workflows.component.ts @@ -2715,35 +2719,35 @@ src/app/components/manage/management-list/management-list.component.html - 151 + 167 src/app/components/manage/management-list/management-list.component.html - 151 + 167 src/app/components/manage/management-list/management-list.component.html - 151 + 167 src/app/components/manage/management-list/management-list.component.html - 151 + 167 src/app/components/manage/management-list/management-list.component.html - 168 + 184 src/app/components/manage/management-list/management-list.component.html - 168 + 184 src/app/components/manage/management-list/management-list.component.html - 168 + 184 src/app/components/manage/management-list/management-list.component.html - 168 + 184 src/app/components/manage/workflows/workflows.component.html @@ -2843,15 +2847,15 @@ src/app/components/manage/mail/mail.component.ts - 194 + 203 src/app/components/manage/mail/mail.component.ts - 295 + 304 src/app/components/manage/management-list/management-list.component.ts - 390 + 418 src/app/components/manage/workflows/workflows.component.ts @@ -5355,6 +5359,27 @@ 429 + + One password per line. The workflow will try them in order until one succeeds. + + src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html + 436,438 + + + + Passwords + + src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html + 441 + + + + Passwords are stored in plain text. Use with caution. + + src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html + 445 + + Consume Folder @@ -5450,109 +5475,116 @@ 140 + + Password removal + + src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts + 144 + + Has any of these tags src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 209 + 213 Has all of these tags src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 216 + 220 Does not have these tags src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 223 + 227 Has any of these correspondents src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 230 + 234 Has correspondent src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 238 + 242 Does not have correspondents src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 246 + 250 Has document type src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 254 + 258 Has any of these document types src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 262 + 266 Does not have document types src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 270 + 274 Has storage path src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 278 + 282 Has any of these storage paths src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 286 + 290 Does not have storage paths src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 294 + 298 Matches custom field query src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 302 + 306 Create new workflow src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 531 + 535 Edit workflow src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts - 535 + 539 @@ -5647,7 +5679,7 @@ Create src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 58 + 57 src/app/components/common/share-links-dialog/share-links-dialog.component.html @@ -5674,21 +5706,21 @@ Apply src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 64 + 63 Click again to exclude items. src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 77 + 76 Not assigned src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts - 95 + 99 Filter drop down element to filter for documents with no correspondent/type/tag assigned @@ -5696,7 +5728,7 @@ Open filter src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts - 767 + 788 @@ -8614,7 +8646,7 @@ src/app/components/manage/management-list/management-list.component.ts - 125 + 129 src/app/data/matching-model.ts @@ -9233,19 +9265,19 @@ src/app/components/manage/management-list/management-list.component.html - 160 + 176 src/app/components/manage/management-list/management-list.component.html - 160 + 176 src/app/components/manage/management-list/management-list.component.html - 160 + 176 src/app/components/manage/management-list/management-list.component.html - 160 + 176 @@ -9414,165 +9446,165 @@ Error retrieving mail accounts src/app/components/manage/mail/mail.component.ts - 105 + 114 Error retrieving mail rules src/app/components/manage/mail/mail.component.ts - 127 + 136 OAuth2 authentication success src/app/components/manage/mail/mail.component.ts - 135 + 144 OAuth2 authentication failed, see logs for details src/app/components/manage/mail/mail.component.ts - 146 + 155 Saved account "". src/app/components/manage/mail/mail.component.ts - 170 + 179 Error saving account. src/app/components/manage/mail/mail.component.ts - 182 + 191 Confirm delete mail account src/app/components/manage/mail/mail.component.ts - 190 + 199 This operation will permanently delete this mail account. src/app/components/manage/mail/mail.component.ts - 191 + 200 Deleted mail account "" src/app/components/manage/mail/mail.component.ts - 201 + 210 Error deleting mail account "". src/app/components/manage/mail/mail.component.ts - 212 + 221 Processing mail account "" src/app/components/manage/mail/mail.component.ts - 224 + 233 Error processing mail account "" src/app/components/manage/mail/mail.component.ts - 229 + 238 Saved rule "". src/app/components/manage/mail/mail.component.ts - 247 + 256 Error saving rule. src/app/components/manage/mail/mail.component.ts - 258 + 267 Rule "" enabled. src/app/components/manage/mail/mail.component.ts - 274 + 283 Rule "" disabled. src/app/components/manage/mail/mail.component.ts - 275 + 284 Error toggling rule "". src/app/components/manage/mail/mail.component.ts - 280 + 289 Confirm delete mail rule src/app/components/manage/mail/mail.component.ts - 291 + 300 This operation will permanently delete this mail rule. src/app/components/manage/mail/mail.component.ts - 292 + 301 Deleted mail rule "" src/app/components/manage/mail/mail.component.ts - 302 + 311 Error deleting mail rule "". src/app/components/manage/mail/mail.component.ts - 313 + 322 Permissions updated src/app/components/manage/mail/mail.component.ts - 337 + 346 Error updating permissions src/app/components/manage/mail/mail.component.ts - 342 + 351 src/app/components/manage/management-list/management-list.component.ts - 373 + 401 @@ -9629,68 +9661,106 @@ 51 + + Show: + + src/app/components/manage/management-list/management-list.component.html + 59 + + + src/app/components/manage/management-list/management-list.component.html + 59 + + + src/app/components/manage/management-list/management-list.component.html + 59 + + + src/app/components/manage/management-list/management-list.component.html + 59 + + + + per page + + src/app/components/manage/management-list/management-list.component.html + 67 + + + src/app/components/manage/management-list/management-list.component.html + 67 + + + src/app/components/manage/management-list/management-list.component.html + 67 + + + src/app/components/manage/management-list/management-list.component.html + 67 + + Matching src/app/components/manage/management-list/management-list.component.html - 70 + 86 src/app/components/manage/management-list/management-list.component.html - 70 + 86 src/app/components/manage/management-list/management-list.component.html - 70 + 86 src/app/components/manage/management-list/management-list.component.html - 70 + 86 Document count src/app/components/manage/management-list/management-list.component.html - 71 + 87 src/app/components/manage/management-list/management-list.component.html - 71 + 87 src/app/components/manage/management-list/management-list.component.html - 71 + 87 src/app/components/manage/management-list/management-list.component.html - 71 + 87 {VAR_PLURAL, plural, =1 {One } other { total }} src/app/components/manage/management-list/management-list.component.html - 98 + 114 src/app/components/manage/management-list/management-list.component.html - 98 + 114 src/app/components/manage/management-list/management-list.component.html - 98 + 114 src/app/components/manage/management-list/management-list.component.html - 98 + 114 Automatic src/app/components/manage/management-list/management-list.component.ts - 123 + 127 src/app/data/matching-model.ts @@ -9701,70 +9771,77 @@ Successfully created . src/app/components/manage/management-list/management-list.component.ts - 202 + 206 Error occurred while creating . src/app/components/manage/management-list/management-list.component.ts - 207 + 211 Successfully updated "". src/app/components/manage/management-list/management-list.component.ts - 222 + 226 Error occurred while saving . src/app/components/manage/management-list/management-list.component.ts - 227 + 231 Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 247 + 251 Error while deleting element src/app/components/manage/management-list/management-list.component.ts - 263 + 267 + + + + Error saving settings + + src/app/components/manage/management-list/management-list.component.ts + 306 Permissions updated successfully src/app/components/manage/management-list/management-list.component.ts - 366 + 394 - - This operation will permanently delete all objects. + + This operation will permanently delete the selected . src/app/components/manage/management-list/management-list.component.ts - 387 + 415 Objects deleted successfully src/app/components/manage/management-list/management-list.component.ts - 401 + 429 Error deleting objects src/app/components/manage/management-list/management-list.component.ts - 407 + 435 @@ -9809,11 +9886,18 @@ 48 + + Note: ordering is not preserved + + src/app/components/manage/saved-views/saved-views.component.html + 54 + + No saved views defined. src/app/components/manage/saved-views/saved-views.component.html - 61 + 62 diff --git a/src-ui/package.json b/src-ui/package.json index 0536c0489..dc1e897d4 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -1,6 +1,6 @@ { "name": "paperless-ngx-ui", - "version": "2.20.5", + "version": "2.20.6", "scripts": { "preinstall": "npx only-allow pnpm", "ng": "ng", @@ -11,17 +11,17 @@ }, "private": true, "dependencies": { - "@angular/cdk": "^21.0.6", - "@angular/common": "~21.0.8", - "@angular/compiler": "~21.0.8", - "@angular/core": "~21.0.8", - "@angular/forms": "~21.0.8", - "@angular/localize": "~21.0.8", - "@angular/platform-browser": "~21.0.8", - "@angular/platform-browser-dynamic": "~21.0.8", - "@angular/router": "~21.0.8", + "@angular/cdk": "^21.1.2", + "@angular/common": "~21.1.2", + "@angular/compiler": "~21.1.2", + "@angular/core": "~21.1.2", + "@angular/forms": "~21.1.2", + "@angular/localize": "~21.1.2", + "@angular/platform-browser": "~21.1.2", + "@angular/platform-browser-dynamic": "~21.1.2", + "@angular/router": "~21.1.2", "@ng-bootstrap/ng-bootstrap": "^20.0.0", - "@ng-select/ng-select": "^21.1.4", + "@ng-select/ng-select": "^21.2.0", "@ngneat/dirty-check-forms": "^3.0.3", "@popperjs/core": "^2.11.8", "bootstrap": "^5.3.8", @@ -37,29 +37,29 @@ "tslib": "^2.8.1", "utif": "^3.1.0", "uuid": "^13.0.0", - "zone.js": "^0.15.1" + "zone.js": "^0.16.0" }, "devDependencies": { - "@angular-builders/custom-webpack": "^21.0.0-beta.1", - "@angular-builders/jest": "^21.0.0-beta.1", - "@angular-devkit/core": "^21.0.5", - "@angular-devkit/schematics": "^21.0.5", - "@angular-eslint/builder": "21.1.0", - "@angular-eslint/eslint-plugin": "21.1.0", - "@angular-eslint/eslint-plugin-template": "21.1.0", - "@angular-eslint/schematics": "21.1.0", - "@angular-eslint/template-parser": "21.1.0", - "@angular/build": "^21.0.5", - "@angular/cli": "~21.0.5", - "@angular/compiler-cli": "~21.0.8", + "@angular-builders/custom-webpack": "^21.0.3", + "@angular-builders/jest": "^21.0.3", + "@angular-devkit/core": "^21.1.2", + "@angular-devkit/schematics": "^21.1.2", + "@angular-eslint/builder": "21.2.0", + "@angular-eslint/eslint-plugin": "21.2.0", + "@angular-eslint/eslint-plugin-template": "21.2.0", + "@angular-eslint/schematics": "21.2.0", + "@angular-eslint/template-parser": "21.2.0", + "@angular/build": "^21.1.2", + "@angular/cli": "~21.1.2", + "@angular/compiler-cli": "~21.1.2", "@codecov/webpack-plugin": "^1.9.1", - "@playwright/test": "^1.57.0", + "@playwright/test": "^1.58.1", "@types/jest": "^30.0.0", - "@types/node": "^24.10.1", - "@typescript-eslint/eslint-plugin": "^8.48.1", - "@typescript-eslint/parser": "^8.48.1", - "@typescript-eslint/utils": "^8.48.1", - "eslint": "^9.39.1", + "@types/node": "^25.2.0", + "@typescript-eslint/eslint-plugin": "^8.54.0", + "@typescript-eslint/parser": "^8.54.0", + "@typescript-eslint/utils": "^8.54.0", + "eslint": "^9.39.2", "jest": "30.2.0", "jest-environment-jsdom": "^30.2.0", "jest-junit": "^16.0.0", diff --git a/src-ui/pnpm-lock.yaml b/src-ui/pnpm-lock.yaml index 9ea1320d5..8249f819e 100644 --- a/src-ui/pnpm-lock.yaml +++ b/src-ui/pnpm-lock.yaml @@ -9,41 +9,41 @@ importers: .: dependencies: '@angular/cdk': - specifier: ^21.0.6 - version: 21.0.6(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + specifier: ^21.1.2 + version: 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/common': - specifier: ~21.0.8 - version: 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + specifier: ~21.1.2 + version: 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) '@angular/compiler': - specifier: ~21.0.8 - version: 21.0.8 + specifier: ~21.1.2 + version: 21.1.2 '@angular/core': - specifier: ~21.0.8 - version: 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + specifier: ~21.1.2 + version: 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) '@angular/forms': - specifier: ~21.0.8 - version: 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + specifier: ~21.1.2 + version: 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/localize': - specifier: ~21.0.8 - version: 21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8) + specifier: ~21.1.2 + version: 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2) '@angular/platform-browser': - specifier: ~21.0.8 - version: 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + specifier: ~21.1.2 + version: 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) '@angular/platform-browser-dynamic': - specifier: ~21.0.8 - version: 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))) + specifier: ~21.1.2 + version: 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))) '@angular/router': - specifier: ~21.0.8 - version: 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + specifier: ~21.1.2 + version: 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@ng-bootstrap/ng-bootstrap': specifier: ^20.0.0 - version: 20.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@popperjs/core@2.11.8)(rxjs@7.8.2) + version: 20.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@popperjs/core@2.11.8)(rxjs@7.8.2) '@ng-select/ng-select': - specifier: ^21.1.4 - version: 21.1.4(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)) + specifier: ^21.2.0 + version: 21.2.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)) '@ngneat/dirty-check-forms': specifier: ^3.0.3 - version: 3.0.3(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/router@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(lodash-es@4.17.21)(rxjs@7.8.2) + version: 3.0.3(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(@angular/router@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(lodash-es@4.17.21)(rxjs@7.8.2) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -61,19 +61,19 @@ importers: version: 10.4.0 ngx-bootstrap-icons: specifier: ^1.9.3 - version: 1.9.3(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + version: 1.9.3(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) ngx-color: specifier: ^10.1.0 - version: 10.1.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + version: 10.1.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) ngx-cookie-service: specifier: ^21.1.0 - version: 21.1.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + version: 21.1.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) ngx-device-detector: specifier: ^11.0.0 - version: 11.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + version: 11.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) ngx-ui-tour-ng-bootstrap: specifier: ^17.0.1 - version: 17.0.1(242655d8c5d1eba0620a4ab62bc9a1fe) + version: 17.0.1(7ad980aeba34de65f96adc005a99db92) rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -87,72 +87,72 @@ importers: specifier: ^13.0.0 version: 13.0.0 zone.js: - specifier: ^0.15.1 - version: 0.15.1 + specifier: ^0.16.0 + version: 0.16.0 devDependencies: '@angular-builders/custom-webpack': - specifier: ^21.0.0-beta.1 - version: 21.0.0-beta.1(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) + specifier: ^21.0.3 + version: 21.0.3(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) '@angular-builders/jest': - specifier: ^21.0.0-beta.1 - version: 21.0.0-beta.1(ca5e3b6566691d55c1cc0d5f364cdb5f) + specifier: ^21.0.3 + version: 21.0.3(a0ae7905abf24a540ba990aea816dd3a) '@angular-devkit/core': - specifier: ^21.0.5 - version: 21.0.5(chokidar@4.0.3) + specifier: ^21.1.2 + version: 21.1.2(chokidar@5.0.0) '@angular-devkit/schematics': - specifier: ^21.0.5 - version: 21.0.5(chokidar@4.0.3) + specifier: ^21.1.2 + version: 21.1.2(chokidar@5.0.0) '@angular-eslint/builder': - specifier: 21.1.0 - version: 21.1.0(@angular/cli@21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3))(chokidar@4.0.3)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 21.2.0 + version: 21.2.0(@angular/cli@21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3))(chokidar@5.0.0)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@angular-eslint/eslint-plugin': - specifier: 21.1.0 - version: 21.1.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 21.2.0 + version: 21.2.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@angular-eslint/eslint-plugin-template': - specifier: 21.1.0 - version: 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/types@8.48.1)(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 21.2.0 + version: 21.2.0(@angular-eslint/template-parser@21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/types@8.54.0)(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@angular-eslint/schematics': - specifier: 21.1.0 - version: 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@angular/cli@21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3))(@typescript-eslint/types@8.48.1)(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(chokidar@4.0.3)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 21.2.0 + version: 21.2.0(@angular-eslint/template-parser@21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@angular/cli@21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3))(@typescript-eslint/types@8.54.0)(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(chokidar@5.0.0)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@angular-eslint/template-parser': - specifier: 21.1.0 - version: 21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 21.2.0 + version: 21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@angular/build': - specifier: ^21.0.5 - version: 21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) + specifier: ^21.1.2 + version: 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) '@angular/cli': - specifier: ~21.0.5 - version: 21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3) + specifier: ~21.1.2 + version: 21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3) '@angular/compiler-cli': - specifier: ~21.0.8 - version: 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) + specifier: ~21.1.2 + version: 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) '@codecov/webpack-plugin': specifier: ^1.9.1 version: 1.9.1(webpack@5.103.0) '@playwright/test': - specifier: ^1.57.0 - version: 1.57.0 + specifier: ^1.58.1 + version: 1.58.1 '@types/jest': specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: ^24.10.1 - version: 24.10.1 + specifier: ^25.2.0 + version: 25.2.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.48.1 - version: 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.54.0 + version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^8.48.1 - version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.54.0 + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/utils': - specifier: ^8.48.1 - version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.54.0 + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: - specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + specifier: ^9.39.2 + version: 9.39.2(jiti@2.6.1) jest: specifier: 30.2.0 - version: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + version: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) jest-environment-jsdom: specifier: ^30.2.0 version: 30.2.0(canvas@3.0.0) @@ -161,7 +161,7 @@ importers: version: 16.0.0 jest-preset-angular: specifier: ^16.0.0 - version: 16.0.0(9e65cd0423f3ecb19932f3fec7e9bb3c) + version: 16.0.0(3b6c407047314a355d5165b2c0f1d0be) jest-websocket-mock: specifier: ^2.5.0 version: 2.5.0 @@ -170,7 +170,7 @@ importers: version: 4.3.0(prettier@3.4.2)(typescript@5.9.3) ts-node: specifier: ~10.9.1 - version: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) + version: 10.9.2(@types/node@25.2.0)(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -195,78 +195,78 @@ packages: '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} - '@algolia/abtesting@1.6.1': - resolution: {integrity: sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==} + '@algolia/abtesting@1.12.2': + resolution: {integrity: sha512-oWknd6wpfNrmRcH0vzed3UPX0i17o4kYLM5OMITyMVM2xLgaRbIafoxL0e8mcrNNb0iORCJA0evnNDKRYth5WQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-abtesting@5.40.1': - resolution: {integrity: sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==} + '@algolia/client-abtesting@5.46.2': + resolution: {integrity: sha512-oRSUHbylGIuxrlzdPA8FPJuwrLLRavOhAmFGgdAvMcX47XsyM+IOGa9tc7/K5SPvBqn4nhppOCEz7BrzOPWc4A==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.40.1': - resolution: {integrity: sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==} + '@algolia/client-analytics@5.46.2': + resolution: {integrity: sha512-EPBN2Oruw0maWOF4OgGPfioTvd+gmiNwx0HmD9IgmlS+l75DatcBkKOPNJN+0z3wBQWUO5oq602ATxIfmTQ8bA==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.40.1': - resolution: {integrity: sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==} + '@algolia/client-common@5.46.2': + resolution: {integrity: sha512-Hj8gswSJNKZ0oyd0wWissqyasm+wTz1oIsv5ZmLarzOZAp3vFEda8bpDQ8PUhO+DfkbiLyVnAxsPe4cGzWtqkg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.40.1': - resolution: {integrity: sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==} + '@algolia/client-insights@5.46.2': + resolution: {integrity: sha512-6dBZko2jt8FmQcHCbmNLB0kCV079Mx/DJcySTL3wirgDBUH7xhY1pOuUTLMiGkqM5D8moVZTvTdRKZUJRkrwBA==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.40.1': - resolution: {integrity: sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==} + '@algolia/client-personalization@5.46.2': + resolution: {integrity: sha512-1waE2Uqh/PHNeDXGn/PM/WrmYOBiUGSVxAWqiJIj73jqPqvfzZgzdakHscIVaDl6Cp+j5dwjsZ5LCgaUr6DtmA==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.40.1': - resolution: {integrity: sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==} + '@algolia/client-query-suggestions@5.46.2': + resolution: {integrity: sha512-EgOzTZkyDcNL6DV0V/24+oBJ+hKo0wNgyrOX/mePBM9bc9huHxIY2352sXmoZ648JXXY2x//V1kropF/Spx83w==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.40.1': - resolution: {integrity: sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==} + '@algolia/client-search@5.46.2': + resolution: {integrity: sha512-ZsOJqu4HOG5BlvIFnMU0YKjQ9ZI6r3C31dg2jk5kMWPSdhJpYL9xa5hEe7aieE+707dXeMI4ej3diy6mXdZpgA==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.40.1': - resolution: {integrity: sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==} + '@algolia/ingestion@1.46.2': + resolution: {integrity: sha512-1Uw2OslTWiOFDtt83y0bGiErJYy5MizadV0nHnOoHFWMoDqWW0kQoMFI65pXqRSkVvit5zjXSLik2xMiyQJDWQ==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.40.1': - resolution: {integrity: sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==} + '@algolia/monitoring@1.46.2': + resolution: {integrity: sha512-xk9f+DPtNcddWN6E7n1hyNNsATBCHIqAvVGG2EAGHJc4AFYL18uM/kMTiOKXE/LKDPyy1JhIerrh9oYb7RBrgw==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.40.1': - resolution: {integrity: sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==} + '@algolia/recommend@5.46.2': + resolution: {integrity: sha512-NApbTPj9LxGzNw4dYnZmj2BoXiAc8NmbbH6qBNzQgXklGklt/xldTvu+FACN6ltFsTzoNU6j2mWNlHQTKGC5+Q==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.40.1': - resolution: {integrity: sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==} + '@algolia/requester-browser-xhr@5.46.2': + resolution: {integrity: sha512-ekotpCwpSp033DIIrsTpYlGUCF6momkgupRV/FA3m62SreTSZUKjgK6VTNyG7TtYfq9YFm/pnh65bATP/ZWJEg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.40.1': - resolution: {integrity: sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==} + '@algolia/requester-fetch@5.46.2': + resolution: {integrity: sha512-gKE+ZFi/6y7saTr34wS0SqYFDcjHW4Wminv8PDZEi0/mE99+hSrbKgJWxo2ztb5eqGirQTgIh1AMVacGGWM1iw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.40.1': - resolution: {integrity: sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==} + '@algolia/requester-node-http@5.46.2': + resolution: {integrity: sha512-ciPihkletp7ttweJ8Zt+GukSVLp2ANJHU+9ttiSxsJZThXc4Y2yJ8HGVWesW5jN1zrsZsezN71KrMx/iZsOYpg==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular-builders/common@5.0.0-beta.1': - resolution: {integrity: sha512-XtnCMsCxedvJt507iOwI9WxWRemJrYhzG5Zh3tYZtxXUYPk2zZpNxVfW41yVicRZ89aWULH3p+mAYeZC4KHX6Q==} + '@angular-builders/common@5.0.3': + resolution: {integrity: sha512-Dro3574mu4/xqmjdA3159+TXDhgTbIJpEY/iBETSKUvHJiCgHel+R3eT105RpHN5o7NaD2rau5Zk2wuZqOk35Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@angular-builders/custom-webpack@21.0.0-beta.1': - resolution: {integrity: sha512-OoqqMmAT9PRCqCp5eTPF3KNdvCLjR7R1wxhPph77ppFc49vCeFaDXhA3YL2NMJ+a4E3pb95jG3hDwksIWH8pLw==} + '@angular-builders/custom-webpack@21.0.3': + resolution: {integrity: sha512-Aq3PZoQxY4jmfDb1sT5E6ZFAdiv35PziFmgYoW5DGX8xbYsV7EoKWZN2ZIjEI3Zr/WUZWGlxmxa11XK9WOtidg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@angular/compiler-cli': ^21.0.0 - '@angular-builders/jest@21.0.0-beta.1': - resolution: {integrity: sha512-ozlRWhc3XRueX9+5RN3CbeAxEc/ou3XVOLAmP79Z6xtFfXA7k4xfwoCQMcjVYFkR6WWNvAf/SBnVWF9UuAsvZQ==} + '@angular-builders/jest@21.0.3': + resolution: {integrity: sha512-RYIsJQJkke4Dns+lYBYzn0JcmABCQKvTWkqMibi5v8dgtNS8pgPS8pE5x8DSmgraqJikL3ukqaUQmdeL6r38aw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@angular-devkit/build-angular': ^21.0.0 @@ -275,12 +275,13 @@ packages: '@angular/platform-browser-dynamic': ^21.0.0 jest: ^30.0.0 - '@angular-devkit/architect@0.2100.5': - resolution: {integrity: sha512-KKmZMXzHCX0cWHY7xo9yy1J0fV7S/suhPO00YTcHBgLivkLsnbI177CrmWiMdLxSJD3NqTVkBEMPFQ2I2ooDFw==} + '@angular-devkit/architect@0.2101.2': + resolution: {integrity: sha512-pV2onJgp16xO0vAqEfRWVynRPPLVHydYLANNa3UX3l5T39JcYdMIoOHSIIl8tWrxVeOwiWd1ajub0VsFTUok4Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true - '@angular-devkit/build-angular@21.0.5': - resolution: {integrity: sha512-My42P8i/FrZgEsTnsCS9IXKMk7ikJwa14i0aBcHg3lMBAPrdpHVzgDS6/1SOO1HsoVYF/SiPjwnlL152xlm8/Q==} + '@angular-devkit/build-angular@21.1.2': + resolution: {integrity: sha512-i/FTbqVwj0Wk6B5RA2H9iVsDC/kIK/5koSEwkIQjXGZuDVFUoEuWiIR2PGGSSQ9u3DmkpVPZmKEXWRl+g7Qn5g==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^21.0.0 @@ -289,7 +290,7 @@ packages: '@angular/platform-browser': ^21.0.0 '@angular/platform-server': ^21.0.0 '@angular/service-worker': ^21.0.0 - '@angular/ssr': ^21.0.5 + '@angular/ssr': ^21.1.2 '@web/test-runner': ^0.20.0 browser-sync: ^3.0.2 jest: ^30.2.0 @@ -329,72 +330,72 @@ packages: tailwindcss: optional: true - '@angular-devkit/build-webpack@0.2100.5': - resolution: {integrity: sha512-cjHBN+9vFQiy4GAlrgedsrXOIa8ghcxFeZfGpxNBcvP9jowTClFkqLeQkbeHwHkLEm9/C/QO8vz/etWoIpimEg==} + '@angular-devkit/build-webpack@0.2101.2': + resolution: {integrity: sha512-/rC9rcrG+Tn8MZIEW9LTHmBuLiQdCHZyscgqgMXD049qgB858gS1Y/lP/tt0xrP3Yhan5XNcRYjcv6sYPtmPUw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: webpack: ^5.30.0 webpack-dev-server: ^5.0.2 - '@angular-devkit/core@21.0.5': - resolution: {integrity: sha512-STDOtPbd8vePqyneQaLR8c9hnu7BieU7aPG5Icgl0pevv7EfCmwZUTqvK5nCpLk0tVFo6D1WHwIDZ3fnyvFW1A==} + '@angular-devkit/core@21.1.2': + resolution: {integrity: sha512-0wl5nJlFWsbwfUB2CQeTSmnVQ8AtqqwM3bYPYtXSc+vA8+hzsOAjjDuRnBxZS9zTnqtXKXB1e7M3Iy7KUwh7LA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: - chokidar: ^4.0.0 + chokidar: ^5.0.0 peerDependenciesMeta: chokidar: optional: true - '@angular-devkit/schematics@21.0.5': - resolution: {integrity: sha512-U6Z/OEce3R9CJl8/xuVrNVp0uhv3Ac4wRjpG18kE0dh5R87ablhqr/wkP3rZbWpdGwuGSJ+cR7LE5IbwSswejA==} + '@angular-devkit/schematics@21.1.2': + resolution: {integrity: sha512-PA3gkiFhHUuXd2XuP7yzKg/9N++bjw+uOl473KwIsMuZwMPhncKa4+mUYBaffDoPqaujZvjfo6mjtCBuiBv05w==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-eslint/builder@21.1.0': - resolution: {integrity: sha512-pcUlDkGqeZ+oQC0oEjnkDDlB96gbgHQhnBUKdhYAiAOSuiBod4+npP0xQOq5chYtRNPBprhDqgrJrp5DBeDMOA==} + '@angular-eslint/builder@21.2.0': + resolution: {integrity: sha512-wcp3J9cbrDwSeI/o1D/DSvMQa8zpKjc5WhRGTx33omhWijCfiVNEAiBLWiEx5Sb/dWcoX8yFNWY5jSgFVy9Sjw==} peerDependencies: '@angular/cli': '>= 21.0.0 < 22.0.0' eslint: ^8.57.0 || ^9.0.0 typescript: '*' - '@angular-eslint/bundled-angular-compiler@21.1.0': - resolution: {integrity: sha512-t52J6FszgEHaJ+IjuzU9qaWfVxsjlVNkAP+B5z2t4NDgbbDDsmI+QJh0OtP1qdlqzjh2pbocEml30KhYmNZm/Q==} + '@angular-eslint/bundled-angular-compiler@21.2.0': + resolution: {integrity: sha512-J0DWL+j6t9ItFIyIADvzHGqwDA1qfVJ9bx+oTmJ/Hlo7cUpIRoXpcTXpug0CEEABFH0RfDu6PDG2b0FoZ1+7bg==} - '@angular-eslint/eslint-plugin-template@21.1.0': - resolution: {integrity: sha512-FlbRfOCn8IUHvP1ebcCSQFVNh+4X/HqZqL7SW5oj9WIYPiOX9ijS03ndNbfX/pBPSIi8GHLKMjLt8zIy1l5Lww==} + '@angular-eslint/eslint-plugin-template@21.2.0': + resolution: {integrity: sha512-lJ13Dj0DjR6YiceQR0sRbyWzSzOQ6uZPwK9CJUF3wuZjYAUvL1D61zaU9QrVLtf89NVOxv+dYZHDdu3IDeIqbA==} peerDependencies: - '@angular-eslint/template-parser': 21.1.0 + '@angular-eslint/template-parser': 21.2.0 '@typescript-eslint/types': ^7.11.0 || ^8.0.0 '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 typescript: '*' - '@angular-eslint/eslint-plugin@21.1.0': - resolution: {integrity: sha512-oNp+4UzN2M3KwGwEw03NUdXz93vqJd9sMzTbGXWF9+KVfA2LjckGDTrI6g6asGcJMdyTo07rDcnw0m0MkLB5VA==} + '@angular-eslint/eslint-plugin@21.2.0': + resolution: {integrity: sha512-X2Qn2viDsjm91CEMxNrxDH3qkKpp6un0C1F1BW2p/m9J4AUVfOcXwWz9UpHFSHTRQ+YlTJbiH1ZwwAPeKhFaxA==} peerDependencies: '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 typescript: '*' - '@angular-eslint/schematics@21.1.0': - resolution: {integrity: sha512-Hal1mYwx4MTjCcNHqfIlua31xrk2tZJoyTiXiGQ21cAeK4sFuY+9V7/8cxbwJMGftX0G4J7uhx8woOdIFuqiZw==} + '@angular-eslint/schematics@21.2.0': + resolution: {integrity: sha512-WtT4fPKIUQ/hswy+l2GF/rKOdD+42L3fUzzcwRzNutQbe2tU9SimoSOAsay/ylWEuhIOQTs7ysPB8fUgFQoLpA==} peerDependencies: '@angular/cli': '>= 21.0.0 < 22.0.0' - '@angular-eslint/template-parser@21.1.0': - resolution: {integrity: sha512-PYVgNbjNtuD5/QOuS6cHR8A7bRqsVqxtUUXGqdv76FYMAajQcAvyfR0QxOkqf3NmYxgNgO3hlUHWq0ILjVbcow==} + '@angular-eslint/template-parser@21.2.0': + resolution: {integrity: sha512-TCb3qYOC/uXKZCo56cJ6N9sHeWdFhyVqrbbYfFjTi09081T6jllgHDZL5Ms7gOMNY8KywWGGbhxwvzeA0RwTgA==} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '*' - '@angular-eslint/utils@21.1.0': - resolution: {integrity: sha512-rWINgxGREu+NFUPCpAVsBGG8B4hfXxyswM0N5GbjykvsfB5W6PUix2Gsoh++iEsZPT+c9lvgXL5GbpwfanjOow==} + '@angular-eslint/utils@21.2.0': + resolution: {integrity: sha512-E19/hkuvHoNFvctBkmEiGWpy2bbC6cgbr3GNVrn2nGtbI4jnwnDFCGHv50I4LBfvj0PA9E6TWe73ejJ5qoMJWQ==} peerDependencies: '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 typescript: '*' - '@angular/build@21.0.5': - resolution: {integrity: sha512-4Ejb5pA118GGyZOAGjSmZMCx5HbovRSjiqLuCmpjf9hUgs50GPNJbigWW1ewz5+KmFrc8ouEoirpgTQyaKKZ3Q==} + '@angular/build@21.1.2': + resolution: {integrity: sha512-5hl7OTZeQcdkr/3LXSijLuUCwlcqGyYJYOb8GbFqSifSR03JFI3tLQtyQ0LX2CXv3MOx1qFUQbYVfcjW5M36QQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler': ^21.0.0 @@ -404,7 +405,7 @@ packages: '@angular/platform-browser': ^21.0.0 '@angular/platform-server': ^21.0.0 '@angular/service-worker': ^21.0.0 - '@angular/ssr': ^21.0.5 + '@angular/ssr': ^21.1.2 karma: ^6.4.0 less: ^4.2.0 ng-packagr: ^21.0.0 @@ -439,45 +440,46 @@ packages: vitest: optional: true - '@angular/cdk@21.0.6': - resolution: {integrity: sha512-5Gw8mXtKXvcvDMWEciPLRYB6Ja5vsikLAidZsdCEIF6Bc51GmoqT5Tk/Ke+ciCd5Hq9Aco/IcHxT1RC3470lZg==} + '@angular/cdk@21.1.2': + resolution: {integrity: sha512-0q+PhBKmjKO0Yi353VCpMxT0g787cllLhdpyxh00i3twxNWvFkQZgy2Ih187ZXydvW+u9mFkK9+UGLzncQ0yng==} peerDependencies: '@angular/common': ^21.0.0 || ^22.0.0 '@angular/core': ^21.0.0 || ^22.0.0 + '@angular/platform-browser': ^21.0.0 || ^22.0.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/cli@21.0.5': - resolution: {integrity: sha512-UYFQqn9Ow1wFVSwdB/xfjmZo4Yb7CUNxilbeYDFIybesfxXSdjMJBbXLtV0+icIhjmqfSUm2gTls6WIrG8qv9A==} + '@angular/cli@21.1.2': + resolution: {integrity: sha512-AHjXCBl2PEilMJct6DX3ih5Fl5PiKpNDIj0ViTyVh1YcfpYjt6NzhVlV2o++8VNPNH/vMcmf2551LZIDProXXA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular/common@21.0.8': - resolution: {integrity: sha512-on1B4oc/pf7IlkbG08Et/cCDSX8dpZz9iwp3zMFN/0JvorspyL5YOovFJfjdpmjdlrIi+ToGImwyIkY9P8Mblw==} + '@angular/common@21.1.2': + resolution: {integrity: sha512-NK26OG1+/3EXLDWstSPmdGbkpt8bP9AsT9J7EBornMswUjmQDbjyb85N/esKjRjDMkw4p/aKpBo24eCV5uUmBA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/core': 21.0.8 + '@angular/core': 21.1.2 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@21.0.8': - resolution: {integrity: sha512-+i/wFvi5FTg47Ei+aiFf8j3iYfjQ79ieg8oJM86+Mw4bNwEKQqvWcpmKjoqcfmCescuw0sr2DXU6OEeX+yWeVg==} + '@angular/compiler-cli@21.1.2': + resolution: {integrity: sha512-h+sX7QvSz58KvmRwNMa33EZHti8Cnw1DL01kInJ/foDchC/O2VMOumeGHS+lAe48t2Nbhiq/obgf275TkDZYsA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true peerDependencies: - '@angular/compiler': 21.0.8 + '@angular/compiler': 21.1.2 typescript: '>=5.9 <6.0' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@21.0.8': - resolution: {integrity: sha512-k/EPMuNvfn0eebEMmVcwhMlCWqzER/BEHVqTQCKsAAt7AuYZuluz7oR8Ypw96v3jbY+ZaH1ZvAzrK6URzryhOg==} + '@angular/compiler@21.1.2': + resolution: {integrity: sha512-5OFdZPNix7iK4HSdRxPgg74VvcmQZAMzv9ACYZ8iGfNxiJUjFSurfz0AtVEh0oE2oZDH1v48bHI1s+0ljCHZhA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@angular/core@21.0.8': - resolution: {integrity: sha512-8dNolIQn8WHrD3PsqGuPrujxDX5hjpMbioifIByjjX9yaJy9on7AewVGb8m/DHVwWQ1eGVAGmvW9wt+h+nlzLg==} + '@angular/core@21.1.2': + resolution: {integrity: sha512-W2xxRb7noOD1DdMwKaZ3chFhii6nutaNIXt7dfWsMWoujg3Kqpdn1ukeyW5aHKQZvCJTIGr4f3whZ8Sj/17aCA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/compiler': 21.0.8 + '@angular/compiler': 21.1.2 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -486,107 +488,101 @@ packages: zone.js: optional: true - '@angular/forms@21.0.8': - resolution: {integrity: sha512-H03A50elawXO53xkz0Aytar5kYT14GLeaj6dLKc1kcR5NqvX9Y/R7z3bY52tvypAdIR8CmPT7ad07TlT4O9lkg==} + '@angular/forms@21.1.2': + resolution: {integrity: sha512-dY56FuoBEvfLMtatKGg1vMFSwgySzWJm3URaBj3GpFTjhnuByHoxH4Lb5u50lrrVc9VQt/BZmq3mDZXjlx6Qgw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/common': 21.0.8 - '@angular/core': 21.0.8 - '@angular/platform-browser': 21.0.8 + '@angular/common': 21.1.2 + '@angular/core': 21.1.2 + '@angular/platform-browser': 21.1.2 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@21.0.8': - resolution: {integrity: sha512-b4R3lLq32CbRXZrwMct4K7rQ5yzL7EXihg1IfyHNSEcxuuzdtXw/M1xexIkEVtLIfA+SROAThISbYgSgWq6rwg==} + '@angular/localize@21.1.2': + resolution: {integrity: sha512-y4vV8Lc39DC4qT3vI9RqpUYQ6Iu2WC/6pxt3o3YYJRk6eUyLSGpcp/jbfPjqDlZQNfKLdTDHEC7HeQnwD69/Mw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true peerDependencies: - '@angular/compiler': 21.0.8 - '@angular/compiler-cli': 21.0.8 + '@angular/compiler': 21.1.2 + '@angular/compiler-cli': 21.1.2 - '@angular/platform-browser-dynamic@21.0.8': - resolution: {integrity: sha512-i1pW2tSl9zG8hkqPYPifP7WGNDUuqIn8YVCLizNahINin5OIcb/KfuoYBC2zfDlaJaTY9no6PHbsbTD0cP5hrg==} + '@angular/platform-browser-dynamic@21.1.2': + resolution: {integrity: sha512-3+6Le0CuEpJFdJniD2ol6i9i7gmlJv+Qck5lxY+eHq2Ylj0VJ9sBIFaMBCmvdb6lz7QYnKoZr+Lhv1MX6hVXyg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/common': 21.0.8 - '@angular/compiler': 21.0.8 - '@angular/core': 21.0.8 - '@angular/platform-browser': 21.0.8 + '@angular/common': 21.1.2 + '@angular/compiler': 21.1.2 + '@angular/core': 21.1.2 + '@angular/platform-browser': 21.1.2 - '@angular/platform-browser@21.0.8': - resolution: {integrity: sha512-5rPyrP6n6ClO0ZEUXndS2/Xb7nZrbjjYWOxgfCb+ZTCiU7eyN6zhSmicKk2dLQxE1M15wbTa87dN6/Ytuq2uvg==} + '@angular/platform-browser@21.1.2': + resolution: {integrity: sha512-8vnCbQhxugQ3meGQ0YlSp0uNBYUjpFXYjFnGQ0Xq5jvzc9WX7KSix6+AydEjZtQfc1bWRetBTOlhQpqnwYp53g==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/animations': 21.0.8 - '@angular/common': 21.0.8 - '@angular/core': 21.0.8 + '@angular/animations': 21.1.2 + '@angular/common': 21.1.2 + '@angular/core': 21.1.2 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/router@21.0.8': - resolution: {integrity: sha512-LPR65wyWBSyR46fGeQtD92+TM635o0lh+N5k9qPZdMacogwViTrtBHWPfKYBtBUXLWEWXXKJfSbXvhh3w3uLxw==} + '@angular/router@21.1.2': + resolution: {integrity: sha512-APl4tkTJIrpejlULLrGtIdLuJkNctPy0pnVijrJLR52nEV0xX165ulXk3XrL9QnMk0iy950aTYtoTal4aMw16Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/common': 21.0.8 - '@angular/core': 21.0.8 - '@angular/platform-browser': 21.0.8 + '@angular/common': 21.1.2 + '@angular/core': 21.1.2 + '@angular/platform-browser': 21.1.2 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} '@babel/core@7.28.5': resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} '@babel/generator@7.28.5': resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.0': + resolution: {integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.28.5': - resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.27.1': - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.5': - resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} + '@babel/helper-define-polyfill-provider@0.6.6': + resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -594,20 +590,16 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -616,8 +608,8 @@ packages: resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} '@babel/helper-remap-async-to-generator@7.27.1': @@ -626,8 +618,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -652,21 +644,21 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.27.1': - resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} + '@babel/helper-wrap-function@7.28.6': + resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': - resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -689,8 +681,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': - resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': + resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -722,14 +714,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.27.1': - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -828,32 +820,32 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.5': - resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} + '@babel/plugin-transform-block-scoping@7.28.6': + resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.27.1': - resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.28.3': - resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.4': - resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} + '@babel/plugin-transform-classes@7.28.6': + resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.27.1': - resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + '@babel/plugin-transform-computed-properties@7.28.6': + resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -864,8 +856,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.27.1': - resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + '@babel/plugin-transform-dotall-regex@7.28.6': + resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -876,8 +868,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -888,14 +880,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-explicit-resource-management@7.28.0': - resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + '@babel/plugin-transform-explicit-resource-management@7.28.6': + resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.27.1': - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + '@babel/plugin-transform-exponentiation-operator@7.28.6': + resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -918,8 +910,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.27.1': - resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + '@babel/plugin-transform-json-strings@7.28.6': + resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -930,8 +922,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + '@babel/plugin-transform-logical-assignment-operators@7.28.6': + resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -948,14 +940,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.27.1': - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.27.1': - resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -966,8 +958,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -978,20 +970,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': - resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.27.1': - resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + '@babel/plugin-transform-numeric-separator@7.28.6': + resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.4': - resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} + '@babel/plugin-transform-object-rest-spread@7.28.6': + resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1002,14 +994,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.27.1': - resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + '@babel/plugin-transform-optional-catch-binding@7.28.6': + resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.27.1': - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1020,14 +1012,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.27.1': - resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + '@babel/plugin-transform-private-methods@7.28.6': + resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.27.1': - resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + '@babel/plugin-transform-private-property-in-object@7.28.6': + resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1038,14 +1030,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.4': - resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regexp-modifiers@7.27.1': - resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + '@babel/plugin-transform-regexp-modifiers@7.28.6': + resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1056,8 +1048,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-runtime@7.28.3': - resolution: {integrity: sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==} + '@babel/plugin-transform-runtime@7.28.5': + resolution: {integrity: sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1068,8 +1060,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.27.1': - resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + '@babel/plugin-transform-spread@7.28.6': + resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1098,8 +1090,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.27.1': - resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + '@babel/plugin-transform-unicode-property-regex@7.28.6': + resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1110,14 +1102,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.27.1': - resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + '@babel/plugin-transform-unicode-sets-regex@7.28.6': + resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.3': - resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} + '@babel/preset-env@7.28.5': + resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1131,16 +1123,16 @@ packages: resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1196,50 +1188,26 @@ packages: resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} engines: {node: '>=14.17.0'} - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/core@1.8.1': resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.26.0': - resolution: {integrity: sha512-hj0sKNCQOOo2fgyII3clmJXP28VhgDfU5iy3GNHlWO76KG6N7x4D9ezH5lJtQTG+1J6MFDAJXC1qsI+W+LvZoA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.0': resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.26.0': - resolution: {integrity: sha512-DDnoJ5eoa13L8zPh87PUlRd/IyFaIKOlRbxiwcSbeumcJ7UZKdtuMCHa1Q27LWQggug6W4m28i4/O2qiQQ5NZQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.27.0': resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} @@ -1247,16 +1215,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.26.0': - resolution: {integrity: sha512-C0hkDsYNHZkBtPxxDx177JN90/1MiCpvBNjz1f5yWJo1+5+c5zr8apjastpEG+wtPjo9FFtGG7owSsAxyKiHxA==} - engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [android] '@esbuild/android-arm@0.27.0': @@ -1265,16 +1227,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.26.0': - resolution: {integrity: sha512-bKDkGXGZnj0T70cRpgmv549x38Vr2O3UWLbjT2qmIkdIWcmlg8yebcFWoT9Dku7b5OV3UqPEuNKRzlNhjwUJ9A==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [arm] os: [android] '@esbuild/android-x64@0.27.0': @@ -1283,17 +1239,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.26.0': - resolution: {integrity: sha512-6Z3naJgOuAIB0RLlJkYc81An3rTlQ/IeRdrU3dOea8h/PvZSgitZV+thNuIccw0MuK1GmIAnAmd5TrMZad8FTQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.27.0': resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} @@ -1301,16 +1251,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.26.0': - resolution: {integrity: sha512-OPnYj0zpYW0tHusMefyaMvNYQX5pNQuSsHFTHUBNp3vVXupwqpxofcjVsUx11CQhGVkGeXjC3WLjh91hgBG2xw==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.27.0': @@ -1319,17 +1263,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.26.0': - resolution: {integrity: sha512-jix2fa6GQeZhO1sCKNaNMjfj5hbOvoL2F5t+w6gEPxALumkpOV/wq7oUBMHBn2hY2dOm+mEV/K+xfZy3mrsxNQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.27.0': resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} @@ -1337,16 +1275,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.26.0': - resolution: {integrity: sha512-tccJaH5xHJD/239LjbVvJwf6T4kSzbk6wPFerF0uwWlkw/u7HL+wnAzAH5GB2irGhYemDgiNTp8wJzhAHQ64oA==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.27.0': @@ -1355,17 +1287,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.26.0': - resolution: {integrity: sha512-IMJYN7FSkLttYyTbsbme0Ra14cBO5z47kpamo16IwggzzATFY2lcZAwkbcNkWiAduKrTgFJP7fW5cBI7FzcuNQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.27.0': resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} @@ -1373,16 +1299,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.26.0': - resolution: {integrity: sha512-JY8NyU31SyRmRpuc5W8PQarAx4TvuYbyxbPIpHAZdr/0g4iBr8KwQBS4kiiamGl2f42BBecHusYCsyxi7Kn8UQ==} - engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.27.0': @@ -1391,16 +1311,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.26.0': - resolution: {integrity: sha512-XITaGqGVLgk8WOHw8We9Z1L0lbLFip8LyQzKYFKO4zFo1PFaaSKsbNjvkb7O8kEXytmSGRkYpE8LLVpPJpsSlw==} - engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.27.0': @@ -1409,16 +1323,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.26.0': - resolution: {integrity: sha512-MkggfbDIczStUJwq9wU7gQ7kO33d8j9lWuOCDifN9t47+PeI+9m2QVh51EI/zZQ1spZtFMC1nzBJ+qNGCjJnsg==} - engines: {node: '>=18'} - cpu: [loong64] + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.27.0': @@ -1427,16 +1335,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.26.0': - resolution: {integrity: sha512-fUYup12HZWAeccNLhQ5HwNBPr4zXCPgUWzEq2Rfw7UwqwfQrFZ0SR/JljaURR8xIh9t+o1lNUFTECUTmaP7yKA==} - engines: {node: '>=18'} - cpu: [mips64el] + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.27.0': @@ -1445,16 +1347,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.26.0': - resolution: {integrity: sha512-MzRKhM0Ip+//VYwC8tialCiwUQ4G65WfALtJEFyU0GKJzfTYoPBw5XNWf0SLbCUYQbxTKamlVwPmcw4DgZzFxg==} - engines: {node: '>=18'} - cpu: [ppc64] + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.27.0': @@ -1463,16 +1359,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.26.0': - resolution: {integrity: sha512-QhCc32CwI1I4Jrg1enCv292sm3YJprW8WHHlyxJhae/dVs+KRWkbvz2Nynl5HmZDW/m9ZxrXayHzjzVNvQMGQA==} - engines: {node: '>=18'} - cpu: [riscv64] + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.27.0': @@ -1481,16 +1371,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.26.0': - resolution: {integrity: sha512-1D6vi6lfI18aNT1aTf2HV+RIlm6fxtlAp8eOJ4mmnbYmZ4boz8zYDar86sIYNh0wmiLJEbW/EocaKAX6Yso2fw==} - engines: {node: '>=18'} - cpu: [s390x] + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.27.0': @@ -1499,16 +1383,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.26.0': - resolution: {integrity: sha512-rnDcepj7LjrKFvZkx+WrBv6wECeYACcFjdNPvVPojCPJD8nHpb3pv3AuR9CXgdnjH1O23btICj0rsp0L9wAnHA==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.27.0': @@ -1517,17 +1395,11 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.26.0': - resolution: {integrity: sha512-FSWmgGp0mDNjEXXFcsf12BmVrb+sZBBBlyh3LwB/B9ac3Kkc8x5D2WimYW9N7SUkolui8JzVnVlWh7ZmjCpnxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + cpu: [x64] + os: [linux] '@esbuild/netbsd-arm64@0.27.0': resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} @@ -1535,16 +1407,10 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.26.0': - resolution: {integrity: sha512-0QfciUDFryD39QoSPUDshj4uNEjQhp73+3pbSAaxjV2qGOEDsM67P7KbJq7LzHoVl46oqhIhJ1S+skKGR7lMXA==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.27.0': @@ -1553,17 +1419,11 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.26.0': - resolution: {integrity: sha512-vmAK+nHhIZWImwJ3RNw9hX3fU4UGN/OqbSE0imqljNbUQC3GvVJ1jpwYoTfD6mmXmQaxdJY6Hn4jQbLGJKg5Yw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + cpu: [x64] + os: [netbsd] '@esbuild/openbsd-arm64@0.27.0': resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} @@ -1571,16 +1431,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.26.0': - resolution: {integrity: sha512-GPXF7RMkJ7o9bTyUsnyNtrFMqgM3X+uM/LWw4CeHIjqc32fm0Ir6jKDnWHpj8xHFstgWDUYseSABK9KCkHGnpg==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.27.0': @@ -1589,17 +1443,11 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.26.0': - resolution: {integrity: sha512-nUHZ5jEYqbBthbiBksbmHTlbb5eElyVfs/s1iHQ8rLBq1eWsd5maOnDpCocw1OM8kFK747d1Xms8dXJHtduxSw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] + cpu: [x64] + os: [openbsd] '@esbuild/openharmony-arm64@0.27.0': resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} @@ -1607,17 +1455,11 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.26.0': - resolution: {integrity: sha512-TMg3KCTCYYaVO+R6P5mSORhcNDDlemUVnUbb8QkboUtOhb5JWKAzd5uMIMECJQOxHZ/R+N8HHtDF5ylzLfMiLw==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + cpu: [arm64] + os: [openharmony] '@esbuild/sunos-x64@0.27.0': resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} @@ -1625,17 +1467,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.26.0': - resolution: {integrity: sha512-apqYgoAUd6ZCb9Phcs8zN32q6l0ZQzQBdVXOofa6WvHDlSOhwCWgSfVQabGViThS40Y1NA4SCvQickgZMFZRlA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.27.0': resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} @@ -1643,16 +1479,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.26.0': - resolution: {integrity: sha512-FGJAcImbJNZzLWu7U6WB0iKHl4RuY4TsXEwxJPl9UZLS47agIZuILZEX3Pagfw7I4J3ddflomt9f0apfaJSbaw==} - engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.27.0': @@ -1661,16 +1491,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.26.0': - resolution: {integrity: sha512-WAckBKaVnmFqbEhbymrPK7M086DQMpL1XoRbpmN0iW8k5JSXjDRQBhcZNa0VweItknLq9eAeCL34jK7/CDcw7A==} - engines: {node: '>=18'} - cpu: [x64] + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.27.0': @@ -1679,8 +1503,14 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1701,12 +1531,12 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.1': - resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -1721,8 +1551,8 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@hono/node-server@1.19.8': - resolution: {integrity: sha512-0/g2lIOPzX8f3vzW1ggQgvG5mjtFBDBHFAzI5SFAi2DzSqS9luJwqg9T6O/gKYLi+inS7eNxBeIFkkghIPvrMA==} + '@hono/node-server@1.19.9': + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -1756,15 +1586,6 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.19': - resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/confirm@5.1.21': resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} engines: {node: '>=18'} @@ -1841,8 +1662,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.9.0': - resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2050,36 +1871,120 @@ packages: peerDependencies: tslib: '2' + '@jsonjoy.com/base64@17.65.0': + resolution: {integrity: sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/buffers@1.2.1': resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/buffers@17.65.0': + resolution: {integrity: sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/codegen@1.0.0': resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/codegen@17.65.0': + resolution: {integrity: sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-core@4.56.10': + resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-fsa@4.56.10': + resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-builtins@4.56.10': + resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-to-fsa@4.56.10': + resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-utils@4.56.10': + resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node@4.56.10': + resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-print@4.56.10': + resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-snapshot@4.56.10': + resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/json-pack@1.21.0': resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/json-pack@17.65.0': + resolution: {integrity: sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/json-pointer@1.0.2': resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/json-pointer@17.65.0': + resolution: {integrity: sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/util@1.9.0': resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/util@17.65.0': + resolution: {integrity: sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -2090,38 +1995,38 @@ packages: '@inquirer/prompts': '>= 3 < 8' listr2: 9.0.5 - '@lmdb/lmdb-darwin-arm64@3.4.3': - resolution: {integrity: sha512-zR6Y45VNtW5s+A+4AyhrJk0VJKhXdkLhrySCpCu7PSdnakebsOzNxf58p5Xoq66vOSuueGAxlqDAF49HwdrSTQ==} + '@lmdb/lmdb-darwin-arm64@3.4.4': + resolution: {integrity: sha512-XaKL705gDWd6XVls3ATDj13ZdML/LqSIxwgnYpG8xTzH2ifArx8fMMDdvqGE/Emd+W6R90W2fveZcJ0AyS8Y0w==} cpu: [arm64] os: [darwin] - '@lmdb/lmdb-darwin-x64@3.4.3': - resolution: {integrity: sha512-nfGm5pQksBGfaj9uMbjC0YyQreny/Pl7mIDtHtw6g7WQuCgeLullr9FNRsYyKplaEJBPrCVpEjpAznxTBIrXBw==} + '@lmdb/lmdb-darwin-x64@3.4.4': + resolution: {integrity: sha512-GPHGEVcwJlkD01GmIr7B4kvbIcUDS2+kBadVEd7lU4can1RZaZQLDDBJRrrNfS2Kavvl0VLI/cMv7UASAXGrww==} cpu: [x64] os: [darwin] - '@lmdb/lmdb-linux-arm64@3.4.3': - resolution: {integrity: sha512-uX9eaPqWb740wg5D3TCvU/js23lSRSKT7lJrrQ8IuEG/VLgpPlxO3lHDywU44yFYdGS7pElBn6ioKFKhvALZlw==} + '@lmdb/lmdb-linux-arm64@3.4.4': + resolution: {integrity: sha512-mALqr7DE42HsiwVTKpQWxacjHoJk+e9p00RWIJqTACh/hpucxp/0lK/XMh5XzWnU/TDCZLukq1+vNqnNumTP/Q==} cpu: [arm64] os: [linux] - '@lmdb/lmdb-linux-arm@3.4.3': - resolution: {integrity: sha512-Kjqomp7i0rgSbYSUmv9JnXpS55zYT/YcW3Bdf9oqOTjcH0/8tFAP8MLhu/i9V2pMKIURDZk63Ww49DTK0T3c/Q==} + '@lmdb/lmdb-linux-arm@3.4.4': + resolution: {integrity: sha512-cmev5/dZr5ACKri9f6GU6lZCXTjMhV72xujlbOhFCgFXrt4W0TxGsmY8kA1BITvH60JBKE50cSxsiulybAbrrw==} cpu: [arm] os: [linux] - '@lmdb/lmdb-linux-x64@3.4.3': - resolution: {integrity: sha512-7/8l20D55CfwdMupkc3fNxNJdn4bHsti2X0cp6PwiXlLeSFvAfWs5kCCx+2Cyje4l4GtN//LtKWjTru/9hDJQg==} + '@lmdb/lmdb-linux-x64@3.4.4': + resolution: {integrity: sha512-QjLs8OcmCNcraAcLoZyFlo0atzBJniQLLwhtR+ymQqS5kLYpV5RqwriL87BW+ZiR9ZiGgZx3evrz5vnWPtJ1fQ==} cpu: [x64] os: [linux] - '@lmdb/lmdb-win32-arm64@3.4.3': - resolution: {integrity: sha512-yWVR0e5Gl35EGJBsAuqPOdjtUYuN8CcTLKrqpQFoM+KsMadViVCulhKNhkcjSGJB88Am5bRPjMro4MBB9FS23Q==} + '@lmdb/lmdb-win32-arm64@3.4.4': + resolution: {integrity: sha512-tr/pwHDlZ33forLGAr0tI04cRmP4SgF93yHbb+2zvZiDEyln5yMHhbKDySxY66aUOkhvBvTuHq9q/3YmTj6ZHQ==} cpu: [arm64] os: [win32] - '@lmdb/lmdb-win32-x64@3.4.3': - resolution: {integrity: sha512-1JdBkcO0Vrua4LUgr4jAe4FUyluwCeq/pDkBrlaVjX3/BBWP1TzVjCL+TibWNQtPAL1BITXPAhlK5Ru4FBd/hg==} + '@lmdb/lmdb-win32-x64@3.4.4': + resolution: {integrity: sha512-KRzfocJzB/mgoTCqnMawuLSKheHRVTqWfSmouIgYpFs6Hx4zvZSvsZKSCEb5gHmICy7qsx9l06jk3MFTtiFVAQ==} cpu: [x64] os: [win32] @@ -2287,8 +2192,8 @@ packages: '@popperjs/core': ^2.11.8 rxjs: ^6.5.3 || ^7.4.0 - '@ng-select/ng-select@21.1.4': - resolution: {integrity: sha512-3oXRKlgz4Z6J33K06cS7THhG61NLxuc0UWVEYpX2vi88pKG5NwkZFB6ICeO6swwxmt+Opg/cP9ZAOfSqWobSgw==} + '@ng-select/ng-select@21.2.0': + resolution: {integrity: sha512-cO7pORQK1xs93d35ir3rlUU2eAGfK9xcp6CWMPbv85PqkI+yBca3OSM7YYYkjWFEO+QTi7xRgwh4dBYd5J1ZBA==} engines: {node: ^20.19.0 || ^22.12.0 || ^24.0.0} peerDependencies: '@angular/common': ^21.0.0 @@ -2304,8 +2209,8 @@ packages: lodash-es: '>=4.17.0' rxjs: '>=6.0.0' - '@ngtools/webpack@21.0.5': - resolution: {integrity: sha512-m27t/Gl+AAW4jHZ0WOZTQhuYEHtI6ThfR/msKiAnOcfx9z5zR4hbR68cIuxx7KPkd/yDjL6mdi9i/vhcq9DNPg==} + '@ngtools/webpack@21.1.2': + resolution: {integrity: sha512-ZNMMD35urDKqYtx1drxPyGAvUPMOoiKjvrH8owpN+mzIO1nYpssCgmAseo1hePAduSvv8tAsY1NLtJfMSNzubw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^21.0.0 @@ -2324,9 +2229,9 @@ packages: resolution: {integrity: sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==} engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/installed-package-contents@3.0.0': - resolution: {integrity: sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/installed-package-contents@4.0.0': + resolution: {integrity: sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true '@npmcli/node-gyp@5.0.0': @@ -2337,10 +2242,6 @@ packages: resolution: {integrity: sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==} engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/promise-spawn@8.0.3': - resolution: {integrity: sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==} - engines: {node: ^18.17.0 || >=20.5.0} - '@npmcli/promise-spawn@9.0.1': resolution: {integrity: sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==} engines: {node: ^20.17.0 || >=22.9.0} @@ -2401,89 +2302,89 @@ packages: '@octokit/types@13.10.0': resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} - '@oxc-project/types@0.96.0': - resolution: {integrity: sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==} + '@oxc-project/types@0.106.0': + resolution: {integrity: sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg==} - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} '@pkgjs/parseargs@0.11.0': @@ -2494,212 +2395,221 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.57.0': - resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==} + '@playwright/test@1.58.1': + resolution: {integrity: sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==} engines: {node: '>=18'} hasBin: true '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@rolldown/binding-android-arm64@1.0.0-beta.47': - resolution: {integrity: sha512-vPP9/MZzESh9QtmvQYojXP/midjgkkc1E4AdnPPAzQXo668ncHJcVLKjJKzoBdsQmaIvNjrMdsCwES8vTQHRQw==} + '@rolldown/binding-android-arm64@1.0.0-beta.58': + resolution: {integrity: sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.47': - resolution: {integrity: sha512-Lc3nrkxeaDVCVl8qR3qoxh6ltDZfkQ98j5vwIr5ALPkgjZtDK4BGCrrBoLpGVMg+csWcaqUbwbKwH5yvVa0oOw==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.58': + resolution: {integrity: sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.47': - resolution: {integrity: sha512-eBYxQDwP0O33plqNVqOtUHqRiSYVneAknviM5XMawke3mwMuVlAsohtOqEjbCEl/Loi/FWdVeks5WkqAkzkYWQ==} + '@rolldown/binding-darwin-x64@1.0.0-beta.58': + resolution: {integrity: sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.47': - resolution: {integrity: sha512-Ns+kgp2+1Iq/44bY/Z30DETUSiHY7ZuqaOgD5bHVW++8vme9rdiWsN4yG4rRPXkdgzjvQ9TDHmZZKfY4/G11AA==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.58': + resolution: {integrity: sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.47': - resolution: {integrity: sha512-4PecgWCJhTA2EFOlptYJiNyVP2MrVP4cWdndpOu3WmXqWqZUmSubhb4YUAIxAxnXATlGjC1WjxNPhV7ZllNgdA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': + resolution: {integrity: sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.47': - resolution: {integrity: sha512-CyIunZ6D9U9Xg94roQI1INt/bLkOpPsZjZZkiaAZ0r6uccQdICmC99M9RUPlMLw/qg4yEWLlQhG73W/mG437NA==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': + resolution: {integrity: sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.47': - resolution: {integrity: sha512-doozc/Goe7qRCSnzfJbFINTHsMktqmZQmweull6hsZZ9sjNWQ6BWQnbvOlfZJe4xE5NxM1NhPnY5Giqnl3ZrYQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': + resolution: {integrity: sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.47': - resolution: {integrity: sha512-fodvSMf6Aqwa0wEUSTPewmmZOD44rc5Tpr5p9NkwQ6W1SSpUKzD3SwpJIgANDOhwiYhDuiIaYPGB7Ujkx1q0UQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': + resolution: {integrity: sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.47': - resolution: {integrity: sha512-Rxm5hYc0mGjwLh5sjlGmMygxAaV2gnsx7CNm2lsb47oyt5UQyPDZf3GP/ct8BEcwuikdqzsrrlIp8+kCSvMFNQ==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': + resolution: {integrity: sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.47': - resolution: {integrity: sha512-YakuVe+Gc87jjxazBL34hbr8RJpRuFBhun7NEqoChVDlH5FLhLXjAPHqZd990TVGVNkemourf817Z8u2fONS8w==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': + resolution: {integrity: sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.47': - resolution: {integrity: sha512-ak2GvTFQz3UAOw8cuQq8pWE+TNygQB6O47rMhvevvTzETh7VkHRFtRUwJynX5hwzFvQMP6G0az5JrBGuwaMwYQ==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': + resolution: {integrity: sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.47': - resolution: {integrity: sha512-o5BpmBnXU+Cj+9+ndMcdKjhZlPb79dVPBZnWwMnI4RlNSSq5yOvFZqvfPYbyacvnW03Na4n5XXQAPhu3RydZ0w==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': + resolution: {integrity: sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.47': - resolution: {integrity: sha512-FVOmfyYehNE92IfC9Kgs913UerDog2M1m+FADJypKz0gmRg3UyTt4o1cZMCAl7MiR89JpM9jegNO1nXuP1w1vw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.47': - resolution: {integrity: sha512-by/70F13IUE101Bat0oeH8miwWX5mhMFPk1yjCdxoTNHTyTdLgb0THNaebRM6AP7Kz+O3O2qx87sruYuF5UxHg==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': + resolution: {integrity: sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.47': - resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} + '@rolldown/pluginutils@1.0.0-beta.58': + resolution: {integrity: sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==} - '@rollup/rollup-android-arm-eabi@4.52.3': - resolution: {integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==} + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.3': - resolution: {integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==} + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.3': - resolution: {integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==} + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.3': - resolution: {integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==} + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.3': - resolution: {integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==} + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.3': - resolution: {integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==} + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.3': - resolution: {integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==} + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.3': - resolution: {integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==} + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.3': - resolution: {integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==} + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.3': - resolution: {integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==} + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.3': - resolution: {integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==} + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.3': - resolution: {integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==} + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.3': - resolution: {integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==} + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.3': - resolution: {integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==} + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.3': - resolution: {integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==} + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.3': - resolution: {integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==} + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.3': - resolution: {integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==} + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.3': - resolution: {integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==} + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.3': - resolution: {integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==} + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.3': - resolution: {integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==} + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.3': - resolution: {integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==} + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.3': - resolution: {integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==} + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} cpu: [x64] os: [win32] - '@schematics/angular@21.0.5': - resolution: {integrity: sha512-uNBIilq5bGnln3D7Nbm3/K+Ot++eGj4rygU0DCw//IZiTQU/iSyF3UAsN++iRetu/OMs+97T/RoGPjD22ryiZg==} + '@schematics/angular@21.1.2': + resolution: {integrity: sha512-kxwxhCIUrj7DfzEtDSs/pi/w+aII/WQLpPfLgoQCWE8/95v60WnTfd1afmsXsFoxikKPxkwoPWtU2YbhSoX9MQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@sigstore/bundle@4.0.0': @@ -2794,23 +2704,23 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} - '@types/express-serve-static-core@5.0.6': - resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} - - '@types/express@4.17.23': - resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + '@types/express@4.17.25': + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/http-proxy@1.17.16': - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/http-proxy@1.17.17': + resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2833,11 +2743,11 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node-forge@1.3.14': + resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@25.2.0': + resolution: {integrity: sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==} '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -2848,14 +2758,17 @@ packages: '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/send@0.17.5': - resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + '@types/send@0.17.6': + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} + + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} '@types/serve-index@1.9.4': resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - '@types/serve-static@1.15.8': - resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} @@ -2875,63 +2788,63 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.48.1': - resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} + '@typescript-eslint/eslint-plugin@8.54.0': + resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.48.1 + '@typescript-eslint/parser': ^8.54.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.48.1': - resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==} + '@typescript-eslint/parser@8.54.0': + resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.48.1': - resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} + '@typescript-eslint/project-service@8.54.0': + resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.48.1': - resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} + '@typescript-eslint/scope-manager@8.54.0': + resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.48.1': - resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} + '@typescript-eslint/tsconfig-utils@8.54.0': + resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.48.1': - resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} + '@typescript-eslint/type-utils@8.54.0': + resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.48.1': - resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} + '@typescript-eslint/types@8.54.0': + resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.48.1': - resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} + '@typescript-eslint/typescript-estree@8.54.0': + resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.48.1': - resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} + '@typescript-eslint/utils@8.54.0': + resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.48.1': - resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} + '@typescript-eslint/visitor-keys@8.54.0': + resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -3164,8 +3077,8 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch@5.40.1: - resolution: {integrity: sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==} + algoliasearch@5.46.2: + resolution: {integrity: sha512-qqAXW9QvKf2tTyhpDA4qXv1IfBwD2eduSW6tUEBFIfCeE9gn9HQ9I5+MaKoenRuHrzk5sQoNh1/iof8mY7uD6Q==} engines: {node: '>= 14.0.0'} ansi-colors@4.1.3: @@ -3225,8 +3138,8 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + autoprefixer@10.4.23: + resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -3257,8 +3170,8 @@ packages: resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-polyfill-corejs2@0.4.14: - resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} + babel-plugin-polyfill-corejs2@0.4.15: + resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3267,8 +3180,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.5: - resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} + babel-plugin-polyfill-regenerator@0.6.6: + resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3289,8 +3202,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.4: - resolution: {integrity: sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==} + baseline-browser-mapping@2.9.19: + resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true batch@0.6.1: @@ -3313,12 +3226,12 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} bonjour-service@1.3.0: @@ -3392,8 +3305,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001759: - resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==} + caniuse-lite@1.0.30001766: + resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} canvas@3.0.0: resolution: {integrity: sha512-NtcIBY88FjymQy+g2g5qnuP5IslrbWCQ3A6rSr1PeuYxVRapRZ3BZCrDyAakvI6CuDYidgZaf55ygulFVwROdg==} @@ -3422,6 +3335,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -3448,8 +3365,8 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-spinners@3.3.0: - resolution: {integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} engines: {node: '>=18.20'} cli-truncate@5.1.1: @@ -3496,8 +3413,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.8.0: - resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: @@ -3511,9 +3428,9 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} @@ -3525,17 +3442,13 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -3549,14 +3462,14 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.43.0: - resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} + core-js-compat@3.48.0: + resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} cosmiconfig@9.0.0: @@ -3654,12 +3567,12 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + default-browser@5.4.0: + resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} engines: {node: '>=18'} define-lazy-prop@3.0.0: @@ -3681,11 +3594,6 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -3732,8 +3640,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.266: - resolution: {integrity: sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==} + electron-to-chromium@1.5.283: + resolution: {integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3752,10 +3660,6 @@ packages: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -3770,6 +3674,10 @@ packages: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.4: + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3778,6 +3686,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -3814,23 +3726,13 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - esbuild-wasm@0.26.0: - resolution: {integrity: sha512-9rZuermDo9ZbWvKBv/vDRaRciCpR4L3rEbZLDs5kDq3TrCHRQZaQipQeV9wK/btpLBzNUBujTrd1uorDxbL/GA==} - engines: {node: '>=18'} - hasBin: true - esbuild-wasm@0.27.0: resolution: {integrity: sha512-4XpLDOY4sOzqgiezPXDkHTn25cBA1MKN5OTotehoFR7/wTpSYCK76OA8rQfpiuz12G27JpGxxdh+/D9GcNl61w==} engines: {node: '>=18'} hasBin: true - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.26.0: - resolution: {integrity: sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==} + esbuild-wasm@0.27.2: + resolution: {integrity: sha512-eUTnl8eh+v8UZIZh4MrMOKDAc8Lm7+NqP3pyuTORGFY1s/o9WoiJgKnwXy+te2J3hX7iRbFSHEyig7GsPeeJyw==} engines: {node: '>=18'} hasBin: true @@ -3839,6 +3741,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -3862,8 +3769,8 @@ packages: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-scope@9.0.0: - resolution: {integrity: sha512-+Yh0LeQKq+mW/tQArNj67tljR3L1HajDTQPuZOEwC00oBdoIDQrr89yBgjAlzAwRrY/5zDkM3v99iGHwz9y0dw==} + eslint-scope@9.1.0: + resolution: {integrity: sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: @@ -3874,8 +3781,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.1: - resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3893,8 +3800,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -3920,8 +3827,8 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} @@ -3964,12 +3871,12 @@ packages: peerDependencies: express: '>= 4.11' - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} fast-deep-equal@3.1.3: @@ -4011,13 +3918,13 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -4038,8 +3945,8 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4055,8 +3962,8 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} @@ -4160,9 +4067,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -4201,8 +4105,8 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - htmlparser2@10.0.0: - resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -4210,12 +4114,12 @@ packages: http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} http-parser-js@0.5.10: @@ -4262,8 +4166,8 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} icss-utils@5.1.0: @@ -4312,19 +4216,12 @@ packages: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@5.0.0: - resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} - engines: {node: ^18.17.0 || >=20.5.0} - ini@6.0.0: resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} engines: {node: ^20.17.0 || >=22.9.0} @@ -4337,8 +4234,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + ipaddr.js@2.3.0: + resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} engines: {node: '>= 10'} is-arrayish@0.2.1: @@ -4377,6 +4274,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -4386,8 +4287,8 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + is-network-error@1.3.0: + resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} engines: {node: '>=16'} is-number@7.0.0: @@ -4679,11 +4580,6 @@ packages: canvas: optional: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -4733,8 +4629,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - launch-editor@2.10.0: - resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} + launch-editor@2.12.0: + resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} less-loader@12.3.0: resolution: {integrity: sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==} @@ -4777,8 +4673,8 @@ packages: resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} - lmdb@3.4.3: - resolution: {integrity: sha512-GWV1kVi6uhrXWqe+3NXWO73OYe8fto6q8JMo0HOpk1vf8nEyFWgo4CSNJpIFzsOxOrysVUlcO48qRbQfmKd1gA==} + lmdb@3.4.4: + resolution: {integrity: sha512-+Y2DqovevLkb6DrSQ6SXTYLEd6kvlRbhsxzgJrk7BUfOVA/mt21ak6pFDZDKxiAczHMWxrb02kXBTSTIA0O94A==} hasBin: true loader-runner@4.3.1: @@ -4813,8 +4709,8 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} @@ -4827,15 +4723,15 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.2: - resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + lru-cache@11.2.5: + resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} engines: {node: 20 || >=22} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -4870,8 +4766,10 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memfs@4.51.1: - resolution: {integrity: sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==} + memfs@4.56.10: + resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==} + peerDependencies: + tslib: '2' merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -5012,8 +4910,8 @@ packages: resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} hasBin: true - msgpackr@1.11.5: - resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==} + msgpackr@1.11.8: + resolution: {integrity: sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==} multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} @@ -5112,16 +5010,16 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.3.3: + resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} engines: {node: '>= 6.13.0'} node-gyp-build-optional-packages@5.2.2: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true - node-gyp@12.1.0: - resolution: {integrity: sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g==} + node-gyp@12.2.0: + resolution: {integrity: sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true @@ -5140,28 +5038,20 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - npm-bundled@4.0.0: - resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-bundled@5.0.0: + resolution: {integrity: sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==} + engines: {node: ^20.17.0 || >=22.9.0} npm-install-checks@8.0.0: resolution: {integrity: sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==} engines: {node: ^20.17.0 || >=22.9.0} - npm-normalize-package-bin@4.0.0: - resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} - engines: {node: ^18.17.0 || >=20.5.0} - npm-normalize-package-bin@5.0.0: resolution: {integrity: sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==} engines: {node: ^20.17.0 || >=22.9.0} - npm-package-arg@13.0.1: - resolution: {integrity: sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==} + npm-package-arg@13.0.2: + resolution: {integrity: sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==} engines: {node: ^20.17.0 || >=22.9.0} npm-packlist@10.0.3: @@ -5201,8 +5091,8 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: @@ -5220,6 +5110,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} + engines: {node: '>=20'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -5228,8 +5122,8 @@ packages: resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} engines: {node: '>=20'} - ordered-binary@1.6.0: - resolution: {integrity: sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==} + ordered-binary@1.6.1: + resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -5262,8 +5156,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - pacote@21.0.3: - resolution: {integrity: sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==} + pacote@21.0.4: + resolution: {integrity: sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true @@ -5354,25 +5248,25 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - piscina@5.1.3: - resolution: {integrity: sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==} + piscina@5.1.4: + resolution: {integrity: sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==} engines: {node: '>=20.x'} - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.57.0: - resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} + playwright-core@1.58.1: + resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==} engines: {node: '>=18'} hasBin: true - playwright@1.57.0: - resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} + playwright@1.58.1: + resolution: {integrity: sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==} engines: {node: '>=18'} hasBin: true @@ -5416,8 +5310,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -5427,6 +5321,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + powershell-utils@0.1.0: + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} + engines: {node: '>=20'} + prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -5463,14 +5361,6 @@ packages: resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - proc-log@6.0.0: - resolution: {integrity: sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==} - engines: {node: ^20.17.0 || >=22.9.0} - proc-log@6.1.0: resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} engines: {node: ^20.17.0 || >=22.9.0} @@ -5499,12 +5389,8 @@ packages: pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + qs@6.14.1: + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} randombytes@2.1.0: @@ -5514,12 +5400,12 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} - raw-body@3.0.1: - resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} rc@1.2.8: @@ -5544,11 +5430,15 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} regenerate@1.4.2: @@ -5557,15 +5447,15 @@ packages: regex-parser@2.3.1: resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==} - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} hasBin: true require-directory@2.1.1: @@ -5615,13 +5505,13 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown@1.0.0-beta.47: - resolution: {integrity: sha512-Mid74GckX1OeFAOYz9KuXeWYhq3xkXbMziYIC+ULVdUzPTG9y70OBSBQDQn9hQP8u/AfhuYw1R0BSg15nBI4Dg==} + rolldown@1.0.0-beta.58: + resolution: {integrity: sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.52.3: - resolution: {integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==} + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5632,8 +5522,8 @@ packages: rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} rxjs@7.8.2: @@ -5648,8 +5538,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-loader@16.0.5: - resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} + sass-loader@16.0.6: + resolution: {integrity: sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -5669,13 +5559,14 @@ packages: webpack: optional: true - sass@1.93.2: - resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} + sass@1.97.1: + resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==} engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -5705,32 +5596,29 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + serve-index@1.9.2: + resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} engines: {node: '>= 0.8.0'} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -5855,10 +5743,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - ssri@13.0.0: resolution: {integrity: sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==} engines: {node: ^20.17.0 || >=22.9.0} @@ -5871,10 +5755,6 @@ packages: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -5899,8 +5779,8 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.1.0: - resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + string-width@8.1.1: + resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} engines: {node: '>=20'} string_decoder@1.1.1: @@ -5967,8 +5847,8 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} engines: {node: '>=18'} terser-webpack-plugin@5.3.15: @@ -6003,11 +5883,6 @@ packages: uglify-js: optional: true - terser@5.44.0: - resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} - engines: {node: '>=10'} - hasBin: true - terser@5.44.1: resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} engines: {node: '>=10'} @@ -6056,12 +5931,6 @@ packages: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} - tree-dump@1.0.3: - resolution: {integrity: sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - tree-dump@1.1.0: resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} engines: {node: '>=10.0'} @@ -6072,8 +5941,8 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -6181,8 +6050,8 @@ packages: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} - undici@7.16.0: - resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + undici@7.18.2: + resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} engines: {node: '>=20.18.1'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -6193,12 +6062,12 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} unique-filename@5.0.0: @@ -6223,8 +6092,8 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - update-browserslist-db@1.2.2: - resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -6260,16 +6129,16 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@6.0.2: - resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==} - engines: {node: ^18.17.0 || >=20.5.0} + validate-npm-package-name@7.0.2: + resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} + engines: {node: ^20.17.0 || >=22.9.0} vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@7.2.2: - resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -6319,6 +6188,14 @@ packages: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} + watchpack@2.5.0: + resolution: {integrity: sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==} + engines: {node: '>=10.13.0'} + + watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} + wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} @@ -6382,8 +6259,8 @@ packages: webpack-cli: optional: true - webpack@5.104.0: - resolution: {integrity: sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==} + webpack@5.104.1: + resolution: {integrity: sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -6403,6 +6280,7 @@ packages: whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} @@ -6417,11 +6295,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - which@6.0.0: resolution: {integrity: sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==} engines: {node: ^20.17.0 || >=22.9.0} @@ -6472,10 +6345,26 @@ packages: utf-8-validate: optional: true + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} + engines: {node: '>=20'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -6537,19 +6426,19 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} - zod-to-json-schema@3.25.0: - resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} + zod-to-json-schema@3.25.1: + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} peerDependencies: zod: ^3.25 || ^4 zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.13: - resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + zod@4.3.5: + resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} - zone.js@0.15.1: - resolution: {integrity: sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==} + zone.js@0.16.0: + resolution: {integrity: sha512-LqLPpIQANebrlxY6jKcYKdgN5DTXyyHAKnnWWjE5pPfEQ4n7j5zn7mOEEpwNZVKGqx3kKKmvplEmoBrvpgROTA==} snapshots: @@ -6579,99 +6468,99 @@ snapshots: '@actions/io@1.1.3': {} - '@algolia/abtesting@1.6.1': + '@algolia/abtesting@1.12.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/client-abtesting@5.40.1': + '@algolia/client-abtesting@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/client-analytics@5.40.1': + '@algolia/client-analytics@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/client-common@5.40.1': {} + '@algolia/client-common@5.46.2': {} - '@algolia/client-insights@5.40.1': + '@algolia/client-insights@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/client-personalization@5.40.1': + '@algolia/client-personalization@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/client-query-suggestions@5.40.1': + '@algolia/client-query-suggestions@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/client-search@5.40.1': + '@algolia/client-search@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/ingestion@1.40.1': + '@algolia/ingestion@1.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/monitoring@1.40.1': + '@algolia/monitoring@1.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/recommend@5.40.1': + '@algolia/recommend@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/client-common': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 - '@algolia/requester-browser-xhr@5.40.1': + '@algolia/requester-browser-xhr@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 + '@algolia/client-common': 5.46.2 - '@algolia/requester-fetch@5.40.1': + '@algolia/requester-fetch@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 + '@algolia/client-common': 5.46.2 - '@algolia/requester-node-http@5.40.1': + '@algolia/requester-node-http@5.46.2': dependencies: - '@algolia/client-common': 5.40.1 + '@algolia/client-common': 5.46.2 '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular-builders/common@5.0.0-beta.1(@types/node@24.10.1)(chokidar@4.0.3)(typescript@5.9.3)': + '@angular-builders/common@5.0.3(@types/node@25.2.0)(chokidar@5.0.0)(typescript@5.9.3)': dependencies: - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + ts-node: 10.9.2(@types/node@25.2.0)(typescript@5.9.3) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@swc/core' @@ -6680,15 +6569,15 @@ snapshots: - chokidar - typescript - '@angular-builders/custom-webpack@21.0.0-beta.1(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0)': + '@angular-builders/custom-webpack@21.0.3(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0)': dependencies: - '@angular-builders/common': 5.0.0-beta.1(@types/node@24.10.1)(chokidar@4.0.3)(typescript@5.9.3) - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular-devkit/build-angular': 21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(jiti@2.6.1)(typescript@5.9.3)(yaml@2.7.0) - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular/build': 21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - lodash: 4.17.21 + '@angular-builders/common': 5.0.3(@types/node@25.2.0)(chokidar@5.0.0)(typescript@5.9.3) + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) + '@angular-devkit/build-angular': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(jiti@2.6.1)(typescript@5.9.3)(yaml@2.7.0) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular/build': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) + lodash: 4.17.23 webpack-merge: 6.0.1 transitivePeerDependencies: - '@angular/compiler' @@ -6733,18 +6622,18 @@ snapshots: - webpack-cli - yaml - '@angular-builders/jest@21.0.0-beta.1(ca5e3b6566691d55c1cc0d5f364cdb5f)': + '@angular-builders/jest@21.0.3(a0ae7905abf24a540ba990aea816dd3a)': dependencies: - '@angular-builders/common': 5.0.0-beta.1(@types/node@24.10.1)(chokidar@4.0.3)(typescript@5.9.3) - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular-devkit/build-angular': 21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(jiti@2.6.1)(typescript@5.9.3)(yaml@2.7.0) - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser-dynamic': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))) - jest: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - jest-preset-angular: 16.0.0(9e65cd0423f3ecb19932f3fec7e9bb3c) - lodash: 4.17.21 + '@angular-builders/common': 5.0.3(@types/node@25.2.0)(chokidar@5.0.0)(typescript@5.9.3) + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) + '@angular-devkit/build-angular': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(jiti@2.6.1)(typescript@5.9.3)(yaml@2.7.0) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser-dynamic': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))) + jest: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) + jest-preset-angular: 16.0.0(3b6c407047314a355d5165b2c0f1d0be) + lodash: 4.17.23 transitivePeerDependencies: - '@angular/platform-browser' - '@babel/core' @@ -6759,77 +6648,77 @@ snapshots: - jsdom - typescript - '@angular-devkit/architect@0.2100.5(chokidar@4.0.3)': + '@angular-devkit/architect@0.2101.2(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) rxjs: 7.8.2 transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(jiti@2.6.1)(typescript@5.9.3)(yaml@2.7.0)': + '@angular-devkit/build-angular@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jest-environment-jsdom@30.2.0(canvas@3.0.0))(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(jiti@2.6.1)(typescript@5.9.3)(yaml@2.7.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular-devkit/build-webpack': 0.2100.5(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack@5.104.0(esbuild@0.26.0)) - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular/build': 21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.0)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - '@babel/core': 7.28.4 - '@babel/generator': 7.28.3 + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) + '@angular-devkit/build-webpack': 0.2101.2(chokidar@5.0.0)(webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.103.0))(webpack@5.104.1(esbuild@0.27.2)) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular/build': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0) + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-runtime': 7.28.3(@babel/core@7.28.4) - '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.5) + '@babel/preset-env': 7.28.5(@babel/core@7.28.5) '@babel/runtime': 7.28.4 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.104.0(esbuild@0.26.0)) + '@ngtools/webpack': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.104.1(esbuild@0.27.2)) ansi-colors: 4.1.3 - autoprefixer: 10.4.21(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.28.4)(webpack@5.104.0(esbuild@0.26.0)) + autoprefixer: 10.4.23(postcss@8.5.6) + babel-loader: 10.0.0(@babel/core@7.28.5)(webpack@5.104.1(esbuild@0.27.2)) browserslist: 4.28.1 - copy-webpack-plugin: 13.0.1(webpack@5.104.0(esbuild@0.26.0)) - css-loader: 7.1.2(webpack@5.104.0(esbuild@0.26.0)) - esbuild-wasm: 0.26.0 + copy-webpack-plugin: 13.0.1(webpack@5.104.1(esbuild@0.27.2)) + css-loader: 7.1.2(webpack@5.104.1(esbuild@0.27.2)) + esbuild-wasm: 0.27.2 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.2 - less-loader: 12.3.0(less@4.4.2)(webpack@5.104.0(esbuild@0.26.0)) - license-webpack-plugin: 4.0.2(webpack@5.104.0(esbuild@0.26.0)) + less-loader: 12.3.0(less@4.4.2)(webpack@5.104.1(esbuild@0.27.2)) + license-webpack-plugin: 4.0.2(webpack@5.104.1(esbuild@0.27.2)) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.9.4(webpack@5.104.0(esbuild@0.26.0)) - open: 10.2.0 + mini-css-extract-plugin: 2.9.4(webpack@5.104.1(esbuild@0.27.2)) + open: 11.0.0 ora: 9.0.0 picomatch: 4.0.3 - piscina: 5.1.3 + piscina: 5.1.4 postcss: 8.5.6 - postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.104.0(esbuild@0.26.0)) + postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.104.1(esbuild@0.27.2)) resolve-url-loader: 5.0.0 rxjs: 7.8.2 - sass: 1.93.2 - sass-loader: 16.0.5(sass@1.93.2)(webpack@5.104.0(esbuild@0.26.0)) + sass: 1.97.1 + sass-loader: 16.0.6(sass@1.97.1)(webpack@5.104.1(esbuild@0.27.2)) semver: 7.7.3 - source-map-loader: 5.0.0(webpack@5.104.0(esbuild@0.26.0)) + source-map-loader: 5.0.0(webpack@5.104.1(esbuild@0.27.2)) source-map-support: 0.5.21 - terser: 5.44.0 + terser: 5.44.1 tinyglobby: 0.2.15 tree-kill: 1.2.2 tslib: 2.8.1 typescript: 5.9.3 - webpack: 5.104.0(esbuild@0.26.0) - webpack-dev-middleware: 7.4.5(webpack@5.104.0(esbuild@0.26.0)) - webpack-dev-server: 5.2.2(webpack@5.104.0(esbuild@0.26.0)) + webpack: 5.104.1(esbuild@0.27.2) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.104.1(esbuild@0.27.2)) + webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.104.1(esbuild@0.27.2)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(webpack@5.104.0(esbuild@0.26.0)) + webpack-subresource-integrity: 5.1.0(webpack@5.104.1(esbuild@0.27.2)) optionalDependencies: - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/localize': 21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) - esbuild: 0.26.0 - jest: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/localize': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) + esbuild: 0.27.2 + jest: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) jest-environment-jsdom: 30.2.0(canvas@3.0.0) transitivePeerDependencies: - '@angular/compiler' @@ -6854,16 +6743,16 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-webpack@0.2100.5(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack@5.104.0(esbuild@0.26.0))': + '@angular-devkit/build-webpack@0.2101.2(chokidar@5.0.0)(webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.103.0))(webpack@5.104.1(esbuild@0.27.2))': dependencies: - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) rxjs: 7.8.2 - webpack: 5.104.0(esbuild@0.26.0) - webpack-dev-server: 5.2.2(webpack@5.103.0) + webpack: 5.104.1(esbuild@0.27.2) + webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.103.0) transitivePeerDependencies: - chokidar - '@angular-devkit/core@21.0.5(chokidar@4.0.3)': + '@angular-devkit/core@21.1.2(chokidar@5.0.0)': dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -6872,58 +6761,58 @@ snapshots: rxjs: 7.8.2 source-map: 0.7.6 optionalDependencies: - chokidar: 4.0.3 + chokidar: 5.0.0 - '@angular-devkit/schematics@21.0.5(chokidar@4.0.3)': + '@angular-devkit/schematics@21.1.2(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) jsonc-parser: 3.3.1 - magic-string: 0.30.19 + magic-string: 0.30.21 ora: 9.0.0 rxjs: 7.8.2 transitivePeerDependencies: - chokidar - '@angular-eslint/builder@21.1.0(@angular/cli@21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3))(chokidar@4.0.3)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@angular-eslint/builder@21.2.0(@angular/cli@21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3))(chokidar@5.0.0)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular/cli': 21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3) - eslint: 9.39.1(jiti@2.6.1) + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular/cli': 21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - chokidar - '@angular-eslint/bundled-angular-compiler@21.1.0': {} + '@angular-eslint/bundled-angular-compiler@21.2.0': {} - '@angular-eslint/eslint-plugin-template@21.1.0(@angular-eslint/template-parser@21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/types@8.48.1)(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@angular-eslint/eslint-plugin-template@21.2.0(@angular-eslint/template-parser@21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/types@8.54.0)(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@angular-eslint/bundled-angular-compiler': 21.1.0 - '@angular-eslint/template-parser': 21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@angular-eslint/utils': 21.1.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@angular-eslint/bundled-angular-compiler': 21.2.0 + '@angular-eslint/template-parser': 21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@angular-eslint/utils': 21.2.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) aria-query: 5.3.2 axobject-query: 4.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 - '@angular-eslint/eslint-plugin@21.1.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@angular-eslint/eslint-plugin@21.2.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@angular-eslint/bundled-angular-compiler': 21.1.0 - '@angular-eslint/utils': 21.1.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.1(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) + '@angular-eslint/bundled-angular-compiler': 21.2.0 + '@angular-eslint/utils': 21.2.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 - '@angular-eslint/schematics@21.1.0(@angular-eslint/template-parser@21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@angular/cli@21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3))(@typescript-eslint/types@8.48.1)(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(chokidar@4.0.3)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@angular-eslint/schematics@21.2.0(@angular-eslint/template-parser@21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@angular/cli@21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3))(@typescript-eslint/types@8.54.0)(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(chokidar@5.0.0)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular-devkit/schematics': 21.0.5(chokidar@4.0.3) - '@angular-eslint/eslint-plugin': 21.1.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@angular-eslint/eslint-plugin-template': 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/types@8.48.1)(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@angular/cli': 21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.1.2(chokidar@5.0.0) + '@angular-eslint/eslint-plugin': 21.2.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@angular-eslint/eslint-plugin-template': 21.2.0(@angular-eslint/template-parser@21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/types@8.54.0)(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@angular/cli': 21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3) ignore: 7.0.5 semver: 7.7.3 strip-json-comments: 3.1.1 @@ -6935,59 +6824,59 @@ snapshots: - eslint - typescript - '@angular-eslint/template-parser@21.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@angular-eslint/template-parser@21.2.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@angular-eslint/bundled-angular-compiler': 21.1.0 - eslint: 9.39.1(jiti@2.6.1) - eslint-scope: 9.0.0 + '@angular-eslint/bundled-angular-compiler': 21.2.0 + eslint: 9.39.2(jiti@2.6.1) + eslint-scope: 9.1.0 typescript: 5.9.3 - '@angular-eslint/utils@21.1.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@angular-eslint/utils@21.2.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@angular-eslint/bundled-angular-compiler': 21.1.0 - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.1(jiti@2.6.1) + '@angular-eslint/bundled-angular-compiler': 21.2.0 + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 - '@angular/build@21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.0)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0)': + '@angular/build@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(@types/node@25.2.0)(chokidar@5.0.0)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular/compiler': 21.0.8 - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - '@babel/core': 7.28.4 + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) + '@angular/compiler': 21.1.2 + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.19(@types/node@24.10.1) - '@vitejs/plugin-basic-ssl': 2.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.7.0)) + '@inquirer/confirm': 5.1.21(@types/node@25.2.0) + '@vitejs/plugin-basic-ssl': 2.1.0(vite@7.3.0(@types/node@25.2.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.7.0)) beasties: 0.3.5 browserslist: 4.28.1 - esbuild: 0.26.0 + esbuild: 0.27.2 https-proxy-agent: 7.0.6 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 listr2: 9.0.5 - magic-string: 0.30.19 + magic-string: 0.30.21 mrmime: 2.0.1 parse5-html-rewriting-stream: 8.0.0 picomatch: 4.0.3 - piscina: 5.1.3 - rolldown: 1.0.0-beta.47 - sass: 1.93.2 + piscina: 5.1.4 + rolldown: 1.0.0-beta.58 + sass: 1.97.1 semver: 7.7.3 source-map-support: 0.5.21 tinyglobby: 0.2.15 tslib: 2.8.1 typescript: 5.9.3 - undici: 7.16.0 - vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.0) - watchpack: 2.4.4 + undici: 7.18.2 + vite: 7.3.0(@types/node@25.2.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.7.0) + watchpack: 2.5.0 optionalDependencies: - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/localize': 21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/localize': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) less: 4.4.2 - lmdb: 3.4.3 + lmdb: 3.4.4 postcss: 8.5.6 transitivePeerDependencies: - '@types/node' @@ -7002,88 +6891,36 @@ snapshots: - tsx - yaml - '@angular/build@21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.10.1)(chokidar@4.0.3)(jiti@2.6.1)(less@4.4.2)(postcss@8.5.6)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(yaml@2.7.0)': + '@angular/cdk@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular/compiler': 21.0.8 - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.19(@types/node@24.10.1) - '@vitejs/plugin-basic-ssl': 2.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.7.0)) - beasties: 0.3.5 - browserslist: 4.28.1 - esbuild: 0.26.0 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.19 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.3 - piscina: 5.1.3 - rolldown: 1.0.0-beta.47 - sass: 1.93.2 - semver: 7.7.3 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 5.9.3 - undici: 7.16.0 - vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.7.0) - watchpack: 2.4.4 - optionalDependencies: - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/localize': 21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) - less: 4.4.2 - lmdb: 3.4.3 - postcss: 8.5.6 - transitivePeerDependencies: - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - '@angular/cdk@21.0.6(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)': - dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/cli@21.0.5(@types/node@24.10.1)(chokidar@4.0.3)(hono@4.11.3)': + '@angular/cli@21.1.2(@types/node@25.2.0)(chokidar@5.0.0)(hono@4.11.3)': dependencies: - '@angular-devkit/architect': 0.2100.5(chokidar@4.0.3) - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular-devkit/schematics': 21.0.5(chokidar@4.0.3) - '@inquirer/prompts': 7.9.0(@types/node@24.10.1) - '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.9.0(@types/node@24.10.1))(@types/node@24.10.1)(listr2@9.0.5) - '@modelcontextprotocol/sdk': 1.25.2(hono@4.11.3)(zod@4.1.13) - '@schematics/angular': 21.0.5(chokidar@4.0.3) + '@angular-devkit/architect': 0.2101.2(chokidar@5.0.0) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.1.2(chokidar@5.0.0) + '@inquirer/prompts': 7.10.1(@types/node@25.2.0) + '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.10.1(@types/node@25.2.0))(@types/node@25.2.0)(listr2@9.0.5) + '@modelcontextprotocol/sdk': 1.25.2(hono@4.11.3)(zod@4.3.5) + '@schematics/angular': 21.1.2(chokidar@5.0.0) '@yarnpkg/lockfile': 1.1.0 - algoliasearch: 5.40.1 - ini: 5.0.0 + algoliasearch: 5.46.2 + ini: 6.0.0 jsonc-parser: 3.3.1 listr2: 9.0.5 - npm-package-arg: 13.0.1 - pacote: 21.0.3 + npm-package-arg: 13.0.2 + pacote: 21.0.4 parse5-html-rewriting-stream: 8.0.0 resolve: 1.22.11 semver: 7.7.3 yargs: 18.0.0 - zod: 4.1.13 + zod: 4.3.5 transitivePeerDependencies: - '@cfworker/json-schema' - '@types/node' @@ -7091,18 +6928,18 @@ snapshots: - hono - supports-color - '@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)': + '@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3)': + '@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3)': dependencies: - '@angular/compiler': 21.0.8 - '@babel/core': 7.28.4 + '@angular/compiler': 21.1.2 + '@babel/core': 7.28.5 '@jridgewell/sourcemap-codec': 1.5.5 - chokidar: 4.0.3 + chokidar: 5.0.0 convert-source-map: 1.9.0 reflect-metadata: 0.2.2 semver: 7.7.3 @@ -7113,57 +6950,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@21.0.8': + '@angular/compiler@21.1.2': dependencies: tslib: 2.8.1 - '@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)': + '@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 21.0.8 - zone.js: 0.15.1 + '@angular/compiler': 21.1.2 + zone.js: 0.16.0 - '@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': + '@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8)': + '@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2)': dependencies: - '@angular/compiler': 21.0.8 - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - '@babel/core': 7.28.4 + '@angular/compiler': 21.1.2 + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) + '@babel/core': 7.28.5 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 yargs: 18.0.0 transitivePeerDependencies: - supports-color - '@angular/platform-browser-dynamic@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))': + '@angular/platform-browser-dynamic@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))': dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/compiler': 21.0.8 - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/compiler': 21.1.2 + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) tslib: 2.8.1 - '@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))': + '@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))': dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) tslib: 2.8.1 - '@angular/router@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': + '@angular/router@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) rxjs: 7.8.2 tslib: 2.8.1 @@ -7175,45 +7012,25 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} - - '@babel/core@7.28.4': - dependencies: - '@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/core@7.28.4) - '@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.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/compat-data@7.29.0': {} '@babel/core@7.28.5': dependencies: - '@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/core@7.28.5) - '@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 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.5) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -7223,72 +7040,79 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.3': + '@babel/core@7.29.0': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@7.28.5': + '@babel/generator@7.29.0': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 - '@babel/helper-compilation-targets@7.27.2': + '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.5 + '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.4)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.5 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.5) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.11 @@ -7297,79 +7121,72 @@ snapshots: '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 - '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/helper-wrap-function': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@babel/helper-string-parser@7.27.1': {} @@ -7377,612 +7194,612 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-wrap-function@7.27.1': + '@babel/helper-wrap-function@7.28.6': dependencies: - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.4': + '@babel/helpers@7.28.6': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 - '@babel/parser@7.28.5': + '@babel/parser@7.29.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.5) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.2 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.4)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/traverse': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.28.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.28.3(@babel/core@7.28.4)': + '@babel/preset-env@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/compat-data': 7.28.5 - '@babel/core': 7.28.4 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/compat-data': 7.29.0 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.4) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.4) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.43.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.28.5) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.28.5) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.28.5) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.28.5) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.28.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.28.5) + core-js-compat: 3.48.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 esutils: 2.0.3 '@babel/runtime@7.28.4': {} - '@babel/template@7.27.2': + '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.5': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 @@ -8032,23 +7849,12 @@ snapshots: '@discoveryjs/json-ext@0.6.3': {} - '@emnapi/core@1.5.0': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 @@ -8059,243 +7865,165 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.9': - optional: true - - '@esbuild/aix-ppc64@0.26.0': - optional: true - '@esbuild/aix-ppc64@0.27.0': optional: true - '@esbuild/android-arm64@0.25.9': - optional: true - - '@esbuild/android-arm64@0.26.0': + '@esbuild/aix-ppc64@0.27.2': optional: true '@esbuild/android-arm64@0.27.0': optional: true - '@esbuild/android-arm@0.25.9': - optional: true - - '@esbuild/android-arm@0.26.0': + '@esbuild/android-arm64@0.27.2': optional: true '@esbuild/android-arm@0.27.0': optional: true - '@esbuild/android-x64@0.25.9': - optional: true - - '@esbuild/android-x64@0.26.0': + '@esbuild/android-arm@0.27.2': optional: true '@esbuild/android-x64@0.27.0': optional: true - '@esbuild/darwin-arm64@0.25.9': - optional: true - - '@esbuild/darwin-arm64@0.26.0': + '@esbuild/android-x64@0.27.2': optional: true '@esbuild/darwin-arm64@0.27.0': optional: true - '@esbuild/darwin-x64@0.25.9': - optional: true - - '@esbuild/darwin-x64@0.26.0': + '@esbuild/darwin-arm64@0.27.2': optional: true '@esbuild/darwin-x64@0.27.0': optional: true - '@esbuild/freebsd-arm64@0.25.9': - optional: true - - '@esbuild/freebsd-arm64@0.26.0': + '@esbuild/darwin-x64@0.27.2': optional: true '@esbuild/freebsd-arm64@0.27.0': optional: true - '@esbuild/freebsd-x64@0.25.9': - optional: true - - '@esbuild/freebsd-x64@0.26.0': + '@esbuild/freebsd-arm64@0.27.2': optional: true '@esbuild/freebsd-x64@0.27.0': optional: true - '@esbuild/linux-arm64@0.25.9': - optional: true - - '@esbuild/linux-arm64@0.26.0': + '@esbuild/freebsd-x64@0.27.2': optional: true '@esbuild/linux-arm64@0.27.0': optional: true - '@esbuild/linux-arm@0.25.9': - optional: true - - '@esbuild/linux-arm@0.26.0': + '@esbuild/linux-arm64@0.27.2': optional: true '@esbuild/linux-arm@0.27.0': optional: true - '@esbuild/linux-ia32@0.25.9': - optional: true - - '@esbuild/linux-ia32@0.26.0': + '@esbuild/linux-arm@0.27.2': optional: true '@esbuild/linux-ia32@0.27.0': optional: true - '@esbuild/linux-loong64@0.25.9': - optional: true - - '@esbuild/linux-loong64@0.26.0': + '@esbuild/linux-ia32@0.27.2': optional: true '@esbuild/linux-loong64@0.27.0': optional: true - '@esbuild/linux-mips64el@0.25.9': - optional: true - - '@esbuild/linux-mips64el@0.26.0': + '@esbuild/linux-loong64@0.27.2': optional: true '@esbuild/linux-mips64el@0.27.0': optional: true - '@esbuild/linux-ppc64@0.25.9': - optional: true - - '@esbuild/linux-ppc64@0.26.0': + '@esbuild/linux-mips64el@0.27.2': optional: true '@esbuild/linux-ppc64@0.27.0': optional: true - '@esbuild/linux-riscv64@0.25.9': - optional: true - - '@esbuild/linux-riscv64@0.26.0': + '@esbuild/linux-ppc64@0.27.2': optional: true '@esbuild/linux-riscv64@0.27.0': optional: true - '@esbuild/linux-s390x@0.25.9': - optional: true - - '@esbuild/linux-s390x@0.26.0': + '@esbuild/linux-riscv64@0.27.2': optional: true '@esbuild/linux-s390x@0.27.0': optional: true - '@esbuild/linux-x64@0.25.9': - optional: true - - '@esbuild/linux-x64@0.26.0': + '@esbuild/linux-s390x@0.27.2': optional: true '@esbuild/linux-x64@0.27.0': optional: true - '@esbuild/netbsd-arm64@0.25.9': - optional: true - - '@esbuild/netbsd-arm64@0.26.0': + '@esbuild/linux-x64@0.27.2': optional: true '@esbuild/netbsd-arm64@0.27.0': optional: true - '@esbuild/netbsd-x64@0.25.9': - optional: true - - '@esbuild/netbsd-x64@0.26.0': + '@esbuild/netbsd-arm64@0.27.2': optional: true '@esbuild/netbsd-x64@0.27.0': optional: true - '@esbuild/openbsd-arm64@0.25.9': - optional: true - - '@esbuild/openbsd-arm64@0.26.0': + '@esbuild/netbsd-x64@0.27.2': optional: true '@esbuild/openbsd-arm64@0.27.0': optional: true - '@esbuild/openbsd-x64@0.25.9': - optional: true - - '@esbuild/openbsd-x64@0.26.0': + '@esbuild/openbsd-arm64@0.27.2': optional: true '@esbuild/openbsd-x64@0.27.0': optional: true - '@esbuild/openharmony-arm64@0.25.9': - optional: true - - '@esbuild/openharmony-arm64@0.26.0': + '@esbuild/openbsd-x64@0.27.2': optional: true '@esbuild/openharmony-arm64@0.27.0': optional: true - '@esbuild/sunos-x64@0.25.9': - optional: true - - '@esbuild/sunos-x64@0.26.0': + '@esbuild/openharmony-arm64@0.27.2': optional: true '@esbuild/sunos-x64@0.27.0': optional: true - '@esbuild/win32-arm64@0.25.9': - optional: true - - '@esbuild/win32-arm64@0.26.0': + '@esbuild/sunos-x64@0.27.2': optional: true '@esbuild/win32-arm64@0.27.0': optional: true - '@esbuild/win32-ia32@0.25.9': - optional: true - - '@esbuild/win32-ia32@0.26.0': + '@esbuild/win32-arm64@0.27.2': optional: true '@esbuild/win32-ia32@0.27.0': optional: true - '@esbuild/win32-x64@0.25.9': - optional: true - - '@esbuild/win32-x64@0.26.0': + '@esbuild/win32-ia32@0.27.2': optional: true '@esbuild/win32-x64@0.27.0': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': + '@esbuild/win32-x64@0.27.2': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -8316,7 +8044,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3 @@ -8330,7 +8058,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.1': {} + '@eslint/js@9.39.2': {} '@eslint/object-schema@2.1.7': {} @@ -8341,7 +8069,7 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@hono/node-server@1.19.8(hono@4.11.3)': + '@hono/node-server@1.19.9(hono@4.11.3)': dependencies: hono: 4.11.3 @@ -8358,135 +8086,128 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@24.10.1)': + '@inquirer/checkbox@4.3.2(@types/node@25.2.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@25.2.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/confirm@5.1.19(@types/node@24.10.1)': + '@inquirer/confirm@5.1.21(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/confirm@5.1.21(@types/node@24.10.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) - optionalDependencies: - '@types/node': 24.10.1 - - '@inquirer/core@10.3.2(@types/node@24.10.1)': + '@inquirer/core@10.3.2(@types/node@25.2.0)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@25.2.0) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/editor@4.2.23(@types/node@24.10.1)': + '@inquirer/editor@4.2.23(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/external-editor': 1.0.3(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/expand@4.0.23(@types/node@24.10.1)': + '@inquirer/expand@4.0.23(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/external-editor@1.0.3(@types/node@24.10.1)': + '@inquirer/external-editor@1.0.3(@types/node@25.2.0)': dependencies: chardet: 2.1.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@24.10.1)': + '@inquirer/input@4.3.1(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/number@3.0.23(@types/node@24.10.1)': + '@inquirer/number@3.0.23(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/password@4.0.23(@types/node@24.10.1)': + '@inquirer/password@4.0.23(@types/node@25.2.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/prompts@7.9.0(@types/node@24.10.1)': + '@inquirer/prompts@7.10.1(@types/node@25.2.0)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.10.1) - '@inquirer/confirm': 5.1.21(@types/node@24.10.1) - '@inquirer/editor': 4.2.23(@types/node@24.10.1) - '@inquirer/expand': 4.0.23(@types/node@24.10.1) - '@inquirer/input': 4.3.1(@types/node@24.10.1) - '@inquirer/number': 3.0.23(@types/node@24.10.1) - '@inquirer/password': 4.0.23(@types/node@24.10.1) - '@inquirer/rawlist': 4.1.11(@types/node@24.10.1) - '@inquirer/search': 3.2.2(@types/node@24.10.1) - '@inquirer/select': 4.4.2(@types/node@24.10.1) + '@inquirer/checkbox': 4.3.2(@types/node@25.2.0) + '@inquirer/confirm': 5.1.21(@types/node@25.2.0) + '@inquirer/editor': 4.2.23(@types/node@25.2.0) + '@inquirer/expand': 4.0.23(@types/node@25.2.0) + '@inquirer/input': 4.3.1(@types/node@25.2.0) + '@inquirer/number': 3.0.23(@types/node@25.2.0) + '@inquirer/password': 4.0.23(@types/node@25.2.0) + '@inquirer/rawlist': 4.1.11(@types/node@25.2.0) + '@inquirer/search': 3.2.2(@types/node@25.2.0) + '@inquirer/select': 4.4.2(@types/node@25.2.0) optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/rawlist@4.1.11(@types/node@24.10.1)': + '@inquirer/rawlist@4.1.11(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/search@3.2.2(@types/node@24.10.1)': + '@inquirer/search@3.2.2(@types/node@25.2.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@25.2.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/select@4.4.2(@types/node@24.10.1)': + '@inquirer/select@4.4.2(@types/node@25.2.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.2.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@25.2.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@inquirer/type@3.0.10(@types/node@24.10.1)': + '@inquirer/type@3.0.10(@types/node@25.2.0)': optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@isaacs/balanced-match@4.0.1': {} @@ -8520,13 +8241,13 @@ snapshots: '@jest/console@30.2.0': dependencies: '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 jest-message-util: 30.2.0 jest-util: 30.2.0 slash: 3.0.0 - '@jest/core@30.2.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))': + '@jest/core@30.2.0(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3))': dependencies: '@jest/console': 30.2.0 '@jest/pattern': 30.0.1 @@ -8534,14 +8255,14 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.3.0 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.2.0 - jest-config: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest-config: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) jest-haste-map: 30.2.0 jest-message-util: 30.2.0 jest-regex-util: 30.0.1 @@ -8570,7 +8291,7 @@ snapshots: '@jest/fake-timers': 30.2.0 '@jest/types': 30.2.0 '@types/jsdom': 21.1.7 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-mock: 30.2.0 jest-util: 30.2.0 jsdom: 26.1.0(canvas@3.0.0) @@ -8581,7 +8302,7 @@ snapshots: dependencies: '@jest/fake-timers': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-mock: 30.2.0 '@jest/expect-utils@30.0.5': @@ -8603,7 +8324,7 @@ snapshots: dependencies: '@jest/types': 30.2.0 '@sinonjs/fake-timers': 13.0.5 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-message-util: 30.2.0 jest-mock: 30.2.0 jest-util: 30.2.0 @@ -8623,7 +8344,7 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-regex-util: 30.0.1 '@jest/reporters@30.2.0': @@ -8634,7 +8355,7 @@ snapshots: '@jest/transform': 30.2.0 '@jest/types': 30.2.0 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit-x: 0.2.2 @@ -8691,7 +8412,7 @@ snapshots: '@jest/transform@30.2.0': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@jest/types': 30.2.0 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 7.0.1 @@ -8715,7 +8436,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8725,7 +8446,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8764,14 +8485,82 @@ snapshots: dependencies: tslib: 2.8.1 + '@jsonjoy.com/base64@17.65.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': dependencies: tslib: 2.8.1 + '@jsonjoy.com/buffers@17.65.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': dependencies: tslib: 2.8.1 + '@jsonjoy.com/codegen@17.65.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-core@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-fsa@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-builtins@4.56.10(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-to-fsa@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-utils@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-print@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-snapshot@4.56.10(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/json-pack': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.65.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) @@ -8784,67 +8573,90 @@ snapshots: tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/json-pack@17.65.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/buffers': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.65.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.5.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': dependencies: '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/json-pointer@17.65.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/util': 17.65.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/util@17.65.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.65.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.65.0(tslib@2.8.1) + tslib: 2.8.1 + '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.9.0(@types/node@24.10.1))(@types/node@24.10.1)(listr2@9.0.5)': + '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@25.2.0))(@types/node@25.2.0)(listr2@9.0.5)': dependencies: - '@inquirer/prompts': 7.9.0(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/prompts': 7.10.1(@types/node@25.2.0) + '@inquirer/type': 3.0.10(@types/node@25.2.0) listr2: 9.0.5 transitivePeerDependencies: - '@types/node' - '@lmdb/lmdb-darwin-arm64@3.4.3': + '@lmdb/lmdb-darwin-arm64@3.4.4': optional: true - '@lmdb/lmdb-darwin-x64@3.4.3': + '@lmdb/lmdb-darwin-x64@3.4.4': optional: true - '@lmdb/lmdb-linux-arm64@3.4.3': + '@lmdb/lmdb-linux-arm64@3.4.4': optional: true - '@lmdb/lmdb-linux-arm@3.4.3': + '@lmdb/lmdb-linux-arm@3.4.4': optional: true - '@lmdb/lmdb-linux-x64@3.4.3': + '@lmdb/lmdb-linux-x64@3.4.4': optional: true - '@lmdb/lmdb-win32-arm64@3.4.3': + '@lmdb/lmdb-win32-arm64@3.4.4': optional: true - '@lmdb/lmdb-win32-x64@3.4.3': + '@lmdb/lmdb-win32-x64@3.4.4': optional: true - '@modelcontextprotocol/sdk@1.25.2(hono@4.11.3)(zod@4.1.13)': + '@modelcontextprotocol/sdk@1.25.2(hono@4.11.3)(zod@4.3.5)': dependencies: - '@hono/node-server': 1.19.8(hono@4.11.3) + '@hono/node-server': 1.19.9(hono@4.11.3) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 - cors: 2.8.5 + cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.1(express@5.1.0) + express: 5.2.1 + express-rate-limit: 7.5.1(express@5.2.1) jose: 6.1.3 json-schema-typed: 8.0.2 - pkce-challenge: 5.0.0 - raw-body: 3.0.1 - zod: 4.1.13 - zod-to-json-schema: 3.25.0(zod@4.1.13) + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.5 + zod-to-json-schema: 3.25.1(zod@4.3.5) transitivePeerDependencies: - hono - supports-color @@ -8941,8 +8753,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -8953,44 +8765,44 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@ng-bootstrap/ng-bootstrap@20.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@popperjs/core@2.11.8)(rxjs@7.8.2)': + '@ng-bootstrap/ng-bootstrap@20.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@popperjs/core@2.11.8)(rxjs@7.8.2)': dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/forms': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) - '@angular/localize': 21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/forms': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + '@angular/localize': 21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2) '@popperjs/core': 2.11.8 rxjs: 7.8.2 tslib: 2.8.1 - '@ng-select/ng-select@21.1.4(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))': + '@ng-select/ng-select@21.2.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))': dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/forms': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/forms': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) tslib: 2.8.1 - ? '@ngneat/dirty-check-forms@3.0.3(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/router@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(lodash-es@4.17.21)(rxjs@7.8.2)' + ? '@ngneat/dirty-check-forms@3.0.3(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(@angular/router@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(lodash-es@4.17.21)(rxjs@7.8.2)' : dependencies: - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/forms': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) - '@angular/router': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/forms': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + '@angular/router': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) lodash-es: 4.17.21 rxjs: 7.8.2 tslib: 2.8.1 - '@ngtools/webpack@21.0.5(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.104.0(esbuild@0.26.0))': + '@ngtools/webpack@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.104.1(esbuild@0.27.2))': dependencies: - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) typescript: 5.9.3 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) '@npmcli/agent@4.0.0': dependencies: agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - lru-cache: 11.2.2 + lru-cache: 11.2.5 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -9003,17 +8815,17 @@ snapshots: dependencies: '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.2.2 + lru-cache: 11.2.5 npm-pick-manifest: 11.0.3 - proc-log: 6.0.0 + proc-log: 6.1.0 promise-retry: 2.0.1 semver: 7.7.3 which: 6.0.0 - '@npmcli/installed-package-contents@3.0.0': + '@npmcli/installed-package-contents@4.0.0': dependencies: - npm-bundled: 4.0.0 - npm-normalize-package-bin: 4.0.0 + npm-bundled: 5.0.0 + npm-normalize-package-bin: 5.0.0 '@npmcli/node-gyp@5.0.0': {} @@ -9023,14 +8835,10 @@ snapshots: glob: 13.0.0 hosted-git-info: 9.0.2 json-parse-even-better-errors: 5.0.0 - proc-log: 6.0.0 + proc-log: 6.1.0 semver: 7.7.3 validate-npm-package-license: 3.0.4 - '@npmcli/promise-spawn@8.0.3': - dependencies: - which: 5.0.0 - '@npmcli/promise-spawn@9.0.1': dependencies: which: 6.0.0 @@ -9042,8 +8850,8 @@ snapshots: '@npmcli/node-gyp': 5.0.0 '@npmcli/package-json': 7.0.4 '@npmcli/promise-spawn': 9.0.1 - node-gyp: 12.1.0 - proc-log: 6.0.0 + node-gyp: 12.2.0 + proc-log: 6.1.0 which: 6.0.0 transitivePeerDependencies: - supports-color @@ -9106,67 +8914,67 @@ snapshots: dependencies: '@octokit/openapi-types': 24.2.0 - '@oxc-project/types@0.96.0': {} + '@oxc-project/types@0.106.0': {} - '@parcel/watcher-android-arm64@2.5.1': + '@parcel/watcher-android-arm64@2.5.6': optional: true - '@parcel/watcher-darwin-arm64@2.5.1': + '@parcel/watcher-darwin-arm64@2.5.6': optional: true - '@parcel/watcher-darwin-x64@2.5.1': + '@parcel/watcher-darwin-x64@2.5.6': optional: true - '@parcel/watcher-freebsd-x64@2.5.1': + '@parcel/watcher-freebsd-x64@2.5.6': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.1': + '@parcel/watcher-linux-arm-glibc@2.5.6': optional: true - '@parcel/watcher-linux-arm-musl@2.5.1': + '@parcel/watcher-linux-arm-musl@2.5.6': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.1': + '@parcel/watcher-linux-arm64-glibc@2.5.6': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.1': + '@parcel/watcher-linux-arm64-musl@2.5.6': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.1': + '@parcel/watcher-linux-x64-glibc@2.5.6': optional: true - '@parcel/watcher-linux-x64-musl@2.5.1': + '@parcel/watcher-linux-x64-musl@2.5.6': optional: true - '@parcel/watcher-win32-arm64@2.5.1': + '@parcel/watcher-win32-arm64@2.5.6': optional: true - '@parcel/watcher-win32-ia32@2.5.1': + '@parcel/watcher-win32-ia32@2.5.6': optional: true - '@parcel/watcher-win32-x64@2.5.1': + '@parcel/watcher-win32-x64@2.5.6': optional: true - '@parcel/watcher@2.5.1': + '@parcel/watcher@2.5.6': dependencies: - detect-libc: 1.0.3 + detect-libc: 2.1.2 is-glob: 4.0.3 - micromatch: 4.0.8 node-addon-api: 7.1.1 + picomatch: 4.0.3 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 optional: true '@pkgjs/parseargs@0.11.0': @@ -9174,128 +8982,134 @@ snapshots: '@pkgr/core@0.2.9': {} - '@playwright/test@1.57.0': + '@playwright/test@1.58.1': dependencies: - playwright: 1.57.0 + playwright: 1.58.1 '@popperjs/core@2.11.8': {} - '@rolldown/binding-android-arm64@1.0.0-beta.47': + '@rolldown/binding-android-arm64@1.0.0-beta.58': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.47': + '@rolldown/binding-darwin-arm64@1.0.0-beta.58': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.47': + '@rolldown/binding-darwin-x64@1.0.0-beta.58': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.47': + '@rolldown/binding-freebsd-x64@1.0.0-beta.58': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.47': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.47': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.47': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.47': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.47': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.47': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.47': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.47': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.47': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.47': + '@rolldown/pluginutils@1.0.0-beta.58': {} + + '@rollup/rollup-android-arm-eabi@4.57.1': optional: true - '@rolldown/pluginutils@1.0.0-beta.47': {} - - '@rollup/rollup-android-arm-eabi@4.52.3': + '@rollup/rollup-android-arm64@4.57.1': optional: true - '@rollup/rollup-android-arm64@4.52.3': + '@rollup/rollup-darwin-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-arm64@4.52.3': + '@rollup/rollup-darwin-x64@4.57.1': optional: true - '@rollup/rollup-darwin-x64@4.52.3': + '@rollup/rollup-freebsd-arm64@4.57.1': optional: true - '@rollup/rollup-freebsd-arm64@4.52.3': + '@rollup/rollup-freebsd-x64@4.57.1': optional: true - '@rollup/rollup-freebsd-x64@4.52.3': + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.3': + '@rollup/rollup-linux-arm-musleabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.3': + '@rollup/rollup-linux-arm64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.3': + '@rollup/rollup-linux-arm64-musl@4.57.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.3': + '@rollup/rollup-linux-loong64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.3': + '@rollup/rollup-linux-loong64-musl@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.3': + '@rollup/rollup-linux-ppc64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.3': + '@rollup/rollup-linux-ppc64-musl@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.3': + '@rollup/rollup-linux-riscv64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.3': + '@rollup/rollup-linux-riscv64-musl@4.57.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.3': + '@rollup/rollup-linux-s390x-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-musl@4.52.3': + '@rollup/rollup-linux-x64-gnu@4.57.1': optional: true - '@rollup/rollup-openharmony-arm64@4.52.3': + '@rollup/rollup-linux-x64-musl@4.57.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.3': + '@rollup/rollup-openbsd-x64@4.57.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.3': + '@rollup/rollup-openharmony-arm64@4.57.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.3': + '@rollup/rollup-win32-arm64-msvc@4.57.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.3': + '@rollup/rollup-win32-ia32-msvc@4.57.1': optional: true - '@schematics/angular@21.0.5(chokidar@4.0.3)': + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@schematics/angular@21.1.2(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 21.0.5(chokidar@4.0.3) - '@angular-devkit/schematics': 21.0.5(chokidar@4.0.3) + '@angular-devkit/core': 21.1.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.1.2(chokidar@5.0.0) jsonc-parser: 3.3.1 transitivePeerDependencies: - chokidar @@ -9368,42 +9182,42 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 5.0.6 - '@types/node': 24.10.1 + '@types/express-serve-static-core': 4.19.8 + '@types/node': 25.2.0 '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/eslint-scope@3.7.7': dependencies: @@ -9415,34 +9229,29 @@ snapshots: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.8': {} - '@types/express-serve-static-core@4.19.6': + '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.5 + '@types/send': 1.2.1 - '@types/express-serve-static-core@5.0.6': - dependencies: - '@types/node': 24.10.1 - '@types/qs': 6.14.0 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.5 - - '@types/express@4.17.23': + '@types/express@4.17.25': dependencies: '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.6 + '@types/express-serve-static-core': 4.19.8 '@types/qs': 6.14.0 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/http-errors@2.0.5': {} - '@types/http-proxy@1.17.16': + '@types/http-proxy@1.17.17': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -9461,7 +9270,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -9469,11 +9278,11 @@ snapshots: '@types/mime@1.3.5': {} - '@types/node-forge@1.3.11': + '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 - '@types/node@24.10.1': + '@types/node@25.2.0': dependencies: undici-types: 7.16.0 @@ -9483,24 +9292,28 @@ snapshots: '@types/retry@0.12.2': {} - '@types/send@0.17.5': + '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.1 + '@types/node': 25.2.0 + + '@types/send@1.2.1': + dependencies: + '@types/node': 25.2.0 '@types/serve-index@1.9.4': dependencies: - '@types/express': 4.17.23 + '@types/express': 4.17.25 - '@types/serve-static@1.15.8': + '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.10.1 - '@types/send': 0.17.5 + '@types/node': 25.2.0 + '@types/send': 0.17.6 '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/stack-utils@2.0.3': {} @@ -9508,7 +9321,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@types/yargs-parser@21.0.3': {} @@ -9516,96 +9329,95 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.48.1 - eslint: 9.39.1(jiti@2.6.1) - graphemer: 1.4.0 + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.54.0 + eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.54.0 debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.48.1': + '@typescript-eslint/scope-manager@8.54.0': dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/visitor-keys': 8.54.0 - '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.48.1': {} + '@typescript-eslint/types@8.54.0': {} - '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/visitor-keys': 8.54.0 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - eslint: 9.39.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.48.1': + '@typescript-eslint/visitor-keys@8.54.0': dependencies: - '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/types': 8.54.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -9669,9 +9481,9 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-basic-ssl@2.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.7.0))': + '@vitejs/plugin-basic-ssl@2.1.0(vite@7.3.0(@types/node@25.2.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.7.0))': dependencies: - vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.7.0) + vite: 7.3.0(@types/node@25.2.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.7.0) '@webassemblyjs/ast@1.14.1': dependencies: @@ -9815,22 +9627,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.40.1: + algoliasearch@5.46.2: dependencies: - '@algolia/abtesting': 1.6.1 - '@algolia/client-abtesting': 5.40.1 - '@algolia/client-analytics': 5.40.1 - '@algolia/client-common': 5.40.1 - '@algolia/client-insights': 5.40.1 - '@algolia/client-personalization': 5.40.1 - '@algolia/client-query-suggestions': 5.40.1 - '@algolia/client-search': 5.40.1 - '@algolia/ingestion': 1.40.1 - '@algolia/monitoring': 1.40.1 - '@algolia/recommend': 5.40.1 - '@algolia/requester-browser-xhr': 5.40.1 - '@algolia/requester-fetch': 5.40.1 - '@algolia/requester-node-http': 5.40.1 + '@algolia/abtesting': 1.12.2 + '@algolia/client-abtesting': 5.46.2 + '@algolia/client-analytics': 5.46.2 + '@algolia/client-common': 5.46.2 + '@algolia/client-insights': 5.46.2 + '@algolia/client-personalization': 5.46.2 + '@algolia/client-query-suggestions': 5.46.2 + '@algolia/client-search': 5.46.2 + '@algolia/ingestion': 1.46.2 + '@algolia/monitoring': 1.46.2 + '@algolia/recommend': 5.46.2 + '@algolia/requester-browser-xhr': 5.46.2 + '@algolia/requester-fetch': 5.46.2 + '@algolia/requester-node-http': 5.46.2 ansi-colors@4.1.3: {} @@ -9873,40 +9685,39 @@ snapshots: array-flatten@1.1.1: {} - autoprefixer@10.4.21(postcss@8.5.6): + autoprefixer@10.4.23(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001759 - fraction.js: 4.3.7 - normalize-range: 0.1.2 + caniuse-lite: 1.0.30001766 + fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 postcss-value-parser: 4.2.0 axobject-query@4.1.0: {} - babel-jest@30.2.0(@babel/core@7.28.5): + babel-jest@30.2.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@jest/transform': 30.2.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.2.0(@babel/core@7.28.5) + babel-preset-jest: 30.2.0(@babel/core@7.29.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.104.0(esbuild@0.26.0)): + babel-loader@10.0.0(@babel/core@7.28.5)(webpack@5.104.1(esbuild@0.27.2)): dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 find-up: 5.0.0 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) babel-plugin-istanbul@7.0.1: dependencies: - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 6.0.3 @@ -9918,61 +9729,61 @@ snapshots: dependencies: '@types/babel__core': 7.20.5 - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): + babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.28.5): dependencies: - '@babel/compat-data': 7.28.5 - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/compat-data': 7.29.0 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.43.0 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.5) + core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): + babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) - babel-preset-jest@30.2.0(@babel/core@7.28.5): + babel-preset-jest@30.2.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 babel-plugin-jest-hoist: 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) balanced-match@1.0.2: {} base64-js@1.5.1: optional: true - baseline-browser-mapping@2.9.4: {} + baseline-browser-mapping@2.9.19: {} batch@0.6.1: {} @@ -9982,7 +9793,7 @@ snapshots: css-what: 7.0.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - htmlparser2: 10.0.0 + htmlparser2: 10.1.0 picocolors: 1.1.1 postcss: 8.5.6 postcss-media-query-parser: 0.2.3 @@ -10000,33 +9811,33 @@ snapshots: readable-stream: 3.6.2 optional: true - body-parser@1.20.3: + body-parser@1.20.4: dependencies: 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 + http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 + qs: 6.14.1 + raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: - supports-color - body-parser@2.2.0: + body-parser@2.2.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 debug: 4.4.3 - http-errors: 2.0.0 - iconv-lite: 0.6.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.1 + qs: 6.14.1 + raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: - supports-color @@ -10057,11 +9868,11 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.4 - caniuse-lite: 1.0.30001759 - electron-to-chromium: 1.5.266 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001766 + electron-to-chromium: 1.5.283 node-releases: 2.0.27 - update-browserslist-db: 1.2.2(browserslist@4.28.1) + update-browserslist-db: 1.2.3(browserslist@4.28.1) bs-logger@0.2.6: dependencies: @@ -10081,7 +9892,7 @@ snapshots: bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 bytes@3.1.2: {} @@ -10090,7 +9901,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.0 - lru-cache: 11.2.2 + lru-cache: 11.2.5 minipass: 7.1.2 minipass-collect: 2.0.1 minipass-flush: 1.0.5 @@ -10115,7 +9926,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001759: {} + caniuse-lite@1.0.30001766: {} canvas@3.0.0: dependencies: @@ -10151,6 +9962,10 @@ snapshots: dependencies: readdirp: 4.1.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + chownr@1.1.4: optional: true @@ -10168,12 +9983,12 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-spinners@3.3.0: {} + cli-spinners@3.4.0: {} cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 - string-width: 8.1.0 + string-width: 8.1.1 cli-width@4.1.0: {} @@ -10213,13 +10028,13 @@ snapshots: dependencies: mime-db: 1.54.0 - compression@1.8.0: + compression@1.8.1: dependencies: bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 negotiator: 0.6.4 - on-headers: 1.0.2 + on-headers: 1.1.0 safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: @@ -10233,9 +10048,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 + content-disposition@1.0.1: {} content-type@1.0.5: {} @@ -10243,34 +10056,32 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} + cookie-signature@1.0.7: {} cookie-signature@1.2.2: {} - cookie@0.7.1: {} - cookie@0.7.2: {} copy-anything@2.0.6: dependencies: is-what: 3.14.1 - copy-webpack-plugin@13.0.1(webpack@5.104.0(esbuild@0.26.0)): + copy-webpack-plugin@13.0.1(webpack@5.104.1(esbuild@0.27.2)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 6.0.2 tinyglobby: 0.2.15 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) - core-js-compat@3.43.0: + core-js-compat@3.48.0: dependencies: browserslist: 4.28.1 core-util-is@1.0.3: {} - cors@2.8.5: + cors@2.8.6: dependencies: object-assign: 4.1.1 vary: 1.1.2 @@ -10292,7 +10103,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.2(webpack@5.104.0(esbuild@0.26.0)): + css-loader@7.1.2(webpack@5.104.1(esbuild@0.27.2)): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -10303,7 +10114,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.3 optionalDependencies: - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) css-select@6.0.0: dependencies: @@ -10356,12 +10167,12 @@ snapshots: deepmerge@4.3.1: {} - default-browser-id@5.0.0: {} + default-browser-id@5.0.1: {} - default-browser@5.2.1: + default-browser@5.4.0: dependencies: bundle-name: 4.1.0 - default-browser-id: 5.0.0 + default-browser-id: 5.0.1 define-lazy-prop@3.0.0: {} @@ -10373,9 +10184,6 @@ snapshots: destroy@1.2.0: {} - detect-libc@1.0.3: - optional: true - detect-libc@2.1.2: optional: true @@ -10419,7 +10227,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.266: {} + electron-to-chromium@1.5.283: {} emittery@0.13.1: {} @@ -10431,8 +10239,6 @@ snapshots: emojis-list@3.0.0: {} - encodeurl@1.0.2: {} - encodeurl@2.0.0: {} encoding@0.1.13: @@ -10450,10 +10256,17 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.0 + enhanced-resolve@5.18.4: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + entities@4.5.0: {} entities@6.0.1: {} + entities@7.0.1: {} + env-paths@2.2.1: {} environment@1.1.0: {} @@ -10481,67 +10294,9 @@ snapshots: dependencies: es-errors: 1.3.0 - esbuild-wasm@0.26.0: {} - esbuild-wasm@0.27.0: {} - esbuild@0.25.9: - optionalDependencies: - '@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.26.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.26.0 - '@esbuild/android-arm': 0.26.0 - '@esbuild/android-arm64': 0.26.0 - '@esbuild/android-x64': 0.26.0 - '@esbuild/darwin-arm64': 0.26.0 - '@esbuild/darwin-x64': 0.26.0 - '@esbuild/freebsd-arm64': 0.26.0 - '@esbuild/freebsd-x64': 0.26.0 - '@esbuild/linux-arm': 0.26.0 - '@esbuild/linux-arm64': 0.26.0 - '@esbuild/linux-ia32': 0.26.0 - '@esbuild/linux-loong64': 0.26.0 - '@esbuild/linux-mips64el': 0.26.0 - '@esbuild/linux-ppc64': 0.26.0 - '@esbuild/linux-riscv64': 0.26.0 - '@esbuild/linux-s390x': 0.26.0 - '@esbuild/linux-x64': 0.26.0 - '@esbuild/netbsd-arm64': 0.26.0 - '@esbuild/netbsd-x64': 0.26.0 - '@esbuild/openbsd-arm64': 0.26.0 - '@esbuild/openbsd-x64': 0.26.0 - '@esbuild/openharmony-arm64': 0.26.0 - '@esbuild/sunos-x64': 0.26.0 - '@esbuild/win32-arm64': 0.26.0 - '@esbuild/win32-ia32': 0.26.0 - '@esbuild/win32-x64': 0.26.0 + esbuild-wasm@0.27.2: {} esbuild@0.27.0: optionalDependencies: @@ -10573,6 +10328,35 @@ snapshots: '@esbuild/win32-x64': 0.27.0 optional: true + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -10591,8 +10375,10 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@9.0.0: + eslint-scope@9.1.0: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -10600,15 +10386,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.1(jiti@2.6.1): + eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.1 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -10622,7 +10408,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -10649,7 +10435,7 @@ snapshots: esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -10667,7 +10453,7 @@ snapshots: eventemitter3@4.0.7: {} - eventemitter3@5.0.1: {} + eventemitter3@5.0.4: {} events@3.3.0: {} @@ -10714,72 +10500,73 @@ snapshots: exponential-backoff@3.1.3: {} - express-rate-limit@7.5.1(express@5.1.0): + express-rate-limit@7.5.1(express@5.2.1): dependencies: - express: 5.1.0 + express: 5.2.1 - express@4.21.2: + express@4.22.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.3 + body-parser: 1.20.4 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 + cookie: 0.7.2 + cookie-signature: 1.0.7 debug: 2.6.9 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 + finalhandler: 1.3.2 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.13.0 + qs: 6.14.1 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + send: 0.19.2 + serve-static: 1.16.3 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: - supports-color - express@5.1.0: + express@5.2.1: dependencies: accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 + body-parser: 2.2.2 + content-disposition: 1.0.1 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 debug: 4.4.3 + depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.0 + finalhandler: 2.1.1 fresh: 2.0.0 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 2.0.0 mime-types: 3.0.2 on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.14.0 + qs: 6.14.1 range-parser: 1.2.1 router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 @@ -10816,19 +10603,19 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.1: + finalhandler@1.3.2: dependencies: debug: 2.6.9 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 unpipe: 1.0.0 transitivePeerDependencies: - supports-color - finalhandler@2.1.0: + finalhandler@2.1.1: dependencies: debug: 4.4.3 encodeurl: 2.0.0 @@ -10858,7 +10645,7 @@ snapshots: flatted@3.3.3: {} - follow-redirects@1.15.9(debug@4.4.3): + follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: debug: 4.4.3 @@ -10869,7 +10656,7 @@ snapshots: forwarded@0.2.0: {} - fraction.js@4.3.7: {} + fraction.js@5.3.4: {} fresh@0.5.2: {} @@ -10967,8 +10754,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - handle-thing@2.0.1: {} handlebars@4.7.8: @@ -10992,7 +10777,7 @@ snapshots: hosted-git-info@9.0.2: dependencies: - lru-cache: 11.2.2 + lru-cache: 11.2.5 hpack.js@2.1.6: dependencies: @@ -11007,30 +10792,31 @@ snapshots: html-escaper@2.0.2: {} - htmlparser2@10.0.0: + htmlparser2@10.1.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 - entities: 6.0.1 + entities: 7.0.1 http-cache-semantics@4.2.0: {} http-deceiver@1.2.7: {} - http-errors@1.6.3: + http-errors@1.8.1: dependencies: depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 statuses: 1.5.0 + toidentifier: 1.0.1 - http-errors@2.0.0: + http-errors@2.0.1: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 toidentifier: 1.0.1 http-parser-js@0.5.10: {} @@ -11042,21 +10828,21 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.23): + http-proxy-middleware@2.0.9(@types/express@4.17.25): dependencies: - '@types/http-proxy': 1.17.16 + '@types/http-proxy': 1.17.17 http-proxy: 1.18.1(debug@4.4.3) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 optionalDependencies: - '@types/express': 4.17.23 + '@types/express': 4.17.25 transitivePeerDependencies: - debug http-proxy-middleware@3.0.5: dependencies: - '@types/http-proxy': 1.17.16 + '@types/http-proxy': 1.17.17 debug: 4.4.3 http-proxy: 1.18.1(debug@4.4.3) is-glob: 4.0.3 @@ -11068,7 +10854,7 @@ snapshots: http-proxy@1.18.1(debug@4.4.3): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.3) + follow-redirects: 1.15.11(debug@4.4.3) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -11092,7 +10878,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.7.0: + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -11133,22 +10919,18 @@ snapshots: once: 1.4.0 wrappy: 1.0.2 - inherits@2.0.3: {} - inherits@2.0.4: {} ini@1.3.8: optional: true - ini@5.0.0: {} - ini@6.0.0: {} ip-address@10.1.0: {} ipaddr.js@1.9.1: {} - ipaddr.js@2.2.0: {} + ipaddr.js@2.3.0: {} is-arrayish@0.2.1: {} @@ -11176,13 +10958,15 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-in-ssh@1.0.0: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 is-interactive@2.0.0: {} - is-network-error@1.1.0: {} + is-network-error@1.3.0: {} is-number@7.0.0: {} @@ -11221,7 +11005,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.3 @@ -11265,7 +11049,7 @@ snapshots: '@jest/expect': 30.2.0 '@jest/test-result': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.0 @@ -11285,15 +11069,15 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): + jest-cli@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)): dependencies: - '@jest/core': 30.2.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + '@jest/core': 30.2.0(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) '@jest/test-result': 30.2.0 '@jest/types': 30.2.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest-config: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) jest-util: 30.2.0 jest-validate: 30.2.0 yargs: 17.7.2 @@ -11304,14 +11088,14 @@ snapshots: - supports-color - ts-node - jest-config@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): + jest-config@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 '@jest/pattern': 30.0.1 '@jest/test-sequencer': 30.2.0 '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) + babel-jest: 30.2.0(@babel/core@7.29.0) chalk: 4.1.2 ci-info: 4.3.0 deepmerge: 4.3.1 @@ -11331,8 +11115,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 24.10.1 - ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) + '@types/node': 25.2.0 + ts-node: 10.9.2(@types/node@25.2.0)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11375,7 +11159,7 @@ snapshots: '@jest/environment': 30.2.0 '@jest/environment-jsdom-abstract': 30.2.0(canvas@3.0.0)(jsdom@26.1.0(canvas@3.0.0)) '@types/jsdom': 21.1.7 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jsdom: 26.1.0(canvas@3.0.0) optionalDependencies: canvas: 3.0.0 @@ -11389,7 +11173,7 @@ snapshots: '@jest/environment': 30.2.0 '@jest/fake-timers': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-mock: 30.2.0 jest-util: 30.2.0 jest-validate: 30.2.0 @@ -11399,7 +11183,7 @@ snapshots: jest-haste-map@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11439,7 +11223,7 @@ snapshots: jest-message-util@30.0.5: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 '@jest/types': 30.0.5 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -11451,7 +11235,7 @@ snapshots: jest-message-util@30.2.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 '@jest/types': 30.2.0 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -11464,33 +11248,33 @@ snapshots: jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-util: 30.0.5 jest-mock@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 jest-util: 30.2.0 jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): optionalDependencies: jest-resolve: 30.2.0 - jest-preset-angular@16.0.0(9e65cd0423f3ecb19932f3fec7e9bb3c): + jest-preset-angular@16.0.0(3b6c407047314a355d5165b2c0f1d0be): dependencies: - '@angular/compiler-cli': 21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)) - '@angular/platform-browser-dynamic': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@21.0.8)(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))) + '@angular/compiler-cli': 21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/platform-browser-dynamic': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.1.2)(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))) '@jest/environment-jsdom-abstract': 30.2.0(canvas@3.0.0)(jsdom@26.1.0(canvas@3.0.0)) bs-logger: 0.2.6 esbuild-wasm: 0.27.0 - jest: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) jest-util: 30.2.0 jsdom: 26.1.0(canvas@3.0.0) pretty-format: 30.2.0 - ts-jest: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3) + ts-jest: 29.4.5(@babel/core@7.29.0)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(typescript@5.9.3) typescript: 5.9.3 optionalDependencies: esbuild: 0.27.0 @@ -11528,7 +11312,7 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -11557,7 +11341,7 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 cjs-module-lexer: 2.1.0 collect-v8-coverage: 1.0.2 @@ -11577,17 +11361,17 @@ snapshots: jest-snapshot@30.2.0: dependencies: - '@babel/core': 7.28.5 - '@babel/generator': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.5 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.0 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) + '@babel/types': 7.29.0 '@jest/expect-utils': 30.2.0 '@jest/get-type': 30.1.0 '@jest/snapshot-utils': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) chalk: 4.1.2 expect: 30.2.0 graceful-fs: 4.2.11 @@ -11604,7 +11388,7 @@ snapshots: jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 ci-info: 4.3.1 graceful-fs: 4.2.11 @@ -11613,7 +11397,7 @@ snapshots: jest-util@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 chalk: 4.1.2 ci-info: 4.3.1 graceful-fs: 4.2.11 @@ -11632,7 +11416,7 @@ snapshots: dependencies: '@jest/test-result': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.10.1 + '@types/node': 25.2.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11646,24 +11430,24 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@30.2.0: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 '@ungap/structured-clone': 1.3.0 jest-util: 30.2.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): + jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)): dependencies: - '@jest/core': 30.2.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + '@jest/core': 30.2.0(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) '@jest/types': 30.2.0 import-local: 3.2.0 - jest-cli: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest-cli: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11715,8 +11499,6 @@ snapshots: - supports-color - utf-8-validate - jsesc@3.0.2: {} - jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -11749,16 +11531,16 @@ snapshots: kind-of@6.0.3: {} - launch-editor@2.10.0: + launch-editor@2.12.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 - less-loader@12.3.0(less@4.4.2)(webpack@5.104.0(esbuild@0.26.0)): + less-loader@12.3.0(less@4.4.2)(webpack@5.104.1(esbuild@0.27.2)): dependencies: less: 4.4.2 optionalDependencies: - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) less@4.4.2: dependencies: @@ -11781,11 +11563,11 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.104.0(esbuild@0.26.0)): + license-webpack-plugin@4.0.2(webpack@5.104.1(esbuild@0.27.2)): dependencies: webpack-sources: 3.3.3 optionalDependencies: - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) lines-and-columns@1.2.4: {} @@ -11793,26 +11575,26 @@ snapshots: dependencies: cli-truncate: 5.1.1 colorette: 2.0.20 - eventemitter3: 5.0.1 + eventemitter3: 5.0.4 log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.2 - lmdb@3.4.3: + lmdb@3.4.4: dependencies: - msgpackr: 1.11.5 + msgpackr: 1.11.8 node-addon-api: 6.1.0 node-gyp-build-optional-packages: 5.2.2 - ordered-binary: 1.6.0 + ordered-binary: 1.6.1 weak-lru-cache: 1.2.2 optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 3.4.3 - '@lmdb/lmdb-darwin-x64': 3.4.3 - '@lmdb/lmdb-linux-arm': 3.4.3 - '@lmdb/lmdb-linux-arm64': 3.4.3 - '@lmdb/lmdb-linux-x64': 3.4.3 - '@lmdb/lmdb-win32-arm64': 3.4.3 - '@lmdb/lmdb-win32-x64': 3.4.3 + '@lmdb/lmdb-darwin-arm64': 3.4.4 + '@lmdb/lmdb-darwin-x64': 3.4.4 + '@lmdb/lmdb-linux-arm': 3.4.4 + '@lmdb/lmdb-linux-arm64': 3.4.4 + '@lmdb/lmdb-linux-x64': 3.4.4 + '@lmdb/lmdb-win32-arm64': 3.4.4 + '@lmdb/lmdb-win32-x64': 3.4.4 optional: true loader-runner@4.3.1: {} @@ -11841,7 +11623,7 @@ snapshots: lodash.merge@4.6.2: {} - lodash@4.17.21: {} + lodash@4.17.23: {} log-symbols@7.0.1: dependencies: @@ -11858,13 +11640,13 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.2: {} + lru-cache@11.2.5: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - magic-string@0.30.19: + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -11890,7 +11672,7 @@ snapshots: minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 1.0.0 - proc-log: 6.0.0 + proc-log: 6.1.0 promise-retry: 2.0.1 ssri: 13.0.0 transitivePeerDependencies: @@ -11908,13 +11690,21 @@ snapshots: media-typer@1.1.0: {} - memfs@4.51.1: + memfs@4.56.10(tslib@2.8.1): dependencies: + '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.0.3(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 merge-descriptors@1.0.3: {} @@ -11956,11 +11746,11 @@ snapshots: mimic-response@3.1.0: optional: true - mini-css-extract-plugin@2.9.4(webpack@5.104.0(esbuild@0.26.0)): + mini-css-extract-plugin@2.9.4(webpack@5.104.1(esbuild@0.27.2)): dependencies: schema-utils: 4.3.3 tapable: 2.3.0 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) minimalistic-assert@1.0.1: {} @@ -12037,7 +11827,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 optional: true - msgpackr@1.11.5: + msgpackr@1.11.8: optionalDependencies: msgpackr-extract: 3.0.3 optional: true @@ -12061,7 +11851,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.1 + sax: 1.4.4 optional: true negotiator@0.6.3: {} @@ -12077,46 +11867,46 @@ snapshots: pdfjs-dist: 4.8.69 tslib: 2.8.1 - ngx-bootstrap-icons@1.9.3(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)): + ngx-bootstrap-icons@1.9.3(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)): dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) tslib: 2.8.1 - ngx-color@10.1.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)): + ngx-color@10.1.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)): dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) '@ctrl/tinycolor': 4.2.0 material-colors: 1.2.6 tslib: 2.8.1 - ngx-cookie-service@21.1.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)): + ngx-cookie-service@21.1.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)): dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) tslib: 2.8.1 - ngx-device-detector@11.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)): + ngx-device-detector@11.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)): dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) tslib: 2.8.1 - ngx-ui-tour-core@15.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/router@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(rxjs@7.8.2): + ngx-ui-tour-core@15.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/router@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(rxjs@7.8.2): dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/router': 21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/router': 21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 - ngx-ui-tour-ng-bootstrap@17.0.1(242655d8c5d1eba0620a4ab62bc9a1fe): + ngx-ui-tour-ng-bootstrap@17.0.1(7ad980aeba34de65f96adc005a99db92): dependencies: - '@angular/common': 21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1) - '@ng-bootstrap/ng-bootstrap': 20.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/forms@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(@angular/localize@21.0.8(@angular/compiler-cli@21.0.8(@angular/compiler@21.0.8)(typescript@5.9.3))(@angular/compiler@21.0.8))(@popperjs/core@2.11.8)(rxjs@7.8.2) - ngx-ui-tour-core: 15.0.0(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/router@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.0.8(@angular/common@21.0.8(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.0.8(@angular/compiler@21.0.8)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/common': 21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0) + '@ng-bootstrap/ng-bootstrap': 20.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/forms@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(@angular/localize@21.1.2(@angular/compiler-cli@21.1.2(@angular/compiler@21.1.2)(typescript@5.9.3))(@angular/compiler@21.1.2))(@popperjs/core@2.11.8)(rxjs@7.8.2) + ngx-ui-tour-core: 15.0.0(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/router@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.1.2(@angular/common@21.1.2(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.1.2(@angular/compiler@21.1.2)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2))(rxjs@7.8.2) tslib: 2.8.1 transitivePeerDependencies: - '@angular/router' @@ -12133,23 +11923,23 @@ snapshots: node-addon-api@7.1.1: optional: true - node-forge@1.3.1: {} + node-forge@1.3.3: {} node-gyp-build-optional-packages@5.2.2: dependencies: detect-libc: 2.1.2 optional: true - node-gyp@12.1.0: + node-gyp@12.2.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 graceful-fs: 4.2.11 make-fetch-happen: 15.0.3 nopt: 9.0.0 - proc-log: 6.0.0 + proc-log: 6.1.0 semver: 7.7.3 - tar: 7.5.2 + tar: 7.5.7 tinyglobby: 0.2.15 which: 6.0.0 transitivePeerDependencies: @@ -12165,37 +11955,33 @@ snapshots: normalize-path@3.0.0: {} - normalize-range@0.1.2: {} - - npm-bundled@4.0.0: + npm-bundled@5.0.0: dependencies: - npm-normalize-package-bin: 4.0.0 + npm-normalize-package-bin: 5.0.0 npm-install-checks@8.0.0: dependencies: semver: 7.7.3 - npm-normalize-package-bin@4.0.0: {} - npm-normalize-package-bin@5.0.0: {} - npm-package-arg@13.0.1: + npm-package-arg@13.0.2: dependencies: hosted-git-info: 9.0.2 - proc-log: 5.0.0 + proc-log: 6.1.0 semver: 7.7.3 - validate-npm-package-name: 6.0.2 + validate-npm-package-name: 7.0.2 npm-packlist@10.0.3: dependencies: ignore-walk: 8.0.0 - proc-log: 6.0.0 + proc-log: 6.1.0 npm-pick-manifest@11.0.3: dependencies: npm-install-checks: 8.0.0 npm-normalize-package-bin: 5.0.0 - npm-package-arg: 13.0.1 + npm-package-arg: 13.0.2 semver: 7.7.3 npm-registry-fetch@19.1.1: @@ -12206,8 +11992,8 @@ snapshots: minipass: 7.1.2 minipass-fetch: 5.0.0 minizlib: 3.1.0 - npm-package-arg: 13.0.1 - proc-log: 6.0.0 + npm-package-arg: 13.0.2 + proc-log: 6.1.0 transitivePeerDependencies: - supports-color @@ -12231,7 +12017,7 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + on-headers@1.1.0: {} once@1.4.0: dependencies: @@ -12247,11 +12033,20 @@ snapshots: open@10.2.0: dependencies: - default-browser: 5.2.1 + default-browser: 5.4.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 wsl-utils: 0.1.0 + open@11.0.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 + is-inside-container: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -12265,15 +12060,15 @@ snapshots: dependencies: chalk: 5.6.2 cli-cursor: 5.0.0 - cli-spinners: 3.3.0 + cli-spinners: 3.4.0 is-interactive: 2.0.0 is-unicode-supported: 2.1.0 log-symbols: 7.0.1 stdin-discarder: 0.2.2 - string-width: 8.1.0 + string-width: 8.1.1 strip-ansi: 7.1.2 - ordered-binary@1.6.0: + ordered-binary@1.6.1: optional: true p-limit@2.3.0: @@ -12297,32 +12092,32 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.1.0 + is-network-error: 1.3.0 retry: 0.13.1 p-try@2.2.0: {} package-json-from-dist@1.0.1: {} - pacote@21.0.3: + pacote@21.0.4: dependencies: '@npmcli/git': 7.0.1 - '@npmcli/installed-package-contents': 3.0.0 + '@npmcli/installed-package-contents': 4.0.0 '@npmcli/package-json': 7.0.4 - '@npmcli/promise-spawn': 8.0.3 + '@npmcli/promise-spawn': 9.0.1 '@npmcli/run-script': 10.0.3 cacache: 20.0.3 fs-minipass: 3.0.3 minipass: 7.1.2 - npm-package-arg: 13.0.1 + npm-package-arg: 13.0.2 npm-packlist: 10.0.3 npm-pick-manifest: 11.0.3 npm-registry-fetch: 19.1.1 - proc-log: 5.0.0 + proc-log: 6.1.0 promise-retry: 2.0.1 sigstore: 4.1.0 - ssri: 12.0.0 - tar: 7.5.2 + ssri: 13.0.0 + tar: 7.5.7 transitivePeerDependencies: - supports-color @@ -12334,7 +12129,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -12376,7 +12171,7 @@ snapshots: path-scurry@2.0.1: dependencies: - lru-cache: 11.2.2 + lru-cache: 11.2.5 minipass: 7.1.2 path-to-regexp@0.1.12: {} @@ -12402,32 +12197,32 @@ snapshots: pirates@4.0.7: {} - piscina@5.1.3: + piscina@5.1.4: optionalDependencies: '@napi-rs/nice': 1.1.1 - pkce-challenge@5.0.0: {} + pkce-challenge@5.0.1: {} pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - playwright-core@1.57.0: {} + playwright-core@1.58.1: {} - playwright@1.57.0: + playwright@1.58.1: dependencies: - playwright-core: 1.57.0 + playwright-core: 1.58.1 optionalDependencies: fsevents: 2.3.2 - postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.104.0(esbuild@0.26.0)): + postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.104.1(esbuild@0.27.2)): dependencies: cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.6.1 postcss: 8.5.6 semver: 7.7.3 optionalDependencies: - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) transitivePeerDependencies: - typescript @@ -12441,20 +12236,20 @@ snapshots: dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 postcss-modules-scope@3.2.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-modules-values@4.0.0(postcss@8.5.6): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser@7.1.0: + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -12467,6 +12262,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + powershell-utils@0.1.0: {} + prebuild-install@7.1.2: dependencies: detect-libc: 2.1.2 @@ -12510,10 +12307,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - proc-log@5.0.0: {} - - proc-log@6.0.0: {} - proc-log@6.1.0: {} process-nextick-args@2.0.1: {} @@ -12541,11 +12334,7 @@ snapshots: pure-rand@7.0.1: {} - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - - qs@6.14.0: + qs@6.14.1: dependencies: side-channel: 1.1.0 @@ -12555,18 +12344,18 @@ snapshots: range-parser@1.2.1: {} - raw-body@2.5.2: + raw-body@2.5.3: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.1: + raw-body@3.0.2: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.7.0 + http-errors: 2.0.1 + iconv-lite: 0.7.2 unpipe: 1.0.0 rc@1.2.8: @@ -12601,9 +12390,11 @@ snapshots: readdirp@4.1.2: {} + readdirp@5.0.0: {} + reflect-metadata@0.2.2: {} - regenerate-unicode-properties@10.2.0: + regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -12611,20 +12402,20 @@ snapshots: regex-parser@2.3.1: {} - regexpu-core@6.2.0: + regexpu-core@6.4.0: dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 + regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.12.0 + regjsparser: 0.13.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.2.1 regjsgen@0.8.0: {} - regjsparser@0.12.0: + regjsparser@0.13.0: dependencies: - jsesc: 3.0.2 + jsesc: 3.1.0 require-directory@2.1.1: {} @@ -12665,52 +12456,54 @@ snapshots: rfdc@1.4.1: {} - rolldown@1.0.0-beta.47: + rolldown@1.0.0-beta.58: dependencies: - '@oxc-project/types': 0.96.0 - '@rolldown/pluginutils': 1.0.0-beta.47 + '@oxc-project/types': 0.106.0 + '@rolldown/pluginutils': 1.0.0-beta.58 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.47 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.47 - '@rolldown/binding-darwin-x64': 1.0.0-beta.47 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.47 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.47 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.47 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.47 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.47 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.47 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.47 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.47 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.47 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.47 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.47 + '@rolldown/binding-android-arm64': 1.0.0-beta.58 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.58 + '@rolldown/binding-darwin-x64': 1.0.0-beta.58 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.58 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.58 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.58 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.58 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.58 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.58 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.58 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.58 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.58 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.58 - rollup@4.52.3: + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@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 + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 router@2.2.0: @@ -12725,7 +12518,7 @@ snapshots: rrweb-cssom@0.8.0: {} - run-applescript@7.0.0: {} + run-applescript@7.1.0: {} rxjs@7.8.2: dependencies: @@ -12737,22 +12530,22 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.5(sass@1.93.2)(webpack@5.104.0(esbuild@0.26.0)): + sass-loader@16.0.6(sass@1.97.1)(webpack@5.104.1(esbuild@0.27.2)): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.93.2 - webpack: 5.104.0(esbuild@0.26.0) + sass: 1.97.1 + webpack: 5.104.1(esbuild@0.27.2) - sass@1.93.2: + sass@1.97.1: dependencies: chokidar: 4.0.3 immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.1 + '@parcel/watcher': 2.5.6 - sax@1.4.1: + sax@1.4.4: optional: true saxes@6.0.0: @@ -12770,8 +12563,8 @@ snapshots: selfsigned@2.4.1: dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 + '@types/node-forge': 1.3.14 + node-forge: 1.3.3 semver@5.7.2: optional: true @@ -12780,32 +12573,32 @@ snapshots: semver@7.7.3: {} - send@0.19.0: + send@0.19.2: dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color - send@1.2.0: + send@1.2.1: 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.0 + http-errors: 2.0.1 mime-types: 3.0.2 ms: 2.1.3 on-finished: 2.4.1 @@ -12818,38 +12611,36 @@ snapshots: dependencies: randombytes: 2.1.0 - serve-index@1.9.1: + serve-index@1.9.2: dependencies: accepts: 1.3.8 batch: 0.6.1 debug: 2.6.9 escape-html: 1.0.3 - http-errors: 1.6.3 + http-errors: 1.8.1 mime-types: 2.1.35 parseurl: 1.3.3 transitivePeerDependencies: - supports-color - serve-static@1.16.2: + serve-static@1.16.3: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 0.19.2 transitivePeerDependencies: - supports-color - serve-static@2.2.0: + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.0 + send: 1.2.1 transitivePeerDependencies: - supports-color - setprototypeof@1.1.0: {} - setprototypeof@1.2.0: {} shallow-clone@3.0.1: @@ -12954,11 +12745,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.104.0(esbuild@0.26.0)): + source-map-loader@5.0.0(webpack@5.104.1(esbuild@0.27.2)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) source-map-support@0.5.13: dependencies: @@ -13011,10 +12802,6 @@ snapshots: sprintf-js@1.0.3: {} - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - ssri@13.0.0: dependencies: minipass: 7.1.2 @@ -13025,8 +12812,6 @@ snapshots: statuses@1.5.0: {} - statuses@2.0.1: {} - statuses@2.0.2: {} stdin-discarder@0.2.2: {} @@ -13054,7 +12839,7 @@ snapshots: get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 - string-width@8.1.0: + string-width@8.1.1: dependencies: get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 @@ -13121,7 +12906,7 @@ snapshots: readable-stream: 3.6.2 optional: true - tar@7.5.2: + tar@7.5.7: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -13138,23 +12923,16 @@ snapshots: terser: 5.44.1 webpack: 5.103.0 - terser-webpack-plugin@5.3.16(esbuild@0.26.0)(webpack@5.104.0(esbuild@0.26.0)): + terser-webpack-plugin@5.3.16(esbuild@0.27.2)(webpack@5.104.1(esbuild@0.27.2)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.1 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) optionalDependencies: - esbuild: 0.26.0 - - terser@5.44.0: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 - commander: 2.20.3 - source-map-support: 0.5.21 + esbuild: 0.27.2 terser@5.44.1: dependencies: @@ -13202,26 +12980,22 @@ snapshots: dependencies: punycode: 2.3.1 - tree-dump@1.0.3(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - tree-dump@1.1.0(tslib@2.8.1): dependencies: tslib: 2.8.1 tree-kill@1.2.2: {} - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.5(@babel/core@7.29.0)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0))(esbuild@0.27.0)(jest-util@30.2.0)(jest@30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 30.2.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest: 30.2.0(@types/node@25.2.0)(ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -13230,21 +13004,21 @@ snapshots: typescript: 5.9.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) + babel-jest: 30.2.0(@babel/core@7.29.0) esbuild: 0.27.0 jest-util: 30.2.0 - ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3): + ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.10.1 + '@types/node': 25.2.0 acorn: 8.14.0 acorn-walk: 8.3.1 arg: 4.1.3 @@ -13312,18 +13086,18 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - undici@7.16.0: {} + undici@7.18.2: {} unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 + unicode-property-aliases-ecmascript: 2.2.0 - unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicode-property-aliases-ecmascript@2.2.0: {} unique-filename@5.0.0: dependencies: @@ -13366,7 +13140,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - update-browserslist-db@1.2.2(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 escalade: 3.2.0 @@ -13401,41 +13175,24 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@6.0.2: {} + validate-npm-package-name@7.0.2: {} vary@1.1.2: {} - vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.7.0): + vite@7.3.0(@types/node@25.2.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.7.0): dependencies: - esbuild: 0.25.9 + esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.52.3 + rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.2.0 fsevents: 2.3.3 jiti: 2.6.1 less: 4.4.2 - sass: 1.93.2 - terser: 5.44.0 - yaml: 2.7.0 - - vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.7.0): - dependencies: - esbuild: 0.25.9 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.3 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.10.1 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.4.2 - sass: 1.93.2 + sass: 1.97.1 terser: 5.44.1 yaml: 2.7.0 @@ -13452,6 +13209,16 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + watchpack@2.5.0: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + watchpack@2.5.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + wbuf@1.7.3: dependencies: minimalistic-assert: 1.0.1 @@ -13461,102 +13228,108 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-dev-middleware@7.4.5(webpack@5.103.0): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.103.0): dependencies: colorette: 2.0.20 - memfs: 4.51.1 + memfs: 4.56.10(tslib@2.8.1) mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: webpack: 5.103.0 + transitivePeerDependencies: + - tslib - webpack-dev-middleware@7.4.5(webpack@5.104.0(esbuild@0.26.0)): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.104.1(esbuild@0.27.2)): dependencies: colorette: 2.0.20 - memfs: 4.51.1 + memfs: 4.56.10(tslib@2.8.1) mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) + transitivePeerDependencies: + - tslib - webpack-dev-server@5.2.2(webpack@5.103.0): + webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.103.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.23 - '@types/express-serve-static-core': 4.19.6 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.8 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.8.0 + compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.23) - ipaddr.js: 2.2.0 - launch-editor: 2.10.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 selfsigned: 2.4.1 - serve-index: 1.9.1 + serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.103.0) - ws: 8.18.3 + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.103.0) + ws: 8.19.0 optionalDependencies: webpack: 5.103.0 transitivePeerDependencies: - bufferutil - debug - supports-color + - tslib - utf-8-validate - webpack-dev-server@5.2.2(webpack@5.104.0(esbuild@0.26.0)): + webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.104.1(esbuild@0.27.2)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.23 - '@types/express-serve-static-core': 4.19.6 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.8 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.8.0 + compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.23) - ipaddr.js: 2.2.0 - launch-editor: 2.10.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 selfsigned: 2.4.1 - serve-index: 1.9.1 + serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.104.0(esbuild@0.26.0)) - ws: 8.18.3 + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.104.1(esbuild@0.27.2)) + ws: 8.19.0 optionalDependencies: - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) transitivePeerDependencies: - bufferutil - debug - supports-color + - tslib - utf-8-validate webpack-merge@6.0.1: @@ -13567,10 +13340,10 @@ snapshots: webpack-sources@3.3.3: {} - webpack-subresource-integrity@5.1.0(webpack@5.104.0(esbuild@0.26.0)): + webpack-subresource-integrity@5.1.0(webpack@5.104.1(esbuild@0.27.2)): dependencies: typed-assert: 1.0.9 - webpack: 5.104.0(esbuild@0.26.0) + webpack: 5.104.1(esbuild@0.27.2) webpack-virtual-modules@0.6.2: {} @@ -13606,7 +13379,7 @@ snapshots: - esbuild - uglify-js - webpack@5.104.0(esbuild@0.26.0): + webpack@5.104.1(esbuild@0.27.2): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -13618,7 +13391,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.15.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.18.4 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -13630,8 +13403,8 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(esbuild@0.26.0)(webpack@5.104.0(esbuild@0.26.0)) - watchpack: 2.4.4 + terser-webpack-plugin: 5.3.16(esbuild@0.27.2)(webpack@5.104.1(esbuild@0.27.2)) + watchpack: 2.5.1 webpack-sources: 3.3.3 transitivePeerDependencies: - '@swc/core' @@ -13661,10 +13434,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@5.0.0: - dependencies: - isexe: 3.1.1 - which@6.0.0: dependencies: isexe: 3.1.1 @@ -13708,10 +13477,17 @@ snapshots: ws@8.18.3: {} + ws@8.19.0: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.0 + wsl-utils@0.3.1: + dependencies: + is-wsl: 3.1.0 + powershell-utils: 0.1.0 + xml-name-validator@5.0.0: {} xml@1.0.1: {} @@ -13760,12 +13536,12 @@ snapshots: yoctocolors@2.1.2: {} - zod-to-json-schema@3.25.0(zod@4.1.13): + zod-to-json-schema@3.25.1(zod@4.3.5): dependencies: - zod: 4.1.13 + zod: 4.3.5 zod@3.25.76: {} - zod@4.1.13: {} + zod@4.3.5: {} - zone.js@0.15.1: {} + zone.js@0.16.0: {} diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html index 5af53e79d..7f086ec63 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html @@ -430,6 +430,24 @@ } + @case (WorkflowActionType.PasswordRemoval) { +
+
+

+ One password per line. The workflow will try them in order until one succeeds. +

+ +
+
+ } } diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts index ac8a5d2c7..070e5124f 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts @@ -3,6 +3,7 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { + FormArray, FormControl, FormGroup, FormsModule, @@ -994,4 +995,32 @@ describe('WorkflowEditDialogComponent', () => { component.removeSelectedCustomField(3, formGroup) expect(formGroup.get('assign_custom_fields').value).toEqual([]) }) + + it('should handle parsing of passwords from array to string and back on save', () => { + const passwordAction: WorkflowAction = { + id: 1, + type: WorkflowActionType.PasswordRemoval, + passwords: ['pass1', 'pass2'], + } + component.object = { + name: 'Workflow with Passwords', + id: 1, + order: 1, + enabled: true, + triggers: [], + actions: [passwordAction], + } + component.ngOnInit() + + const formActions = component.objectForm.get('actions') as FormArray + expect(formActions.value[0].passwords).toBe('pass1\npass2') + formActions.at(0).get('passwords').setValue('pass1\npass2\npass3') + component.save() + + expect(component.objectForm.get('actions').value[0].passwords).toEqual([ + 'pass1', + 'pass2', + 'pass3', + ]) + }) }) diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts index 94d8318e0..37d8bef0d 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts @@ -139,6 +139,10 @@ export const WORKFLOW_ACTION_OPTIONS = [ id: WorkflowActionType.Webhook, name: $localize`Webhook`, }, + { + id: WorkflowActionType.PasswordRemoval, + name: $localize`Password removal`, + }, ] export enum TriggerFilterType { @@ -1202,11 +1206,25 @@ export class WorkflowEditDialogComponent headers: new FormControl(action.webhook?.headers), include_document: new FormControl(!!action.webhook?.include_document), }), + passwords: new FormControl( + this.formatPasswords(action.passwords ?? []) + ), }), { emitEvent } ) } + private formatPasswords(passwords: string[] = []): string { + return passwords.join('\n') + } + + private parsePasswords(value: string = ''): string[] { + return value + .split(/[\n,]+/) + .map((entry) => entry.trim()) + .filter((entry) => entry.length > 0) + } + private updateAllTriggerActionFields(emitEvent: boolean = false) { this.triggerFields.clear({ emitEvent: false }) this.object?.triggers.forEach((trigger) => { @@ -1331,6 +1349,7 @@ export class WorkflowEditDialogComponent headers: null, include_document: false, }, + passwords: [], } this.object.actions.push(action) this.createActionField(action) @@ -1367,6 +1386,7 @@ export class WorkflowEditDialogComponent if (action.type !== WorkflowActionType.Email) { action.email = null } + action.passwords = this.parsePasswords(action.passwords as any) }) super.save() } diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html index 58e2beebb..31138c314 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html @@ -34,8 +34,8 @@ @if (selectionModel.items) { -
- @for (item of selectionModel.items | filter: filterText:'name'; track item; let i = $index) { + +
@if (allowSelectNone || item.id) { } - } -
+
+ } @if (editing) { @if ((selectionModel.items | filter: filterText:'name').length === 0 && createRef !== undefined) { diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts index 2ecf95f2b..9dc5f019f 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts @@ -1,3 +1,4 @@ +import { ScrollingModule } from '@angular/cdk/scrolling' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { @@ -64,7 +65,7 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), ], - imports: [NgxBootstrapIconsModule.pick(allIcons)], + imports: [NgxBootstrapIconsModule.pick(allIcons), ScrollingModule], }).compileComponents() hotkeyService = TestBed.inject(HotKeyService) @@ -265,18 +266,11 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => expect(document.activeElement).toEqual( component.listFilterTextInput.nativeElement ) - expect( - Array.from( - (fixture.nativeElement as HTMLDivElement).querySelectorAll('button') - ).filter((b) => b.textContent.includes('Tag')) - ).toHaveLength(2) + expect(component.buttonsViewport.getRenderedRange().end).toEqual(3) // all items shown + component.filterText = 'Tag2' fixture.detectChanges() - expect( - Array.from( - (fixture.nativeElement as HTMLDivElement).querySelectorAll('button') - ).filter((b) => b.textContent.includes('Tag')) - ).toHaveLength(1) + expect(component.buttonsViewport.getRenderedRange().end).toEqual(1) // filtered component.dropdown.close() expect(component.filterText).toHaveLength(0) })) @@ -331,6 +325,8 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => .dispatchEvent(new MouseEvent('click')) // open fixture.detectChanges() tick(100) + component.buttonsViewport?.checkViewportSize() + fixture.detectChanges() const filterInputEl: HTMLInputElement = component.listFilterTextInput.nativeElement expect(document.activeElement).toEqual(filterInputEl) @@ -376,6 +372,8 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => .dispatchEvent(new MouseEvent('click')) // open fixture.detectChanges() tick(100) + component.buttonsViewport?.checkViewportSize() + fixture.detectChanges() const filterInputEl: HTMLInputElement = component.listFilterTextInput.nativeElement expect(document.activeElement).toEqual(filterInputEl) @@ -412,6 +410,8 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => .dispatchEvent(new MouseEvent('click')) // open fixture.detectChanges() tick(100) + component.buttonsViewport?.checkViewportSize() + fixture.detectChanges() const filterInputEl: HTMLInputElement = component.listFilterTextInput.nativeElement expect(document.activeElement).toEqual(filterInputEl) diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts index ec5425630..f5b6ba89c 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts @@ -1,3 +1,7 @@ +import { + CdkVirtualScrollViewport, + ScrollingModule, +} from '@angular/cdk/scrolling' import { NgClass } from '@angular/common' import { Component, @@ -627,18 +631,27 @@ export class FilterableDropdownSelectionModel { NgxBootstrapIconsModule, NgbDropdownModule, NgClass, + ScrollingModule, ], }) export class FilterableDropdownComponent extends LoadingComponentWithPermissions implements OnInit { + public readonly FILTERABLE_BUTTON_HEIGHT_PX = 42 + private filterPipe = inject(FilterPipe) private hotkeyService = inject(HotKeyService) @ViewChild('listFilterTextInput') listFilterTextInput: ElementRef @ViewChild('dropdown') dropdown: NgbDropdown - @ViewChild('buttonItems') buttonItems: ElementRef + @ViewChild('buttonsViewport') buttonsViewport: CdkVirtualScrollViewport + + private get renderedButtons(): Array { + return Array.from( + this.buttonsViewport.elementRef.nativeElement.querySelectorAll('button') + ) + } public popperOptions = pngxPopperOptions @@ -752,6 +765,14 @@ export class FilterableDropdownComponent private keyboardIndex: number + public get scrollViewportHeight(): number { + const filteredLength = this.filterPipe.transform( + this.items, + this.filterText + ).length + return Math.min(filteredLength * this.FILTERABLE_BUTTON_HEIGHT_PX, 400) + } + constructor() { super() this.selectionModelChange.subscribe((updatedModel) => { @@ -776,6 +797,10 @@ export class FilterableDropdownComponent } } + public trackByItem(index: number, item: MatchingModel) { + return item?.id ?? index + } + applyClicked() { if (this.selectionModel.isDirty()) { this.dropdown.close() @@ -794,6 +819,7 @@ export class FilterableDropdownComponent if (open) { setTimeout(() => { this.listFilterTextInput?.nativeElement.focus() + this.buttonsViewport?.checkViewportSize() }, 0) if (this.editing) { this.selectionModel.reset() @@ -861,12 +887,14 @@ export class FilterableDropdownComponent event.preventDefault() } } else if (event.target instanceof HTMLButtonElement) { + this.syncKeyboardIndexFromButton(event.target) this.focusNextButtonItem() event.preventDefault() } break case 'ArrowUp': if (event.target instanceof HTMLButtonElement) { + this.syncKeyboardIndexFromButton(event.target) if (this.keyboardIndex === 0) { this.listFilterTextInput.nativeElement.focus() } else { @@ -903,15 +931,18 @@ export class FilterableDropdownComponent if (setFocus) this.setButtonItemFocus() } - setButtonItemFocus() { - this.buttonItems.nativeElement.children[ - this.keyboardIndex - ]?.children[0].focus() + private syncKeyboardIndexFromButton(button: HTMLButtonElement) { + // because of virtual scrolling, re-calculate the index + const idx = this.renderedButtons.indexOf(button) + if (idx >= 0) { + this.keyboardIndex = this.buttonsViewport.getRenderedRange().start + idx + } } - setButtonItemIndex(index: number) { - // just track the index in case user uses arrows - this.keyboardIndex = index + setButtonItemFocus() { + const offset = + this.keyboardIndex - this.buttonsViewport.getRenderedRange().start + this.renderedButtons[offset]?.focus() } hideCount(item: ObjectWithPermissions) { diff --git a/src-ui/src/app/components/common/page-header/page-header.component.html b/src-ui/src/app/components/common/page-header/page-header.component.html index 488fff59d..4b2a35425 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.html +++ b/src-ui/src/app/components/common/page-header/page-header.component.html @@ -15,7 +15,7 @@ {{subTitle}} } @if (info) { - @@ -26,6 +26,9 @@ } } + @if (loading) { + + }
diff --git a/src-ui/src/app/components/common/page-header/page-header.component.ts b/src-ui/src/app/components/common/page-header/page-header.component.ts index 2e0bc1c39..f1fb038ca 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.ts +++ b/src-ui/src/app/components/common/page-header/page-header.component.ts @@ -42,6 +42,9 @@ export class PageHeaderComponent { @Input() infoLink: string + @Input() + loading: boolean = false + public copyID() { this.copied = this.clipboard.copy(this.id.toString()) clearTimeout(this.copyTimeout) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts index 72d3f948c..ad75e5d39 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.ts @@ -1306,7 +1306,8 @@ describe('FilterEditorComponent', () => { const tagsFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[0] - tagsFilterableDropdown.triggerEventHandler('opened') + tagsFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const tagButton = tagsFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) )[0] @@ -1324,7 +1325,8 @@ describe('FilterEditorComponent', () => { const tagsFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[0] // Tags dropdown - tagsFilterableDropdown.triggerEventHandler('opened') + tagsFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const tagButtons = tagsFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) ) @@ -1375,7 +1377,8 @@ describe('FilterEditorComponent', () => { const correspondentsFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[1] // Corresp dropdown - correspondentsFilterableDropdown.triggerEventHandler('opened') + correspondentsFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const correspondentButtons = correspondentsFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) ) @@ -1414,7 +1417,8 @@ describe('FilterEditorComponent', () => { const correspondentsFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[1] - correspondentsFilterableDropdown.triggerEventHandler('opened') + correspondentsFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const notAssignedButton = correspondentsFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) )[0] @@ -1445,7 +1449,8 @@ describe('FilterEditorComponent', () => { const documentTypesFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[2] // DocType dropdown - documentTypesFilterableDropdown.triggerEventHandler('opened') + documentTypesFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const documentTypeButtons = documentTypesFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) ) @@ -1484,7 +1489,8 @@ describe('FilterEditorComponent', () => { const docTypesFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[2] - docTypesFilterableDropdown.triggerEventHandler('opened') + docTypesFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const notAssignedButton = docTypesFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) )[0] @@ -1515,7 +1521,8 @@ describe('FilterEditorComponent', () => { const storagePathFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[3] // StoragePath dropdown - storagePathFilterableDropdown.triggerEventHandler('opened') + storagePathFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const storagePathButtons = storagePathFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) ) @@ -1554,7 +1561,8 @@ describe('FilterEditorComponent', () => { const storagePathsFilterableDropdown = fixture.debugElement.queryAll( By.directive(FilterableDropdownComponent) )[3] - storagePathsFilterableDropdown.triggerEventHandler('opened') + storagePathsFilterableDropdown.componentInstance.dropdownOpenChange(true) + fixture.detectChanges() const notAssignedButton = storagePathsFilterableDropdown.queryAll( By.directive(ToggleableDropdownButtonComponent) )[0] diff --git a/src-ui/src/app/components/manage/mail/mail.component.html b/src-ui/src/app/components/manage/mail/mail.component.html index 8b9678353..45249e876 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.html +++ b/src-ui/src/app/components/manage/mail/mail.component.html @@ -129,7 +129,7 @@
{{rule.order}}
-
{{(mailAccountService.getCached(rule.account) | async)?.name}}
+
{{ mailAccountsById.get(rule.account)?.name }}
diff --git a/src-ui/src/app/components/manage/mail/mail.component.ts b/src-ui/src/app/components/manage/mail/mail.component.ts index 825ca1ffd..bc119f525 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.ts +++ b/src-ui/src/app/components/manage/mail/mail.component.ts @@ -1,4 +1,3 @@ -import { AsyncPipe } from '@angular/common' import { Component, OnDestroy, OnInit, inject } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { ActivatedRoute } from '@angular/router' @@ -37,7 +36,6 @@ import { ProcessedMailDialogComponent } from './processed-mail-dialog/processed- PageHeaderComponent, IfPermissionsDirective, IfOwnerDirective, - AsyncPipe, FormsModule, ReactiveFormsModule, NgbDropdownModule, @@ -48,8 +46,8 @@ export class MailComponent extends ComponentWithPermissions implements OnInit, OnDestroy { - mailAccountService = inject(MailAccountService) - mailRuleService = inject(MailRuleService) + private readonly mailAccountService = inject(MailAccountService) + private readonly mailRuleService = inject(MailRuleService) private toastService = inject(ToastService) private modalService = inject(NgbModal) permissionsService = inject(PermissionsService) @@ -58,8 +56,19 @@ export class MailComponent public MailAccountType = MailAccountType - mailAccounts: MailAccount[] = [] - mailRules: MailRule[] = [] + private _mailAccounts: MailAccount[] = [] + + public get mailAccounts() { + return this._mailAccounts + } + private set mailAccounts(accounts: MailAccount[]) { + this._mailAccounts = accounts + this.mailAccountsById = new Map( + accounts.map((account) => [account.id, account]) + ) + } + public mailAccountsById: Map = new Map() + public mailRules: MailRule[] = [] unsubscribeNotifier: Subject = new Subject() oAuthAccountId: number diff --git a/src-ui/src/app/components/manage/management-list/management-list.component.html b/src-ui/src/app/components/manage/management-list/management-list.component.html index 697a053c6..cb2f1010f 100644 --- a/src-ui/src/app/components/manage/management-list/management-list.component.html +++ b/src-ui/src/app/components/manage/management-list/management-list.component.html @@ -1,4 +1,4 @@ - +
diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.spec.ts b/src-ui/src/app/components/manage/tag-list/tag-list.component.spec.ts index 51403379d..a69eacba0 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.spec.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.spec.ts @@ -101,7 +101,7 @@ describe('TagListComponent', () => { it('should request only parent tags when no name filter is applied', () => { expect(tagService.listFiltered).toHaveBeenCalledWith( 1, - null, + 25, undefined, undefined, undefined, @@ -116,7 +116,7 @@ describe('TagListComponent', () => { component.reloadData() expect(tagService.listFiltered).toHaveBeenCalledWith( 1, - null, + 25, undefined, undefined, 'Tag', diff --git a/src-ui/src/app/data/ui-settings.ts b/src-ui/src/app/data/ui-settings.ts index f3c908dc3..f899cffa4 100644 --- a/src-ui/src/app/data/ui-settings.ts +++ b/src-ui/src/app/data/ui-settings.ts @@ -63,6 +63,7 @@ export const SETTINGS_KEYS = { SIDEBAR_VIEWS_SHOW_COUNT: 'general-settings:saved-views:sidebar-views-show-count', TOUR_COMPLETE: 'general-settings:tour-complete', + OBJECT_LIST_SIZES: 'general-settings:object-list-sizes', DEFAULT_PERMS_OWNER: 'general-settings:permissions:default-owner', DEFAULT_PERMS_VIEW_USERS: 'general-settings:permissions:default-view-users', DEFAULT_PERMS_VIEW_GROUPS: 'general-settings:permissions:default-view-groups', @@ -201,6 +202,16 @@ export const SETTINGS: UiSetting[] = [ type: 'boolean', default: false, }, + { + key: SETTINGS_KEYS.OBJECT_LIST_SIZES, + type: 'object', + default: { + correspondents: 25, + document_types: 25, + tags: 25, + storage_paths: 25, + }, + }, { key: SETTINGS_KEYS.DEFAULT_PERMS_OWNER, type: 'number', diff --git a/src-ui/src/app/data/workflow-action.ts b/src-ui/src/app/data/workflow-action.ts index 06c46806e..ff1509693 100644 --- a/src-ui/src/app/data/workflow-action.ts +++ b/src-ui/src/app/data/workflow-action.ts @@ -5,6 +5,7 @@ export enum WorkflowActionType { Removal = 2, Email = 3, Webhook = 4, + PasswordRemoval = 5, } export interface WorkflowActionEmail extends ObjectWithId { @@ -97,4 +98,6 @@ export interface WorkflowAction extends ObjectWithId { email?: WorkflowActionEmail webhook?: WorkflowActionWebhook + + passwords?: string[] } diff --git a/src-ui/src/app/services/rest/abstract-paperless-service.ts b/src-ui/src/app/services/rest/abstract-paperless-service.ts index 60f91eb5f..d293d6453 100644 --- a/src-ui/src/app/services/rest/abstract-paperless-service.ts +++ b/src-ui/src/app/services/rest/abstract-paperless-service.ts @@ -1,7 +1,7 @@ import { HttpClient, HttpParams } from '@angular/common/http' import { inject, Injectable } from '@angular/core' import { Observable } from 'rxjs' -import { map, publishReplay, refCount, tap } from 'rxjs/operators' +import { map, shareReplay, tap } from 'rxjs/operators' import { ObjectWithId } from 'src/app/data/object-with-id' import { Results } from 'src/app/data/results' import { environment } from 'src/environments/environment' @@ -90,7 +90,7 @@ export abstract class AbstractPaperlessService { sortField, sortReverse, extraParams - ).pipe(publishReplay(1), refCount()) + ).pipe(shareReplay({ bufferSize: 1, refCount: true })) } return this._listAll } diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 9ebf29d16..3ce1d16cc 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -6,7 +6,7 @@ export const environment = { apiVersion: '9', // match src/paperless/settings.py appTitle: 'Paperless-ngx', tag: 'prod', - version: '2.20.5', + version: '2.20.6', webSocketHost: window.location.host, webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:', webSocketBaseUrl: base_url.pathname + 'ws/', diff --git a/src/documents/apps.py b/src/documents/apps.py index 32e49b160..d8200edac 100644 --- a/src/documents/apps.py +++ b/src/documents/apps.py @@ -7,7 +7,7 @@ class DocumentsConfig(AppConfig): verbose_name = _("Documents") - def ready(self): + def ready(self) -> None: from documents.signals import document_consumption_finished from documents.signals import document_updated from documents.signals.handlers import add_inbox_tags diff --git a/src/documents/bulk_edit.py b/src/documents/bulk_edit.py index 002b32900..4e0a954ef 100644 --- a/src/documents/bulk_edit.py +++ b/src/documents/bulk_edit.py @@ -797,7 +797,7 @@ def reflect_doclinks( document: Document, field: CustomField, target_doc_ids: list[int], -): +) -> None: """ Add or remove 'symmetrical' links to `document` on all `target_doc_ids` """ @@ -860,7 +860,7 @@ def remove_doclink( document: Document, field: CustomField, target_doc_id: int, -): +) -> None: """ Removes a 'symmetrical' link to `document` from the target document's existing custom field instance """ diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 613c1d5ad..1e9da7ce6 100644 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -122,7 +122,7 @@ class DocumentClassifier: ) self._stop_words = None - def _update_data_vectorizer_hash(self): + def _update_data_vectorizer_hash(self) -> None: self.data_vectorizer_hash = sha256( pickle.dumps(self.data_vectorizer), ).hexdigest() diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 6c3ff5374..52b53be42 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -5,6 +5,7 @@ import tempfile from enum import Enum from pathlib import Path from typing import TYPE_CHECKING +from typing import Final import magic from django.conf import settings @@ -32,12 +33,12 @@ from documents.models import WorkflowTrigger from documents.parsers import DocumentParser from documents.parsers import ParseError from documents.parsers import get_parser_class_for_mime_type -from documents.parsers import parse_date from documents.permissions import set_permissions_for_object from documents.plugins.base import AlwaysRunPluginMixin from documents.plugins.base import ConsumeTaskPlugin from documents.plugins.base import NoCleanupPluginMixin from documents.plugins.base import NoSetupPluginMixin +from documents.plugins.date_parsing import get_date_parser from documents.plugins.helpers import ProgressManager from documents.plugins.helpers import ProgressStatusOptions from documents.signals import document_consumption_finished @@ -49,6 +50,8 @@ from documents.utils import copy_file_with_basic_stats from documents.utils import run_subprocess from paperless_mail.parsers import MailDocumentParser +LOGGING_NAME: Final[str] = "paperless.consumer" + class WorkflowTriggerPlugin( NoCleanupPluginMixin, @@ -120,7 +123,7 @@ class ConsumerPluginMixin: status: ProgressStatusOptions, message: ConsumerStatusShortMessage | str | None = None, document_id=None, - ): # pragma: no cover + ) -> None: # pragma: no cover self.status_mgr.send_progress( status, message, @@ -156,9 +159,9 @@ class ConsumerPlugin( ConsumerPluginMixin, ConsumeTaskPlugin, ): - logging_name = "paperless.consumer" + logging_name = LOGGING_NAME - def run_pre_consume_script(self): + def run_pre_consume_script(self) -> None: """ If one is configured and exists, run the pre-consume script and handle its output and/or errors @@ -201,7 +204,7 @@ class ConsumerPlugin( exception=e, ) - def run_post_consume_script(self, document: Document): + def run_post_consume_script(self, document: Document) -> None: """ If one is configured and exists, run the pre-consume script and handle its output and/or errors @@ -361,7 +364,10 @@ class ConsumerPlugin( tempdir.cleanup() raise - def progress_callback(current_progress, max_progress): # pragma: no cover + def progress_callback( + current_progress, + max_progress, + ) -> None: # pragma: no cover # recalculate progress to be within 20 and 80 p = int((current_progress / max_progress) * 50 + 20) self._send_progress(p, 100, ProgressStatusOptions.WORKING) @@ -426,7 +432,8 @@ class ConsumerPlugin( ProgressStatusOptions.WORKING, ConsumerStatusShortMessage.PARSE_DATE, ) - date = parse_date(self.filename, text) + with get_date_parser() as date_parser: + date = next(date_parser.parse(self.filename, text), None) archive_path = document_parser.get_archive_path() page_count = document_parser.get_page_count(self.working_copy, mime_type) @@ -670,7 +677,7 @@ class ConsumerPlugin( return document - def apply_overrides(self, document): + def apply_overrides(self, document) -> None: if self.metadata.correspondent_id: document.correspondent = Correspondent.objects.get( pk=self.metadata.correspondent_id, @@ -730,7 +737,7 @@ class ConsumerPlugin( } CustomFieldInstance.objects.create(**args) # adds to document - def _write(self, source, target): + def _write(self, source, target) -> None: with ( Path(source).open("rb") as read_file, Path(target).open("wb") as write_file, @@ -753,9 +760,9 @@ class ConsumerPreflightPlugin( ConsumeTaskPlugin, ): NAME: str = "ConsumerPreflightPlugin" - logging_name = "paperless.consumer" + logging_name = LOGGING_NAME - def pre_check_file_exists(self): + def pre_check_file_exists(self) -> None: """ Confirm the input file still exists where it should """ @@ -769,7 +776,7 @@ class ConsumerPreflightPlugin( f"Cannot consume {self.input_doc.original_file}: File not found.", ) - def pre_check_duplicate(self): + def pre_check_duplicate(self) -> None: """ Using the MD5 of the file, check this exact file doesn't already exist """ @@ -819,7 +826,7 @@ class ConsumerPreflightPlugin( failure_msg, ) - def pre_check_directories(self): + def pre_check_directories(self) -> None: """ Ensure all required directories exist before attempting to use them """ @@ -828,7 +835,33 @@ class ConsumerPreflightPlugin( settings.ORIGINALS_DIR.mkdir(parents=True, exist_ok=True) settings.ARCHIVE_DIR.mkdir(parents=True, exist_ok=True) - def pre_check_asn_value(self): + def run(self) -> None: + self._send_progress( + 0, + 100, + ProgressStatusOptions.STARTED, + ConsumerStatusShortMessage.NEW_FILE, + ) + + # Make sure that preconditions for consuming the file are met. + + self.pre_check_file_exists() + self.pre_check_duplicate() + self.pre_check_directories() + + +class AsnCheckPlugin( + NoCleanupPluginMixin, + NoSetupPluginMixin, + AlwaysRunPluginMixin, + LoggingMixin, + ConsumerPluginMixin, + ConsumeTaskPlugin, +): + NAME: str = "AsnCheckPlugin" + logging_name = LOGGING_NAME + + def pre_check_asn_value(self) -> None: """ Check that if override_asn is given, it is unique and within a valid range """ @@ -865,16 +898,4 @@ class ConsumerPreflightPlugin( ) def run(self) -> None: - self._send_progress( - 0, - 100, - ProgressStatusOptions.STARTED, - ConsumerStatusShortMessage.NEW_FILE, - ) - - # Make sure that preconditions for consuming the file are met. - - self.pre_check_file_exists() - self.pre_check_duplicate() - self.pre_check_directories() self.pre_check_asn_value() diff --git a/src/documents/data_models.py b/src/documents/data_models.py index ee16cce9e..558450f1f 100644 --- a/src/documents/data_models.py +++ b/src/documents/data_models.py @@ -164,7 +164,7 @@ class ConsumableDocument: mailrule_id: int | None = None mime_type: str = dataclasses.field(init=False, default=None) - def __post_init__(self): + def __post_init__(self) -> None: """ After a dataclass is initialized, this is called to finalize some data 1. Make sure the original path is an absolute, fully qualified path diff --git a/src/documents/filters.py b/src/documents/filters.py index 9e53d01af..f1713882c 100644 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -120,7 +120,7 @@ class StoragePathFilterSet(FilterSet): class ObjectFilter(Filter): - def __init__(self, *, exclude=False, in_list=False, field_name=""): + def __init__(self, *, exclude=False, in_list=False, field_name="") -> None: super().__init__() self.exclude = exclude self.in_list = in_list @@ -255,7 +255,7 @@ class MimeTypeFilter(Filter): class SelectField(serializers.CharField): - def __init__(self, custom_field: CustomField): + def __init__(self, custom_field: CustomField) -> None: self._options = custom_field.extra_data["select_options"] super().__init__(max_length=16) @@ -676,7 +676,7 @@ class CustomFieldQueryParser: @extend_schema_field(serializers.CharField) class CustomFieldQueryFilter(Filter): - def __init__(self, validation_prefix): + def __init__(self, validation_prefix) -> None: """ A filter that filters documents based on custom field name and value. diff --git a/src/documents/index.py b/src/documents/index.py index 8afc31fe9..be944b48b 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -414,13 +414,13 @@ class DelayedQuery: class ManualResultsPage(list): - def __init__(self, hits): + def __init__(self, hits) -> None: super().__init__(hits) self.results = ManualResults(hits) class ManualResults: - def __init__(self, hits): + def __init__(self, hits) -> None: self._docnums = [hit.docnum for hit in hits] def docs(self): diff --git a/src/documents/loggers.py b/src/documents/loggers.py index 87ee58868..f30c823f1 100644 --- a/src/documents/loggers.py +++ b/src/documents/loggers.py @@ -3,7 +3,7 @@ import uuid class LoggingMixin: - def renew_logging_group(self): + def renew_logging_group(self) -> None: """ Creates a new UUID to group subsequent log calls together with the extra data named group diff --git a/src/documents/management/commands/convert_mariadb_uuid.py b/src/documents/management/commands/convert_mariadb_uuid.py index 76ccf9e76..3533d03f3 100644 --- a/src/documents/management/commands/convert_mariadb_uuid.py +++ b/src/documents/management/commands/convert_mariadb_uuid.py @@ -9,7 +9,7 @@ class Command(BaseCommand): # This code is taken almost entirely from https://github.com/wagtail/wagtail/pull/11912 with all credit to the original author. help = "Converts UUID columns from char type to the native UUID type used in MariaDB 10.7+ and Django 5.0+." - def convert_field(self, model, field_name, *, null=False): + def convert_field(self, model, field_name, *, null=False) -> None: if model._meta.get_field(field_name).model != model: # pragma: no cover # Field is inherited from a parent model return diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index 77b3b6416..bd962efc4 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -67,7 +67,7 @@ class Command(CryptMixin, BaseCommand): "easy import." ) - def add_arguments(self, parser): + def add_arguments(self, parser) -> None: parser.add_argument("target") parser.add_argument( @@ -186,7 +186,7 @@ class Command(CryptMixin, BaseCommand): help="If provided, is used to encrypt sensitive data in the export", ) - def handle(self, *args, **options): + def handle(self, *args, **options) -> None: self.target = Path(options["target"]).resolve() self.split_manifest: bool = options["split_manifest"] self.compare_checksums: bool = options["compare_checksums"] @@ -244,7 +244,7 @@ class Command(CryptMixin, BaseCommand): if self.zip_export and temp_dir is not None: temp_dir.cleanup() - def dump(self): + def dump(self) -> None: # 1. Take a snapshot of what files exist in the current export folder for x in self.target.glob("**/*"): if x.is_file(): @@ -498,7 +498,7 @@ class Command(CryptMixin, BaseCommand): self, content: list[dict] | dict, target: Path, - ): + ) -> None: """ Writes the source content to the target json file. If --compare-json arg was used, don't write to target file if @@ -528,7 +528,7 @@ class Command(CryptMixin, BaseCommand): source: Path, source_checksum: str | None, target: Path, - ): + ) -> None: """ Copies the source to the target, if target doesn't exist or the target doesn't seem to match the source attributes diff --git a/src/documents/management/commands/document_importer.py b/src/documents/management/commands/document_importer.py index ba3d793b3..5cd743590 100644 --- a/src/documents/management/commands/document_importer.py +++ b/src/documents/management/commands/document_importer.py @@ -246,7 +246,7 @@ class Command(CryptMixin, BaseCommand): self.source = Path(tmp_dir) self._run_import() - def _run_import(self): + def _run_import(self) -> None: self.pre_check() self.load_metadata() self.load_manifest_files() diff --git a/src/documents/management/commands/document_thumbnails.py b/src/documents/management/commands/document_thumbnails.py index d4653f0b3..e50c837d3 100644 --- a/src/documents/management/commands/document_thumbnails.py +++ b/src/documents/management/commands/document_thumbnails.py @@ -12,7 +12,7 @@ from documents.models import Document from documents.parsers import get_parser_class_for_mime_type -def _process_document(doc_id): +def _process_document(doc_id) -> None: document: Document = Document.objects.get(id=doc_id) parser_class = get_parser_class_for_mime_type(document.mime_type) @@ -37,7 +37,7 @@ def _process_document(doc_id): class Command(MultiProcessMixin, ProgressBarMixin, BaseCommand): help = "This will regenerate the thumbnails for all documents." - def add_arguments(self, parser): + def add_arguments(self, parser) -> None: parser.add_argument( "-d", "--document", diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py index e0d238438..3a81a47c5 100644 --- a/src/documents/management/commands/manage_superuser.py +++ b/src/documents/management/commands/manage_superuser.py @@ -25,7 +25,7 @@ class Command(BaseCommand): parser.formatter_class = RawTextHelpFormatter return parser - def handle(self, *args, **options): + def handle(self, *args, **options) -> None: username = os.getenv("PAPERLESS_ADMIN_USER", "admin") mail = os.getenv("PAPERLESS_ADMIN_MAIL", "root@localhost") password = os.getenv("PAPERLESS_ADMIN_PASSWORD") diff --git a/src/documents/management/commands/mixins.py b/src/documents/management/commands/mixins.py index a2ad326e4..109f3aea7 100644 --- a/src/documents/management/commands/mixins.py +++ b/src/documents/management/commands/mixins.py @@ -27,7 +27,7 @@ class MultiProcessMixin: for the use of multiple processes """ - def add_argument_processes_mixin(self, parser: ArgumentParser): + def add_argument_processes_mixin(self, parser: ArgumentParser) -> None: parser.add_argument( "--processes", default=max(1, os.cpu_count() // 4), @@ -35,7 +35,7 @@ class MultiProcessMixin: help="Number of processes to distribute work amongst", ) - def handle_processes_mixin(self, *args, **options): + def handle_processes_mixin(self, *args, **options) -> None: self.process_count = options["processes"] if self.process_count < 1: raise CommandError("There must be at least 1 process") @@ -47,7 +47,7 @@ class ProgressBarMixin: via this class """ - def add_argument_progress_bar_mixin(self, parser: ArgumentParser): + def add_argument_progress_bar_mixin(self, parser: ArgumentParser) -> None: parser.add_argument( "--no-progress-bar", default=False, @@ -55,7 +55,7 @@ class ProgressBarMixin: help="If set, the progress bar will not be shown", ) - def handle_progress_bar_mixin(self, *args, **options): + def handle_progress_bar_mixin(self, *args, **options) -> None: self.no_progress_bar = options["no_progress_bar"] self.use_progress_bar = not self.no_progress_bar @@ -120,7 +120,7 @@ class CryptMixin: }, } - def load_crypt_params(self, metadata: dict): + def load_crypt_params(self, metadata: dict) -> None: # Load up the values for setting up decryption self.kdf_algorithm: str = metadata[EXPORTER_CRYPTO_SETTINGS_NAME][ EXPORTER_CRYPTO_ALGO_NAME @@ -135,7 +135,7 @@ class CryptMixin: EXPORTER_CRYPTO_SALT_NAME ] - def setup_crypto(self, *, passphrase: str, salt: str | None = None): + def setup_crypto(self, *, passphrase: str, salt: str | None = None) -> None: """ Constructs a class for encryption or decryption using the specified passphrase and salt diff --git a/src/documents/matching.py b/src/documents/matching.py index 9276ad583..fb458b17c 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -34,7 +34,7 @@ def log_reason( matching_model: MatchingModel | WorkflowTrigger, document: Document, reason: str, -): +) -> None: class_name = type(matching_model).__name__ name = ( matching_model.name if hasattr(matching_model, "name") else str(matching_model) @@ -65,8 +65,12 @@ def match_correspondents(document: Document, classifier: DocumentClassifier, use return list( filter( - lambda o: matches(o, document) - or (o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO), + lambda o: ( + matches(o, document) + or ( + o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO + ) + ), correspondents, ), ) @@ -92,8 +96,12 @@ def match_document_types(document: Document, classifier: DocumentClassifier, use return list( filter( - lambda o: matches(o, document) - or (o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO), + lambda o: ( + matches(o, document) + or ( + o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO + ) + ), document_types, ), ) @@ -114,10 +122,12 @@ def match_tags(document: Document, classifier: DocumentClassifier, user=None): return list( filter( - lambda o: matches(o, document) - or ( - o.matching_algorithm == MatchingModel.MATCH_AUTO - and o.pk in predicted_tag_ids + lambda o: ( + matches(o, document) + or ( + o.matching_algorithm == MatchingModel.MATCH_AUTO + and o.pk in predicted_tag_ids + ) ), tags, ), @@ -145,8 +155,12 @@ def match_storage_paths(document: Document, classifier: DocumentClassifier, user return list( filter( - lambda o: matches(o, document) - or (o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO), + lambda o: ( + matches(o, document) + or ( + o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO + ) + ), storage_paths, ), ) diff --git a/src/documents/migrations/0009_workflowaction_passwords_alter_workflowaction_type.py b/src/documents/migrations/0009_workflowaction_passwords_alter_workflowaction_type.py new file mode 100644 index 000000000..ae3fef79f --- /dev/null +++ b/src/documents/migrations/0009_workflowaction_passwords_alter_workflowaction_type.py @@ -0,0 +1,38 @@ +# Generated by Django 5.2.7 on 2025-12-29 03:56 + +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("documents", "0008_sharelinkbundle"), + ] + + operations = [ + migrations.AddField( + model_name="workflowaction", + name="passwords", + field=models.JSONField( + blank=True, + help_text="Passwords to try when removing PDF protection. Separate with commas or new lines.", + null=True, + verbose_name="passwords", + ), + ), + migrations.AlterField( + model_name="workflowaction", + name="type", + field=models.PositiveIntegerField( + choices=[ + (1, "Assignment"), + (2, "Removal"), + (3, "Email"), + (4, "Webhook"), + (5, "Password removal"), + ], + default=1, + verbose_name="Workflow Action Type", + ), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index 72470ef6e..5a813f9b5 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -118,7 +118,7 @@ class Tag(MatchingModel, TreeNodeModel): verbose_name = _("tag") verbose_name_plural = _("tags") - def clean(self): + def clean(self) -> None: # Prevent self-parenting and assigning a descendant as parent parent = self.get_parent() if parent == self: @@ -410,7 +410,7 @@ class Document(SoftDeleteModel, ModelWithOwner): def created_date(self): return self.created - def add_nested_tags(self, tags): + def add_nested_tags(self, tags) -> None: tag_ids = set() for tag in tags: tag_ids.add(tag.id) @@ -862,7 +862,7 @@ class ShareLinkBundle(models.Model): return None return (settings.SHARE_LINK_BUNDLE_DIR / Path(self.file_path)).resolve() - def remove_file(self): + def remove_file(self) -> None: if self.absolute_file_path is not None and self.absolute_file_path.exists(): try: self.absolute_file_path.unlink() @@ -1405,6 +1405,10 @@ class WorkflowAction(models.Model): 4, _("Webhook"), ) + PASSWORD_REMOVAL = ( + 5, + _("Password removal"), + ) type = models.PositiveIntegerField( _("Workflow Action Type"), @@ -1634,6 +1638,15 @@ class WorkflowAction(models.Model): verbose_name=_("webhook"), ) + passwords = models.JSONField( + _("passwords"), + null=True, + blank=True, + help_text=_( + "Passwords to try when removing PDF protection. Separate with commas or new lines.", + ), + ) + class Meta: verbose_name = _("workflow action") verbose_name_plural = _("workflow actions") diff --git a/src/documents/parsers.py b/src/documents/parsers.py index f6417e285..b59e7d6b7 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -9,22 +9,17 @@ import subprocess import tempfile from functools import lru_cache from pathlib import Path -from re import Match from typing import TYPE_CHECKING from django.conf import settings -from django.utils import timezone from documents.loggers import LoggingMixin from documents.signals import document_consumer_declaration from documents.utils import copy_file_with_basic_stats from documents.utils import run_subprocess -from paperless.config import OcrConfig -from paperless.utils import ocr_to_dateparser_languages if TYPE_CHECKING: import datetime - from collections.abc import Iterator # This regular expression will try to find dates in the document at # hand and will match the following formats: @@ -259,75 +254,6 @@ def make_thumbnail_from_pdf(in_path: Path, temp_dir: Path, logging_group=None) - return out_path -def parse_date(filename, text) -> datetime.datetime | None: - return next(parse_date_generator(filename, text), None) - - -def parse_date_generator(filename, text) -> Iterator[datetime.datetime]: - """ - Returns the date of the document. - """ - - def __parser(ds: str, date_order: str) -> datetime.datetime: - """ - Call dateparser.parse with a particular date ordering - """ - import dateparser - - ocr_config = OcrConfig() - languages = settings.DATE_PARSER_LANGUAGES or ocr_to_dateparser_languages( - ocr_config.language, - ) - - return dateparser.parse( - ds, - settings={ - "DATE_ORDER": date_order, - "PREFER_DAY_OF_MONTH": "first", - "RETURN_AS_TIMEZONE_AWARE": True, - "TIMEZONE": settings.TIME_ZONE, - }, - locales=languages, - ) - - def __filter(date: datetime.datetime) -> datetime.datetime | None: - if ( - date is not None - and date.year > 1900 - and date <= timezone.now() - and date.date() not in settings.IGNORE_DATES - ): - return date - return None - - def __process_match( - match: Match[str], - date_order: str, - ) -> datetime.datetime | None: - date_string = match.group(0) - - try: - date = __parser(date_string, date_order) - except Exception: - # Skip all matches that do not parse to a proper date - date = None - - return __filter(date) - - def __process_content(content: str, date_order: str) -> Iterator[datetime.datetime]: - for m in re.finditer(DATE_REGEX, content): - date = __process_match(m, date_order) - if date is not None: - yield date - - # if filename date parsing is enabled, search there first: - if settings.FILENAME_DATE_ORDER: - yield from __process_content(filename, settings.FILENAME_DATE_ORDER) - - # Iterate through all regex matches in text and try to parse the date - yield from __process_content(text, settings.DATE_ORDER) - - class ParseError(Exception): pass @@ -340,7 +266,7 @@ class DocumentParser(LoggingMixin): logging_name = "paperless.parsing" - def __init__(self, logging_group, progress_callback=None): + def __init__(self, logging_group, progress_callback=None) -> None: super().__init__() self.renew_logging_group() self.logging_group = logging_group @@ -355,7 +281,7 @@ class DocumentParser(LoggingMixin): self.date: datetime.datetime | None = None self.progress_callback = progress_callback - def progress(self, current_progress, max_progress): + def progress(self, current_progress, max_progress) -> None: if self.progress_callback: self.progress_callback(current_progress, max_progress) @@ -380,7 +306,7 @@ class DocumentParser(LoggingMixin): def extract_metadata(self, document_path, mime_type): return [] - def get_page_count(self, document_path, mime_type): + def get_page_count(self, document_path, mime_type) -> None: return None def parse(self, document_path, mime_type, file_name=None): @@ -401,6 +327,6 @@ class DocumentParser(LoggingMixin): def get_date(self) -> datetime.datetime | None: return self.date - def cleanup(self): + def cleanup(self) -> None: self.log.debug(f"Deleting directory {self.tempdir}") shutil.rmtree(self.tempdir) diff --git a/src/documents/permissions.py b/src/documents/permissions.py index 9d5c9eb68..a47762c46 100644 --- a/src/documents/permissions.py +++ b/src/documents/permissions.py @@ -61,7 +61,12 @@ def get_groups_with_only_permission(obj, codename): return Group.objects.filter(id__in=group_object_perm_group_ids).distinct() -def set_permissions_for_object(permissions: dict, object, *, merge: bool = False): +def set_permissions_for_object( + permissions: dict, + object, + *, + merge: bool = False, +) -> None: """ Set permissions for an object. The permissions are given as a mapping of actions to a dict of user / group id lists, e.g. diff --git a/src/documents/plugins/date_parsing/__init__.py b/src/documents/plugins/date_parsing/__init__.py new file mode 100644 index 000000000..2eec1e242 --- /dev/null +++ b/src/documents/plugins/date_parsing/__init__.py @@ -0,0 +1,101 @@ +import logging +from functools import lru_cache +from importlib.metadata import EntryPoint +from importlib.metadata import entry_points +from typing import Final + +from django.conf import settings +from django.utils import timezone + +from documents.plugins.date_parsing.base import DateParserConfig +from documents.plugins.date_parsing.base import DateParserPluginBase +from documents.plugins.date_parsing.regex_parser import RegexDateParserPlugin +from paperless.config import OcrConfig +from paperless.utils import ocr_to_dateparser_languages + +logger = logging.getLogger(__name__) + +DATE_PARSER_ENTRY_POINT_GROUP: Final = "paperless_ngx.date_parsers" + + +@lru_cache(maxsize=1) +def _discover_parser_class() -> type[DateParserPluginBase]: + """ + Discovers the date parser plugin class to use. + + - If one or more plugins are found, sorts them by name and returns the first. + - If no plugins are found, returns the default RegexDateParser. + """ + + eps: tuple[EntryPoint, ...] + try: + eps = entry_points(group=DATE_PARSER_ENTRY_POINT_GROUP) + except Exception as e: + # Log a warning + logger.warning(f"Could not query entry points for date parsers: {e}") + eps = () + + valid_plugins: list[EntryPoint] = [] + for ep in eps: + try: + plugin_class = ep.load() + if plugin_class and issubclass(plugin_class, DateParserPluginBase): + valid_plugins.append(ep) + else: + logger.warning(f"Plugin {ep.name} does not subclass DateParser.") + except Exception as e: + logger.error(f"Unable to load date parser plugin {ep.name}: {e}") + + if not valid_plugins: + return RegexDateParserPlugin + + valid_plugins.sort(key=lambda ep: ep.name) + + if len(valid_plugins) > 1: + logger.warning( + f"Multiple date parsers found: " + f"{[ep.name for ep in valid_plugins]}. " + f"Using the first one by name: '{valid_plugins[0].name}'.", + ) + + return valid_plugins[0].load() + + +def get_date_parser() -> DateParserPluginBase: + """ + Factory function to get an initialized date parser instance. + + This function is responsible for: + 1. Discovering the correct parser class (plugin or default). + 2. Loading configuration from Django settings. + 3. Instantiating the parser with the configuration. + """ + # 1. Discover the class (this is cached) + parser_class = _discover_parser_class() + + # 2. Load configuration from settings + # TODO: Get the language from the settings and/or configuration object, depending + ocr_config = OcrConfig() + languages = settings.DATE_PARSER_LANGUAGES or ocr_to_dateparser_languages( + ocr_config.language, + ) + + config = DateParserConfig( + languages=languages, + timezone_str=settings.TIME_ZONE, + ignore_dates=settings.IGNORE_DATES, + reference_time=timezone.now(), + filename_date_order=settings.FILENAME_DATE_ORDER, + content_date_order=settings.DATE_ORDER, + ) + + # 3. Instantiate the discovered class with the config + return parser_class(config=config) + + +__all__ = [ + "DateParserConfig", + "DateParserPluginBase", + "RegexDateParserPlugin", + "get_date_parser", +] diff --git a/src/documents/plugins/date_parsing/base.py b/src/documents/plugins/date_parsing/base.py new file mode 100644 index 000000000..c6df1a70f --- /dev/null +++ b/src/documents/plugins/date_parsing/base.py @@ -0,0 +1,124 @@ +import datetime +import logging +from abc import ABC +from abc import abstractmethod +from collections.abc import Iterator +from dataclasses import dataclass +from types import TracebackType + +try: + from typing import Self +except ImportError: + from typing_extensions import Self + +import dateparser + +logger = logging.getLogger(__name__) + + +@dataclass(frozen=True, slots=True) +class DateParserConfig: + """ + Configuration for a DateParser instance. + + This object is created by the factory and passed to the + parser's constructor, decoupling the parser from settings. + """ + + languages: list[str] + timezone_str: str + ignore_dates: set[datetime.date] + + # A "now" timestamp for filtering future dates. + # Passed in by the factory. + reference_time: datetime.datetime + + # Settings for the default RegexDateParser + # Other plugins should use or consider these, but it is not required + filename_date_order: str | None + content_date_order: str + + +class DateParserPluginBase(ABC): + """ + Abstract base class for date parsing strategies. + + Instances are configured via a DateParserConfig object. + """ + + def __init__(self, config: DateParserConfig): + """ + Initializes the parser with its configuration. + """ + self.config = config + + def __enter__(self) -> Self: + """ + Enter the runtime context related to this object. + + Subclasses can override this to acquire resources (connections, handles). + """ + return self + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc_val: BaseException | None, + exc_tb: TracebackType | None, + ) -> None: + """ + Exit the runtime context related to this object. + + Subclasses can override this to release resources. + """ + # Default implementation does nothing. + # Returning None implies exceptions are propagated. + + def _parse_string( + self, + date_string: str, + date_order: str, + ) -> datetime.datetime | None: + """ + Helper method to parse a single date string using dateparser. + + Uses configuration from `self.config`. + """ + try: + return dateparser.parse( + date_string, + settings={ + "DATE_ORDER": date_order, + "PREFER_DAY_OF_MONTH": "first", + "RETURN_AS_TIMEZONE_AWARE": True, + "TIMEZONE": self.config.timezone_str, + }, + locales=self.config.languages, + ) + except Exception as e: + logger.error(f"Error while parsing date string '{date_string}': {e}") + return None + + def _filter_date( + self, + date: datetime.datetime | None, + ) -> datetime.datetime | None: + """ + Helper method to validate a parsed datetime object. + + Uses configuration from `self.config`. + """ + if ( + date is not None + and date.year > 1900 + and date <= self.config.reference_time + and date.date() not in self.config.ignore_dates + ): + return date + return None + + @abstractmethod + def parse(self, filename: str, content: str) -> Iterator[datetime.datetime]: + """ + Parses a document's filename and content, yielding valid datetime objects. + """ diff --git a/src/documents/plugins/date_parsing/regex_parser.py b/src/documents/plugins/date_parsing/regex_parser.py new file mode 100644 index 000000000..2df8f9295 --- /dev/null +++ b/src/documents/plugins/date_parsing/regex_parser.py @@ -0,0 +1,65 @@ +import datetime +import re +from collections.abc import Iterator +from re import Match + +from documents.plugins.date_parsing.base import DateParserPluginBase + + +class RegexDateParserPlugin(DateParserPluginBase): + """ + The default date parser, using a series of regular expressions. + + It is configured entirely by the DateParserConfig object + passed to its constructor. + """ + + DATE_REGEX = re.compile( + r"(\b|(?!=([_-])))(\d{1,2})[\.\/-](\d{1,2})[\.\/-](\d{4}|\d{2})(\b|(?=([_-])))|" + r"(\b|(?!=([_-])))(\d{4}|\d{2})[\.\/-](\d{1,2})[\.\/-](\d{1,2})(\b|(?=([_-])))|" + r"(\b|(?!=([_-])))(\d{1,2}[\. ]+[a-zéûäëčžúřěáíóńźçŞğü]{3,9} \d{4}|[a-zéûäëčžúřěáíóńźçŞğü]{3,9} \d{1,2}, \d{4})(\b|(?=([_-])))|" + r"(\b|(?!=([_-])))([^\W\d_]{3,9} \d{1,2}, (\d{4}))(\b|(?=([_-])))|" + r"(\b|(?!=([_-])))([^\W\d_]{3,9} \d{4})(\b|(?=([_-])))|" + r"(\b|(?!=([_-])))(\d{1,2}[^ 0-9]{2}[\. ]+[^ ]{3,9}[ \.\/-]\d{4})(\b|(?=([_-])))|" + r"(\b|(?!=([_-])))(\b\d{1,2}[ \.\/-][a-zéûäëčžúřěáíóńźçŞğü]{3}[ \.\/-]\d{4})(\b|(?=([_-])))", + re.IGNORECASE, + ) + + def _process_match( + self, + match: Match[str], + date_order: str, + ) -> datetime.datetime | None: + """ + Processes a single regex match using the base class helpers. + """ + date_string = match.group(0) + date = self._parse_string(date_string, date_order) + return self._filter_date(date) + + def _process_content( + self, + content: str, + date_order: str, + ) -> Iterator[datetime.datetime]: + """ + Finds all regex matches in content and yields valid dates. + """ + for m in re.finditer(self.DATE_REGEX, content): + date = self._process_match(m, date_order) + if date is not None: + yield date + + def parse(self, filename: str, content: str) -> Iterator[datetime.datetime]: + """ + Implementation of the abstract parse method. + + Reads its configuration from `self.config`. + """ + if self.config.filename_date_order: + yield from self._process_content( + filename, + self.config.filename_date_order, + ) + + yield from self._process_content(content, self.config.content_date_order) diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index 5e5510971..08763d937 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -16,23 +16,23 @@ from paperless.config import GeneralConfig class SanityCheckMessages: - def __init__(self): + def __init__(self) -> None: self._messages: dict[int, list[dict]] = defaultdict(list) self.has_error = False self.has_warning = False - def error(self, doc_pk, message): + def error(self, doc_pk, message) -> None: self._messages[doc_pk].append({"level": logging.ERROR, "message": message}) self.has_error = True - def warning(self, doc_pk, message): + def warning(self, doc_pk, message) -> None: self._messages[doc_pk].append({"level": logging.WARNING, "message": message}) self.has_warning = True - def info(self, doc_pk, message): + def info(self, doc_pk, message) -> None: self._messages[doc_pk].append({"level": logging.INFO, "message": message}) - def log_messages(self): + def log_messages(self) -> None: logger = logging.getLogger("paperless.sanity_checker") if len(self._messages) == 0: diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index de5f4d33f..5fd159772 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -43,6 +43,7 @@ from guardian.utils import get_group_obj_perms_model from guardian.utils import get_user_obj_perms_model from rest_framework import fields from rest_framework import serializers +from rest_framework.exceptions import PermissionDenied from rest_framework.fields import SerializerMethodField from rest_framework.filters import OrderingFilter @@ -100,7 +101,7 @@ class DynamicFieldsModelSerializer(serializers.ModelSerializer): controls which fields should be displayed. """ - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: # Don't pass the 'fields' arg up to the superclass fields = kwargs.pop("fields", None) @@ -204,12 +205,12 @@ class SetPermissionsMixin: del permissions_dict[action] return permissions_dict - def _set_permissions(self, permissions, object): + def _set_permissions(self, permissions, object) -> None: set_permissions_for_object(permissions, object) class SerializerWithPerms(serializers.Serializer): - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: self.user = kwargs.pop("user", None) self.full_perms = kwargs.pop("full_perms", False) self.all_fields = kwargs.pop("all_fields", False) @@ -258,7 +259,7 @@ class OwnedObjectSerializer( serializers.ModelSerializer, SetPermissionsMixin, ): - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) if not self.all_fields: @@ -408,7 +409,7 @@ class OwnedObjectSerializer( ) # other methods in mixin - def validate_unique_together(self, validated_data, instance=None): + def validate_unique_together(self, validated_data, instance=None) -> None: # workaround for https://github.com/encode/django-rest-framework/issues/9358 if "owner" in validated_data and "name" in self.Meta.fields: name = validated_data.get("name", instance.name if instance else None) @@ -444,6 +445,19 @@ class OwnedObjectSerializer( return instance def update(self, instance, validated_data): + user = getattr(self, "user", None) + is_superuser = user.is_superuser if user is not None else False + is_owner = instance.owner == user if user is not None else False + is_unowned = instance.owner is None + + if ( + ("owner" in validated_data and validated_data["owner"] != instance.owner) + or "set_permissions" in validated_data + ) and not (is_superuser or is_owner or is_unowned): + raise PermissionDenied( + _("Insufficient permissions."), + ) + if "set_permissions" in validated_data: self._set_permissions(validated_data["set_permissions"], instance) self.validate_unique_together(validated_data, instance) @@ -706,7 +720,7 @@ class StoragePathField(serializers.PrimaryKeyRelatedField): class CustomFieldSerializer(serializers.ModelSerializer): - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: context = kwargs.get("context") self.api_version = int( context.get("request").version @@ -832,7 +846,7 @@ class ReadWriteSerializerMethodField(serializers.SerializerMethodField): Based on https://stackoverflow.com/a/62579804 """ - def __init__(self, method_name=None, *args, **kwargs): + def __init__(self, method_name=None, *args, **kwargs) -> None: self.method_name = method_name kwargs["source"] = "*" super(serializers.SerializerMethodField, self).__init__(*args, **kwargs) @@ -1247,7 +1261,7 @@ class DocumentSerializer( CustomFieldInstance.deleted_objects.filter(document=instance).delete() return instance - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: self.truncate_content = kwargs.pop("truncate_content", False) # return full permissions if we're doing a PATCH or PUT @@ -1442,7 +1456,7 @@ class DocumentListSerializer(serializers.Serializer): child=serializers.IntegerField(), ) - def _validate_document_id_list(self, documents, name="documents"): + def _validate_document_id_list(self, documents, name="documents") -> None: if not isinstance(documents, list): raise serializers.ValidationError(f"{name} must be a list") if not all(isinstance(i, int) for i in documents): @@ -1488,7 +1502,7 @@ class BulkEditSerializer( parameters = serializers.DictField(allow_empty=True, default={}, write_only=True) - def _validate_tag_id_list(self, tags, name="tags"): + def _validate_tag_id_list(self, tags, name="tags") -> None: if not isinstance(tags, list): raise serializers.ValidationError(f"{name} must be a list") if not all(isinstance(i, int) for i in tags): @@ -1503,7 +1517,7 @@ class BulkEditSerializer( self, custom_fields, name="custom_fields", - ): + ) -> None: ids = custom_fields if isinstance(custom_fields, dict): try: @@ -1562,7 +1576,7 @@ class BulkEditSerializer( # This will never happen as it is handled by the ChoiceField raise serializers.ValidationError("Unsupported method.") - def _validate_parameters_tags(self, parameters): + def _validate_parameters_tags(self, parameters) -> None: if "tag" in parameters: tag_id = parameters["tag"] try: @@ -1572,7 +1586,7 @@ class BulkEditSerializer( else: raise serializers.ValidationError("tag not specified") - def _validate_parameters_document_type(self, parameters): + def _validate_parameters_document_type(self, parameters) -> None: if "document_type" in parameters: document_type_id = parameters["document_type"] if document_type_id is None: @@ -1585,7 +1599,7 @@ class BulkEditSerializer( else: raise serializers.ValidationError("document_type not specified") - def _validate_parameters_correspondent(self, parameters): + def _validate_parameters_correspondent(self, parameters) -> None: if "correspondent" in parameters: correspondent_id = parameters["correspondent"] if correspondent_id is None: @@ -1597,7 +1611,7 @@ class BulkEditSerializer( else: raise serializers.ValidationError("correspondent not specified") - def _validate_storage_path(self, parameters): + def _validate_storage_path(self, parameters) -> None: if "storage_path" in parameters: storage_path_id = parameters["storage_path"] if storage_path_id is None: @@ -1611,7 +1625,7 @@ class BulkEditSerializer( else: raise serializers.ValidationError("storage path not specified") - def _validate_parameters_modify_tags(self, parameters): + def _validate_parameters_modify_tags(self, parameters) -> None: if "add_tags" in parameters: self._validate_tag_id_list(parameters["add_tags"], "add_tags") else: @@ -1622,7 +1636,7 @@ class BulkEditSerializer( else: raise serializers.ValidationError("remove_tags not specified") - def _validate_parameters_modify_custom_fields(self, parameters): + def _validate_parameters_modify_custom_fields(self, parameters) -> None: if "add_custom_fields" in parameters: self._validate_custom_field_id_list_or_dict( parameters["add_custom_fields"], @@ -1645,7 +1659,7 @@ class BulkEditSerializer( raise serializers.ValidationError("Specified owner cannot be found") return ownerUser - def _validate_parameters_set_permissions(self, parameters): + def _validate_parameters_set_permissions(self, parameters) -> None: parameters["set_permissions"] = self.validate_set_permissions( parameters["set_permissions"], ) @@ -1654,7 +1668,7 @@ class BulkEditSerializer( if "merge" not in parameters: parameters["merge"] = False - def _validate_parameters_rotate(self, parameters): + def _validate_parameters_rotate(self, parameters) -> None: try: if ( "degrees" not in parameters @@ -1664,7 +1678,7 @@ class BulkEditSerializer( except ValueError: raise serializers.ValidationError("invalid rotation degrees") - def _validate_parameters_split(self, parameters): + def _validate_parameters_split(self, parameters) -> None: if "pages" not in parameters: raise serializers.ValidationError("pages not specified") try: @@ -1693,7 +1707,7 @@ class BulkEditSerializer( else: parameters["delete_originals"] = False - def _validate_parameters_delete_pages(self, parameters): + def _validate_parameters_delete_pages(self, parameters) -> None: if "pages" not in parameters: raise serializers.ValidationError("pages not specified") if not isinstance(parameters["pages"], list): @@ -1701,7 +1715,7 @@ class BulkEditSerializer( if not all(isinstance(i, int) for i in parameters["pages"]): raise serializers.ValidationError("pages must be a list of integers") - def _validate_parameters_merge(self, parameters): + def _validate_parameters_merge(self, parameters) -> None: if "delete_originals" in parameters: if not isinstance(parameters["delete_originals"], bool): raise serializers.ValidationError("delete_originals must be a boolean") @@ -1713,7 +1727,7 @@ class BulkEditSerializer( else: parameters["archive_fallback"] = False - def _validate_parameters_edit_pdf(self, parameters, document_id): + def _validate_parameters_edit_pdf(self, parameters, document_id) -> None: if "operations" not in parameters: raise serializers.ValidationError("operations not specified") if not isinstance(parameters["operations"], list): @@ -2198,7 +2212,7 @@ class AcknowledgeTasksViewSerializer(serializers.Serializer): child=serializers.IntegerField(), ) - def _validate_task_id_list(self, tasks, name="tasks"): + def _validate_task_id_list(self, tasks, name="tasks") -> None: if not isinstance(tasks, list): raise serializers.ValidationError(f"{name} must be a list") if not all(isinstance(i, int) for i in tasks): @@ -2403,7 +2417,7 @@ class BulkEditObjectsSerializer(SerializerWithPerms, SetPermissionsMixin): ) return objects - def _validate_permissions(self, permissions): + def _validate_permissions(self, permissions) -> None: self.validate_set_permissions( permissions, ) @@ -2515,7 +2529,7 @@ class WorkflowTriggerSerializer(serializers.ModelSerializer): return attrs @staticmethod - def normalize_workflow_trigger_sources(trigger): + def normalize_workflow_trigger_sources(trigger) -> None: """ Convert sources to strings to handle django-multiselectfield v1.0 changes """ @@ -2613,6 +2627,7 @@ class WorkflowActionSerializer(serializers.ModelSerializer): "remove_change_groups", "email", "webhook", + "passwords", ] def validate(self, attrs): @@ -2669,6 +2684,23 @@ class WorkflowActionSerializer(serializers.ModelSerializer): "Webhook data is required for webhook actions", ) + if ( + "type" in attrs + and attrs["type"] == WorkflowAction.WorkflowActionType.PASSWORD_REMOVAL + ): + passwords = attrs.get("passwords") + # ensure passwords is a non-empty list of non-empty strings + if ( + passwords is None + or not isinstance(passwords, list) + or len(passwords) == 0 + or any(not isinstance(pw, str) for pw in passwords) + or any(len(pw.strip()) == 0 for pw in passwords) + ): + raise serializers.ValidationError( + "Passwords are required for password removal actions", + ) + return attrs @@ -2689,7 +2721,12 @@ class WorkflowSerializer(serializers.ModelSerializer): "actions", ] - def update_triggers_and_actions(self, instance: Workflow, triggers, actions): + def update_triggers_and_actions( + self, + instance: Workflow, + triggers, + actions, + ) -> None: set_triggers = [] set_actions = [] @@ -2849,7 +2886,7 @@ class WorkflowSerializer(serializers.ModelSerializer): instance.actions.set(set_actions) instance.save() - def prune_triggers_and_actions(self): + def prune_triggers_and_actions(self) -> None: """ ManyToMany fields dont support e.g. on_delete so we need to discard unattached triggers and actions manually diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index cfd2f185b..47ebab6f5 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -48,6 +48,7 @@ from documents.permissions import get_objects_for_user_owner_aware from documents.templating.utils import convert_format_str_to_template_format from documents.workflows.actions import build_workflow_action_context from documents.workflows.actions import execute_email_action +from documents.workflows.actions import execute_password_removal_action from documents.workflows.actions import execute_webhook_action from documents.workflows.mutations import apply_assignment_to_document from documents.workflows.mutations import apply_assignment_to_overrides @@ -64,7 +65,7 @@ if TYPE_CHECKING: logger = logging.getLogger("paperless.handlers") -def add_inbox_tags(sender, document: Document, logging_group=None, **kwargs): +def add_inbox_tags(sender, document: Document, logging_group=None, **kwargs) -> None: if document.owner is not None: tags = get_objects_for_user_owner_aware( document.owner, @@ -84,7 +85,7 @@ def _suggestion_printer( document: Document, selected: MatchingModel, base_url: str | None = None, -): +) -> None: """ Smaller helper to reduce duplication when just outputting suggestions to the console """ @@ -110,7 +111,7 @@ def set_correspondent( stdout=None, style_func=None, **kwargs, -): +) -> None: if document.correspondent and not replace: return @@ -166,7 +167,7 @@ def set_document_type( stdout=None, style_func=None, **kwargs, -): +) -> None: if document.document_type and not replace: return @@ -222,7 +223,7 @@ def set_tags( stdout=None, style_func=None, **kwargs, -): +) -> None: if replace: Document.tags.through.objects.filter(document=document).exclude( Q(tag__is_inbox_tag=True), @@ -279,7 +280,7 @@ def set_storage_path( stdout=None, style_func=None, **kwargs, -): +) -> None: if document.storage_path and not replace: return @@ -327,7 +328,7 @@ def set_storage_path( # see empty_trash in documents/tasks.py for signal handling -def cleanup_document_deletion(sender, instance, **kwargs): +def cleanup_document_deletion(sender, instance, **kwargs) -> None: with FileLock(settings.MEDIA_LOCK): if settings.EMPTY_TRASH_DIR: # Find a non-conflicting filename in case a document with the same @@ -415,13 +416,13 @@ def update_filename_and_move_files( sender, instance: Document | CustomFieldInstance, **kwargs, -): +) -> None: if isinstance(instance, CustomFieldInstance): if not _filename_template_uses_custom_fields(instance.document): return instance = instance.document - def validate_move(instance, old_path: Path, new_path: Path, root: Path): + def validate_move(instance, old_path: Path, new_path: Path, root: Path) -> None: if not new_path.is_relative_to(root): msg = ( f"Document {instance!s}: Refusing to move file outside root {root}: " @@ -594,7 +595,7 @@ def update_filename_and_move_files( @shared_task -def process_cf_select_update(custom_field: CustomField): +def process_cf_select_update(custom_field: CustomField) -> None: """ Update documents tied to a select custom field: @@ -620,7 +621,11 @@ def process_cf_select_update(custom_field: CustomField): # should be disabled in /src/documents/management/commands/document_importer.py handle @receiver(models.signals.post_save, sender=CustomField) -def check_paths_and_prune_custom_fields(sender, instance: CustomField, **kwargs): +def check_paths_and_prune_custom_fields( + sender, + instance: CustomField, + **kwargs, +) -> None: """ When a custom field is updated, check if we need to update any documents. Done async to avoid slowing down the save operation. """ @@ -633,7 +638,7 @@ def check_paths_and_prune_custom_fields(sender, instance: CustomField, **kwargs) @receiver(models.signals.post_delete, sender=CustomField) -def cleanup_custom_field_deletion(sender, instance: CustomField, **kwargs): +def cleanup_custom_field_deletion(sender, instance: CustomField, **kwargs) -> None: """ When a custom field is deleted, ensure no saved views reference it. """ @@ -670,7 +675,7 @@ def update_llm_suggestions_cache(sender, instance, **kwargs): @receiver(models.signals.post_delete, sender=User) @receiver(models.signals.post_delete, sender=Group) -def cleanup_user_deletion(sender, instance: User | Group, **kwargs): +def cleanup_user_deletion(sender, instance: User | Group, **kwargs) -> None: """ When a user or group is deleted, remove non-cascading references. At the moment, just the default permission settings in UiSettings. @@ -713,7 +718,7 @@ def cleanup_user_deletion(sender, instance: User | Group, **kwargs): ) -def add_to_index(sender, document, **kwargs): +def add_to_index(sender, document, **kwargs) -> None: from documents import index index.add_or_update_document(document) @@ -725,7 +730,7 @@ def run_workflows_added( logging_group=None, original_file=None, **kwargs, -): +) -> None: run_workflows( trigger_type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_ADDED, document=document, @@ -735,7 +740,12 @@ def run_workflows_added( ) -def run_workflows_updated(sender, document: Document, logging_group=None, **kwargs): +def run_workflows_updated( + sender, + document: Document, + logging_group=None, + **kwargs, +) -> None: run_workflows( trigger_type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED, document=document, @@ -822,6 +832,8 @@ def run_workflows( logging_group, original_file, ) + elif action.type == WorkflowAction.WorkflowActionType.PASSWORD_REMOVAL: + execute_password_removal_action(action, document, logging_group) if not use_overrides: # limit title to 128 characters @@ -841,7 +853,7 @@ def run_workflows( @before_task_publish.connect -def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs): +def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs) -> None: """ Creates the PaperlessTask object in a pending state. This is sent before the task reaches the broker, but before it begins executing on a worker. @@ -883,7 +895,7 @@ def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs): @task_prerun.connect -def task_prerun_handler(sender=None, task_id=None, task=None, **kwargs): +def task_prerun_handler(sender=None, task_id=None, task=None, **kwargs) -> None: """ Updates the PaperlessTask to be started. Sent before the task begins execution @@ -913,7 +925,7 @@ def task_postrun_handler( retval=None, state=None, **kwargs, -): +) -> None: """ Updates the result of the PaperlessTask. @@ -942,7 +954,7 @@ def task_failure_handler( args=None, traceback=None, **kwargs, -): +) -> None: """ Updates the result of a failed PaperlessTask. @@ -962,7 +974,7 @@ def task_failure_handler( @worker_process_init.connect -def close_connection_pool_on_worker_init(**kwargs): +def close_connection_pool_on_worker_init(**kwargs) -> None: """ Close the DB connection pool for each Celery child process after it starts. diff --git a/src/documents/tasks.py b/src/documents/tasks.py index fc8911705..1e8b35891 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -29,6 +29,7 @@ from documents.bulk_download import OriginalsOnlyStrategy from documents.caching import clear_document_caches from documents.classifier import DocumentClassifier from documents.classifier import load_classifier +from documents.consumer import AsnCheckPlugin from documents.consumer import ConsumerPlugin from documents.consumer import ConsumerPreflightPlugin from documents.consumer import WorkflowTriggerPlugin @@ -71,13 +72,13 @@ logger = logging.getLogger("paperless.tasks") @shared_task -def index_optimize(): +def index_optimize() -> None: ix = index.open_index() writer = AsyncWriter(ix) writer.commit(optimize=True) -def index_reindex(*, progress_bar_disable=False): +def index_reindex(*, progress_bar_disable=False) -> None: documents = Document.objects.all() ix = index.open_index(recreate=True) @@ -88,7 +89,7 @@ def index_reindex(*, progress_bar_disable=False): @shared_task -def train_classifier(*, scheduled=True): +def train_classifier(*, scheduled=True) -> None: task = PaperlessTask.objects.create( type=PaperlessTask.TaskType.SCHEDULED_TASK if scheduled @@ -157,8 +158,10 @@ def consume_file( plugins: list[type[ConsumeTaskPlugin]] = [ ConsumerPreflightPlugin, + AsnCheckPlugin, CollatePlugin, BarcodePlugin, + AsnCheckPlugin, # Re-run ASN check after barcode reading WorkflowTriggerPlugin, ConsumerPlugin, ] @@ -234,7 +237,7 @@ def sanity_check(*, scheduled=True, raise_on_error=True): @shared_task -def bulk_update_documents(document_ids): +def bulk_update_documents(document_ids) -> None: documents = Document.objects.filter(id__in=document_ids) ix = index.open_index() @@ -261,7 +264,7 @@ def bulk_update_documents(document_ids): @shared_task -def update_document_content_maybe_archive_file(document_id): +def update_document_content_maybe_archive_file(document_id) -> None: """ Re-creates OCR content and thumbnail for a document, and archive file if it exists. @@ -373,7 +376,7 @@ def update_document_content_maybe_archive_file(document_id): @shared_task -def empty_trash(doc_ids=None): +def empty_trash(doc_ids=None) -> None: if doc_ids is None: logger.info("Emptying trash of all expired documents") documents = ( @@ -410,7 +413,7 @@ def empty_trash(doc_ids=None): @shared_task -def check_scheduled_workflows(): +def check_scheduled_workflows() -> None: """ Check and run all enabled scheduled workflows. @@ -588,7 +591,7 @@ def llmindex_index( rebuild=False, scheduled=True, auto=False, -): +) -> None: ai_config = AIConfig() if ai_config.llm_index_enabled: task = PaperlessTask.objects.create( @@ -624,17 +627,17 @@ def llmindex_index( @shared_task -def update_document_in_llm_index(document): +def update_document_in_llm_index(document) -> None: llm_index_add_or_update_document(document) @shared_task -def remove_document_from_llm_index(document): +def remove_document_from_llm_index(document) -> None: llm_index_remove_document(document) @shared_task -def build_share_link_bundle(bundle_id: int): +def build_share_link_bundle(bundle_id: int) -> None: try: bundle = ( ShareLinkBundle.objects.filter(pk=bundle_id) @@ -726,7 +729,7 @@ def build_share_link_bundle(bundle_id: int): @shared_task -def cleanup_expired_share_link_bundles(): +def cleanup_expired_share_link_bundles() -> None: now = timezone.now() expired_qs = ShareLinkBundle.objects.filter( expiration__isnull=False, diff --git a/src/documents/tests/date_parsing/__init__.py b/src/documents/tests/date_parsing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/documents/tests/date_parsing/conftest.py b/src/documents/tests/date_parsing/conftest.py new file mode 100644 index 000000000..ea9e2447d --- /dev/null +++ b/src/documents/tests/date_parsing/conftest.py @@ -0,0 +1,82 @@ +import datetime +from collections.abc import Generator +from typing import Any + +import pytest +import pytest_django + +from documents.plugins.date_parsing import _discover_parser_class +from documents.plugins.date_parsing.base import DateParserConfig +from documents.plugins.date_parsing.regex_parser import RegexDateParserPlugin + + +@pytest.fixture +def base_config() -> DateParserConfig: + """Basic configuration for date parser testing.""" + return DateParserConfig( + languages=["en"], + timezone_str="UTC", + ignore_dates=set(), + reference_time=datetime.datetime( + 2024, + 1, + 15, + 12, + 0, + 0, + tzinfo=datetime.timezone.utc, + ), + filename_date_order="YMD", + content_date_order="DMY", + ) + + +@pytest.fixture +def config_with_ignore_dates() -> DateParserConfig: + """Configuration with dates to ignore.""" + return DateParserConfig( + languages=["en", "de"], + timezone_str="America/New_York", + ignore_dates={datetime.date(2024, 1, 1), datetime.date(2024, 12, 25)}, + reference_time=datetime.datetime( + 2024, + 1, + 15, + 12, + 0, + 0, + tzinfo=datetime.timezone.utc, + ), + filename_date_order="DMY", + content_date_order="MDY", + ) + + +@pytest.fixture +def regex_parser(base_config: DateParserConfig) -> RegexDateParserPlugin: + """Instance of RegexDateParser with base config.""" + return RegexDateParserPlugin(base_config) + + +@pytest.fixture +def clear_lru_cache() -> Generator[None, None, None]: + """ + Ensure the LRU cache for _discover_parser_class is cleared + before and after any test that depends on it. + """ + _discover_parser_class.cache_clear() + yield + _discover_parser_class.cache_clear() + + +@pytest.fixture +def mock_date_parser_settings(settings: pytest_django.fixtures.SettingsWrapper) -> Any: + """ + Override Django settings for the duration of date parser tests. + """ + settings.DATE_PARSER_LANGUAGES = ["en", "de"] + settings.TIME_ZONE = "UTC" + settings.IGNORE_DATES = [datetime.date(1900, 1, 1)] + settings.FILENAME_DATE_ORDER = "YMD" + settings.DATE_ORDER = "DMY" + return settings diff --git a/src/documents/tests/date_parsing/test_date_parser_plugin_loading.py b/src/documents/tests/date_parsing/test_date_parser_plugin_loading.py new file mode 100644 index 000000000..5d870fea1 --- /dev/null +++ b/src/documents/tests/date_parsing/test_date_parser_plugin_loading.py @@ -0,0 +1,229 @@ +import datetime +import logging +from collections.abc import Iterator +from importlib.metadata import EntryPoint + +import pytest +import pytest_mock +from django.utils import timezone + +from documents.plugins.date_parsing import DATE_PARSER_ENTRY_POINT_GROUP +from documents.plugins.date_parsing import _discover_parser_class +from documents.plugins.date_parsing import get_date_parser +from documents.plugins.date_parsing.base import DateParserConfig +from documents.plugins.date_parsing.base import DateParserPluginBase +from documents.plugins.date_parsing.regex_parser import RegexDateParserPlugin + + +class AlphaParser(DateParserPluginBase): + def parse(self, filename: str, content: str) -> Iterator[datetime.datetime]: + yield timezone.now() + + +class BetaParser(DateParserPluginBase): + def parse(self, filename: str, content: str) -> Iterator[datetime.datetime]: + yield timezone.now() + + +@pytest.mark.date_parsing +@pytest.mark.usefixtures("clear_lru_cache") +class TestDiscoverParserClass: + """Tests for the _discover_parser_class() function.""" + + def test_returns_default_when_no_plugins_found( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(), + ) + result = _discover_parser_class() + assert result is RegexDateParserPlugin + + def test_returns_default_when_entrypoint_query_fails( + self, + mocker: pytest_mock.MockerFixture, + caplog: pytest.LogCaptureFixture, + ) -> None: + mocker.patch( + "documents.plugins.date_parsing.entry_points", + side_effect=RuntimeError("boom"), + ) + result = _discover_parser_class() + assert result is RegexDateParserPlugin + assert "Could not query entry points" in caplog.text + + def test_filters_out_invalid_plugins( + self, + mocker: pytest_mock.MockerFixture, + caplog: pytest.LogCaptureFixture, + ) -> None: + fake_ep = mocker.MagicMock(spec=EntryPoint) + fake_ep.name = "bad_plugin" + fake_ep.load.return_value = object # not subclass of DateParser + + mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(fake_ep,), + ) + + result = _discover_parser_class() + assert result is RegexDateParserPlugin + assert "does not subclass DateParser" in caplog.text + + def test_skips_plugins_that_fail_to_load( + self, + mocker: pytest_mock.MockerFixture, + caplog: pytest.LogCaptureFixture, + ) -> None: + fake_ep = mocker.MagicMock(spec=EntryPoint) + fake_ep.name = "failing_plugin" + fake_ep.load.side_effect = ImportError("cannot import") + + mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(fake_ep,), + ) + + result = _discover_parser_class() + assert result is RegexDateParserPlugin + assert "Unable to load date parser plugin failing_plugin" in caplog.text + + def test_returns_single_valid_plugin_without_warning( + self, + mocker: pytest_mock.MockerFixture, + caplog: pytest.LogCaptureFixture, + ) -> None: + """If exactly one valid plugin is discovered, it should be returned without logging a warning.""" + + ep = mocker.MagicMock(spec=EntryPoint) + ep.name = "alpha" + ep.load.return_value = AlphaParser + + mock_entry_points = mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(ep,), + ) + + with caplog.at_level( + logging.WARNING, + logger="documents.plugins.date_parsing", + ): + result = _discover_parser_class() + + # It should have called entry_points with the correct group + mock_entry_points.assert_called_once_with(group=DATE_PARSER_ENTRY_POINT_GROUP) + + # The discovered class should be exactly our AlphaParser + assert result is AlphaParser + + # No warnings should have been logged + assert not any( + "Multiple date parsers found" in record.message for record in caplog.records + ), "Unexpected warning logged when only one plugin was found" + + def test_returns_first_valid_plugin_by_name( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + ep_a = mocker.MagicMock(spec=EntryPoint) + ep_a.name = "alpha" + ep_a.load.return_value = AlphaParser + + ep_b = mocker.MagicMock(spec=EntryPoint) + ep_b.name = "beta" + ep_b.load.return_value = BetaParser + + mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(ep_b, ep_a), + ) + + result = _discover_parser_class() + assert result is AlphaParser + + def test_logs_warning_if_multiple_plugins_found( + self, + mocker: pytest_mock.MockerFixture, + caplog: pytest.LogCaptureFixture, + ) -> None: + ep1 = mocker.MagicMock(spec=EntryPoint) + ep1.name = "a" + ep1.load.return_value = AlphaParser + + ep2 = mocker.MagicMock(spec=EntryPoint) + ep2.name = "b" + ep2.load.return_value = BetaParser + + mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(ep1, ep2), + ) + + with caplog.at_level( + logging.WARNING, + logger="documents.plugins.date_parsing", + ): + result = _discover_parser_class() + + # Should select alphabetically first plugin ("a") + assert result is AlphaParser + + # Should log a warning mentioning multiple parsers + assert any( + "Multiple date parsers found" in record.message for record in caplog.records + ), "Expected a warning about multiple date parsers" + + def test_cache_behavior_only_runs_once( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + mock_entry_points = mocker.patch( + "documents.plugins.date_parsing.entry_points", + return_value=(), + ) + + # First call populates cache + _discover_parser_class() + # Second call should not re-invoke entry_points + _discover_parser_class() + mock_entry_points.assert_called_once() + + +@pytest.mark.django_db +@pytest.mark.date_parsing +@pytest.mark.usefixtures("mock_date_parser_settings") +class TestGetDateParser: + """Tests for the get_date_parser() factory function.""" + + def test_returns_instance_of_discovered_class( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + mocker.patch( + "documents.plugins.date_parsing._discover_parser_class", + return_value=AlphaParser, + ) + parser = get_date_parser() + assert isinstance(parser, AlphaParser) + assert isinstance(parser.config, DateParserConfig) + assert parser.config.languages == ["en", "de"] + assert parser.config.timezone_str == "UTC" + assert parser.config.ignore_dates == [datetime.date(1900, 1, 1)] + assert parser.config.filename_date_order == "YMD" + assert parser.config.content_date_order == "DMY" + # Check reference_time near now + delta = abs((parser.config.reference_time - timezone.now()).total_seconds()) + assert delta < 2 + + def test_uses_default_regex_parser_when_no_plugins( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + mocker.patch( + "documents.plugins.date_parsing._discover_parser_class", + return_value=RegexDateParserPlugin, + ) + parser = get_date_parser() + assert isinstance(parser, RegexDateParserPlugin) diff --git a/src/documents/tests/date_parsing/test_date_parsing.py b/src/documents/tests/date_parsing/test_date_parsing.py new file mode 100644 index 000000000..a587b32cc --- /dev/null +++ b/src/documents/tests/date_parsing/test_date_parsing.py @@ -0,0 +1,433 @@ +import datetime +import logging +from typing import Any + +import pytest +import pytest_mock + +from documents.plugins.date_parsing.base import DateParserConfig +from documents.plugins.date_parsing.regex_parser import RegexDateParserPlugin + + +@pytest.mark.date_parsing +class TestParseString: + """Tests for DateParser._parse_string method via RegexDateParser.""" + + @pytest.mark.parametrize( + ("date_string", "date_order", "expected_year"), + [ + pytest.param("15/01/2024", "DMY", 2024, id="dmy_slash"), + pytest.param("01/15/2024", "MDY", 2024, id="mdy_slash"), + pytest.param("2024/01/15", "YMD", 2024, id="ymd_slash"), + pytest.param("January 15, 2024", "DMY", 2024, id="month_name_comma"), + pytest.param("15 Jan 2024", "DMY", 2024, id="day_abbr_month_year"), + pytest.param("15.01.2024", "DMY", 2024, id="dmy_dot"), + pytest.param("2024-01-15", "YMD", 2024, id="ymd_dash"), + ], + ) + def test_parse_string_valid_formats( + self, + regex_parser: RegexDateParserPlugin, + date_string: str, + date_order: str, + expected_year: int, + ) -> None: + """Should correctly parse various valid date formats.""" + result = regex_parser._parse_string(date_string, date_order) + + assert result is not None + assert result.year == expected_year + + @pytest.mark.parametrize( + "invalid_string", + [ + pytest.param("not a date", id="plain_text"), + pytest.param("32/13/2024", id="invalid_day_month"), + pytest.param("", id="empty_string"), + pytest.param("abc123xyz", id="alphanumeric_gibberish"), + pytest.param("99/99/9999", id="out_of_range"), + ], + ) + def test_parse_string_invalid_input( + self, + regex_parser: RegexDateParserPlugin, + invalid_string: str, + ) -> None: + """Should return None for invalid date strings.""" + result = regex_parser._parse_string(invalid_string, "DMY") + + assert result is None + + def test_parse_string_handles_exceptions( + self, + caplog: pytest.LogCaptureFixture, + mocker: pytest_mock.MockerFixture, + regex_parser: RegexDateParserPlugin, + ) -> None: + """Should handle and log exceptions from dateparser gracefully.""" + with caplog.at_level( + logging.ERROR, + logger="documents.plugins.date_parsing.base", + ): + # We still need to mock dateparser.parse to force the exception + mocker.patch( + "documents.plugins.date_parsing.base.dateparser.parse", + side_effect=ValueError( + "Parsing error: 01/01/2024", + ), + ) + + # 1. Execute the function under test + result = regex_parser._parse_string("01/01/2024", "DMY") + + assert result is None + + # Check if an error was logged + assert len(caplog.records) == 1 + assert caplog.records[0].levelname == "ERROR" + + # Check if the specific error message is present + assert "Error while parsing date string" in caplog.text + # Optional: Check for the exact exception message if it's included in the log + assert "Parsing error: 01/01/2024" in caplog.text + + +@pytest.mark.date_parsing +class TestFilterDate: + """Tests for DateParser._filter_date method via RegexDateParser.""" + + @pytest.mark.parametrize( + ("date", "expected_output"), + [ + # Valid Dates + pytest.param( + datetime.datetime(2024, 1, 10, tzinfo=datetime.timezone.utc), + datetime.datetime(2024, 1, 10, tzinfo=datetime.timezone.utc), + id="valid_past_date", + ), + pytest.param( + datetime.datetime(2024, 1, 15, 12, 0, 0, tzinfo=datetime.timezone.utc), + datetime.datetime(2024, 1, 15, 12, 0, 0, tzinfo=datetime.timezone.utc), + id="exactly_at_reference", + ), + pytest.param( + datetime.datetime(1901, 1, 1, tzinfo=datetime.timezone.utc), + datetime.datetime(1901, 1, 1, tzinfo=datetime.timezone.utc), + id="year_1901_valid", + ), + # Date is > reference_time + pytest.param( + datetime.datetime(2024, 1, 16, tzinfo=datetime.timezone.utc), + None, + id="future_date_day_after", + ), + # date.date() in ignore_dates + pytest.param( + datetime.datetime(2024, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc), + None, + id="ignored_date_midnight_jan1", + ), + pytest.param( + datetime.datetime(2024, 1, 1, 10, 30, 0, tzinfo=datetime.timezone.utc), + None, + id="ignored_date_midday_jan1", + ), + pytest.param( + datetime.datetime(2024, 12, 25, 15, 0, 0, tzinfo=datetime.timezone.utc), + None, + id="ignored_date_dec25_future", + ), + # date.year <= 1900 + pytest.param( + datetime.datetime(1899, 12, 31, tzinfo=datetime.timezone.utc), + None, + id="year_1899", + ), + pytest.param( + datetime.datetime(1900, 1, 1, tzinfo=datetime.timezone.utc), + None, + id="year_1900_boundary", + ), + # date is None + pytest.param(None, None, id="none_input"), + ], + ) + def test_filter_date_validation_rules( + self, + config_with_ignore_dates: DateParserConfig, + date: datetime.datetime | None, + expected_output: datetime.datetime | None, + ) -> None: + """Should correctly validate dates against various rules.""" + parser = RegexDateParserPlugin(config_with_ignore_dates) + result = parser._filter_date(date) + assert result == expected_output + + def test_filter_date_respects_ignore_dates( + self, + config_with_ignore_dates: DateParserConfig, + ) -> None: + """Should filter out dates in the ignore_dates set.""" + parser = RegexDateParserPlugin(config_with_ignore_dates) + + ignored_date = datetime.datetime( + 2024, + 1, + 1, + 12, + 0, + tzinfo=datetime.timezone.utc, + ) + another_ignored = datetime.datetime( + 2024, + 12, + 25, + 15, + 30, + tzinfo=datetime.timezone.utc, + ) + allowed_date = datetime.datetime( + 2024, + 1, + 2, + 12, + 0, + tzinfo=datetime.timezone.utc, + ) + + assert parser._filter_date(ignored_date) is None + assert parser._filter_date(another_ignored) is None + assert parser._filter_date(allowed_date) == allowed_date + + def test_filter_date_timezone_aware( + self, + regex_parser: RegexDateParserPlugin, + ) -> None: + """Should work with timezone-aware datetimes.""" + date_utc = datetime.datetime(2024, 1, 10, 12, 0, tzinfo=datetime.timezone.utc) + + result = regex_parser._filter_date(date_utc) + + assert result is not None + assert result.tzinfo is not None + + +@pytest.mark.date_parsing +class TestRegexDateParser: + @pytest.mark.parametrize( + ("filename", "content", "expected"), + [ + pytest.param( + "report-2023-12-25.txt", + "Event recorded on 25/12/2022.", + [ + datetime.datetime(2023, 12, 25, tzinfo=datetime.timezone.utc), + datetime.datetime(2022, 12, 25, tzinfo=datetime.timezone.utc), + ], + id="filename-y-m-d_and_content-d-m-y", + ), + pytest.param( + "img_2023.01.02.jpg", + "Taken on 01/02/2023", + [ + datetime.datetime(2023, 1, 2, tzinfo=datetime.timezone.utc), + datetime.datetime(2023, 2, 1, tzinfo=datetime.timezone.utc), + ], + id="ambiguous-dates-respect-orders", + ), + pytest.param( + "notes.txt", + "bad date 99/99/9999 and 25/12/2022", + [ + datetime.datetime(2022, 12, 25, tzinfo=datetime.timezone.utc), + ], + id="parse-exception-skips-bad-and-yields-good", + ), + ], + ) + def test_parse_returns_expected_dates( + self, + base_config: DateParserConfig, + mocker: pytest_mock.MockerFixture, + filename: str, + content: str, + expected: list[datetime.datetime], + ) -> None: + """ + High-level tests that exercise RegexDateParser.parse only. + dateparser.parse is mocked so tests are deterministic. + """ + parser = RegexDateParserPlugin(base_config) + + # Patch the dateparser.parse + target = "documents.plugins.date_parsing.base.dateparser.parse" + + def fake_parse( + date_string: str, + settings: dict[str, Any] | None = None, + locales: None = None, + ) -> datetime.datetime | None: + date_order = settings.get("DATE_ORDER") if settings else None + + # Filename-style YYYY-MM-DD / YYYY.MM.DD + if ( + "2023-12-25" in date_string + or "2023.12.25" in date_string + or "2023-12-25" in date_string + ): + return datetime.datetime(2023, 12, 25, tzinfo=datetime.timezone.utc) + + # content DMY 25/12/2022 + if "25/12/2022" in date_string or "25-12-2022" in date_string: + return datetime.datetime(2022, 12, 25, tzinfo=datetime.timezone.utc) + + # filename YMD 2023.01.02 + if "2023.01.02" in date_string or "2023-01-02" in date_string: + return datetime.datetime(2023, 1, 2, tzinfo=datetime.timezone.utc) + + # ambiguous 01/02/2023 -> respect DATE_ORDER setting + if "01/02/2023" in date_string: + if date_order == "DMY": + return datetime.datetime(2023, 2, 1, tzinfo=datetime.timezone.utc) + if date_order == "YMD": + return datetime.datetime(2023, 1, 2, tzinfo=datetime.timezone.utc) + # fallback + return datetime.datetime(2023, 2, 1, tzinfo=datetime.timezone.utc) + + # simulate parse failure for malformed input + if "99/99/9999" in date_string or "bad date" in date_string: + raise Exception("parse failed for malformed date") + + return None + + mocker.patch(target, side_effect=fake_parse) + + results = list(parser.parse(filename, content)) + + assert results == expected + for dt in results: + assert dt.tzinfo is not None + + def test_parse_filters_future_and_ignored_dates( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + """ + Ensure parser filters out: + - dates after reference_time + - dates whose .date() are in ignore_dates + """ + cfg = DateParserConfig( + languages=["en"], + timezone_str="UTC", + ignore_dates={datetime.date(2023, 12, 10)}, + reference_time=datetime.datetime( + 2024, + 1, + 15, + 12, + 0, + 0, + tzinfo=datetime.timezone.utc, + ), + filename_date_order="YMD", + content_date_order="DMY", + ) + parser = RegexDateParserPlugin(cfg) + + target = "documents.plugins.date_parsing.base.dateparser.parse" + + def fake_parse( + date_string: str, + settings: dict[str, Any] | None = None, + locales: None = None, + ) -> datetime.datetime | None: + if "10/12/2023" in date_string or "10-12-2023" in date_string: + # ignored date + return datetime.datetime(2023, 12, 10, tzinfo=datetime.timezone.utc) + if "01/02/2024" in date_string or "01-02-2024" in date_string: + # future relative to reference_time -> filtered + return datetime.datetime(2024, 2, 1, tzinfo=datetime.timezone.utc) + if "05/01/2023" in date_string or "05-01-2023" in date_string: + # valid + return datetime.datetime(2023, 1, 5, tzinfo=datetime.timezone.utc) + return None + + mocker.patch(target, side_effect=fake_parse) + + content = "Ignored: 10/12/2023, Future: 01/02/2024, Keep: 05/01/2023" + results = list(parser.parse("whatever.txt", content)) + + assert results == [datetime.datetime(2023, 1, 5, tzinfo=datetime.timezone.utc)] + + def test_parse_handles_no_matches_and_returns_empty_list( + self, + base_config: DateParserConfig, + ) -> None: + """ + When there are no matching date-like substrings, parse should yield nothing. + """ + parser = RegexDateParserPlugin(base_config) + results = list( + parser.parse("no-dates.txt", "this has no dates whatsoever"), + ) + assert results == [] + + def test_parse_skips_filename_when_filename_date_order_none( + self, + mocker: pytest_mock.MockerFixture, + ) -> None: + """ + When filename_date_order is None the parser must not attempt to parse the filename. + Only dates found in the content should be passed to dateparser.parse. + """ + cfg = DateParserConfig( + languages=["en"], + timezone_str="UTC", + ignore_dates=set(), + reference_time=datetime.datetime( + 2024, + 1, + 15, + 12, + 0, + 0, + tzinfo=datetime.timezone.utc, + ), + filename_date_order=None, + content_date_order="DMY", + ) + parser = RegexDateParserPlugin(cfg) + + # Patch the module's dateparser.parse so we can inspect calls + target = "documents.plugins.date_parsing.base.dateparser.parse" + + def fake_parse( + date_string: str, + settings: dict[str, Any] | None = None, + locales: None = None, + ) -> datetime.datetime | None: + # return distinct datetimes so we can tell which source was parsed + if "25/12/2022" in date_string: + return datetime.datetime(2022, 12, 25, tzinfo=datetime.timezone.utc) + if "2023-12-25" in date_string: + return datetime.datetime(2023, 12, 25, tzinfo=datetime.timezone.utc) + return None + + mock = mocker.patch(target, side_effect=fake_parse) + + filename = "report-2023-12-25.txt" + content = "Event recorded on 25/12/2022." + + results = list(parser.parse(filename, content)) + + # Only the content date should have been parsed -> one call + assert mock.call_count == 1 + + # # first call, first positional arg + called_date_string = mock.call_args_list[0][0][0] + assert "25/12/2022" in called_date_string + # And the parser should have yielded the corresponding datetime + assert results == [ + datetime.datetime(2022, 12, 25, tzinfo=datetime.timezone.utc), + ] diff --git a/src/documents/tests/test_admin.py b/src/documents/tests/test_admin.py index 61a579dc7..de2f07df5 100644 --- a/src/documents/tests/test_admin.py +++ b/src/documents/tests/test_admin.py @@ -27,7 +27,7 @@ class TestDocumentAdmin(DirectoriesMixin, TestCase): super().setUp() self.doc_admin = DocumentAdmin(model=Document, admin_site=AdminSite()) - def test_save_model(self): + def test_save_model(self) -> None: doc = Document.objects.create(title="test") doc.title = "new title" @@ -35,7 +35,7 @@ class TestDocumentAdmin(DirectoriesMixin, TestCase): self.assertEqual(Document.objects.get(id=doc.id).title, "new title") self.assertEqual(self.get_document_from_index(doc)["id"], doc.id) - def test_delete_model(self): + def test_delete_model(self) -> None: doc = Document.objects.create(title="test") index.add_or_update_document(doc) self.assertIsNotNone(self.get_document_from_index(doc)) @@ -45,7 +45,7 @@ class TestDocumentAdmin(DirectoriesMixin, TestCase): self.assertRaises(Document.DoesNotExist, Document.objects.get, id=doc.id) self.assertIsNone(self.get_document_from_index(doc)) - def test_delete_queryset(self): + def test_delete_queryset(self) -> None: docs = [] for i in range(42): doc = Document.objects.create( @@ -67,7 +67,7 @@ class TestDocumentAdmin(DirectoriesMixin, TestCase): for doc in docs: self.assertIsNone(self.get_document_from_index(doc)) - def test_created(self): + def test_created(self) -> None: doc = Document.objects.create( title="test", created=timezone.make_aware(timezone.datetime(2020, 4, 12)), @@ -98,7 +98,7 @@ class TestPaperlessAdmin(DirectoriesMixin, TestCase): super().setUp() self.user_admin = PaperlessUserAdmin(model=User, admin_site=AdminSite()) - def test_request_is_passed_to_form(self): + def test_request_is_passed_to_form(self) -> None: user = User.objects.create(username="test", is_superuser=False) non_superuser = User.objects.create(username="requestuser") request = types.SimpleNamespace(user=non_superuser) @@ -106,7 +106,7 @@ class TestPaperlessAdmin(DirectoriesMixin, TestCase): form = formType(data={}, instance=user) self.assertEqual(form.request, request) - def test_only_superuser_can_change_superuser(self): + def test_only_superuser_can_change_superuser(self) -> None: superuser = User.objects.create_superuser(username="superuser", password="test") non_superuser = User.objects.create(username="requestuser") user = User.objects.create(username="test", is_superuser=False) @@ -128,7 +128,7 @@ class TestPaperlessAdmin(DirectoriesMixin, TestCase): self.assertTrue(form.is_valid()) self.assertEqual({}, form.errors) - def test_superuser_can_only_be_modified_by_superuser(self): + def test_superuser_can_only_be_modified_by_superuser(self) -> None: superuser = User.objects.create_superuser(username="superuser", password="test") user = User.objects.create( username="test", diff --git a/src/documents/tests/test_api_app_config.py b/src/documents/tests/test_api_app_config.py index f2ed902f4..7717c3488 100644 --- a/src/documents/tests/test_api_app_config.py +++ b/src/documents/tests/test_api_app_config.py @@ -22,7 +22,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): user = User.objects.create_superuser(username="temp_admin") self.client.force_authenticate(user=user) - def test_api_get_config(self): + def test_api_get_config(self) -> None: """ GIVEN: - API request to get app config @@ -78,7 +78,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): }, ) - def test_api_get_ui_settings_with_config(self): + def test_api_get_ui_settings_with_config(self) -> None: """ GIVEN: - Existing config with app_title, app_logo specified @@ -101,7 +101,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): | response.data["settings"], ) - def test_api_update_config(self): + def test_api_update_config(self) -> None: """ GIVEN: - API request to update app config @@ -124,7 +124,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): config = ApplicationConfiguration.objects.first() self.assertEqual(config.color_conversion_strategy, ColorConvertChoices.RGB) - def test_api_update_config_empty_fields(self): + def test_api_update_config_empty_fields(self) -> None: """ GIVEN: - API request to update app config with empty string for user_args JSONField and language field @@ -151,7 +151,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): self.assertEqual(config.language, None) self.assertEqual(config.barcode_tag_mapping, None) - def test_api_replace_app_logo(self): + def test_api_replace_app_logo(self) -> None: """ GIVEN: - Existing config with app_logo specified @@ -200,7 +200,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): ) self.assertFalse(Path(old_logo.path).exists()) - def test_api_rejects_malicious_svg_logo(self): + def test_api_rejects_malicious_svg_logo(self) -> None: """ GIVEN: - An SVG logo containing a