Files
AdrianoDev 510d7ca4ec Struttura: il sito esistente si sposta sotto apps/sito
Primo passo della separazione sito / piattaforme decisa da Adriano il 03/09:
due applicazioni autosufficienti, senza workspace di root, cosi' che ognuna
resti un progetto Astro completo ed estraibile.

Qui non cambia niente del codice: solo la radice. I pattern del .gitignore
che avevano una barra erano ancorati alla radice e dopo lo spostamento non
avrebbero piu' coperto niente (data/*.db*, uploads/*): resi validi a
qualunque profondita'.

Suite: 45 file, 347 test verdi prima e dopo lo spostamento.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EndnceRA5WnA6rvA5iV9WL
2026-09-03 11:05:54 +00:00

43 lines
1.9 KiB
JavaScript

// Pipeline asset: extract-fig-images.sh → apply-asset-map.mjs → optimize-assets.sh → extract-logos.sh
// 1. extract-fig-images.sh: estrae hash-named images da .fig → assets-src/
// 2. apply-asset-map.mjs: copia da assets-src/ → destinazioni (src/assets/img, public/img)
// 3. optimize-assets.sh: converte PNG fotografici → JPG q85, ridimensiona ≤1400px
// 4. extract-logos.sh: estrae loghi insanitylab da FigmaDoc/Homepage.pdf → public/img/logo-{dark,light}.png
import { copyFileSync, mkdirSync, existsSync } from 'node:fs';
import { readFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
const map = JSON.parse(readFileSync(join(root, 'scripts/asset-map.json'), 'utf8'));
let n = 0, missing = 0;
// Sezione principale: copia da assets-src/
for (const [destDir, entries] of Object.entries(map)) {
if (destDir.startsWith('_') || destDir === 'fallbacks') continue;
mkdirSync(join(root, destDir), { recursive: true });
for (const [src, dest] of Object.entries(entries)) {
const from = join(root, 'assets-src', src);
if (!existsSync(from)) { console.error(`MANCANTE: ${src}`); missing++; continue; }
copyFileSync(from, join(root, destDir, dest));
n++;
}
}
// Sezione fallbacks: copia da path relativo alla root del repo (es. ../Dati/)
if (map.fallbacks) {
for (const [destDir, entries] of Object.entries(map.fallbacks)) {
mkdirSync(join(root, destDir), { recursive: true });
for (const [srcRelPath, dest] of Object.entries(entries)) {
const from = join(root, srcRelPath);
if (!existsSync(from)) { console.error(`MANCANTE (fallback): ${srcRelPath}`); missing++; continue; }
copyFileSync(from, join(root, destDir, dest));
n++;
}
}
}
console.log(`Copiate ${n} immagini${missing ? `, ${missing} mancanti` : ''}`);
process.exit(missing ? 1 : 0);