You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailchat/web/scripts/generate-plugin-declaration...

88 lines
2.0 KiB
TypeScript

import {
parseModuleDeclaration,
parseExports,
ExportModuleItem,
DeclarationModuleItem,
} from 'tailchat-plugin-declaration-generator';
import path from 'path';
import fs from 'fs-extra';
const outputPath = path.resolve(__dirname, '../tailchat.d.ts');
function exportModulesTemplate(
items: ExportModuleItem[],
existedModules: DeclarationModuleItem[] = []
) {
return items
.map((item) => {
const findedModule = existedModules.find((m) => m.name === item.name);
if (findedModule) {
return `${
findedModule.comment ? findedModule.comment + '\n ' : ''
}export const ${findedModule.text};`;
} else {
return `export const ${item.name}: any;`;
}
})
.join('\n\n ');
}
function generateDeclarationFile() {
const { exportModules: commonExportModules } = parseExports(
path.resolve(__dirname, '../src/plugin/common/index.ts'),
{}
);
const { exportModules: commonRegExportModules } = parseExports(
path.resolve(__dirname, '../src/plugin/common/reg.ts'),
{}
);
const { exportModules: componentExportModules } = parseExports(
path.resolve(__dirname, '../src/plugin/component/index.tsx'),
{}
);
const { modules: existedModules } = parseModuleDeclaration(outputPath, {});
const output = `/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* 该文件由 Tailchat 自动生成
* 用于插件的类型声明
* 生成命令: pnpm run plugins:declaration:generate
*/
/**
* Tailchat 通用
*/
declare module '@capital/common' {
${exportModulesTemplate(
commonExportModules,
existedModules['@capital/common']
)}
${exportModulesTemplate(
commonRegExportModules,
existedModules['@capital/common']
)}
}
/**
* Tailchat 组件
*/
declare module '@capital/component' {
${exportModulesTemplate(
componentExportModules,
existedModules['@capital/component']
)}
}
`;
fs.writeFile(outputPath, output, {
encoding: 'utf8',
});
}
generateDeclarationFile();