Files

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);
}
}
};
}