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