#!/usr/bin/env node import { mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; const root = resolve(import.meta.dirname, '..'); const sourceDir = resolve(root, 'node_modules/lucide-angular/icons'); const outputPath = resolve(root, 'public/static/admin/lucide-icons.json'); const checkOnly = process.argv.includes('--check'); const entries = []; for (const file of readdirSync(sourceDir).filter((name) => name.endsWith('.d.ts') && name !== 'lucide-icons.d.ts').sort()) { const source = readFileSync(resolve(sourceDir, file), 'utf8'); const preview = source.match(/data:image\/svg\+xml;base64,([A-Za-z0-9+/=]+)/)?.[1]; if (!preview) continue; entries.push({ name: file.slice(0, -5), data: preview }); } const output = JSON.stringify({ version: 1, total: entries.length, icons: entries }); if (checkOnly) { if (readFileSync(outputPath, 'utf8') !== output) throw new Error('图标目录已过期,请运行 npm run admin-icons:generate'); console.log(`Admin icon catalog is current: ${entries.length} icons.`); } else { mkdirSync(dirname(outputPath), { recursive: true }); writeFileSync(outputPath, output); console.log(`Generated ${outputPath}: ${entries.length} icons.`); }