"""Dependency-free, offline gallery packager. Run from any directory.""" from pathlib import Path import hashlib import html import json import re root = Path(__file__).resolve().parents[1] source = root / 'assets/animejs' vendor = root / 'assets/vendor/anime.umd.min.js' entries = [entry for entry in json.loads((root / 'vendor-manifest.json').read_text(encoding='utf-8')) if entry['path'] == 'assets/vendor/anime.umd.min.js'] if len(entries) != 1 or hashlib.sha256(vendor.read_bytes()).hexdigest() != entries[0]['sha256']: raise ValueError('Missing, duplicate or mismatched Anime vendor fingerprint') text = (source / 'index.html').read_text() text = text.replace('', '') for name, file in [('../vendor/anime.umd.min.js', vendor), ('examples.js', source / 'examples.js'), ('gallery.js', source / 'gallery.js')]: js = re.sub(r'//# sourceMappingURL=.*', '', file.read_text()) text = text.replace(f'', '') text = text.replace('ANIME_LICENSE', html.escape((root / 'assets/vendor/anime-LICENSE.md').read_text())) out = root / 'dist/animejs-gallery-0.4.0.html' out.parent.mkdir(exist_ok=True) out.write_text(text) inputs = [*sorted(source.glob('*')), vendor, root / 'assets/vendor/anime-LICENSE.md'] report = {'file': out.name, 'sha256': hashlib.sha256(out.read_bytes()).hexdigest(), 'anime':'4.5.0', 'examples':5, 'inputs':{str(p.relative_to(root)):hashlib.sha256(p.read_bytes()).hexdigest() for p in inputs if p.is_file()}} (root / 'dist/animejs-gallery-manifest.json').write_text(json.dumps(report, indent=2) + '\n') print(json.dumps(report, indent=2))