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.
 
 
 
 
 

39 lines
1.4 KiB

import glob from "fast-glob"
import path from "path"
import _ from "lodash"
import fs from "fs-extra"
import {getOutput, getPkgs, rootDir} from "@princess-ui/share"
export async function getComponents() {
const res = await glob("components/*/index.ts", { cwd: path.resolve(__dirname, "..") })
const components = res.map(v => {
const name = path.parse(v.replace("components/", "")).dir
return name
})
return components
}
export async function generateComponents(components?: string[]) {
const componetnsStr: string[] = [`// 该文件为自动生成,请勿修改!!!`]
const newComp: string[] = []
const typeArray: string[] = []
let typeStr = `declare module 'vue' {
export interface GlobalComponents {
__placeholder__
}
}
export { }`
if (!components) {
components = await getComponents()
}
components.forEach(name => {
const n = "Ps" + _.upperFirst(_.kebabCase(name))
componetnsStr.push(`import ${n} from "./${name}"`)
newComp.push(n)
typeArray.push(n + `: typeof import('princess-ui')['${n}']`)
})
componetnsStr.push(`export { \n ${newComp.join(",\n ")} \n}`)
typeStr = typeStr.replace("__placeholder__", typeArray.join(',\n '))
await fs.writeFile(getOutput("components.d.ts"), typeStr)
await fs.writeFile(getPkgs("components/components.ts"), componetnsStr.join("\n"))
}