From 4b122f6820d05090795f0e4dfefc8f1480e23f7b Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 08:40:03 +0000 Subject: [PATCH] Initial upload: Auto README Generator CLI v0.1.0 --- src/auto_readme/parsers/javascript_parser.py | 57 ++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/auto_readme/parsers/javascript_parser.py diff --git a/src/auto_readme/parsers/javascript_parser.py b/src/auto_readme/parsers/javascript_parser.py new file mode 100644 index 0000000..9c9d4b5 --- /dev/null +++ b/src/auto_readme/parsers/javascript_parser.py @@ -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, + ) + )