| 123456789101112131415161718192021222324252627 |
- #!/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.`);
- }
|