diff --git a/build-tools/handleApiFiles.js b/build-tools/handleApiFiles.js index 981ea84c80457309070a4ce59a13e0a6924f8c5e..1e4a772e077bef1b9d01f4eb74c1d72b5d20d7f1 100755 --- a/build-tools/handleApiFiles.js +++ b/build-tools/handleApiFiles.js @@ -360,17 +360,17 @@ function handleNoTagFileInFirstType(sourceFile, outputPath, fileContent) { * @returns */ function deleteArktsTag(fileContent) { - const arktsTagRegx = /\*\s*@arkts\s(1\.1|1\.2|1\.1&1\.2|dynamic|static|dynamic&static)\s*(\r|\n)\s*/g; + const arktsTagRegx = /\s*\*\s*@arkts\s(1\.1|1\.2|1\.1&1\.2|dynamic|static|dynamic&static)\s*(?=\r|\n)/g; fileContent = fileContent.replace(arktsTagRegx, (substring, p1) => { return ''; }); - const arktsSinceTagRegx = /\*\s*@since\s\S*\s(dynamic&static|dynamiconly|dynamic|static)\s*(\r|\n)\s*/g; + const arktsSinceTagRegx = /\s*\*\s*@since\s\S*\s(dynamic&static|dynamiconly|dynamic|staticonly|static)\s*(?=\r|\n)/g; // 处理@since xx dynamic&static格式标签文本 fileContent = fileContent.replace(arktsSinceTagRegx, (substring, p1) => { if (dirType === DirType.typeOne && substring.indexOf('dynamic') !== -1) { substring = substring.replace(/\s(dynamiconly|dynamic(&static)?)/g, ''); } else if ((dirType === DirType.typeTwo || dirType === DirType.typeThree) && substring.indexOf('static') !== -1) { - substring = substring.replace(/\s(dynamic&)?static/g, ''); + substring = substring.replace(/\s(staticonly|(dynamic&)?static)/g, ''); } else { substring = ''; } @@ -656,7 +656,7 @@ function joinFileJsdoc(deletionContent, sourceFile) { if (dirType !== DirType.typeOne) { // TODO:添加use static字符串 - newContent = addStaticString(newContent); + newContent = addStaticString(newContent); } return newContent; } @@ -935,7 +935,8 @@ function judgeIsDeleteApi(node) { let sinceVersion = 20; if (dirType === DirType.typeOne) { - return /@arkts\s*1\.2/g.test(notesStr) || (/@since\s\S*\sstatic/g.test(notesStr) && !/@since\s\S*\sdynamic/g.test(notesStr)); + return /@arkts\s*1\.2/g.test(notesStr) || + (/@since\s\S*\s(staticonly|static)/g.test(notesStr) && !/@since\s\S*\sdynamic/g.test(notesStr)); } if (sinceArr) { @@ -943,13 +944,13 @@ function judgeIsDeleteApi(node) { } if (dirType === DirType.typeTwo) { - return (/@deprecated/g.test(notesStr) && sinceVersion < 20) || - /@arkts\s*1\.1(?!&1\.2)/g.test(notesStr) || + return (/@deprecated/g.test(notesStr) && sinceVersion < 20) || + /@arkts\s*1\.1(?!&1\.2)/g.test(notesStr) || (/@since\s\S*\s(dynamiconly|dynamic)/g.test(notesStr) && !/@since\s\S*\s(dynamic&)?static/g.test(notesStr)); } if (dirType === DirType.typeThree) { - return !/@arkts\s*(1\.1&)?1\.2/g.test(notesStr) && !/@since\s\S*\s(dynamic&)?static/g.test(notesStr); + return !/@arkts\s*(1\.1&)?1\.2/g.test(notesStr) && !/@since\s\S*\s(staticonly|(dynamic&)?static)/g.test(notesStr); } return false; diff --git a/build-tools/process_dynamic/apiFile.json b/build-tools/process_dynamic/apiFile.json new file mode 100644 index 0000000000000000000000000000000000000000..6941fa698db2d10be812c04a769162791bca6d39 --- /dev/null +++ b/build-tools/process_dynamic/apiFile.json @@ -0,0 +1,3 @@ +{ + "files": [] +} \ No newline at end of file diff --git a/build-tools/process_dynamic/ignoreApiFile.json b/build-tools/process_dynamic/ignoreApiFile.json index c037ef962a0b334024d0533e1feac3be66a7b170..6989c71cce15396e80be449c14d03e51b9f132ec 100644 --- a/build-tools/process_dynamic/ignoreApiFile.json +++ b/build-tools/process_dynamic/ignoreApiFile.json @@ -38,5 +38,9 @@ "api/@system.prompt.d.ets", "api/@system.router.d.ets", "api/common/full/canvaspattern.d.ets" + ], + "dynamiconlyFiles": [ + ], + "staticonlyFiles": [ ] } \ No newline at end of file diff --git a/build-tools/process_dynamic/process_dynamic.js b/build-tools/process_dynamic/process_dynamic.js index 63bc4029bd3a0d3b84479f6534f61e590aa03d19..389152c6893999d6c66675162bf64fc5b665e68c 100644 --- a/build-tools/process_dynamic/process_dynamic.js +++ b/build-tools/process_dynamic/process_dynamic.js @@ -16,6 +16,7 @@ const fs = require('fs'); const path = require('path'); const ignoreApiFileConfig = require('./ignoreApiFile.json'); +const apiFileConfig = require('./apiFile.json'); // 转换配置 const DirType = { undefined: 'dynamic', @@ -24,6 +25,7 @@ const DirType = { static: 'static', '1.1&1.2': 'dynamic&static', dynamiconly: 'dynamiconly', + staticonly: 'staticonly', }; // P0级别KIT,需要将动态接口转换为dynamic const HIGH_LEVEL_KIT_SET = new Set([ @@ -92,8 +94,7 @@ function main() { return; } const relativeFilePath = path.relative(inputDir, filePath).replace(/\\/g, '/'); - if (ignoreApiFileConfig.files.includes(relativeFilePath)) { - console.log('当前文件工具不支持直接输出', relativeFilePath); + if (ignoreApiFileConfig.files.includes(relativeFilePath) || !apiFileConfig.files.includes(relativeFilePath)) { writeFile(getOutFilePath(filePath), content); return; } @@ -193,6 +194,11 @@ function isStaticFile(filePath) { */ function getNewCommont(substring, kitName, filePath) { const relativePath = path.relative(inputDir, filePath); + // 重复转换跳过 + const hasSinceTagDynamic = /\*\s+\@since\s.*(dynamic|static)/g.test(substring); + if (hasSinceTagDynamic) { + return substring; + } // 获取版本信息 const sinceInfo = getSinceInfo(substring, currentArkts); // 收集不同场景调试信息 @@ -206,7 +212,7 @@ function getNewCommont(substring, kitName, filePath) { !currentArkts) { // 若非P0接口,直接返回当前JSDoc信息 return substring; } - const sinceTagContent = parseSinceTagContent(sinceInfo); + const sinceTagContent = parseSinceTagContent(sinceInfo, filePath); substring = substring.replace(/(.*@since\s+).*/g, sinceTagContent); if (sinceInfo.apiArkts) { substring = substring.replace(/.*\*\s+@arkts\s+\S*\s*(\r|\n)/g, ''); @@ -221,12 +227,17 @@ function needParse2Static(arktsVersionObj, version) { } // 转换@since标签文本 -function parseSinceTagContent(sinceInfo) { +function parseSinceTagContent(sinceInfo, filePath) { + const relativePath = path.relative(inputDir, filePath).replace(/\\/g, '/'); + const isDynamiconlyFile = ignoreApiFileConfig.dynamiconlyFiles.includes(relativePath); + const isStaticonlyFile = ignoreApiFileConfig.staticonlyFiles.includes(relativePath); const arktsVersionObj = sinceInfo.arktsSince; let replaceVal = ``; if (sinceInfo.toDynamic) { // 转换为@since xx dynamic const sinceValue = sinceInfo.since || arktsVersionObj['1.1']; - const dynamicTag = sinceInfo.toDynamicOnly ? DirType.dynamiconly : DirType['1.1']; + const dynamicTag = (sinceInfo.toDynamicOnly || isDynamiconlyFile) && !sinceInfo.toStatic ? + DirType.dynamiconly : + DirType['1.1']; replaceVal += `$1${sinceValue} ${dynamicTag}`; } if (sinceInfo.toDynamic && sinceInfo.toStatic) { @@ -241,7 +252,10 @@ function parseSinceTagContent(sinceInfo) { } else { replaceVal += `22`; } - replaceVal += ` ${DirType['1.2']}`; + const staticTag = (sinceInfo.toStaticOnly || isStaticonlyFile) && !sinceInfo.toDynamic ? + DirType.staticonly : + DirType['1.2']; + replaceVal += ` ${staticTag}`; } // 转换为@since xx dynamic&static if (sinceInfo.toDynamic && sinceInfo.toStatic && needParse2Static(arktsVersionObj, sinceInfo.since)) { @@ -273,15 +287,16 @@ function parseSinceTagContent(sinceInfo) { * @return { sinceInfoObj } */ function getSinceInfo(jsDocStr, currentArkts) { - const hasDeprecatedTag = /\*\s+\@deprecated\s+/g.test(jsDocStr); - const hasUseinsteadTag = /\*\s+\@useinstead\s+/g.test(jsDocStr); + const hasDeprecatedTag = /\*\s+\@deprecated\s+/gi.test(jsDocStr); + const hasUseinsteadTag = /\*\s+\@useinstead\s+/gi.test(jsDocStr); + const hasFamodelonlyTag = /\*\s+\@famodelonly\s+/gi.test(jsDocStr); /** @type {sinceInfoObj} */ let sinceInfo = { toDynamic: false, toStatic: false, - toDynamicOnly: hasDeprecatedTag && hasUseinsteadTag, + toDynamicOnly: (hasDeprecatedTag && hasUseinsteadTag) || hasFamodelonlyTag, toStaticOnly: false, - currentArkts: currentArkts, + currentArkts: currentArkts }; const sinceStr = jsDocStr.match(/\*\s+\@since\s+(.*)/)?.[1]; if (!isNaN(sinceStr)) {