Files
lucide/docs/scripts/writeIconDetails.mts
T

76 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-06-15 14:44:43 +02:00
import fs from 'fs';
import path from 'path';
import { getIconMetaData } from '@lucide/build-icons';
import { toCamelCase } from '@lucide/helpers';
2023-06-15 14:44:43 +02:00
const currentDir = process.cwd();
const ICONS_DIR = path.resolve(currentDir, '../icons');
const iconMetaData = await getIconMetaData(ICONS_DIR);
2023-06-15 14:44:43 +02:00
const iconDetailsDirectory = path.resolve(currentDir, '.vitepress/data', 'iconDetails');
if (fs.existsSync(iconDetailsDirectory)) {
fs.rmSync(iconDetailsDirectory, { recursive: true, force: true });
}
if (!fs.existsSync(iconDetailsDirectory)) {
fs.mkdirSync(iconDetailsDirectory);
}
const indexFile = path.resolve(iconDetailsDirectory, `index.ts`);
const writeIconFiles = Object.entries(iconMetaData).map(async ([iconName, metaData]) => {
2023-06-15 14:44:43 +02:00
const location = path.resolve(iconDetailsDirectory, `${iconName}.ts`);
const {
tags,
categories,
contributors,
aliases,
deprecated,
deprecationReason,
toBeRemovedInVersion,
} = metaData;
2023-06-15 14:44:43 +02:00
const contents = `\
2026-07-23 10:15:09 +02:00
import iconNode from '../iconNodes/${iconName}.node.json' with { type: 'json' };
import releaseData from '../releaseMetadata/${iconName}.json' with { type: 'json' };
import popularity from '../iconPopularity/${iconName}.json' with { type: 'json' };
import { IconMetaData, IconNode } from '~/.vitepress/theme/types';
2023-06-15 14:44:43 +02:00
const metaData: IconMetaData = ${JSON.stringify({ tags, categories, contributors, aliases, deprecated, deprecationReason, toBeRemovedInVersion })};
const { tags, categories, contributors, aliases, deprecated, deprecationReason, toBeRemovedInVersion } = metaData;
2023-06-15 14:44:43 +02:00
const iconDetails = {
name: '${iconName}',
iconNode: iconNode as IconNode,
2023-10-29 21:09:08 +01:00
contributors,
2023-06-15 14:44:43 +02:00
tags,
categories,
2024-03-08 15:20:15 +01:00
aliases,
deprecated,
popularity,
deprecationReason,
toBeRemovedInVersion,
2023-06-15 14:44:43 +02:00
...releaseData,
2026-07-23 10:15:09 +02:00
};
2023-06-15 14:44:43 +02:00
2026-07-23 10:15:09 +02:00
export default iconDetails;
2023-06-15 14:44:43 +02:00
`;
await fs.promises.writeFile(location, contents, 'utf-8');
await fs.promises.appendFile(
indexFile,
`export { default as ${toCamelCase(iconName)} } from './${iconName}';\n`,
'utf-8',
);
});
Promise.all(writeIconFiles)
.then(() => {
console.log('Successfully write', writeIconFiles.length, 'iconDetails files.');
})
.catch((error) => {
throw new Error(`Something went wrong generating iconNode files,\n ${error}`);
});