1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import { StringResourceId } from './constant';
17
18const ZH_STRING_MAP: Map<number, string> = new Map([
19  [StringResourceId.INPUT_FILE_NOT_FOUND, '找不到d.ts文件'],
20  [StringResourceId.INPUT_FILE_CONTENT_EMPTY, '文件无内容'],
21  [StringResourceId.COMMAND_INPUT_DESCRIPTION, 'd.ts文件或包含d.ts的文件夹'],
22  [StringResourceId.COMMAND_OUT_DESCRIPTION, '新的d.ts输出文件或目录'],
23  [StringResourceId.NOT_DTS_FILE, '输入文件不是d.ts文件'],
24  [StringResourceId.COMMAND_LOGLEVEL_DESCRIPTION, '日志输出级别[INFO,WARN,DEBUG,ERR]'],
25  [StringResourceId.COMMAND_SPLIT_API, '是否拆分接口'],
26  [StringResourceId.COMMAND_RULE, '整改规则文件'],
27  [StringResourceId.INVALID_PATH, '不是合法的路径'],
28  [StringResourceId.OUTPUT_MUST_FILE, '输出路径需要指向文件'],
29  [StringResourceId.OUTPUT_MUST_DIR, '输出路径需要指向目录'],
30  [StringResourceId.OUTPUT_SAME_WITH_INPUT, '输出文件路径与输入文件路径相同'],
31  [StringResourceId.OUTPUT_SUBDIR_INPUT, '输出目录不能是输入目录的子目录'],
32  [StringResourceId.START_MESSAGE, '正在处理, 请稍后 ...'],
33  [StringResourceId.COMMAND_BRANCH, 'OpenHarmony 分支名'],
34  [StringResourceId.VERSION_HINT, '告警, 需要nodejs $0.$1.$2+'],
35  [StringResourceId.COMMAND_TEST, '仅供内部测试使用']
36]);
37
38const EN_STRING_MAP: Map<number, string> = new Map([
39  [StringResourceId.INPUT_FILE_NOT_FOUND, 'd.ts is not found'],
40  [StringResourceId.INPUT_FILE_CONTENT_EMPTY, 'file is empty'],
41  [StringResourceId.COMMAND_INPUT_DESCRIPTION, 'absolute path of the file'],
42  [StringResourceId.COMMAND_OUT_DESCRIPTION, 'absolute path of the file'],
43  [StringResourceId.NOT_DTS_FILE, 'not a d.ts file'],
44  [StringResourceId.COMMAND_LOGLEVEL_DESCRIPTION, 'log level [INFO,WARN,DEBUG,ERR]'],
45  [StringResourceId.COMMAND_SPLIT_API, 'split event api'],
46  [StringResourceId.COMMAND_RULE, 'rule file'],
47  [StringResourceId.INVALID_PATH, 'path is invalid'],
48  [StringResourceId.OUTPUT_MUST_FILE, 'the output path must be a file'],
49  [StringResourceId.OUTPUT_MUST_DIR, 'the output path must be a folder'],
50  [StringResourceId.OUTPUT_SAME_WITH_INPUT, 'the output file path is same as the input file path'],
51  [StringResourceId.OUTPUT_SUBDIR_INPUT, 'the output directory cannot be a subdirectory of the input directory'],
52  [StringResourceId.START_MESSAGE, 'Processing please wait ...'],
53  [StringResourceId.COMMAND_BRANCH, 'OpenHarmony branch name'],
54  [StringResourceId.VERSION_HINT, 'warning, nodejs version $0.$1.$2+ is required'],
55  [StringResourceId.COMMAND_TEST, 'just for internal test']
56]);
57
58export class StringResource {
59  static stringMap: Map<number, string> = ZH_STRING_MAP;
60  static getString(key: number): string {
61    return this.stringMap.get(key) || `unknown string resource ${key}`;
62  }
63}
64
65export class StringUtils {
66  static isEmpty(str: string | undefined): boolean {
67    return str === undefined || str.length === 0;
68  }
69
70  static hasSubstring(str: string, sub: string | RegExp): boolean {
71    return str.search(sub) !== -1;
72  }
73
74  static replaceAt(src: string, index: number, replacement: string): string {
75    return src.substring(0, index) + replacement + src.substring(index + replacement.length);
76  }
77
78  static formatString(pattern: string, args: Array<number>): string {
79    let newStr = pattern;
80    for (let index = 0; index < args.length; index++) {
81      newStr = newStr.replace(`$${index}`, `${args[index]}`);
82    }
83    return newStr;
84  }
85}
86
87export class LogReportStringUtils {
88  static createErrorInfo(errorInfo: string, params: string[]): string {
89    params.forEach((param: string) => {
90      errorInfo = errorInfo.replace('$$', param);
91    });
92    return errorInfo;
93  }
94}