chore: 优化类型生成代码, 增加了手动填写类型的保留

feat/desktop
moonrailgun 3 years ago
parent 9af694ae26
commit 55f0c49d53

@ -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<string, any[]> = {};
const modules: Record<string, DeclarationModuleItem[]> = {};
const sourceFile = program?.getSourceFile(filePath);
sourceFile?.forEachChild((node) => {

@ -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',

5
web/tailchat.d.ts vendored

@ -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;

Loading…
Cancel
Save