#!/usr/bin/env python3 # SPDX-FileCopyrightText: 2026 Kaede Akino # SPDX-License-Identifier: GPL-3.0-only """Regenerate bundled host SVGs from explicit npm releases, never moving tags.""" import argparse import base64 import hashlib import io import json from pathlib import Path import re import shutil import tarfile import tempfile import urllib.request import xml.etree.ElementTree as ET ROOT = Path(__file__).resolve().parents[1] RESOURCES = ROOT / "Frameworks/Resources" def package(name, version): if not re.fullmatch(r"\d+\.\d+\.\d+(?:-[\w.-]+)?", version): raise ValueError("An explicit release version is required") with urllib.request.urlopen(f"https://registry.npmjs.org/{name}/{version}", timeout=30) as response: metadata = json.load(response) with urllib.request.urlopen(metadata["dist"]["tarball"], timeout=60) as response: data = response.read() integrity = "sha512-" + base64.b64encode(hashlib.sha512(data).digest()).decode() if metadata["version"] != version or integrity != metadata["dist"]["integrity"]: raise ValueError(f"Package integrity mismatch: {name}") archive = tarfile.open(fileobj=io.BytesIO(data), mode="r:gz") return archive, {"package": name, "version": version, "integrity": integrity} def read(archive, path): return archive.extractfile("package/" + path).read() def write_json(path, data): path.write_text(json.dumps(data, indent=2, sort_keys=True) + "\n") def write_icon(directory, asset, svg): text = svg.decode() root = ET.fromstring(text) if root.tag != "{http://www.w3.org/2000/svg}svg": raise ValueError(f"Expected an SVG document: {asset}") if re.search(r"