Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """Fetch valid Lucide icon names by introspecting the installed lucide-react package. | |
| Requires node_modules to be installed in phd-advisor-frontend/: | |
| cd phd-advisor-frontend && npm install | |
| python3 scripts/generate_icon_names.py | |
| """ | |
| import json | |
| import subprocess | |
| import sys | |
| from pathlib import Path | |
| REPO_ROOT = Path(__file__).resolve().parents[1] | |
| PACKAGE_JSON = REPO_ROOT / "phd-advisor-frontend" / "package.json" | |
| FRONTEND_DIR = REPO_ROOT / "phd-advisor-frontend" | |
| OUTPUT_FILE = ( | |
| REPO_ROOT | |
| / "multi_llm_chatbot_backend" | |
| / "app" | |
| / "utils" | |
| / "_lucide_icon_names.json" | |
| ) | |
| JS_SNIPPET = """\ | |
| const icons = require('lucide-react'); | |
| const names = Object.keys(icons).filter(k => /^[A-Z]/.test(k) && !k.endsWith('Icon') && !k.startsWith('Lucide')).sort(); | |
| console.log(JSON.stringify(names)); | |
| """ | |
| def main() -> int: | |
| package_data = json.loads(PACKAGE_JSON.read_text(encoding="utf-8")) | |
| version = package_data["dependencies"]["lucide-react"].lstrip("^~") | |
| node_modules = FRONTEND_DIR / "node_modules" / "lucide-react" | |
| if not node_modules.exists(): | |
| print( | |
| f"Error: lucide-react not found at {node_modules}\n" | |
| f"Run 'cd phd-advisor-frontend && npm install' first.", | |
| file=sys.stderr, | |
| ) | |
| return 1 | |
| print(f"Introspecting lucide-react@{version} exports via Node ...") | |
| result = subprocess.run( | |
| ["node", "-e", JS_SNIPPET], | |
| cwd=str(FRONTEND_DIR), | |
| capture_output=True, | |
| text=True, | |
| ) | |
| if result.returncode != 0: | |
| print(f"Node failed:\n{result.stderr}", file=sys.stderr) | |
| return 1 | |
| pascal_names = json.loads(result.stdout) | |
| OUTPUT_FILE.write_text( | |
| json.dumps({"version": version, "icons": pascal_names}, indent=2) + "\n", | |
| encoding="utf-8", | |
| ) | |
| print(f"Wrote {len(pascal_names)} icon names (v{version}) to {OUTPUT_FILE}") | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |