generateAliasesFile.mjs102 lines · main
1import fs from 'fs'
2import path from 'path'
3import { appendFile, resetFile, toPascalCase } from '../utils/helpers.mjs'
4
5const getImportString = (componentName, iconName, aliasImportFileExtension = '') =>
6 `export { default as ${componentName} } from './icons/${iconName}${aliasImportFileExtension}';\n`
7
8export default async function generateAliasesFile({
9 iconNodes,
10 outputDirectory,
11 fileExtension,
12 iconFileExtension = '.js',
13 iconMetaData,
14 aliasImportFileExtension,
15 aliasNamesOnly = false,
16 separateAliasesFile = false,
17 showLog = true,
18}) {
19 const iconsDistDirectory = path.join(outputDirectory, `icons`)
20 const fileName = path.basename(`aliases${fileExtension}`)
21 const icons = Object.keys(iconNodes)
22
23 // Reset file
24 resetFile(fileName, outputDirectory)
25
26 // Generate Import for Icon VNodes
27 await Promise.all(
28 icons.map(async (iconName, index) => {
29 const componentName = toPascalCase(iconName)
30 const iconAliases = iconMetaData[iconName]?.aliases
31
32 let importString = ''
33
34 if ((iconAliases != null && Array.isArray(iconAliases)) || !aliasNamesOnly) {
35 if (index > 0) {
36 importString += '\n'
37 }
38
39 importString += `// ${componentName} aliases\n`
40 }
41
42 if (!aliasNamesOnly) {
43 importString += getImportString(`${componentName}Icon`, iconName, aliasImportFileExtension)
44 importString += getImportString(
45 `Lucide${componentName}`,
46 iconName,
47 aliasImportFileExtension
48 )
49 }
50
51 if (iconAliases != null && Array.isArray(iconAliases)) {
52 await Promise.all(
53 iconAliases.map(async (alias) => {
54 const componentNameAlias = toPascalCase(alias)
55
56 if (separateAliasesFile) {
57 const output = `export { default } from "./${iconName}"`
58 const location = path.join(iconsDistDirectory, `${alias}${iconFileExtension}`)
59
60 await fs.promises.writeFile(location, output, 'utf-8')
61 }
62
63 // Don't import the same icon twice
64 if (componentName === componentNameAlias) {
65 return
66 }
67
68 const exportFileIcon = separateAliasesFile ? alias : iconName
69
70 importString += getImportString(
71 componentNameAlias,
72 exportFileIcon,
73 aliasImportFileExtension
74 )
75
76 if (!aliasNamesOnly) {
77 importString += getImportString(
78 `${componentNameAlias}Icon`,
79 exportFileIcon,
80 aliasImportFileExtension
81 )
82
83 importString += getImportString(
84 `Lucide${componentNameAlias}`,
85 exportFileIcon,
86 aliasImportFileExtension
87 )
88 }
89 })
90 )
91 }
92
93 appendFile(importString, fileName, outputDirectory)
94 })
95 )
96
97 appendFile('\n', fileName, outputDirectory)
98
99 if (showLog) {
100 console.log(`Successfully generated ${fileName} file`)
101 }
102}