Files
lucide/tools/build-icons/building/generateAliasesFile.mjs
Eric Fennis 077242cfa0 refactor(scripts): Cleaning up scripts (#2092)
* 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
2024-06-28 11:24:37 +02:00

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