2023-07-13 16:39:02 +02:00
|
|
|
import path from 'path';
|
2024-06-28 11:24:37 +02:00
|
|
|
import { resetFile, appendFile } from '@lucide/helpers';
|
2025-06-18 15:47:24 +02:00
|
|
|
import type { IconMetadata, IconNode } from '../types.ts';
|
|
|
|
|
|
|
|
|
|
interface GenerateDynamicImports {
|
|
|
|
|
iconNodes: Record<string, IconNode>;
|
|
|
|
|
outputDirectory: string;
|
|
|
|
|
fileExtension: string;
|
|
|
|
|
iconMetaData: Record<string, IconMetadata>;
|
|
|
|
|
showLog?: boolean;
|
|
|
|
|
}
|
2023-07-13 16:39:02 +02:00
|
|
|
|
2025-02-10 14:13:52 +01:00
|
|
|
export default async function generateDynamicImports({
|
2023-07-13 16:39:02 +02:00
|
|
|
iconNodes,
|
|
|
|
|
outputDirectory,
|
|
|
|
|
fileExtension,
|
2025-01-10 14:35:28 +01:00
|
|
|
iconMetaData,
|
2023-07-13 16:39:02 +02:00
|
|
|
showLog = true,
|
2025-06-18 15:47:24 +02:00
|
|
|
}: GenerateDynamicImports) {
|
2023-07-13 16:39:02 +02:00
|
|
|
const fileName = path.basename(`dynamicIconImports${fileExtension}`);
|
|
|
|
|
const icons = Object.keys(iconNodes);
|
|
|
|
|
|
|
|
|
|
// Reset file
|
2025-02-10 14:13:52 +01:00
|
|
|
await resetFile(fileName, outputDirectory);
|
2023-07-13 16:39:02 +02:00
|
|
|
|
|
|
|
|
let importString = `const dynamicIconImports = {\n`;
|
|
|
|
|
|
|
|
|
|
// Generate Import for Icon VNodes
|
|
|
|
|
icons.forEach((iconName) => {
|
|
|
|
|
importString += ` '${iconName}': () => import('./icons/${iconName}'),\n`;
|
2025-01-10 14:35:28 +01:00
|
|
|
|
|
|
|
|
const iconAliases = iconMetaData[iconName]?.aliases?.map((alias) => {
|
|
|
|
|
if (typeof alias === 'string') {
|
|
|
|
|
return alias;
|
|
|
|
|
}
|
|
|
|
|
return alias.name;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (iconAliases != null && Array.isArray(iconAliases)) {
|
|
|
|
|
iconAliases.forEach((alias) => {
|
|
|
|
|
if (!alias) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
importString += ` '${alias}': () => import('./icons/${iconName}'),\n`;
|
|
|
|
|
});
|
|
|
|
|
}
|
2023-07-13 16:39:02 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
importString += '};\nexport default dynamicIconImports;\n';
|
|
|
|
|
|
2025-02-10 14:13:52 +01:00
|
|
|
await appendFile(importString, fileName, outputDirectory);
|
2023-07-13 16:39:02 +02:00
|
|
|
|
|
|
|
|
if (showLog) {
|
|
|
|
|
console.log(`Successfully generated ${fileName} file`);
|
|
|
|
|
}
|
|
|
|
|
}
|