diff --git a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts index dd0aec9b5815358ff984022d6bea0ade713607a7..7f381cb4b04e2134aa416314eff78e453ffe07ba 100644 --- a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts +++ b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts @@ -212,6 +212,8 @@ export class CtrlGenerator extends GeneratorBase { let description = ''; // 默认值 let defaultvalue = '-'; + // 忽略输入参数 + let isIgnore = false; jsDoc.forEach((doc: any) => { const descriptionTag = doc.tags?.find( (t: any) => t.tagName.text === 'description', @@ -225,6 +227,9 @@ export class CtrlGenerator extends GeneratorBase { if (defaultTag && defaultTag.comment) { defaultvalue = defaultTag.comment; } + isIgnore = doc.tags.some( + (tag: any) => tag.tagName.text === 'ignoredoc', + ); }); // 解析类型 let parameterType = 'any'; @@ -242,12 +247,14 @@ export class CtrlGenerator extends GeneratorBase { .replace(/Object as PropType/g, ''); } } - docObject.props.push({ - name: propName, - description, - parameterType, - defaultvalue, - }); + if (!isIgnore) { + docObject.props.push({ + name: propName, + description, + parameterType, + defaultvalue, + }); + } } }); } @@ -484,7 +491,7 @@ export class CtrlGenerator extends GeneratorBase { this.docObject.props.forEach((prop: any) => { markdownContent += `| ${prop.name} | ${prop.description} | ` + - `\`${prop.parameterType.replace(/\|/g, '\\|')}\`` + + `\`${prop.parameterType}\`` + ` | ${prop.defaultvalue.replace(/\|/g, '\\|')} |\n`; }); markdownContent += `\n\n`; @@ -505,7 +512,7 @@ export class CtrlGenerator extends GeneratorBase { this.docObject.states.forEach((state: any) => { markdownContent += `| ${state.name} | ${state.description} | ` + - `\`${state.parameterType.replace(/\|/g, '\\|')}\`` + + `\`${state.parameterType}\`` + ` | ${state.defaultvalue.replace(/\|/g, '\\|')} |\n`; }); markdownContent += `\n\n`; @@ -526,7 +533,7 @@ export class CtrlGenerator extends GeneratorBase { this.docObject.fields.forEach((field: any) => { markdownContent += `| ${field.name} | ${field.description} | ` + - `\` ${field.parameterType.replace(/\|/g, '\\|')}\`` + + `\` ${field.parameterType}\`` + `|\n`; }); this.docObject.methods.forEach((method: any) => { @@ -564,20 +571,26 @@ export class CtrlGenerator extends GeneratorBase { // 控件动态参数 markdownContent += `## 控件动态参数\n\n`; + let ctrlParams = this.docObject.ctrlParams; + ctrlParams = ctrlParams.filter((ctrlParam: any) => { + const effectPlatform = ctrlParam.effectPlatform; + return !( + effectPlatform && + (this.config.isMob + ? effectPlatform === 'web' + : effectPlatform === 'mob') + ); + }); // 控件动态参数表格 - if ( - this.docObject && - this.docObject.ctrlParams && - this.docObject.ctrlParams.length > 0 - ) { + if (ctrlParams.length > 0) { markdownContent += `| 名称 | 说明 | 类型 | 默认值 |\n`; markdownContent += `|----------|------|------|------|\n`; - this.docObject.ctrlParams.forEach((ctrlParam: any) => { + ctrlParams.forEach((ctrlParam: any) => { markdownContent += `| ${ctrlParam.name || '-'} | ${ ctrlParam.description.replace(/\|/g, '\\|') || '-' } |` + - `\`${ctrlParam.parameterType.replace(/\|/g, '\\|') || ''}\`` + + `\`${ctrlParam.parameterType || ''}\`` + `| ${ctrlParam.defaultvalue?.replace(/\|/g, '\\|') || '-'} |\n`; }); markdownContent += `\n\n`; diff --git a/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts b/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts index fbc650cfdc567fec1aad0d29a733c59dd0382667..7fb2df40bfa9154ddf4690884cffda4d43ea95fe 100644 --- a/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts +++ b/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts @@ -223,6 +223,28 @@ export class PanelGenerator extends GeneratorBase { mainFilePath: string, docObject: Record, ): Promise { + // 先获取根控制器属性,子类有重新属性 + const targetFilePath = path.resolve( + this.config.dirPathConfig.runtimeBasePath, + this.panelItemControllerPath, + ); + const targetFileContent = fs.readFileSync(targetFilePath, 'utf8'); + const targetSourceFileAst = ts.createSourceFile( + path.basename(targetFilePath), + targetFileContent, + ts.ScriptTarget.Latest, + true, + ); + + ts.forEachChild(targetSourceFileAst, targetNode => { + if (ts.isInterfaceDeclaration(targetNode)) { + targetNode.members.forEach(member => { + if (ts.isPropertySignature(member)) { + docObject.fields.push(parseField(member, targetSourceFileAst)); + } + }); + } + }); if (mainFilePath) { // 全路径直接使用,不用拼接 let filePath: string = mainFilePath; @@ -260,10 +282,23 @@ export class PanelGenerator extends GeneratorBase { } }); } - // 获取根控制器属性 + } + + /** + * @description 解析状态文件 + * @param {string} fieldFilePath + * @param {Record} docObject + * @returns {*} {Promise} + * @memberof PanelGenerator + */ + async parseStateFile( + fieldFilePath: string, + docObject: Record, + ): Promise { + // 先获取根状态属性,子类有重写属性 const targetFilePath = path.resolve( this.config.dirPathConfig.runtimeBasePath, - this.panelItemControllerPath, + this.panelItemStatePath, ); const targetFileContent = fs.readFileSync(targetFilePath, 'utf8'); const targetSourceFileAst = ts.createSourceFile( @@ -275,26 +310,22 @@ export class PanelGenerator extends GeneratorBase { ts.forEachChild(targetSourceFileAst, targetNode => { if (ts.isInterfaceDeclaration(targetNode)) { - targetNode.members.forEach(member => { - if (ts.isPropertySignature(member)) { - docObject.fields.push(parseField(member, targetSourceFileAst)); - } - }); + // 附加@primary标记的才解析 + const jsDocs = ts.getJSDocCommentsAndTags(targetNode); + const hasPrimaryTag = jsDocs.some( + (doc: any) => + doc.tags && + doc.tags.some((tag: any) => tag.tagName.text === 'primary'), + ); + if (hasPrimaryTag) { + targetNode.members.forEach(member => { + if (ts.isPropertySignature(member)) { + docObject.states.push(parseField(member, targetSourceFileAst)); + } + }); + } } }); - } - - /** - * @description 解析状态文件 - * @param {string} fieldFilePath - * @param {Record} docObject - * @returns {*} {Promise} - * @memberof PanelGenerator - */ - async parseStateFile( - fieldFilePath: string, - docObject: Record, - ): Promise { if (fieldFilePath) { // 全路径直接使用,不用拼接 let filePath: string = fieldFilePath; @@ -330,37 +361,6 @@ export class PanelGenerator extends GeneratorBase { } }); } - // 获取根状态属性 - const targetFilePath = path.resolve( - this.config.dirPathConfig.runtimeBasePath, - this.panelItemStatePath, - ); - const targetFileContent = fs.readFileSync(targetFilePath, 'utf8'); - const targetSourceFileAst = ts.createSourceFile( - path.basename(targetFilePath), - targetFileContent, - ts.ScriptTarget.Latest, - true, - ); - - ts.forEachChild(targetSourceFileAst, targetNode => { - if (ts.isInterfaceDeclaration(targetNode)) { - // 附加@primary标记的才解析 - const jsDocs = ts.getJSDocCommentsAndTags(targetNode); - const hasPrimaryTag = jsDocs.some( - (doc: any) => - doc.tags && - doc.tags.some((tag: any) => tag.tagName.text === 'primary'), - ); - if (hasPrimaryTag) { - targetNode.members.forEach(member => { - if (ts.isPropertySignature(member)) { - docObject.states.push(parseField(member, targetSourceFileAst)); - } - }); - } - } - }); } /** diff --git a/packages/core/src/generate-doc/generator/util/ast-util.ts b/packages/core/src/generate-doc/generator/util/ast-util.ts index 9782d2488b9b78be49641a91889fd53ba3947fe4..3cfd5d4faec3d4eaa1605743db526b58e0500226 100644 --- a/packages/core/src/generate-doc/generator/util/ast-util.ts +++ b/packages/core/src/generate-doc/generator/util/ast-util.ts @@ -75,7 +75,8 @@ export function parseMethod( let paramType = param.type ? param.type.getText(sourceFile) : 'any'; // 处理 'A' | 'B' 类型异常 paramType = paramType.replace(/\|/g, '\\|'); - return `${paramName}: ${paramType}`; + const isOptional = !!param.questionToken; + return `${paramName}${isOptional ? '?' : ''}: ${paramType}`; }) .join(', ') || ''; const descriptionTag = memberJsDocs.find( diff --git a/packages/core/src/generate-doc/generator/view-generator/view-generator.ts b/packages/core/src/generate-doc/generator/view-generator/view-generator.ts index c60d04e52d8d1616709bf3896e2a79d6b108979b..98ddc446a9d347001dd29797eea3246fd161ea92 100644 --- a/packages/core/src/generate-doc/generator/view-generator/view-generator.ts +++ b/packages/core/src/generate-doc/generator/view-generator/view-generator.ts @@ -161,6 +161,8 @@ export class ViewGenerator extends GeneratorBase { let description = ''; // 默认值 let defaultvalue = '-'; + // 忽略输入参数 + let isIgnore = false; jsDoc.forEach((doc: any) => { const descriptionTag = doc.tags?.find( (t: any) => t.tagName.text === 'description', @@ -174,6 +176,9 @@ export class ViewGenerator extends GeneratorBase { if (defaultTag && defaultTag.comment) { defaultvalue = defaultTag.comment; } + isIgnore = doc.tags.some( + (tag: any) => tag.tagName.text === 'ignoredoc', + ); }); // 解析类型 let parameterType = 'any'; @@ -191,12 +196,14 @@ export class ViewGenerator extends GeneratorBase { .replace(/Object as PropType/g, ''); } } - docObject.props.push({ - name: propName, - description, - parameterType, - defaultvalue, - }); + if (!isIgnore) { + docObject.props.push({ + name: propName, + description, + parameterType, + defaultvalue, + }); + } } }); }