161847f8eSopenharmony_ci/* 261847f8eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 461847f8eSopenharmony_ci * you may not use this file except in compliance with the License. 561847f8eSopenharmony_ci * You may obtain a copy of the License at 661847f8eSopenharmony_ci * 761847f8eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 861847f8eSopenharmony_ci * 961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and 1361847f8eSopenharmony_ci * limitations under the License. 1461847f8eSopenharmony_ci */ 1561847f8eSopenharmony_ci 1661847f8eSopenharmony_ciimport path from 'path'; 1761847f8eSopenharmony_ciimport { NumberConstant } from './Constant'; 1861847f8eSopenharmony_ciimport { kitData } from '../../kit.json'; 1961847f8eSopenharmony_ciimport { fileContent } from '../../subsystem.json'; 2061847f8eSopenharmony_ci 2161847f8eSopenharmony_ciexport class FunctionUtils { 2261847f8eSopenharmony_ci /** 2361847f8eSopenharmony_ci * 判断文件路径是否为ArkUI,返回ArkUI或文件名 2461847f8eSopenharmony_ci * 2561847f8eSopenharmony_ci * @param fileFilePath 文件路径 2661847f8eSopenharmony_ci * @returns { string } 返回ArkUI或文件名 2761847f8eSopenharmony_ci */ 2861847f8eSopenharmony_ci static getPackageName(fileFilePath: string): string { 2961847f8eSopenharmony_ci const packageName = 3061847f8eSopenharmony_ci fileFilePath.indexOf('component\\ets\\') >= 0 || fileFilePath.indexOf('component/ets/') >= 0 ? 3161847f8eSopenharmony_ci 'ArkUI' : 3261847f8eSopenharmony_ci path.basename(fileFilePath).replace(/@|.d.ts$/g, ''); 3361847f8eSopenharmony_ci return packageName; 3461847f8eSopenharmony_ci } 3561847f8eSopenharmony_ci 3661847f8eSopenharmony_ci static handleSyscap(syscap: string): string { 3761847f8eSopenharmony_ci const syscapArr: Array<string> = syscap.split('.'); 3861847f8eSopenharmony_ci let syscapField: string = ''; 3961847f8eSopenharmony_ci 4061847f8eSopenharmony_ci switch (syscapArr[1]) { 4161847f8eSopenharmony_ci case 'MiscServices': 4261847f8eSopenharmony_ci syscapField = syscapArr[NumberConstant.SYSCAP_KEY_FIELD_INDEX]; 4361847f8eSopenharmony_ci break; 4461847f8eSopenharmony_ci case 'Communication': 4561847f8eSopenharmony_ci if (splitSubsystem.has(syscapArr[NumberConstant.SYSCAP_KEY_FIELD_INDEX])) { 4661847f8eSopenharmony_ci syscapField = syscapArr[NumberConstant.SYSCAP_KEY_FIELD_INDEX]; 4761847f8eSopenharmony_ci break; 4861847f8eSopenharmony_ci } else { 4961847f8eSopenharmony_ci syscapField = syscapArr[1]; 5061847f8eSopenharmony_ci break; 5161847f8eSopenharmony_ci } 5261847f8eSopenharmony_ci default: 5361847f8eSopenharmony_ci syscapField = syscapArr[1]; 5461847f8eSopenharmony_ci } 5561847f8eSopenharmony_ci return syscapField; 5661847f8eSopenharmony_ci } 5761847f8eSopenharmony_ci 5861847f8eSopenharmony_ci static readSubsystemFile(): SubSystemData { 5961847f8eSopenharmony_ci const subsystemMap: Map<string, string> = new Map(); 6061847f8eSopenharmony_ci const fileNameMap: Map<string, string> = new Map(); 6161847f8eSopenharmony_ci 6261847f8eSopenharmony_ci fileContent.forEach((content: SubSystemInfo) => { 6361847f8eSopenharmony_ci subsystemMap.set(content.syscap, content.subsystem); 6461847f8eSopenharmony_ci fileNameMap.set(content.syscap, content.fileName); 6561847f8eSopenharmony_ci }); 6661847f8eSopenharmony_ci return { 6761847f8eSopenharmony_ci subsystemMap: subsystemMap, 6861847f8eSopenharmony_ci fileNameMap: fileNameMap, 6961847f8eSopenharmony_ci }; 7061847f8eSopenharmony_ci } 7161847f8eSopenharmony_ci 7261847f8eSopenharmony_ci /** 7361847f8eSopenharmony_ci * 遍历kit配置文件 7461847f8eSopenharmony_ci * 7561847f8eSopenharmony_ci * @returns 7661847f8eSopenharmony_ci */ 7761847f8eSopenharmony_ci static readKitFile(): KitData { 7861847f8eSopenharmony_ci const subsystemMap: Map<string, string> = new Map(); 7961847f8eSopenharmony_ci const kitNameMap: Map<string, string> = new Map(); 8061847f8eSopenharmony_ci const filePathSet: Set<string> = new Set(); 8161847f8eSopenharmony_ci kitData.forEach((subSystemInfo: KitInfo) => { 8261847f8eSopenharmony_ci subsystemMap.set(subSystemInfo.filePath, subSystemInfo.subSystem); 8361847f8eSopenharmony_ci kitNameMap.set(subSystemInfo.filePath, subSystemInfo.kitName); 8461847f8eSopenharmony_ci filePathSet.add(subSystemInfo.filePath); 8561847f8eSopenharmony_ci }); 8661847f8eSopenharmony_ci return { subsystemMap, kitNameMap, filePathSet }; 8761847f8eSopenharmony_ci } 8861847f8eSopenharmony_ci} 8961847f8eSopenharmony_ci 9061847f8eSopenharmony_ci/** 9161847f8eSopenharmony_ci * 被拆分开的子系统 9261847f8eSopenharmony_ci */ 9361847f8eSopenharmony_ciconst splitSubsystem: Set<string> = new Set(['Bluetooth', 'NetManager']); 9461847f8eSopenharmony_ci 9561847f8eSopenharmony_ciclass SubSystemInfo { 9661847f8eSopenharmony_ci syscap: string = ''; 9761847f8eSopenharmony_ci subsystem: string = ''; 9861847f8eSopenharmony_ci fileName: string = ''; 9961847f8eSopenharmony_ci} 10061847f8eSopenharmony_ci 10161847f8eSopenharmony_ci/** 10261847f8eSopenharmony_ci * 读取子系统配置文件返回的数据格式 10361847f8eSopenharmony_ci */ 10461847f8eSopenharmony_citype SubSystemData = { 10561847f8eSopenharmony_ci subsystemMap: Map<string, string>; 10661847f8eSopenharmony_ci fileNameMap: Map<string, string>; 10761847f8eSopenharmony_ci}; 10861847f8eSopenharmony_ci 10961847f8eSopenharmony_ci/** 11061847f8eSopenharmony_ci * 读取kit配置文件返回的数据格式 11161847f8eSopenharmony_ci */ 11261847f8eSopenharmony_ciexport type KitData = { 11361847f8eSopenharmony_ci subsystemMap: Map<string, string>; 11461847f8eSopenharmony_ci kitNameMap: Map<string, string>; 11561847f8eSopenharmony_ci filePathSet: Set<string>; 11661847f8eSopenharmony_ci}; 11761847f8eSopenharmony_ci 11861847f8eSopenharmony_ci/** 11961847f8eSopenharmony_ci * kit配置文件里的信息项 12061847f8eSopenharmony_ci */ 12161847f8eSopenharmony_ciclass KitInfo { 12261847f8eSopenharmony_ci filePath: string = ''; 12361847f8eSopenharmony_ci subSystem: string = ''; 12461847f8eSopenharmony_ci kitName: string = ''; 12561847f8eSopenharmony_ci} 126