Files
lucide/tools/build-icons/building/generateExportsFile.ts

40 lines
1.2 KiB
TypeScript
Raw Normal View History

import path from 'path';
// eslint-disable-next-line import/no-extraneous-dependencies
import { toPascalCase, toCamelCase, resetFile, appendFile } from '@lucide/helpers';
import type { IconNode } from '../types.ts';
export default async function generateExportFile(
inputEntry: string,
outputDirectory: string,
iconNodes: IconNode,
exportModuleNameCasing: 'camel' | 'pascal',
iconFileExtension = '',
) {
const fileName = path.basename(inputEntry);
// Reset file
await resetFile(fileName, outputDirectory);
const icons = Object.keys(iconNodes);
// Generate Import for Icon VNodes
const iconImportNodesPromises = icons.map(async (iconName) => {
let componentName;
if (exportModuleNameCasing === 'camel') {
componentName = toCamelCase(iconName);
} else if (exportModuleNameCasing === 'pascal') {
componentName = toPascalCase(iconName);
}
const importString = `export { default as ${componentName} } from './${iconName}${iconFileExtension}';\n`;
return appendFile(importString, fileName, outputDirectory);
});
await Promise.all(iconImportNodesPromises);
await appendFile('\n', fileName, outputDirectory);
console.log(`Successfully generated ${fileName} file`);
}