diff --git a/packages/plugin-declaration-generator/src/tsgenerator.ts b/packages/plugin-declaration-generator/src/tsgenerator.ts index af0ff698..580b6564 100644 --- a/packages/plugin-declaration-generator/src/tsgenerator.ts +++ b/packages/plugin-declaration-generator/src/tsgenerator.ts @@ -1,4 +1,4 @@ -import ts, { isExportDeclaration, isVariableStatement } from 'typescript'; +import ts, { isVariableStatement } from 'typescript'; import fs from 'fs-extra'; /** @@ -11,12 +11,18 @@ export interface ExportModuleItem { pos: number; } +export interface DeclarationModuleItem { + name: string; + text: string; + pos?: number; +} + export function parseModuleDeclaration( filePath: string, options: ts.CompilerOptions ) { const { program } = parseFile(filePath, options); - const modules: Record = {}; + const modules: Record = {}; const sourceFile = program?.getSourceFile(filePath); sourceFile?.forEachChild((node) => { diff --git a/web/scripts/generate-plugin-declaration.typescript.ts b/web/scripts/generate-plugin-declaration.typescript.ts index 73abee61..f92b0f84 100644 --- a/web/scripts/generate-plugin-declaration.typescript.ts +++ b/web/scripts/generate-plugin-declaration.typescript.ts @@ -2,16 +2,25 @@ 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[]) { +function exportModulesTemplate( + items: ExportModuleItem[], + existedModules: DeclarationModuleItem[] = [] +) { return items .map((item) => { - return `export const ${item.name}: any;`; + const findedModule = existedModules.find((m) => m.name === item.name); + if (findedModule) { + return `export const ${findedModule.text};`; + } else { + return `export const ${item.name}: any;`; + } }) .join('\n\n '); } @@ -32,7 +41,11 @@ function generateDeclarationFile() { {} ); - const output = `/** + const { modules: existedModules } = parseModuleDeclaration(outputPath, {}); + + const output = `/* eslint-disable @typescript-eslint/no-explicit-any */ + +/** * 该文件由 Tailchat 自动生成 * 用于插件的类型声明 * 生成命令: pnpm run plugins:declaration:generate @@ -42,9 +55,15 @@ function generateDeclarationFile() { * Tailchat 通用 */ declare module '@capital/common' { - ${exportModulesTemplate(commonExportModules)} + ${exportModulesTemplate( + commonExportModules, + existedModules['@capital/common'] + )} - ${exportModulesTemplate(commonRegExportModules)} + ${exportModulesTemplate( + commonRegExportModules, + existedModules['@capital/common'] + )} } @@ -52,8 +71,12 @@ declare module '@capital/common' { * Tailchat 组件 */ declare module '@capital/component' { - ${exportModulesTemplate(componentExportModules)} -}`; + ${exportModulesTemplate( + componentExportModules, + existedModules['@capital/component'] + )} +} +`; fs.writeFile(outputPath, output, { encoding: 'utf8', diff --git a/web/tailchat.d.ts b/web/tailchat.d.ts index 3aabf9f0..3301ddc5 100644 --- a/web/tailchat.d.ts +++ b/web/tailchat.d.ts @@ -1,5 +1,8 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + /** * 该文件由 Tailchat 自动生成 + * 用于插件的类型声明 * 生成命令: pnpm run plugins:declaration:generate */ @@ -37,7 +40,7 @@ declare module '@capital/common' { export const useGroupIdContext: any; - export const getServiceUrl: any; + export const getServiceUrl: () => string; export const getCachedUserInfo: any;