from __future__ import annotations from dataclasses import dataclass from typing import Any @dataclass class OutdatedPackage: package_name: str current_version: str latest_version: str language: str minor_available: bool = False patch_available: bool = False major_available: bool = False registry_url: str | None = None publish_date: str | None = None def to_dict(self) -> dict[str, Any]: return { "package_name": self.package_name, "current_version": self.current_version, "latest_version": self.latest_version, "language": self.language, "minor_available": self.minor_available, "patch_available": self.patch_available, "major_available": self.major_available, "registry_url": self.registry_url, "publish_date": self.publish_date, } @dataclass class LicenseInfo: package_name: str license_type: str | None license_expression: str | None source: str is_spdx_compliant: bool = False def to_dict(self) -> dict[str, Any]: return { "package_name": self.package_name, "license_type": self.license_type, "license_expression": self.license_expression, "source": self.source, "is_spdx_compliant": self.is_spdx_compliant, } @dataclass class UnusedDependency: package_name: str version: str language: str declared_in: str file_path: str reason: str def to_dict(self) -> dict[str, Any]: return { "package_name": self.package_name, "version": self.version, "language": self.language, "declared_in": self.declared_in, "file_path": self.file_path, "reason": self.reason, }