mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-13 13:48:26 +00:00
* cleanup scripts * Move helpers to package * Fixes scripts * Fix scripts * Formatting * Fix helpers import paths * Remove lucide-figma * Rename helpers package * Fix build * formatting * Adjust main build-icons file * Add export casing * Adds `exportModuleNameCasing` fro lab project * format files * Bump package version @lucide/build-icons * Revert changes in icons * Revert changes in PR yml * Fix lint issues * Fix site build * fix lint errors * Attempt fix linting * Fix lint errors
137 lines
4.1 KiB
JavaScript
137 lines
4.1 KiB
JavaScript
import path from 'path';
|
|
import fs from 'fs';
|
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
import { toPascalCase, resetFile, appendFile } from '@lucide/helpers';
|
|
import { deprecationReasonTemplate } from '../utils/deprecationReasonTemplate.mjs';
|
|
|
|
const getImportString = (
|
|
componentName,
|
|
iconName,
|
|
aliasImportFileExtension,
|
|
deprecated,
|
|
deprecationReason = '',
|
|
) =>
|
|
deprecated
|
|
? `export {\n` +
|
|
` /** @deprecated ${deprecationReason} */\n` +
|
|
` default as ${componentName}\n` +
|
|
`} from './icons/${iconName}${aliasImportFileExtension}';\n`
|
|
: `export { default as ${componentName} } from './icons/${iconName}${aliasImportFileExtension}';\n`;
|
|
|
|
export default async function generateAliasesFile({
|
|
iconNodes,
|
|
outputDirectory,
|
|
fileExtension,
|
|
iconFileExtension = '.js',
|
|
iconMetaData,
|
|
aliasImportFileExtension,
|
|
aliasNamesOnly = false,
|
|
separateAliasesFile = false,
|
|
showLog = true,
|
|
}) {
|
|
const iconsDistDirectory = path.join(outputDirectory, `icons`);
|
|
const fileName = path.basename(`aliases${fileExtension}`);
|
|
const icons = Object.keys(iconNodes);
|
|
|
|
// Reset file
|
|
resetFile(fileName, outputDirectory);
|
|
|
|
// Generate Import for Icon VNodes
|
|
await Promise.all(
|
|
icons.map(async (iconName, index) => {
|
|
const componentName = toPascalCase(iconName);
|
|
const iconAliases = iconMetaData[iconName]?.aliases?.map((alias) => {
|
|
if (typeof alias === 'string') {
|
|
return {
|
|
name: alias,
|
|
deprecated: false,
|
|
};
|
|
}
|
|
return alias;
|
|
});
|
|
|
|
let importString = '';
|
|
|
|
if ((iconAliases != null && Array.isArray(iconAliases)) || !aliasNamesOnly) {
|
|
if (index > 0) {
|
|
importString += '\n';
|
|
}
|
|
|
|
importString += `// ${componentName} aliases\n`;
|
|
}
|
|
|
|
if (!aliasNamesOnly) {
|
|
importString += getImportString(`${componentName}Icon`, iconName, aliasImportFileExtension);
|
|
importString += getImportString(
|
|
`Lucide${componentName}`,
|
|
iconName,
|
|
aliasImportFileExtension,
|
|
);
|
|
}
|
|
|
|
if (iconAliases != null && Array.isArray(iconAliases)) {
|
|
await Promise.all(
|
|
iconAliases.map(async (alias) => {
|
|
const componentNameAlias = toPascalCase(alias.name);
|
|
const deprecationReason = alias.deprecated
|
|
? deprecationReasonTemplate(alias.deprecationReason, {
|
|
componentName: toPascalCase(iconName),
|
|
iconName,
|
|
toBeRemovedInVersion: alias.toBeRemovedInVersion,
|
|
})
|
|
: '';
|
|
|
|
if (separateAliasesFile) {
|
|
const output = `export { default } from "./${iconName}"`;
|
|
const location = path.join(iconsDistDirectory, `${alias.name}${iconFileExtension}`);
|
|
|
|
await fs.promises.writeFile(location, output, 'utf-8');
|
|
}
|
|
|
|
// Don't import the same icon twice
|
|
if (componentName === componentNameAlias) {
|
|
return;
|
|
}
|
|
|
|
const exportFileIcon = separateAliasesFile ? alias.name : iconName;
|
|
|
|
importString += getImportString(
|
|
componentNameAlias,
|
|
exportFileIcon,
|
|
aliasImportFileExtension,
|
|
alias.deprecated,
|
|
deprecationReason,
|
|
);
|
|
|
|
if (!aliasNamesOnly) {
|
|
importString += getImportString(
|
|
`${componentNameAlias}Icon`,
|
|
exportFileIcon,
|
|
aliasImportFileExtension,
|
|
alias.deprecated,
|
|
deprecationReason,
|
|
);
|
|
|
|
importString += getImportString(
|
|
`Lucide${componentNameAlias}`,
|
|
exportFileIcon,
|
|
aliasImportFileExtension,
|
|
alias.deprecated,
|
|
deprecationReason,
|
|
);
|
|
}
|
|
}),
|
|
);
|
|
}
|
|
|
|
appendFile(importString, fileName, outputDirectory);
|
|
}),
|
|
);
|
|
|
|
appendFile('\n', fileName, outputDirectory);
|
|
|
|
if (showLog) {
|
|
console.log(`Successfully generated ${fileName} file`);
|
|
}
|
|
}
|