Initial upload: Auto README Generator CLI v0.1.0
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
CI / release (push) Has been cancelled

This commit is contained in:
2026-02-05 08:40:03 +00:00
parent def81713ed
commit 4b122f6820

View 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,
)
)