From 55f0c49d539f5fc5bd86898f0a3e079594779c09 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Fri, 17 Jun 2022 15:19:09 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BC=98=E5=8C=96=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=94=9F=E6=88=90=E4=BB=A3=E7=A0=81,=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E6=89=8B=E5=8A=A8=E5=A1=AB=E5=86=99=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E4=BF=9D=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/tsgenerator.ts | 10 ++++- .../generate-plugin-declaration.typescript.ts | 37 +++++++++++++++---- web/tailchat.d.ts | 5 ++- 3 files changed, 42 insertions(+), 10 deletions(-) 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;