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'; import fs from 'fs-extra';
/** /**
@ -11,12 +11,18 @@ export interface ExportModuleItem {
pos: number; pos: number;
} }
export interface DeclarationModuleItem {
name: string;
text: string;
pos?: number;
}
export function parseModuleDeclaration( export function parseModuleDeclaration(
filePath: string, filePath: string,
options: ts.CompilerOptions options: ts.CompilerOptions
) { ) {
const { program } = parseFile(filePath, options); const { program } = parseFile(filePath, options);
const modules: Record<string, any[]> = {}; const modules: Record<string, DeclarationModuleItem[]> = {};
const sourceFile = program?.getSourceFile(filePath); const sourceFile = program?.getSourceFile(filePath);
sourceFile?.forEachChild((node) => { sourceFile?.forEachChild((node) => {

@ -2,16 +2,25 @@ import {
parseModuleDeclaration, parseModuleDeclaration,
parseExports, parseExports,
ExportModuleItem, ExportModuleItem,
DeclarationModuleItem,
} from 'tailchat-plugin-declaration-generator'; } from 'tailchat-plugin-declaration-generator';
import path from 'path'; import path from 'path';
import fs from 'fs-extra'; import fs from 'fs-extra';
const outputPath = path.resolve(__dirname, '../tailchat.d.ts'); const outputPath = path.resolve(__dirname, '../tailchat.d.ts');
function exportModulesTemplate(items: ExportModuleItem[]) { function exportModulesTemplate(
items: ExportModuleItem[],
existedModules: DeclarationModuleItem[] = []
) {
return items return items
.map((item) => { .map((item) => {
const findedModule = existedModules.find((m) => m.name === item.name);
if (findedModule) {
return `export const ${findedModule.text};`;
} else {
return `export const ${item.name}: any;`; return `export const ${item.name}: any;`;
}
}) })
.join('\n\n '); .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 * Tailchat
* *
* : pnpm run plugins:declaration:generate * : pnpm run plugins:declaration:generate
@ -42,9 +55,15 @@ function generateDeclarationFile() {
* Tailchat * Tailchat
*/ */
declare module '@capital/common' { 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 * Tailchat
*/ */
declare module '@capital/component' { declare module '@capital/component' {
${exportModulesTemplate(componentExportModules)} ${exportModulesTemplate(
}`; componentExportModules,
existedModules['@capital/component']
)}
}
`;
fs.writeFile(outputPath, output, { fs.writeFile(outputPath, output, {
encoding: 'utf8', encoding: 'utf8',

5
web/tailchat.d.ts vendored

@ -1,5 +1,8 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/** /**
* Tailchat * Tailchat
*
* : pnpm run plugins:declaration:generate * : pnpm run plugins:declaration:generate
*/ */
@ -37,7 +40,7 @@ declare module '@capital/common' {
export const useGroupIdContext: any; export const useGroupIdContext: any;
export const getServiceUrl: any; export const getServiceUrl: () => string;
export const getCachedUserInfo: any; export const getCachedUserInfo: any;

Loading…
Cancel
Save