76 lines
2.7 KiB
JavaScript
76 lines
2.7 KiB
JavaScript
import fs from 'fs/promises';
|
|
import path from 'path';
|
|
import { getIconsCSS } from '@iconify/utils';
|
|
|
|
export default function iconifyPlugin() {
|
|
return {
|
|
name: 'vite-iconify-plugin',
|
|
apply: 'build', // Run only during build
|
|
|
|
async buildStart() {
|
|
console.log('🔨 Generating iconify CSS file...');
|
|
|
|
try {
|
|
const iconSetPaths = [path.resolve(process.cwd(), 'node_modules/@iconify/json/json/tabler.json')];
|
|
|
|
const iconSets = await Promise.all(
|
|
iconSetPaths.map(async filePath => {
|
|
const data = await fs.readFile(filePath, 'utf-8');
|
|
return JSON.parse(data);
|
|
})
|
|
);
|
|
|
|
const allIcons = iconSets
|
|
.map(iconSet => {
|
|
return getIconsCSS(iconSet, Object.keys(iconSet.icons), {
|
|
iconSelector: '.{prefix}-{name}',
|
|
commonSelector: '.ti',
|
|
format: 'expanded'
|
|
});
|
|
})
|
|
.join('\n');
|
|
|
|
const outputPath = path.resolve(process.cwd(), 'resources/assets/vendor/fonts/iconify/iconify.css');
|
|
const dir = path.dirname(outputPath);
|
|
await fs.mkdir(dir, { recursive: true });
|
|
await fs.writeFile(outputPath, allIcons, 'utf8');
|
|
|
|
console.log(`✅ Iconify CSS generated at: ${outputPath}`);
|
|
|
|
const additionalFiles = [
|
|
{
|
|
name: 'fontawesome',
|
|
filesPath: path.resolve(process.cwd(), 'node_modules/@fortawesome/fontawesome-free/webfonts'),
|
|
destPath: path.resolve(process.cwd(), 'resources/assets/vendor/fonts/fontawesome')
|
|
},
|
|
{
|
|
name: 'flags',
|
|
filesPath: path.resolve(process.cwd(), 'node_modules/flag-icons/flags'),
|
|
destPath: path.resolve(process.cwd(), 'resources/assets/vendor/fonts/flags')
|
|
}
|
|
];
|
|
|
|
for (const file of additionalFiles) {
|
|
await fs.mkdir(file.destPath, { recursive: true });
|
|
const items = await fs.readdir(file.filesPath, { withFileTypes: true });
|
|
for (const item of items) {
|
|
const srcPath = path.join(file.filesPath, item.name);
|
|
const destPath = path.join(file.destPath, item.name);
|
|
if (item.isDirectory()) {
|
|
await fs.mkdir(destPath, { recursive: true });
|
|
const subItems = await fs.readdir(srcPath);
|
|
for (const subItem of subItems) {
|
|
await fs.copyFile(path.join(srcPath, subItem), path.join(destPath, subItem));
|
|
}
|
|
} else {
|
|
await fs.copyFile(srcPath, destPath);
|
|
}
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('❌ Error generating Iconify CSS or copying additional files:', error);
|
|
}
|
|
}
|
|
};
|
|
}
|