fix
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
const ICONS_DIR = path.resolve(__dirname, '../src/assets/icons')
|
||||
const OUTPUT_FILE = path.resolve(__dirname, '../src/components/icons/icon-names.d.ts')
|
||||
|
||||
const readNames = () =>
|
||||
fs
|
||||
.readdirSync(ICONS_DIR)
|
||||
.filter((f) => f.endsWith('.svg'))
|
||||
.map((f) => f.replace(/\.svg$/, ''))
|
||||
.sort()
|
||||
|
||||
const buildContent = (names) => {
|
||||
const union = names.length > 0 ? names.map((n) => ` | '${n}'`).join('\n') : ' | never'
|
||||
return `// AUTO-GENERATED — do not edit by hand.
|
||||
// Regenerated whenever src/assets/icons/*.svg changes (via scripts/vite-icon-names.js).
|
||||
|
||||
export type IconName =
|
||||
${union}
|
||||
|
||||
export const iconNames: readonly IconName[]
|
||||
`
|
||||
}
|
||||
|
||||
const writeIfChanged = () => {
|
||||
const content = buildContent(readNames())
|
||||
const prev = fs.existsSync(OUTPUT_FILE) ? fs.readFileSync(OUTPUT_FILE, 'utf8') : ''
|
||||
if (prev !== content) fs.writeFileSync(OUTPUT_FILE, content)
|
||||
}
|
||||
|
||||
export default function viteIconNames() {
|
||||
return {
|
||||
name: 'vite-icon-names',
|
||||
buildStart() {
|
||||
writeIfChanged()
|
||||
},
|
||||
configureServer(server) {
|
||||
writeIfChanged()
|
||||
server.watcher.add(path.join(ICONS_DIR, '*.svg'))
|
||||
const handler = (file) => {
|
||||
if (file.startsWith(ICONS_DIR) && file.endsWith('.svg')) writeIfChanged()
|
||||
}
|
||||
server.watcher.on('add', handler)
|
||||
server.watcher.on('unlink', handler)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export { writeIfChanged as generateIconNames }
|
||||
Reference in New Issue
Block a user