#!/usr/bin/env python3 import argparse import sys import json from pathlib import Path ROOT = Path(__file__).resolve().parents[1] def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--package", default="package.json") parser.add_argument("--max-scripts", type=int, default=12) args = parser.parse_args() pkg_path = ROOT / args.package if not pkg_path.exists(): print(f"package.json not found: {pkg_path}") return 1 try: pkg = json.loads(pkg_path.read_text(encoding="utf-8")) except Exception as e: print(f"Error parsing package.json: {e}") return 1 scripts = pkg.get("scripts", {}) if not isinstance(scripts, dict): print("Invalid scripts field in package.json") return 1 script_count = len(scripts) print(f"Total package.json scripts: {script_count} (Limit: {args.max_scripts})") chained_script_count = 0 for name, cmd in scripts.items(): if any(char in cmd for char in ["&&", ";", "|"]): # Ignore ops:render if it contains chained command (if allowed as exception) # but the task says chained_script_count == 0, so let's check everything. print(f"Chained command detected in script '{name}': {cmd}") chained_script_count += 1 if script_count > args.max_scripts: print(f"Validation FAILED: script count {script_count} exceeds limit of {args.max_scripts}") return 1 if chained_script_count > 0: print(f"Validation FAILED: detected {chained_script_count} chained scripts") return 1 print("Validation PASSED: package.json script budget satisfies constraints.") return 0 if __name__ == "__main__": sys.exit(main())