const noStylesComponents: any[] = [] // eslint-disable-next-line @typescript-eslint/no-explicit-any export default (options: any = {}): any => { let optionsResolved: any async function resolveOptions() { if (optionsResolved) return optionsResolved optionsResolved = { exclude: undefined, noStylesComponents: options.noStylesComponents || [], ...options } return optionsResolved } return { type: 'component', resolve: async (name: string) => { const options = await resolveOptions() if ([...options.noStylesComponents, ...noStylesComponents].includes(name)) return resolveComponent(name, { ...options, importStyle: false }) else return resolveComponent(name, options) } } } // function kebabCase(key: string) { // const result = key.replace(/([A-Z])/g, ' $1').trim() // return result.split(' ').join('-').toLowerCase() // } function pascalCase(key: string): string { // 第一步:将所有分隔符(-、_、空格)替换为空格,统一处理 const replaced = key.replace(/[-_\s]/g, ' ') // 第二步:处理可能的连续大写字母(如HTML),在大写字母前加空格(除了开头) const spaced = replaced.replace(/([A-Z])/g, (_, p1, index) => { return index === 0 ? p1 : ` ${p1}` }) // 第三步:去除首尾空格,并按空格拆分为单词数组 const words = spaced.trim().split(/\s+/) // 第四步:每个单词首字母大写,其余小写,然后拼接 return words .map((word) => { if (word.length === 0) return '' return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() }) .join('') } function resolveComponent(name: string, options: any) { if (options.exclude && name.match(options.exclude)) return if (!name.match(/^Bo[A-Z]/)) return const partialName = pascalCase(name.slice(2)) return { name, from: `${'bolt-ui'}`, sideEffects: getSideEffects(partialName) } } function getSideEffects(dirName: string) { const componentsFolder = 'bolt-ui/components' return [`${componentsFolder}/${dirName}/style/index`, 'bolt-ui/theme-chalk/src/theme/index.scss'] }