Source code for projectreport.analyzer.parsers.javascript
import json
import warnings
from pathlib import Path
from typing import Any, Dict, List, Optional
from cached_property import cached_property
from projectreport.analyzer.parsers.file import SingleFileParser
from projectreport.version import Version
[docs]class PackageJSONParser(SingleFileParser):
    @cached_property
    def parsed(self) -> Optional[Dict[str, Any]]:
        try:
            return json.loads(self.contents)
        except SyntaxError:
            warnings.warn(f"Could not parse {self.path} due to SyntaxError")
            return None
    @cached_property
    def docstring(self) -> Optional[str]:
        if self.parsed is None:
            return None
        return self.parsed.get("description")
    @cached_property
    def version(self) -> Optional[Version]:
        if self.parsed is None:
            return None
        version_str = self.parsed.get("version")
        if version_str is None:
            return None
        return Version.from_str(version_str)
    @cached_property
    def topics(self) -> Optional[List[str]]:
        if self.parsed is None:
            return None
        return self.parsed.get("keywords")
[docs]    @classmethod
    def matches_path(cls, path: str) -> bool:
        return Path(path).name == "package.json"