You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.2 KiB
68 lines
2.2 KiB
import path from 'node:path' |
|
import fs from 'fs-extra' |
|
import inquirer from 'inquirer' |
|
import colors from 'picocolors' |
|
import pkg from '../../../package.json' |
|
|
|
async function generateIcon() { |
|
const dir = path.resolve(process.cwd(), 'node_modules/@iconify/json') |
|
|
|
const raw = await fs.readJSON(path.join(dir, 'collections.json')) |
|
|
|
const collections = Object.entries(raw).map(([id, v]) => ({ |
|
...(v as any), |
|
id, |
|
})) |
|
|
|
const choices = collections.map(item => ({ key: item.id, value: item.id, name: item.name })) |
|
|
|
inquirer |
|
.prompt([ |
|
{ |
|
type: 'list', |
|
name: 'useType', |
|
choices: [ |
|
{ key: 'local', value: 'local', name: 'Local' }, |
|
{ key: 'onLine', value: 'onLine', name: 'OnLine' }, |
|
], |
|
message: 'How to use icons?', |
|
}, |
|
{ |
|
type: 'list', |
|
name: 'iconSet', |
|
choices, |
|
message: 'Select the icon set that needs to be generated?', |
|
}, |
|
{ |
|
type: 'input', |
|
name: 'output', |
|
message: 'Select the icon set that needs to be generated?', |
|
default: 'src/components/Icon/data', |
|
}, |
|
]) |
|
.then(async (answers) => { |
|
const { iconSet, output, useType } = answers |
|
const outputDir = path.resolve(process.cwd(), output) |
|
await fs.ensureDir(outputDir) |
|
const genCollections = collections.filter(item => [iconSet].includes(item.id)) |
|
const prefixSet: string[] = [] |
|
for (const info of genCollections) { |
|
const data = await fs.readJSON(path.join(dir, 'json', `${info.id}.json`)) |
|
if (data) { |
|
const { prefix } = data |
|
const isLocal = useType === 'local' |
|
const icons = Object.keys(data.icons).map(item => `${isLocal ? `${prefix}:` : ''}${item}`) |
|
|
|
await fs.writeFileSync( |
|
path.join(output, 'icons.data.ts'), |
|
`export default ${isLocal ? JSON.stringify(icons) : JSON.stringify({ prefix, icons })}`, |
|
) |
|
prefixSet.push(prefix) |
|
} |
|
} |
|
await fs.emptyDir(path.join(process.cwd(), 'node_modules/.vite')) |
|
console.log(`✨ ${colors.cyan(`[${pkg.name}]`)}` + ' - Icon generated successfully:' + `[${prefixSet}]`) |
|
}) |
|
} |
|
|
|
generateIcon()
|
|
|