38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { readdirSync, writeFile } from 'fs'
|
||
import { trimEnd } from 'lodash-es'
|
||
|
||
function getFileNames(dir: string) {
|
||
const dirents = readdirSync(dir, {
|
||
withFileTypes: true,
|
||
})
|
||
const fileNames: string[] = []
|
||
for (const dirent of dirents) {
|
||
if (!dirent.isDirectory()) fileNames.push(dirent.name.replace('.vue', ''))
|
||
}
|
||
return fileNames
|
||
}
|
||
|
||
/**
|
||
* 生成 ./types/tableRenderer.d.ts 文件
|
||
*/
|
||
const buildTableRendererType = () => {
|
||
let tableRenderer = getFileNames('./src/components/table/fieldRender/')
|
||
|
||
// 增加 slot,去除 default
|
||
tableRenderer.push('slot')
|
||
tableRenderer = tableRenderer.filter((item) => item !== 'default')
|
||
|
||
let tableRendererContent =
|
||
'/** 可用的表格单元格渲染器,以 ./src/components/table/fieldRender/ 目录中的文件名自动生成 */\ntype TableRenderer =\n | '
|
||
for (const key in tableRenderer) {
|
||
tableRendererContent += `'${tableRenderer[key]}'\n | `
|
||
}
|
||
tableRendererContent = trimEnd(tableRendererContent, ' | ')
|
||
|
||
writeFile('./types/tableRenderer.d.ts', tableRendererContent, 'utf-8', (err) => {
|
||
if (err) throw err
|
||
})
|
||
}
|
||
|
||
buildTableRendererType()
|