Initial upload: Auto README Generator CLI v0.1.0
This commit is contained in:
57
src/auto_readme/parsers/javascript_parser.py
Normal file
57
src/auto_readme/parsers/javascript_parser.py
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
"""JavaScript dependency parser for package.json."""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from . import BaseParser, Dependency
|
||||||
|
|
||||||
|
|
||||||
|
class JavaScriptDependencyParser(BaseParser):
|
||||||
|
"""Parser for JavaScript/TypeScript package.json files."""
|
||||||
|
|
||||||
|
def can_parse(self, path: Path) -> bool:
|
||||||
|
"""Check if the file is a package.json."""
|
||||||
|
return path.name.lower() == "package.json"
|
||||||
|
|
||||||
|
def parse(self, path: Path) -> list[Dependency]:
|
||||||
|
"""Parse dependencies from package.json."""
|
||||||
|
if not path.exists():
|
||||||
|
return []
|
||||||
|
|
||||||
|
dependencies = []
|
||||||
|
try:
|
||||||
|
with open(path, "r", encoding="utf-8") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
except (json.JSONDecodeError, OSError):
|
||||||
|
return dependencies
|
||||||
|
|
||||||
|
self._parse_dependencies_section(data, "dependencies", dependencies, path)
|
||||||
|
self._parse_dependencies_section(data, "devDependencies", dependencies, path, is_dev=True)
|
||||||
|
self._parse_dependencies_section(data, "optionalDependencies", dependencies, path, is_optional=True)
|
||||||
|
self._parse_dependencies_section(data, "peerDependencies", dependencies, path)
|
||||||
|
|
||||||
|
return dependencies
|
||||||
|
|
||||||
|
def _parse_dependencies_section(
|
||||||
|
self,
|
||||||
|
data: dict,
|
||||||
|
section: str,
|
||||||
|
dependencies: list,
|
||||||
|
source_file: Path,
|
||||||
|
is_dev: bool = False,
|
||||||
|
is_optional: bool = False,
|
||||||
|
) -> None:
|
||||||
|
"""Parse a specific dependencies section."""
|
||||||
|
if section in data:
|
||||||
|
for name, version in data[section].items():
|
||||||
|
if isinstance(version, str):
|
||||||
|
dependencies.append(
|
||||||
|
Dependency(
|
||||||
|
name=name,
|
||||||
|
version=self._normalize_version(version),
|
||||||
|
is_dev=is_dev,
|
||||||
|
is_optional=is_optional,
|
||||||
|
source_file=source_file,
|
||||||
|
)
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user