import type { UserConfig } from 'vite' import { cpSync, promises as fs } from 'node:fs' import Vue from '@vitejs/plugin-vue' import { ExternalPackageIconLoader, FileSystemIconLoader } from 'unplugin-icons/loaders' import IconsResolver from 'unplugin-icons/resolver' import Icons from 'unplugin-icons/vite' import Components from 'unplugin-vue-components/vite' /************************************************************/ // DON'T DO THIS IN YOUR CODE: IT IS FOR TESTING PURPOSES ONLY cpSync( './plain-color-icons', './node_modules/plain-color-icons', { recursive: true }, ) cpSync( './@test-scope', './node_modules/@test-scope', { recursive: true }, ) /************************************************************/ const config: UserConfig = { plugins: [ Vue(), Icons({ compiler: 'vue3', customCollections: { ...ExternalPackageIconLoader('@test-scope/test-color-icons'), ...ExternalPackageIconLoader('plain-color-icons'), custom: FileSystemIconLoader('assets/custom-a'), inline: { foo: ` `, async: () => fs.readFile('assets/giftbox.svg', 'utf-8'), }, }, iconCustomizer(collection, icon, props) { const name = `${collection}:${icon}` if (name === 'inline:async' || name === 'carbon:app-connectivity' || name === 'custom:car-a') { props.width = '3em' props.height = '3em' props.color = 'skyblue' } }, }), Components({ dts: true, resolvers: [ IconsResolver({ alias: { park: 'icon-park', }, customCollections: [ 'custom', 'inline', // custom external packages 'plain-color-icons', 'test-color-icons', ], }), ], }), ], } export default config