SPB Git

spb/spbgit Public MIT

SPB Git — the platform hosting itself

JavaScript 73.9% CSS 11.7% Nunjucks 11.6% Shell 2.7%
2.9 KB · 58 lines javascript
Raw Blame History
1/**2 * ─────────────────────────────────────────────3 *  SPB Git — Personal Git Platform4 * ─────────────────────────────────────────────5 *  Author  : Simon-Pierre Boucher6 *  Contact : contact@spboucher.ai7 *  File    : scripts/fetch-fonts.mjs8 *  Purpose : Download self-hosted Inter / JetBrains Mono fonts (web + OG rendering)9 *  License : MIT © Simon-Pierre Boucher10 * ─────────────────────────────────────────────11 */1213import { mkdirSync, writeFileSync, existsSync } from 'node:fs';14import { join } from 'node:path';15import process from 'node:process';1617const ROOT = new URL('..', import.meta.url).pathname;18const FONTS_DIR = join(ROOT, 'src/web/assets/fonts');19const BEST_EFFORT = process.argv.includes('--best-effort');2021/** woff2 → served to browsers; woff → consumed by satori for OG images. */22const FONTS = [23  ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-400-normal.woff2', 'inter-400.woff2'],24  ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-500-normal.woff2', 'inter-500.woff2'],25  ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-600-normal.woff2', 'inter-600.woff2'],26  ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-700-normal.woff2', 'inter-700.woff2'],27  ['https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5.1.1/files/jetbrains-mono-latin-400-normal.woff2', 'jetbrains-mono-400.woff2'],28  ['https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5.1.1/files/jetbrains-mono-latin-600-normal.woff2', 'jetbrains-mono-600.woff2'],29  ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-400-normal.woff', 'og/inter-400.woff'],30  ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-700-normal.woff', 'og/inter-700.woff'],31  ['https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5.1.1/files/jetbrains-mono-latin-400-normal.woff', 'og/jetbrains-mono-400.woff'],32];3334mkdirSync(join(FONTS_DIR, 'og'), { recursive: true });3536let failures = 0;37for (const [url, name] of FONTS) {38  const dest = join(FONTS_DIR, name);39  if (existsSync(dest)) continue;40  try {41    const res = await fetch(url);42    if (!res.ok) throw new Error(`HTTP ${res.status}`);43    writeFileSync(dest, Buffer.from(await res.arrayBuffer()));44    console.log(`✓ ${name}`);45  } catch (err) {46    failures += 1;47    console.warn(`✗ ${name}: ${err.message}`);48  }49}5051if (failures > 0 && !BEST_EFFORT) {52  console.error(`${failures} font(s) failed to download. Re-run: npm run fetch:fonts`);53  process.exit(1);54}55if (failures > 0) {56  console.warn('Continuing despite font download failures (best-effort mode). OG images will use a plain-SVG fallback.');57}58