diff --git a/ets2panda/linter/arkanalyzer/OAT.xml b/ets2panda/linter/arkanalyzer/OAT.xml
index 642093936053babe5d8da7bdfa8add284ca5bb60..a33eba98c976d5cdaec8e23aa741d143defe9b80 100644
--- a/ets2panda/linter/arkanalyzer/OAT.xml
+++ b/ets2panda/linter/arkanalyzer/OAT.xml
@@ -19,6 +19,7 @@
+
diff --git a/ets2panda/linter/arkanalyzer/src/Config.ts b/ets2panda/linter/arkanalyzer/src/Config.ts
index bff8ddf474ca034ddd0a8478c982dbdff0b2e6a5..1a222ff6658b3be89fc2c6a8ee5eb31af6961ad7 100644
--- a/ets2panda/linter/arkanalyzer/src/Config.ts
+++ b/ets2panda/linter/arkanalyzer/src/Config.ts
@@ -86,6 +86,7 @@ export class SceneConfig {
public buildConfig(targetProjectName: string, targetProjectDirectory: string, sdks: Sdk[], fullFilePath?: string[]): void {
this.targetProjectName = targetProjectName;
this.targetProjectDirectory = targetProjectDirectory;
+ this.projectFiles = getAllFiles(targetProjectDirectory, this.options.supportFileExts!, this.options.ignoreFileNames);
this.sdksObj = sdks;
if (fullFilePath) {
this.projectFiles.push(...fullFilePath);
diff --git a/ets2panda/linter/arkanalyzer/src/Scene.ts b/ets2panda/linter/arkanalyzer/src/Scene.ts
index 72c782822638b95a35109c472eeaa37aaaf1e76f..84ef44b99aede1220d3ac8275bb9297a17107fef 100644
--- a/ets2panda/linter/arkanalyzer/src/Scene.ts
+++ b/ets2panda/linter/arkanalyzer/src/Scene.ts
@@ -41,6 +41,8 @@ import { ImportInfo } from './core/model/ArkImport';
import { ALL, CONSTRUCTOR_NAME, TSCONFIG_JSON } from './core/common/TSConst';
import { BUILD_PROFILE_JSON5, OH_PACKAGE_JSON5 } from './core/common/EtsConst';
import { SdkUtils } from './core/common/SdkUtils';
+import { PointerAnalysisConfig } from './callgraph/pointerAnalysis/PointerAnalysisConfig';
+import { ValueUtil } from './core/common/ValueUtil';
const logger = Logger.getLogger(LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
@@ -99,6 +101,17 @@ export class Scene {
constructor() {}
+ /*
+ * Set all static field to be null, then all related objects could be freed by GC.
+ * This method could be called before drop Scene.
+ */
+ public dispose(): void {
+ PointerAnalysisConfig.dispose();
+ SdkUtils.dispose();
+ ValueUtil.dispose();
+ ModelUtils.dispose();
+ }
+
public getOptions(): SceneOptions {
return this.options;
}
@@ -322,12 +335,13 @@ export class Scene {
}
}
+ ModelUtils.dispose();
this.buildStage = SceneBuildStage.METHOD_DONE;
}
private genArkFiles(): void {
this.projectFiles.forEach(file => {
- logger.info('=== parse file:', file);
+ logger.trace('=== parse file:', file);
try {
const arkFile: ArkFile = new ArkFile(FileUtils.getFileLanguage(file, this.fileLanguages));
arkFile.setScene(this);
@@ -469,9 +483,11 @@ export class Scene {
}
private findDependenciesByRule(originPath: string, arkFile: ArkFile): void {
- const extNameArray = ['.ets', '.ts', '.d.ets', '.d.ts', '.js'];
- if (!this.findFilesByPathArray(originPath, this.indexPathArray, arkFile) && !this.findFilesByExtNameArray(originPath, extNameArray, arkFile)) {
- logger.info(originPath + 'module mapperInfo is not found!');
+ if (
+ !this.findFilesByPathArray(originPath, this.indexPathArray, arkFile) &&
+ !this.findFilesByExtNameArray(originPath, this.options.supportFileExts!, arkFile)
+ ) {
+ logger.trace(originPath + 'module mapperInfo is not found!');
}
}
@@ -542,7 +558,7 @@ export class Scene {
this.addFileNode2DependencyGrap(originPath, arkFile);
}
if (!this.findFilesByPathArray(originPath, this.indexPathArray, arkFile)) {
- logger.info(originPath + 'module mapperInfo is not found!');
+ logger.trace(originPath + 'module mapperInfo is not found!');
}
}
}
@@ -574,7 +590,7 @@ export class Scene {
private buildSdk(sdkName: string, sdkPath: string): void {
const allFiles = getAllFiles(sdkPath, this.options.supportFileExts!, this.options.ignoreFileNames);
allFiles.forEach(file => {
- logger.info('=== parse sdk file:', file);
+ logger.trace('=== parse sdk file:', file);
try {
const arkFile: ArkFile = new ArkFile(FileUtils.getFileLanguage(file, this.fileLanguages));
arkFile.setScene(this);
@@ -1044,6 +1060,7 @@ export class Scene {
this.getMethodsMap(true);
this.buildStage = SceneBuildStage.TYPE_INFERRED;
}
+ SdkUtils.dispose();
}
/**
@@ -1458,7 +1475,7 @@ export class ModuleScene {
private genArkFiles(supportFileExts: string[]): void {
getAllFiles(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames).forEach(file => {
- logger.info('=== parse file:', file);
+ logger.trace('=== parse file:', file);
try {
const arkFile: ArkFile = new ArkFile(FileUtils.getFileLanguage(file, this.projectScene.getFileLanguages()));
arkFile.setScene(this.projectScene);
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/AbstractAnalysis.ts b/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/AbstractAnalysis.ts
index 4fb8a6f7b7185608987af0b265e98a098ee24047..9a3e7fa8e184f04adbc9c186b35f3e11e13fd64e 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/AbstractAnalysis.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/AbstractAnalysis.ts
@@ -30,13 +30,14 @@ const logger = Logger.getLogger(LOG_MODULE_TYPE.ARKANALYZER, 'CG');
export abstract class AbstractAnalysis {
protected scene: Scene;
- protected cg!: CallGraph;
+ protected cg: CallGraph;
protected cgBuilder!: CallGraphBuilder;
protected workList: FuncID[] = [];
protected processedMethod!: IPtsCollection;
- constructor(s: Scene) {
+ constructor(s: Scene, cg: CallGraph) {
this.scene = s;
+ this.cg = cg;
}
public getScene(): Scene {
@@ -96,11 +97,13 @@ export abstract class AbstractAnalysis {
}
public projectStart(displayGeneratedMethod: boolean): void {
- this.scene.getMethods().forEach((method) => {
- let cgNode = this.cg.getCallGraphNodeByMethod(method.getSignature()) as CallGraphNode;
+ this.cgBuilder.buildCGNodes(this.scene.getMethods());
+
+ for (let n of this.cg.getNodesIter()) {
+ let cgNode = n as CallGraphNode;
if (cgNode.isSdkMethod()) {
- return;
+ continue;
}
this.preProcessMethod(cgNode.getID());
@@ -108,7 +111,9 @@ export abstract class AbstractAnalysis {
this.processMethod(cgNode.getID()).forEach((cs: CallSite) => {
this.processCallSite(cgNode.getID(), cs, displayGeneratedMethod, true);
});
- });
+ }
+
+ this.cgBuilder.setEntries();
}
private processCallSite(method: FuncID, cs: CallSite, displayGeneratedMethod: boolean, isProject: boolean = false): void {
@@ -128,7 +133,7 @@ export abstract class AbstractAnalysis {
if (displayGeneratedMethod || !me?.isGenerated()) {
this.workList.push(cs.calleeFuncID);
- logger.info(`New workList item ${cs.calleeFuncID}: ${this.cg.getArkMethodByFuncID(cs.calleeFuncID)?.getSignature().toString()}`);
+ logger.trace(`New workList item ${cs.calleeFuncID}: ${this.cg.getArkMethodByFuncID(cs.calleeFuncID)?.getSignature().toString()}`);
}
}
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/ClassHierarchyAnalysis.ts b/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/ClassHierarchyAnalysis.ts
index 029d85541ea8172eeeaf5b3bb1cd21b0aa67df9e..df58f9e5712d064aedbfc6b7a9fda02f9676861d 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/ClassHierarchyAnalysis.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/ClassHierarchyAnalysis.ts
@@ -20,11 +20,12 @@ import { ArkClass } from '../../core/model/ArkClass';
import { NodeID } from '../../core/graph/BaseExplicitGraph';
import { CallGraph, CallSite } from '../model/CallGraph';
import { AbstractAnalysis } from './AbstractAnalysis';
+import { CallGraphBuilder } from '../model/builder/CallGraphBuilder';
export class ClassHierarchyAnalysis extends AbstractAnalysis {
- constructor(scene: Scene, cg: CallGraph) {
- super(scene);
- this.cg = cg;
+ constructor(scene: Scene, cg: CallGraph, cb: CallGraphBuilder) {
+ super(scene, cg);
+ this.cgBuilder = cb;
}
public resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[] {
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/RapidTypeAnalysis.ts b/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/RapidTypeAnalysis.ts
index b4ecc267ac48cc1ed19e38c685663ef8195fa732..b14816d26bbac4e37aeb443a553c5875447fc052 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/RapidTypeAnalysis.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/algorithm/RapidTypeAnalysis.ts
@@ -33,8 +33,7 @@ export class RapidTypeAnalysis extends AbstractAnalysis {
private ignoredCalls: Map> = new Map();
constructor(scene: Scene, cg: CallGraph) {
- super(scene);
- this.cg = cg;
+ super(scene, cg);
}
public resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[] {
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/common/Statistics.ts b/ets2panda/linter/arkanalyzer/src/callgraph/common/Statistics.ts
index 61246908adb1ecf0ba1446fa8a77d7860d0fb458..112539b16867550716b2818687ef2af0acf279d2 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/common/Statistics.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/common/Statistics.ts
@@ -196,6 +196,7 @@ export class CGStat extends StatTraits {
numVirtual: number = 0;
numIntrinsic: number = 0;
numConstructor: number = 0;
+ numBlank: number = 0;
public startStat(): void {
this.startTime = new Date().getTime();
@@ -221,6 +222,7 @@ export class CGStat extends StatTraits {
this.numIntrinsic++;
break;
default:
+ this.numBlank++;
}
this.numTotalNode++;
}
@@ -232,7 +234,8 @@ export class CGStat extends StatTraits {
output = output + `Real function\t\t${this.numReal}\n`;
output = output + `Intrinsic function\t${this.numIntrinsic}\n`;
output = output + `Constructor function\t${this.numConstructor}\n`;
- output = output + `Blank function\t\t${this.numVirtual}\n`;
+ output = output + `Virtual function\t\t${this.numVirtual}\n`;
+ output = output + `Blank function\t\t${this.numBlank}\n`;
output = output + `Total\t\t\t${this.numTotalNode}\n`;
return output;
}
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/model/CallGraph.ts b/ets2panda/linter/arkanalyzer/src/callgraph/model/CallGraph.ts
index 954f47804a2413dbdba1747ea31f02b19edc1cd6..0ddeb630076cbd606e014cdcaccc2bb5e60f7685 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/model/CallGraph.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/model/CallGraph.ts
@@ -15,63 +15,27 @@
import { MethodSignature } from '../../core/model/ArkSignature';
import { Stmt } from '../../core/base/Stmt';
-import { Value } from '../../core/base/Value';
import { Scene } from '../../Scene';
import { ArkMethod } from '../../core/model/ArkMethod';
import { GraphPrinter } from '../../save/GraphPrinter';
import { PrinterBuilder } from '../../save/PrinterBuilder';
import { BaseEdge, BaseNode, BaseExplicitGraph, NodeID } from '../../core/graph/BaseExplicitGraph';
import { CGStat } from '../common/Statistics';
-import { ContextID } from '../pointerAnalysis/Context';
import { UNKNOWN_FILE_NAME } from '../../core/common/Const';
+import { CallSite, CallSiteID, DynCallSite, ICallSite } from './CallSite';
export type Method = MethodSignature;
-export type CallSiteID = number;
export type FuncID = number;
type StmtSet = Set;
+export { CallSite, DynCallSite, ICallSite };
+
export enum CallGraphNodeKind {
- real,
+ real, // method from project and has body
vitual,
- intrinsic,
- constructor,
-}
-
-export class CallSite {
- public callStmt: Stmt;
- public args: Value[] | undefined;
- public calleeFuncID: FuncID;
- public callerFuncID: FuncID;
-
- constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID) {
- this.callStmt = s;
- this.args = a;
- this.calleeFuncID = ce;
- this.callerFuncID = cr;
- }
-}
-
-export class DynCallSite {
- public callerFuncID: FuncID;
- public callStmt: Stmt;
- public args: Value[] | undefined;
- public protentialCalleeFuncID: FuncID | undefined;
-
- constructor(caller: FuncID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined) {
- this.callerFuncID = caller;
- this.callStmt = s;
- this.args = a;
- this.protentialCalleeFuncID = ptcCallee;
- }
-}
-
-export class CSCallSite extends CallSite {
- public cid: ContextID;
-
- constructor(id: ContextID, cs: CallSite) {
- super(cs.callStmt, cs.args, cs.calleeFuncID, cs.callerFuncID);
- this.cid = id;
- }
+ intrinsic, // method created by AA, which arkMethod.isGenrated is true
+ constructor, // constructor
+ blank, // method without body
}
export class CallGraphEdge extends BaseEdge {
@@ -119,7 +83,6 @@ export class CallGraphEdge extends BaseEdge {
export class CallGraphNode extends BaseNode {
private method: Method;
private ifSdkMethod: boolean = false;
- private isBlank: boolean = false;
constructor(id: number, m: Method, k: CallGraphNodeKind = CallGraphNodeKind.real) {
super(id, k);
@@ -139,11 +102,7 @@ export class CallGraphNode extends BaseNode {
}
public get isBlankMethod(): boolean {
- return this.isBlank;
- }
-
- public set isBlankMethod(is: boolean) {
- this.isBlank = is;
+ return this.kind === CallGraphNodeKind.blank;
}
public getDotAttr(): string {
@@ -195,11 +154,6 @@ export class CallGraph extends BaseExplicitGraph {
// check if sdk method
cgNode.setSdkMethod(this.scene.hasSdkFile(method.getDeclaringClassSignature().getDeclaringFileSignature()));
- let arkMethod = this.scene.getMethod(method);
- if (!arkMethod || !arkMethod.getCfg()) {
- cgNode.isBlankMethod = true;
- }
-
this.addNode(cgNode);
this.methodToCGNodeMap.set(method.toString(), cgNode.getID());
this.cgStat.addNodeStat(kind);
@@ -285,7 +239,7 @@ export class CallGraph extends BaseExplicitGraph {
}
let args = callStmt.getInvokeExpr()?.getArgs();
- let cs = new DynCallSite(callerNode.getID(), callStmt, args, calleeNode?.getID());
+ let cs = new DynCallSite(callStmt, args, calleeNode?.getID(), callerNode.getID());
this.stmtToDynCallSitemap.set(callStmt, cs);
}
@@ -467,4 +421,4 @@ export class CallGraph extends BaseExplicitGraph {
public getGraphName(): string {
return 'CG';
}
-}
+}
\ No newline at end of file
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/model/CallSite.ts b/ets2panda/linter/arkanalyzer/src/callgraph/model/CallSite.ts
new file mode 100644
index 0000000000000000000000000000000000000000..40dbb3b492233cdcd519b3ac0ad6dc5b90a5fee4
--- /dev/null
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/model/CallSite.ts
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Stmt } from '../../core/base/Stmt';
+import { Value } from '../../core/base/Value';
+import { ContextID } from '../pointerAnalysis/Context';
+import { FuncID } from './CallGraph';
+
+export type CallSiteID = number;
+
+export interface ICallSite {
+ callStmt: Stmt;
+ args: Value[] | undefined;
+ callerFuncID: FuncID;
+}
+
+export class CallSite implements ICallSite {
+ public callStmt: Stmt;
+ public args: Value[] | undefined;
+ public calleeFuncID: FuncID;
+ public callerFuncID: FuncID;
+
+ constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID) {
+ this.callStmt = s;
+ this.args = a;
+ this.calleeFuncID = ce;
+ this.callerFuncID = cr;
+ }
+}
+
+export class DynCallSite implements ICallSite {
+ public callStmt: Stmt;
+ public args: Value[] | undefined;
+ public protentialCalleeFuncID: FuncID | undefined;
+ public callerFuncID: FuncID;
+
+ constructor(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID) {
+ this.callerFuncID = caller;
+ this.callStmt = s;
+ this.args = a;
+ this.protentialCalleeFuncID = ptcCallee;
+ }
+}
+
+export class CSCallSite extends CallSite {
+ public cid: ContextID;
+
+ constructor(id: ContextID, cs: CallSite) {
+ super(cs.callStmt, cs.args, cs.calleeFuncID, cs.callerFuncID);
+ this.cid = id;
+ }
+}
\ No newline at end of file
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/model/builder/CallGraphBuilder.ts b/ets2panda/linter/arkanalyzer/src/callgraph/model/builder/CallGraphBuilder.ts
index c631c4333fc41b233ee3fba8988fb5f0ebb530b3..5947b9c66e050cdca5474e002320b789939ebed0 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/model/builder/CallGraphBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/model/builder/CallGraphBuilder.ts
@@ -38,19 +38,27 @@ export class CallGraphBuilder {
this.setEntries();
}
- public buildDirectCallGraph(methods: ArkMethod[]): void {
+ /*
+ * Create CG Node for ArkMethods
+ */
+ public buildCGNodes(methods: ArkMethod[]): void {
for (const method of methods) {
let m = method.getSignature();
let kind = CallGraphNodeKind.real;
if (method.isGenerated()) {
kind = CallGraphNodeKind.intrinsic;
- }
- if (method.getName() === 'constructor') {
+ } else if (method.getBody() === undefined || method.getCfg() === undefined) {
+ kind = CallGraphNodeKind.blank;
+ } else if (method.getName() === 'constructor') {
kind = CallGraphNodeKind.constructor;
}
this.cg.addCallGraphNode(m, kind);
}
+ }
+
+ public buildDirectCallGraph(methods: ArkMethod[]): void {
+ this.buildCGNodes(methods);
for (const method of methods) {
let cfg = method.getCfg();
@@ -70,8 +78,7 @@ export class CallGraphBuilder {
if (callee && invokeExpr instanceof ArkStaticInvokeExpr) {
this.cg.addDirectOrSpecialCallEdge(method.getSignature(), callee, stmt);
} else if (
- callee &&
- invokeExpr instanceof ArkInstanceInvokeExpr &&
+ callee && invokeExpr instanceof ArkInstanceInvokeExpr &&
(this.isConstructor(callee) || this.scene.getMethod(callee)?.isGenerated())
) {
this.cg.addDirectOrSpecialCallEdge(method.getSignature(), callee, stmt, false);
@@ -89,12 +96,12 @@ export class CallGraphBuilder {
});
this.cg.setEntries(cgEntries);
- let classHierarchyAnalysis: ClassHierarchyAnalysis = new ClassHierarchyAnalysis(this.scene, this.cg);
+ let classHierarchyAnalysis: ClassHierarchyAnalysis = new ClassHierarchyAnalysis(this.scene, this.cg, this);
classHierarchyAnalysis.start(displayGeneratedMethod);
}
public buildCHA4WholeProject(displayGeneratedMethod: boolean = false): void {
- let classHierarchyAnalysis: ClassHierarchyAnalysis = new ClassHierarchyAnalysis(this.scene, this.cg);
+ let classHierarchyAnalysis: ClassHierarchyAnalysis = new ClassHierarchyAnalysis(this.scene, this.cg, this);
classHierarchyAnalysis.projectStart(displayGeneratedMethod);
}
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PTAUtils.ts b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PTAUtils.ts
index a8940d5d3c21b561450e4ac051f3684fa728fb7e..0c120d6000b1192188cf68ebf52401f5d68aab3e 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PTAUtils.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PTAUtils.ts
@@ -51,6 +51,7 @@ export function getBuiltInApiType(method: MethodSignature): BuiltApiType {
return BuiltApiType.FunctionApply;
case 'bind':
return BuiltApiType.FunctionBind;
+ default:
}
}
}
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PagBuilder.ts b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PagBuilder.ts
index bd3917b09083d00bd5fdf67ae0129a69b8630daa..5249cd8d2ce2cbf5ce0f7e3426533e353564899c 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PagBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PagBuilder.ts
@@ -13,7 +13,7 @@
* limitations under the License.
*/
-import { CallGraph, CallGraphNode, CallGraphNodeKind, CallSite, DynCallSite, FuncID } from '../model/CallGraph';
+import { CallGraph, CallGraphNode, CallGraphNodeKind, CallSite, DynCallSite, FuncID, ICallSite } from '../model/CallGraph';
import { Scene } from '../../Scene';
import { ArkAssignStmt, ArkInvokeStmt, ArkReturnStmt, Stmt } from '../../core/base/Stmt';
import {
@@ -527,7 +527,7 @@ export class PagBuilder {
});
}
- public addDynamicCallEdge(cs: DynCallSite | CallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[] {
+ public addDynamicCallEdge(cs: ICallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[] {
let srcNodes: NodeID[] = [];
let ivkExpr = cs.callStmt.getInvokeExpr();
@@ -577,7 +577,7 @@ export class PagBuilder {
* all possible callee methods of a dynamic call site
* handle both PtrInvokeExpr and InstanceInvokeExpr
*/
- private getDynamicCallee(ptNode: PagNode, value: Value, ivkExpr: AbstractInvokeExpr, cs: DynCallSite | CallSite): ArkMethod[] {
+ private getDynamicCallee(ptNode: PagNode, value: Value, ivkExpr: AbstractInvokeExpr, cs: ICallSite): ArkMethod[] {
let callee: ArkMethod[] = [];
if (ptNode instanceof PagFuncNode) {
@@ -646,7 +646,10 @@ export class PagBuilder {
// Pass base's pts to callee's this pointer
if (!dstCGNode.isSdkMethod() && ivkExpr instanceof ArkInstanceInvokeExpr) {
let srcBaseNode = this.addThisRefCallEdge(baseClassPTNode, cid, ivkExpr.getBase(), callee!, calleeCid, staticCS.callerFuncID);
- srcNodes.push(srcBaseNode);
+
+ if (srcBaseNode !== -1) {
+ srcNodes.push(srcBaseNode);
+ }
} else if (!dstCGNode.isSdkMethod() && ivkExpr instanceof ArkPtrInvokeExpr) {
let originCS = (ptNode as PagFuncNode).getCS();
if (!originCS) {
@@ -712,6 +715,7 @@ export class PagBuilder {
*/
this.handleFunctionBind(staticCS, cid, baseClassPTNode, srcNodes);
break;
+ default:
}
return srcNodes;
@@ -799,7 +803,11 @@ export class PagBuilder {
private addThisEdge(staticCS: CallSite, cid: ContextID, realCallee: ArkMethod, srcNodes: NodeID[], baseClassPTNode: NodeID, calleeCid: ContextID): void {
if (!(staticCS.args![0] instanceof NullConstant) && !realCallee.isStatic()) {
- srcNodes.push(this.addThisRefCallEdge(baseClassPTNode, cid, staticCS.args![0] as Local, realCallee, calleeCid, staticCS.callerFuncID));
+ let srcNodeID = this.addThisRefCallEdge(baseClassPTNode, cid, staticCS.args![0] as Local, realCallee, calleeCid, staticCS.callerFuncID);
+
+ if (srcNodeID !== -1) {
+ srcNodes.push(srcNodeID);
+ }
}
}
@@ -915,6 +923,10 @@ export class PagBuilder {
callerFunID: FuncID
): NodeID {
let thisRefNodeID = this.recordThisRefNode(baseClassPTNode, callee, calleeCid);
+ if (thisRefNodeID === -1) {
+ return -1;
+ }
+
let thisRefNode = this.pag.getNode(thisRefNodeID) as PagThisRefNode;
let srcBaseLocal = baseLocal;
srcBaseLocal = this.getRealThisLocal(srcBaseLocal, callerFunID);
@@ -1233,7 +1245,7 @@ export class PagBuilder {
let sdkParamInvokeStmt = new ArkInvokeStmt(new ArkPtrInvokeExpr((arg.getType() as FunctionType).getMethodSignature(), paramValue as Local, []));
// create new DynCallSite
- let sdkParamCallSite = new DynCallSite(funcID, sdkParamInvokeStmt, undefined, undefined);
+ let sdkParamCallSite = new DynCallSite(sdkParamInvokeStmt, undefined, undefined, funcID);
dstPagNode.addRelatedDynCallSite(sdkParamCallSite);
}
@@ -1542,7 +1554,7 @@ export class PagBuilder {
* process Storage API
* @returns boolean: check if the cs represent a Storage API, no matter the API will success or fail
*/
- private processStorage(cs: CallSite | DynCallSite, calleeCGNode: CallGraphNode, cid: ContextID): boolean {
+ private processStorage(cs: ICallSite, calleeCGNode: CallGraphNode, cid: ContextID): boolean {
let storageName = calleeCGNode.getMethod().getDeclaringClassSignature().getClassName();
let storageType: StorageType = this.getStorageType(storageName, cs, cid);
@@ -1570,7 +1582,7 @@ export class PagBuilder {
return false;
}
- private processStorageSetOrCreate(cs: CallSite | DynCallSite, cid: ContextID): void {
+ private processStorageSetOrCreate(cs: ICallSite, cid: ContextID): void {
let propertyStr = this.getPropertyName(cs.args![0]);
if (!propertyStr) {
return;
@@ -1583,7 +1595,7 @@ export class PagBuilder {
this.addPropertyLinkEdge(propertyNode, storageObj, cid, cs.callStmt, StorageLinkEdgeType.Local2Property);
}
- private processStorageLink(cs: CallSite | DynCallSite, cid: ContextID): void {
+ private processStorageLink(cs: ICallSite, cid: ContextID): void {
let propertyStr = this.getPropertyName(cs.args![0]);
if (!propertyStr) {
return;
@@ -1601,7 +1613,7 @@ export class PagBuilder {
this.pag.addPagEdge(linkedOpNode, propertyNode, PagEdgeKind.Copy);
}
- private processStorageProp(cs: CallSite | DynCallSite, cid: ContextID): void {
+ private processStorageProp(cs: ICallSite, cid: ContextID): void {
let propertyStr = this.getPropertyName(cs.args![0]);
if (!propertyStr) {
return;
@@ -1618,7 +1630,7 @@ export class PagBuilder {
this.pag.addPagEdge(propertyNode, linkedOpNode, PagEdgeKind.Copy);
}
- private processStorageSet(cs: CallSite | DynCallSite, cid: ContextID): void {
+ private processStorageSet(cs: ICallSite, cid: ContextID): void {
let ivkExpr: AbstractInvokeExpr = cs.callStmt.getInvokeExpr()!;
if (ivkExpr instanceof ArkInstanceInvokeExpr) {
let base = ivkExpr.getBase();
@@ -1634,7 +1646,7 @@ export class PagBuilder {
}
}
- private processStorageGet(cs: CallSite | DynCallSite, cid: ContextID): void {
+ private processStorageGet(cs: ICallSite, cid: ContextID): void {
if (!(cs.callStmt instanceof ArkAssignStmt)) {
return;
}
@@ -1686,7 +1698,7 @@ export class PagBuilder {
* @param cid: for search PAG node in SubscribedAbstractProperty
* @returns StorageType enum
*/
- private getStorageType(storageName: string, cs: CallSite | DynCallSite, cid: ContextID): StorageType {
+ private getStorageType(storageName: string, cs: ICallSite, cid: ContextID): StorageType {
switch (storageName) {
case 'AppStorage':
return StorageType.APP_STORAGE;
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysis.ts b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysis.ts
index 902a05b902faa419cf511850bd2ccc1871a915fc..4fc4a16471955a8a6b426e88b5cab661b91adf19 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysis.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysis.ts
@@ -47,9 +47,8 @@ export class PointerAnalysis extends AbstractAnalysis {
private config: PointerAnalysisConfig;
constructor(p: Pag, cg: CallGraph, s: Scene, config: PointerAnalysisConfig) {
- super(s);
+ super(s, cg);
this.pag = p;
- this.cg = cg;
this.ptd = new DiffPTData>(config.ptsCollectionCtor);
this.pagBuilder = new PagBuilder(this.pag, this.cg, s, config.kLimit, config.analysisScale);
this.cgBuilder = new CallGraphBuilder(this.cg, s);
diff --git a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysisConfig.ts b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysisConfig.ts
index 1e68c981db8221514da887c76692e267a90cbe2f..0dad1053cff49245da9e67e7127cc72d046e4c88 100644
--- a/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysisConfig.ts
+++ b/ets2panda/linter/arkanalyzer/src/callgraph/pointerAnalysis/PointerAnalysisConfig.ts
@@ -64,6 +64,15 @@ export class PointerAnalysisConfig {
}
}
+ /*
+ * Set static field to be null, then all related objects could be freed by GC.
+ * Class PointerAnalysisConfig has been exported by ArkAnalyzer, the dispose method should be called by users themselves before free this class.
+ */
+ public static dispose(): void {
+ // @ts-ignore
+ this.instance = null;
+ }
+
/*
* Create Singleton instance
* The instance can be created multi-times and be overwrited
diff --git a/ets2panda/linter/arkanalyzer/src/core/base/Expr.ts b/ets2panda/linter/arkanalyzer/src/core/base/Expr.ts
index dcf4695331ac437403e3d04b0ce248b533806264..310e8228635e2fc143b248e87409f2e631f0ec16 100644
--- a/ets2panda/linter/arkanalyzer/src/core/base/Expr.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/base/Expr.ts
@@ -40,8 +40,9 @@ import { ArkMethod } from '../model/ArkMethod';
import { UNKNOWN_FILE_NAME } from '../common/Const';
import { IRInference } from '../common/IRInference';
import { ImportInfo } from '../model/ArkImport';
-import { ArkClass } from '../model/ArkClass';
+import { ArkClass, ClassCategory } from '../model/ArkClass';
import { ArkField } from '../model/ArkField';
+import { ModelUtils } from '../common/ModelUtils';
/**
* @category core/base/expr
@@ -342,14 +343,30 @@ export class ArkNewExpr extends AbstractExpr {
const classSignature = this.classType.getClassSignature();
if (classSignature.getDeclaringFileSignature().getFileName() === UNKNOWN_FILE_NAME) {
const className = classSignature.getClassName();
- let type = TypeInference.inferUnclearRefName(className, arkMethod.getDeclaringArkClass());
+ let type: Type | null | undefined = ModelUtils.findDeclaredLocal(new Local(className), arkMethod, 1)?.getType();
+ if (TypeInference.isUnclearType(type)) {
+ type = TypeInference.inferUnclearRefName(className, arkMethod.getDeclaringArkClass());
+ }
if (type && type instanceof ClassType) {
- let realGenericTypes = this.classType.getRealGenericTypes();
- this.classType = realGenericTypes ? new ClassType(type.getClassSignature(), realGenericTypes) : type;
+ const instanceType = this.constructorSignature(type, arkMethod) ?? type;
+ this.classType.setClassSignature(instanceType.getClassSignature());
+ TypeInference.inferRealGenericTypes(this.classType.getRealGenericTypes(), arkMethod.getDeclaringArkClass());
}
}
return this;
}
+
+ private constructorSignature(type: ClassType, arkMethod: ArkMethod): ClassType | undefined {
+ const classConstructor = arkMethod.getDeclaringArkFile().getScene().getClass(type.getClassSignature());
+ if (classConstructor?.getCategory() === ClassCategory.INTERFACE) {
+ const type = classConstructor.getMethodWithName('construct-signature')?.getReturnType();
+ if (type) {
+ const returnType = TypeInference.replaceAliasType(type);
+ return returnType instanceof ClassType ? returnType : undefined;
+ }
+ }
+ return undefined;
+ }
}
export class ArkNewArrayExpr extends AbstractExpr {
@@ -695,9 +712,13 @@ export abstract class AbstractBinopExpr extends AbstractExpr {
case '^':
case '<<':
case '>>':
+ if (op1Type === NumberType.getInstance() && op2Type === NumberType.getInstance()) {
+ type = NumberType.getInstance();
+ }
if (op1Type === BigIntType.getInstance() && op2Type === BigIntType.getInstance()) {
type = BigIntType.getInstance();
}
+ break;
case '>>>':
if (op1Type === NumberType.getInstance() && op2Type === NumberType.getInstance()) {
type = NumberType.getInstance();
@@ -1042,10 +1063,14 @@ export class AliasTypeExpr extends AbstractExpr {
public getType(): Type {
function getTypeOfImportInfo(importInfo: ImportInfo): Type {
const arkExport = importInfo.getLazyExportInfo()?.getArkExport();
- if (arkExport) {
- return TypeInference.parseArkExport2Type(arkExport) ?? UnknownType.getInstance();
+ const importClauseName = importInfo.getImportClauseName();
+ let type;
+ if (importClauseName.includes('.') && arkExport instanceof ArkClass) {
+ type = TypeInference.inferUnclearRefName(importClauseName, arkExport);
+ } else if (arkExport) {
+ type = TypeInference.parseArkExport2Type(arkExport);
}
- return UnknownType.getInstance();
+ return type ?? UnknownType.getInstance();
}
const operator = this.getOriginalObject();
diff --git a/ets2panda/linter/arkanalyzer/src/core/base/Local.ts b/ets2panda/linter/arkanalyzer/src/core/base/Local.ts
index aa4fbebdf0597b1972cea69e7fcdb70bba21b64b..10bb1896276ea7b362a4edb63303c7e2c130498d 100644
--- a/ets2panda/linter/arkanalyzer/src/core/base/Local.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/base/Local.ts
@@ -14,7 +14,7 @@
*/
import { Stmt } from './Stmt';
-import { ClassType, Type, UnknownType } from './Type';
+import { ClassType, FunctionType, Type, UnknownType } from './Type';
import { Value } from './Value';
import { TypeInference } from '../common/TypeInference';
import { ArkExport, ExportType } from '../model/ArkExport';
@@ -54,11 +54,17 @@ export class Local implements Value, ArkExport {
const declaringArkClass = arkMethod.getDeclaringArkClass();
this.type = new ClassType(declaringArkClass.getSignature(), declaringArkClass.getRealTypes());
} else if (TypeInference.isUnclearType(this.type)) {
- const type = TypeInference.inferBaseType(this.name, arkMethod.getDeclaringArkClass()) ?? ModelUtils.findDeclaredLocal(this, arkMethod)?.getType();
+ const type = TypeInference.inferBaseType(this.name, arkMethod.getDeclaringArkClass()) ??
+ ModelUtils.findDeclaredLocal(this, arkMethod)?.getType();
if (type) {
this.type = type;
}
}
+ if (this.type instanceof FunctionType) {
+ this.type.getMethodSignature().getMethodSubSignature().getParameters()
+ .forEach(p => TypeInference.inferParameterType(p, arkMethod));
+ TypeInference.inferSignatureReturnType(this.type.getMethodSignature(), arkMethod);
+ }
return this;
}
diff --git a/ets2panda/linter/arkanalyzer/src/core/common/ArkIRTransformer.ts b/ets2panda/linter/arkanalyzer/src/core/common/ArkIRTransformer.ts
index 31f9ecf635744368612a3a08b551ecca62c1b4a5..c0a61f1f5da2c7354f361842436f88f568acee4b 100644
--- a/ets2panda/linter/arkanalyzer/src/core/common/ArkIRTransformer.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/common/ArkIRTransformer.ts
@@ -46,7 +46,6 @@ import { DEFAULT, PROMISE } from './TSConst';
import { buildGenericType, buildModifiers, buildTypeParameters } from '../model/builder/builderUtils';
import { ArkValueTransformer } from './ArkValueTransformer';
import { ImportInfo } from '../model/ArkImport';
-import { TypeInference } from './TypeInference';
import { AbstractTypeExpr } from '../base/TypeExpr';
import { buildNormalArkClassFromArkMethod } from '../model/builder/ArkClassBuilder';
import { ArkClass } from '../model/ArkClass';
@@ -339,12 +338,6 @@ export class ArkIRTransformer {
let expr: AliasTypeExpr;
if (ts.isImportTypeNode(rightOp)) {
expr = this.resolveImportTypeNode(rightOp);
- const typeObject = expr.getOriginalObject();
- if (typeObject instanceof ImportInfo && typeObject.getLazyExportInfo() !== null) {
- const arkExport = typeObject.getLazyExportInfo()!.getArkExport();
- rightType = TypeInference.parseArkExport2Type(arkExport) ?? UnknownType.getInstance();
- aliasType.setOriginalType(rightType);
- }
} else if (ts.isTypeQueryNode(rightOp)) {
const localName = rightOp.exprName.getText(this.sourceFile);
const originalLocal = Array.from(this.arkValueTransformer.getLocals()).find(local => local.getName() === localName);
@@ -402,8 +395,6 @@ export class ArkIRTransformer {
importInfo.build(importClauseName, importType, importFrom, LineColPosition.buildFromNode(importTypeNode, this.sourceFile), 0);
importInfo.setDeclaringArkFile(this.declaringMethod.getDeclaringArkFile());
- // Function getLazyExportInfo will automatically try to infer the export info if it's undefined at the beginning.
- importInfo.getLazyExportInfo();
return new AliasTypeExpr(importInfo, importTypeNode.isTypeOf);
}
diff --git a/ets2panda/linter/arkanalyzer/src/core/common/IRInference.ts b/ets2panda/linter/arkanalyzer/src/core/common/IRInference.ts
index 08083474900627f2a07599c37994fc757e87c692..a9642db052c75198302db6fe4e987d34739d69e5 100644
--- a/ets2panda/linter/arkanalyzer/src/core/common/IRInference.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/common/IRInference.ts
@@ -63,8 +63,7 @@ import {
ArkArrayRef,
ArkInstanceFieldRef,
ArkParameterRef,
- ArkStaticFieldRef,
- GlobalRef
+ ArkStaticFieldRef
} from '../base/Ref';
import { Value } from '../base/Value';
import { Constant } from '../base/Constant';
@@ -130,6 +129,7 @@ export class IRInference {
}
return 0;
});
+ arkClass.getAllHeritageClasses();
methods.forEach(arkMethod => TypeInference.inferTypeInMethod(arkMethod));
});
this.inferExportInfos(file);
@@ -283,6 +283,11 @@ export class IRInference {
private static inferBase(instance: ArkInstanceFieldRef | ArkInstanceInvokeExpr, arkMethod: ArkMethod): void {
const base = instance.getBase();
if (base.getName() === THIS_NAME) {
+ const name = instance instanceof ArkInstanceFieldRef ? instance.getFieldName() :
+ instance.getMethodSignature().getMethodSubSignature().getMethodName();
+ if (name.includes('.')) {
+ return;
+ }
const declaringArkClass = arkMethod.getDeclaringArkClass();
if (declaringArkClass.isAnonymousClass()) {
let newBase = this.inferThisLocal(arkMethod);
@@ -293,14 +298,6 @@ export class IRInference {
base.setType(new ClassType(declaringArkClass.getSignature(), declaringArkClass.getRealTypes()));
}
} else {
- const value = arkMethod.getBody()?.getUsedGlobals()?.get(base.getName());
- if (value instanceof GlobalRef && !value.getRef()) {
- const arkExport = ModelUtils.findGlobalRef(base.getName(), arkMethod);
- if (arkExport instanceof Local) {
- arkExport.getUsedStmts().push(...base.getUsedStmts());
- value.setRef(arkExport);
- }
- }
this.inferLocal(instance.getBase(), arkMethod);
}
}
@@ -686,7 +683,7 @@ export class IRInference {
private static assignAnonMethod(anonMethod: ArkMethod | null, declaredMethod: ArkMethod | null): void {
if (declaredMethod && anonMethod) {
- anonMethod.setImplementationSignature(declaredMethod.matchMethodSignature(anonMethod.getSubSignature().getParameters()));
+ anonMethod.setDeclareSignatures(declaredMethod.matchMethodSignature(anonMethod.getSubSignature().getParameters()));
}
}
@@ -815,7 +812,8 @@ export class IRInference {
public static inferParameterRef(ref: ArkParameterRef, arkMethod: ArkMethod): AbstractRef {
const paramType = ref.getType();
if (paramType instanceof UnknownType || paramType instanceof UnclearReferenceType) {
- const type1 = arkMethod.getSignature().getMethodSubSignature().getParameters()[ref.getIndex()]?.getType();
+ const signature = arkMethod.getDeclareSignatures()?.at(0) ?? arkMethod.getSignature();
+ const type1 = signature.getMethodSubSignature().getParameters()[ref.getIndex()]?.getType();
if (!TypeInference.isUnclearType(type1)) {
ref.setType(type1);
return ref;
diff --git a/ets2panda/linter/arkanalyzer/src/core/common/ModelUtils.ts b/ets2panda/linter/arkanalyzer/src/core/common/ModelUtils.ts
index 7b90129608f4f99a927f46f22ad6f4491e4f6572..41eb1a39f4839b85b5a89b2e9e1e823648450f8f 100644
--- a/ets2panda/linter/arkanalyzer/src/core/common/ModelUtils.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/common/ModelUtils.ts
@@ -37,14 +37,7 @@ import path from 'path';
import { Sdk } from '../../Config';
import { ALL, DEFAULT, THIS_NAME } from './TSConst';
import { buildDefaultExportInfo } from '../model/builder/ArkExportBuilder';
-import {
- AnnotationNamespaceType,
- ClassType,
- FunctionType,
- Type,
- UnclearReferenceType,
- UnknownType
-} from '../base/Type';
+import { AnnotationNamespaceType, ClassType, FunctionType, Type, UnclearReferenceType, UnknownType } from '../base/Type';
import { Scene } from '../../Scene';
import { DEFAULT_ARK_CLASS_NAME, DEFAULT_ARK_METHOD_NAME, NAME_DELIMITER, TEMP_LOCAL_PREFIX } from './Const';
import { EMPTY_STRING } from './ValueUtil';
@@ -56,6 +49,14 @@ import { SdkUtils } from './SdkUtils';
export class ModelUtils {
public static implicitArkUIBuilderMethods: Set = new Set();
+ /*
+ * Set static field to be null, then all related objects could be freed by GC.
+ * Static field implicitArkUIBuilderMethods is only internally used by ArkAnalyzer build method body, the dispose method should be called after build all body.
+ */
+ public static dispose(): void {
+ this.implicitArkUIBuilderMethods.clear();
+ }
+
public static getMethodSignatureFromArkClass(arkClass: ArkClass, methodName: string): MethodSignature | null {
for (const arkMethod of arkClass.getMethods()) {
if (arkMethod.getName() === methodName) {
@@ -570,8 +571,7 @@ export function getArkFile(im: FromInfo): ArkFile | null | undefined {
export function findExportInfo(fromInfo: FromInfo): ExportInfo | null {
let file = getArkFile(fromInfo);
if (!file) {
- logger.warn(`${fromInfo.getOriginName()} ${fromInfo.getFrom()} file not found:
- ${fromInfo.getDeclaringArkFile()?.getFileSignature()?.toString()}`);
+ logger.warn(`${fromInfo.getOriginName()} ${fromInfo.getFrom()} file not found: ${fromInfo.getDeclaringArkFile()?.getFileSignature()?.toString()}`);
return null;
}
if (fileSignatureCompare(file.getFileSignature(), fromInfo.getDeclaringArkFile().getFileSignature())) {
@@ -623,8 +623,8 @@ export function findArkExport(exportInfo: ExportInfo | undefined): ArkExport | n
if (arkExport) {
exportInfo.setArkExport(arkExport);
} else {
- logger.warn(`${exportInfo.getExportClauseName()} get arkExport fail from ${exportInfo.getFrom()} at
- ${exportInfo.getDeclaringArkFile().getFileSignature().toString()}`);
+ const file = exportInfo.getDeclaringArkFile().getFileSignature().toString();
+ logger.warn(`${exportInfo.getExportClauseName()} get arkExport fail from ${exportInfo.getFrom()} at ${file}`);
}
return arkExport || null;
}
diff --git a/ets2panda/linter/arkanalyzer/src/core/common/SdkUtils.ts b/ets2panda/linter/arkanalyzer/src/core/common/SdkUtils.ts
index 84f185987813e6866c2bf4fc398e9e2c9a0d20d1..644983c5442741a03c86cf3449298bb418530510 100644
--- a/ets2panda/linter/arkanalyzer/src/core/common/SdkUtils.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/common/SdkUtils.ts
@@ -28,11 +28,22 @@ import { ClassType } from '../base/Type';
import { AbstractFieldRef } from '../base/Ref';
import { ArkNamespace } from '../model/ArkNamespace';
import { TypeInference } from './TypeInference';
+import Logger, { LOG_MODULE_TYPE } from '../../utils/logger';
+
+const logger = Logger.getLogger(LOG_MODULE_TYPE.ARKANALYZER, 'SdkUtils');
export class SdkUtils {
private static sdkImportMap: Map = new Map();
+ /*
+ * Set static field to be null, then all related objects could be freed by GC.
+ * Class SdkUtils is only internally used by ArkAnalyzer type inference, the dispose method should be called at the end of type inference.
+ */
+ public static dispose(): void {
+ this.sdkImportMap.clear();
+ }
+
public static buildSdkImportMap(file: ArkFile): void {
const fileName = path.basename(file.getName());
if (fileName.startsWith('@')) {
@@ -84,15 +95,18 @@ export class SdkUtils {
private static loadClass(globalMap: Map, cls: ArkClass): void {
const old = globalMap.get(cls.getName());
- if (old instanceof ArkClass) {
+ if (old instanceof ArkClass && old.getDeclaringArkFile().getProjectName() === cls.getDeclaringArkFile().getProjectName()) {
if (old.getCategory() === ClassCategory.CLASS) {
- this.copyMethod(cls, old);
+ this.copyMembers(cls, old);
} else {
- this.copyMethod(old, cls);
+ this.copyMembers(old, cls);
globalMap.delete(cls.getName());
globalMap.set(cls.getName(), cls);
}
- } else if (!old) {
+ } else {
+ if (old) {
+ logger.error(`${old.getSignature()} is override`);
+ }
globalMap.set(cls.getName(), cls);
}
}
@@ -105,10 +119,7 @@ export class SdkUtils {
const instance = globalMap.get(name + 'Interface');
const attr = globalMap.get(name + COMPONENT_ATTRIBUTE);
if (attr instanceof ArkClass && instance instanceof ArkClass) {
- instance
- .getMethods()
- .filter(m => !attr.getMethodWithName(m.getName()))
- .forEach(m => attr.addMethod(m));
+ this.copyMembers(instance, attr);
globalMap.set(name, attr);
return;
}
@@ -119,15 +130,12 @@ export class SdkUtils {
} else if (old instanceof ArkClass && local.getType() instanceof ClassType) {
const localConstructor = scene.getClass((local.getType() as ClassType).getClassSignature());
if (localConstructor) {
- localConstructor
- .getMethods()
- .filter(m => !old.getMethodWithName(m.getName()))
- .forEach(m => old.addMethod(m));
+ this.copyMembers(localConstructor, old);
}
}
}
- private static copyMethod(from: ArkClass, to: ArkClass): void {
+ private static copyMembers(from: ArkClass, to: ArkClass): void {
from.getMethods().forEach(method => {
const dist = method.isStatic() ? to.getStaticMethodWithName(method.getName()) : to.getMethodWithName(method.getName());
const distSignatures = dist?.getDeclareSignatures();
@@ -137,6 +145,12 @@ export class SdkUtils {
to.addMethod(method);
}
});
+ from.getFields().forEach(field => {
+ const dist = field.isStatic() ? to.getStaticFieldWithName(field.getName()) : to.getFieldWithName(field.getName());
+ if (!dist) {
+ to.addField(field);
+ }
+ });
}
public static computeGlobalThis(leftOp: AbstractFieldRef, arkMethod: ArkMethod): void {
diff --git a/ets2panda/linter/arkanalyzer/src/core/common/TypeInference.ts b/ets2panda/linter/arkanalyzer/src/core/common/TypeInference.ts
index e754272cbfd07f2cd1290ef386b91ac55e12fa2a..07fc7faf50cf34ae8ea0fff25018347710541aa4 100644
--- a/ets2panda/linter/arkanalyzer/src/core/common/TypeInference.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/common/TypeInference.ts
@@ -16,7 +16,14 @@
import Logger, { LOG_MODULE_TYPE } from '../../utils/logger';
import { AbstractExpr, ArkInstanceInvokeExpr, ArkPtrInvokeExpr, ArkStaticInvokeExpr } from '../base/Expr';
import { Local } from '../base/Local';
-import { AbstractFieldRef, AbstractRef, ArkArrayRef, ArkInstanceFieldRef, ArkParameterRef, ArkStaticFieldRef } from '../base/Ref';
+import {
+ AbstractFieldRef,
+ AbstractRef,
+ ArkArrayRef,
+ ArkInstanceFieldRef,
+ ArkParameterRef,
+ ArkStaticFieldRef, GlobalRef
+} from '../base/Ref';
import { ArkAliasTypeDefineStmt, ArkAssignStmt, ArkReturnStmt, Stmt } from '../base/Stmt';
import {
AliasType,
@@ -54,7 +61,7 @@ import {
ANY_KEYWORD,
BIGINT_KEYWORD,
BOOLEAN_KEYWORD,
- CONSTRUCTOR_NAME,
+ CONSTRUCTOR_NAME, DEFAULT,
GLOBAL_THIS_NAME,
NEVER_KEYWORD,
NULL_KEYWORD,
@@ -157,7 +164,7 @@ export class TypeInference {
type = leftOpType;
}
} else if (leftOpType instanceof AnnotationNamespaceType) {
- type = this.inferUnclearRefName(leftOpType.getOriginType(), declaringArkClass);
+ type = this.inferBaseType(leftOpType.getOriginType(), declaringArkClass);
} else if (leftOpType instanceof UnclearReferenceType) {
type = this.inferUnclearRefType(leftOpType, declaringArkClass);
}
@@ -185,6 +192,15 @@ export class TypeInference {
signatures.forEach(s => this.inferSignatureReturnType(s, arkMethod));
return;
}
+ body.getUsedGlobals()?.forEach((value, key) => {
+ if (value instanceof GlobalRef && !value.getRef()) {
+ const arkExport = ModelUtils.findGlobalRef(key, arkMethod);
+ if (arkExport instanceof Local) {
+ arkExport.getUsedStmts().push(...value.getUsedStmts());
+ value.setRef(arkExport);
+ }
+ }
+ });
const cfg = body.getCfg();
for (const block of cfg.getBlocks()) {
for (const stmt of block.getStmts()) {
@@ -387,7 +403,8 @@ export class TypeInference {
public static isUnclearType(type: Type | null | undefined): boolean {
// TODO: For UnionType, IntersectionType and TupleType, it should recurse check every item of them.
- if (!type || type instanceof UnknownType || type instanceof UnclearReferenceType || type instanceof NullType || type instanceof UndefinedType) {
+ if (!type || type instanceof UnknownType || type instanceof UnclearReferenceType || type instanceof NullType ||
+ type instanceof UndefinedType || type instanceof GenericType) {
return true;
} else if (
type instanceof ClassType &&
@@ -488,7 +505,7 @@ export class TypeInference {
return value.getType();
}
- private static inferParameterType(param: MethodParameter, arkMethod: ArkMethod): void {
+ public static inferParameterType(param: MethodParameter, arkMethod: ArkMethod): void {
let pType = param.getType();
const arkClass = arkMethod.getDeclaringArkClass();
let type;
@@ -703,7 +720,7 @@ export class TypeInference {
}
propertyType = new EnumValueType(property.getSignature(), constant);
} else {
- propertyType = property.getType();
+ propertyType = this.replaceTypeWithReal(property.getType(), baseType.getRealGenericTypes());
}
} else if (property) {
propertyType = this.parseArkExport2Type(property);
@@ -728,6 +745,8 @@ export class TypeInference {
public static inferBaseType(baseName: string, arkClass: ArkClass): Type | null {
if (SUPER_NAME === baseName) {
return this.parseArkExport2Type(arkClass.getSuperClass());
+ } else if (DEFAULT === baseName) {
+ return this.parseArkExport2Type(arkClass.getDeclaringArkFile().getExportInfoBy(DEFAULT)?.getArkExport());
}
const field = ModelUtils.getDefaultClass(arkClass)?.getDefaultArkMethod()?.getBody()?.getLocals()?.get(baseName);
if (field && !this.isUnclearType(field.getType())) {
@@ -750,14 +769,12 @@ export class TypeInference {
ModelUtils.getClassWithName(typeName, arkClass) ??
ModelUtils.getDefaultClass(arkClass)?.getDefaultArkMethod()?.getBody()?.getAliasTypeByName(typeName) ??
ModelUtils.getArkExportInImportInfoWithName(typeName, arkClass.getDeclaringArkFile());
- if (arkExport instanceof ArkClass || arkExport instanceof AliasType) {
- return this.parseArkExport2Type(arkExport);
- }
- if (!arkClass.getDeclaringArkFile().getImportInfoBy(typeName)) {
+ if (!arkExport && !arkClass.getDeclaringArkFile().getImportInfoBy(typeName)) {
arkExport = arkClass.getDeclaringArkFile().getScene().getSdkGlobal(typeName);
}
- if (arkExport instanceof ArkClass || arkExport instanceof AliasType) {
- return this.parseArkExport2Type(arkExport);
+ const type = this.parseArkExport2Type(arkExport);
+ if (type instanceof ClassType || type instanceof AliasType) {
+ return type;
}
return null;
}
@@ -860,12 +877,14 @@ export class TypeInference {
.getParameters()
.filter(p => !p.getName().startsWith(LEXICAL_ENV_NAME_PREFIX))
.forEach((p, i) => {
- let type = params?.[i]?.getType();
- if (type instanceof GenericType && realTypes) {
- type = realTypes?.[type.getIndex()];
- }
- if (type) {
- p.setType(type);
+ if (this.isUnclearType(p.getType())) {
+ let type = params?.[i]?.getType();
+ if (type instanceof GenericType && realTypes) {
+ type = realTypes?.[type.getIndex()];
+ }
+ if (type) {
+ p.setType(type);
+ }
}
});
}
diff --git a/ets2panda/linter/arkanalyzer/src/core/common/ValueUtil.ts b/ets2panda/linter/arkanalyzer/src/core/common/ValueUtil.ts
index 1731b701b04d71d60c4e12b93931b2c9ec0547aa..8a29e565b84e8db412f6ef951fca7c0046516794 100644
--- a/ets2panda/linter/arkanalyzer/src/core/common/ValueUtil.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/common/ValueUtil.ts
@@ -21,6 +21,14 @@ export class ValueUtil {
private static readonly NumberConstantCache: Map = new Map();
public static readonly EMPTY_STRING_CONSTANT = new StringConstant(EMPTY_STRING);
+ /*
+ * Set static field to be null, then all related objects could be freed by GC.
+ * Class SdkUtils is only internally used by ArkAnalyzer, the dispose method should be called by users themselves before drop Scene.
+ */
+ public static dispose(): void {
+ this.NumberConstantCache.clear();
+ }
+
public static getOrCreateNumberConst(n: number): Constant {
let constant = this.NumberConstantCache.get(n);
if (constant === undefined) {
diff --git a/ets2panda/linter/arkanalyzer/src/core/dataflow/DataflowSolver.ts b/ets2panda/linter/arkanalyzer/src/core/dataflow/DataflowSolver.ts
index 523dd9a41b17104bc1b850c060e8a50fd796ba03..325fa23634c05a967cc4ce7192c623e4351f0926 100644
--- a/ets2panda/linter/arkanalyzer/src/core/dataflow/DataflowSolver.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/dataflow/DataflowSolver.ts
@@ -24,6 +24,7 @@ import { CallGraph } from '../../callgraph/model/CallGraph';
import { ClassHierarchyAnalysis } from '../../callgraph/algorithm/ClassHierarchyAnalysis';
import { addCfg2Stmt } from '../../utils/entryMethodUtils';
import { getRecallMethodInParam } from './Util';
+import { CallGraphBuilder } from '../../callgraph/model/builder/CallGraphBuilder';
/*
this program is roughly an implementation of the paper: Practical Extensions to the IFDS Algorithm.
@@ -88,7 +89,7 @@ export abstract class DataflowSolver {
// build CHA
let cg = new CallGraph(this.scene);
- this.CHA = new ClassHierarchyAnalysis(this.scene, cg);
+ this.CHA = new ClassHierarchyAnalysis(this.scene, cg, new CallGraphBuilder(cg, this.scene));
this.buildStmtMapInClass();
this.setCfg4AllStmt();
return;
diff --git a/ets2panda/linter/arkanalyzer/src/core/graph/builder/CfgBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/graph/builder/CfgBuilder.ts
index 5cd44402ec52488fb5bef3750f8b7af54b0c2f3e..13ff5584cc34d710121af364d4475715059cf1e9 100644
--- a/ets2panda/linter/arkanalyzer/src/core/graph/builder/CfgBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/graph/builder/CfgBuilder.ts
@@ -677,6 +677,9 @@ export class CfgBuilder {
for (let i = stmt.nexts.length - 1; i >= 0; i--) {
stmtQueue.push(stmt.nexts[i]);
}
+ if (stmt.afterSwitch && stmt.afterSwitch.lasts.size == 0) {
+ stmtQueue.push(stmt.afterSwitch);
+ }
} else if (stmt instanceof TryStatementBuilder) {
if (stmt.finallyStatement) {
stmtQueue.push(stmt.finallyStatement);
diff --git a/ets2panda/linter/arkanalyzer/src/core/graph/builder/TrapBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/graph/builder/TrapBuilder.ts
index 160df9fdc0420bd843f79edbbe7f43552c9e3699..9094994dc5d4099e379f3cd032f84eb9ad448c5a 100644
--- a/ets2panda/linter/arkanalyzer/src/core/graph/builder/TrapBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/graph/builder/TrapBuilder.ts
@@ -19,7 +19,15 @@ import { Trap } from '../../base/Trap';
import { ArkCaughtExceptionRef } from '../../base/Ref';
import { UnknownType } from '../../base/Type';
import { FullPosition } from '../../base/Position';
-import { ArkAssignStmt, ArkIfStmt, ArkInvokeStmt, ArkReturnStmt, ArkReturnVoidStmt, ArkThrowStmt, Stmt } from '../../base/Stmt';
+import {
+ ArkAssignStmt,
+ ArkIfStmt,
+ ArkInvokeStmt,
+ ArkReturnStmt,
+ ArkReturnVoidStmt,
+ ArkThrowStmt,
+ Stmt,
+} from '../../base/Stmt';
import { BlockBuilder, TryStatementBuilder } from './CfgBuilder';
import Logger, { LOG_MODULE_TYPE } from '../../../utils/logger';
@@ -217,16 +225,17 @@ export class TrapBuilder {
bfsBlocks.push(currBlock);
const childList = currBlockBuilder.nexts;
- if (childList.length === 0 || (childList.length !== 0 && childList[0] === endBlockBuilder)) {
- if (childList[0] === endBlockBuilder) {
- tailBlocks.push(currBlock);
- continue;
- }
- }
if (childList.length !== 0) {
for (const child of childList) {
- queue.push(child);
+ // A tail block's successor may be within the traversal range
+ if (child === endBlockBuilder) {
+ tailBlocks.push(currBlock);
+ } else {
+ queue.push(child);
+ }
}
+ } else {
+ tailBlocks.push(currBlock);
}
}
return { bfsBlocks, tailBlocks };
@@ -247,19 +256,16 @@ export class TrapBuilder {
copyFinallyBfsBlocks[0].getPredecessors().splice(0, finallyPredecessorsCnt);
const throwStmt = new ArkThrowStmt(exceptionValue);
let copyFinallyTailBlocks = copyFinallyBfsBlocks.splice(copyFinallyBfsBlocks.length - finallyTailBlocks.length, finallyTailBlocks.length);
- copyFinallyTailBlocks.forEach((copyFinallyTailBlock: BasicBlock) => {
- const successorsCnt = copyFinallyTailBlock.getSuccessors().length;
- copyFinallyTailBlock.getSuccessors().splice(0, successorsCnt);
- });
if (copyFinallyTailBlocks.length > 1) {
const newCopyFinallyTailBlock = new BasicBlock();
copyFinallyTailBlocks.forEach((copyFinallyTailBlock: BasicBlock) => {
copyFinallyTailBlock.addSuccessorBlock(newCopyFinallyTailBlock);
newCopyFinallyTailBlock.addPredecessorBlock(copyFinallyTailBlock);
});
+ copyFinallyBfsBlocks.push(...copyFinallyTailBlocks);
copyFinallyTailBlocks = [newCopyFinallyTailBlock];
}
- copyFinallyTailBlocks[0]?.addStmt(throwStmt);
+ copyFinallyTailBlocks[0].addStmt(throwStmt);
copyFinallyBfsBlocks.push(...copyFinallyTailBlocks);
copyFinallyBfsBlocks.forEach((copyFinallyBfsBlock: BasicBlock) => {
basicBlockSet.add(copyFinallyBfsBlock);
@@ -281,12 +287,19 @@ export class TrapBuilder {
for (const sourceBlock of sourceBlocks) {
const targetBlock = sourceToTarget.get(sourceBlock)!;
for (const predecessor of sourceBlock.getPredecessors()) {
- const targetPredecessor = sourceToTarget.get(predecessor)!;
- targetBlock.addPredecessorBlock(targetPredecessor);
+ const targetPredecessor = sourceToTarget.get(predecessor);
+ // Only include blocks within the copy range, so that predecessor and successor relationships to
+ // external blocks can be trimmed
+ if (targetPredecessor) {
+ targetBlock.addPredecessorBlock(targetPredecessor);
+ }
+
}
for (const successor of sourceBlock.getSuccessors()) {
- const targetSuccessor = sourceToTarget.get(successor)!;
- targetBlock.addSuccessorBlock(targetSuccessor);
+ const targetSuccessor = sourceToTarget.get(successor);
+ if (targetSuccessor) {
+ targetBlock.addSuccessorBlock(targetSuccessor);
+ }
}
}
return targetBlocks;
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/ArkImport.ts b/ets2panda/linter/arkanalyzer/src/core/model/ArkImport.ts
index 8ff3ff50acd2f3c10cdee22d87c4f6994626bac8..05c5c24a805125d6cfd6cdb947b74961b9cd75b3 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/ArkImport.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/ArkImport.ts
@@ -72,7 +72,7 @@ export class ImportInfo extends ArkBaseModel implements FromInfo {
* @returns The export information. If there is no export information, the return will be a **null**.
*/
public getLazyExportInfo(): ExportInfo | null {
- if (this.lazyExportInfo === undefined) {
+ if (this.lazyExportInfo === undefined && this.declaringArkFile.getScene().getStage() >= 2) {
this.lazyExportInfo = findExportInfo(this);
}
return this.lazyExportInfo || null;
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/ArkMethod.ts b/ets2panda/linter/arkanalyzer/src/core/model/ArkMethod.ts
index f3476d3567b9c43686118ab0ebe8d4f1d266d61e..12682223ba15473c312103cceaeb21f822318aa4 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/ArkMethod.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/ArkMethod.ts
@@ -15,7 +15,16 @@
import { ArkParameterRef, ArkThisRef } from '../base/Ref';
import { ArkAssignStmt, ArkReturnStmt, Stmt } from '../base/Stmt';
-import { ClassType, EnumValueType, FunctionType, GenericType, LiteralType, Type, UnionType } from '../base/Type';
+import {
+ AliasType,
+ ClassType,
+ EnumValueType,
+ FunctionType,
+ GenericType,
+ LiteralType,
+ Type,
+ UnionType
+} from '../base/Type';
import { Value } from '../base/Value';
import { Cfg } from '../graph/Cfg';
import { ViewTree } from '../graph/ViewTree';
@@ -24,17 +33,17 @@ import { ArkClass, ClassCategory } from './ArkClass';
import { MethodSignature, MethodSubSignature } from './ArkSignature';
import { BodyBuilder } from './builder/BodyBuilder';
import { ArkExport, ExportType } from './ArkExport';
-import { ANONYMOUS_METHOD_PREFIX, DEFAULT_ARK_METHOD_NAME } from '../common/Const';
+import { ANONYMOUS_METHOD_PREFIX, DEFAULT_ARK_METHOD_NAME, LEXICAL_ENV_NAME_PREFIX } from '../common/Const';
import { getColNo, getLineNo, LineCol, setCol, setLine } from '../base/Position';
import { ArkBaseModel, ModifierType } from './ArkBaseModel';
import { ArkError, ArkErrorCode } from '../common/ArkError';
import { CALL_BACK } from '../common/EtsConst';
-import { Scene } from '../../Scene';
import { Constant } from '../base/Constant';
import { Local } from '../base/Local';
import { ArkFile, Language } from './ArkFile';
import { CONSTRUCTOR_NAME } from '../common/TSConst';
import { MethodParameter } from './builder/ArkMethodBuilder';
+import { TypeInference } from '../common/TypeInference';
export const arkMethodNodeKind = [
'MethodDeclaration',
@@ -623,45 +632,41 @@ export class ArkMethod extends ArkBaseModel implements ArkExport {
}
return args.length >= min && args.length <= max;
});
- const scene = this.getDeclaringArkFile().getScene();
return (
- signatures?.find(p => {
- const parameters = p.getMethodSubSignature().getParameters();
- for (let i = 0; i < parameters.length; i++) {
- if (!args[i]) {
- return parameters[i].isOptional();
- }
- const isMatched = this.matchParam(parameters[i].getType(), args[i], scene);
- if (!isMatched) {
- return false;
- }
- }
- return true;
- }) ??
+ signatures?.find(p => this.isMatched(p.getMethodSubSignature().getParameters(), args)) ??
signatures?.[0] ??
this.getSignature()
);
}
- private matchParam(paramType: Type, arg: Value, scene: Scene): boolean {
- const argType = arg.getType();
- if (arg instanceof Local) {
- const stmt = arg.getDeclaringStmt();
- if (stmt instanceof ArkAssignStmt && stmt.getRightOp() instanceof Constant) {
- arg = stmt.getRightOp();
+ private isMatched(parameters: MethodParameter[], args: Value[], isArrowFunc: boolean = false): boolean {
+ for (let i = 0; i < parameters.length; i++) {
+ if (!args[i]) {
+ return isArrowFunc ? true : parameters[i].isOptional();
}
+ const isMatched = this.matchParam(parameters[i].getType(), args[i]);
+ if (!isMatched) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private matchParam(paramType: Type, arg: Value): boolean {
+ arg = ArkMethod.parseArg(arg);
+ const argType = arg.getType();
+ if (paramType instanceof AliasType && !(argType instanceof AliasType)) {
+ paramType = TypeInference.replaceAliasType(paramType);
}
if (paramType instanceof UnionType) {
- let matched = false;
- for (const e of paramType.getTypes()) {
- if (argType.constructor === e.constructor) {
- matched = true;
- break;
- }
- }
- return matched;
+ return !!paramType.getTypes().find(p => this.matchParam(p, arg));
} else if (argType instanceof FunctionType && paramType instanceof FunctionType) {
- return argType.getMethodSignature().getParamLength() === paramType.getMethodSignature().getParamLength();
+ if (argType.getMethodSignature().getParamLength() > paramType.getMethodSignature().getParamLength()) {
+ return false;
+ }
+ const parameters = paramType.getMethodSignature().getMethodSubSignature().getParameters();
+ const args = argType.getMethodSignature().getMethodSubSignature().getParameters().filter(p => !p.getName().startsWith(LEXICAL_ENV_NAME_PREFIX));
+ return this.isMatched(parameters, args, true);
} else if (paramType instanceof ClassType && paramType.getClassSignature().getClassName().includes(CALL_BACK)) {
return argType instanceof FunctionType;
} else if (paramType instanceof LiteralType && arg instanceof Constant) {
@@ -684,6 +689,19 @@ export class ArkMethod extends ArkBaseModel implements ArkExport {
return argType.constructor === paramType.constructor;
}
+ private static parseArg(arg: Value): Value {
+ if (arg instanceof Local) {
+ const stmt = arg.getDeclaringStmt();
+ const argType = arg.getType();
+ if (argType instanceof EnumValueType && argType.getConstant()) {
+ arg = argType.getConstant()!;
+ } else if (stmt instanceof ArkAssignStmt && stmt.getRightOp() instanceof Constant) {
+ arg = stmt.getRightOp();
+ }
+ }
+ return arg;
+ }
+
public getOuterMethod(): ArkMethod | undefined {
return this.outerMethod;
}
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkClassBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkClassBuilder.ts
index 7c3f16938470b32b10ed1636e6a0354baa1baa73..48a7217d1a027f434603bbefcdc34abf7bdcc5f6 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkClassBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkClassBuilder.ts
@@ -370,7 +370,17 @@ function buildArkClassMembers(clsNode: ClassLikeNode, cls: ArkClass, sourceFile:
const instanceInitStmts: Stmt[] = [];
let staticBlockId = 0;
clsNode.members.forEach(member => {
- if (ts.isPropertyDeclaration(member) || ts.isPropertySignature(member)) {
+ if (
+ ts.isMethodDeclaration(member) ||
+ ts.isConstructorDeclaration(member) ||
+ ts.isMethodSignature(member) ||
+ ts.isConstructSignatureDeclaration(member) ||
+ ts.isAccessor(member) ||
+ ts.isCallSignatureDeclaration(member)
+ ) {
+ // these node types have been handled at the beginning of this function by calling buildMethodsForClass
+ return;
+ } else if (ts.isPropertyDeclaration(member) || ts.isPropertySignature(member)) {
const arkField = buildProperty2ArkField(member, sourceFile, cls);
if (ts.isClassDeclaration(clsNode) || ts.isClassExpression(clsNode) || ts.isStructDeclaration(clsNode)) {
if (arkField.isStatic()) {
@@ -395,9 +405,9 @@ function buildArkClassMembers(clsNode: ClassLikeNode, cls: ArkClass, sourceFile:
const staticBlockInvokeExpr = new ArkStaticInvokeExpr(currStaticBlockMethodSig, []);
staticInitStmts.push(new ArkInvokeStmt(staticBlockInvokeExpr));
} else if (ts.isSemicolonClassElement(member)) {
- logger.debug('Skip these members.');
+ logger.trace('Skip these members.');
} else {
- logger.warn('Please contact developers to support new member type!');
+ logger.warn(`Please contact developers to support new member in class: ${cls.getSignature().toString()}, member: ${member.getText()}!`);
}
});
if (ts.isClassDeclaration(clsNode) || ts.isClassExpression(clsNode) || ts.isStructDeclaration(clsNode)) {
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFieldBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFieldBuilder.ts
index ede55e7c9373fe86d87b73f0907a24c8e4cc9157..b41b7dd419ebec64520d466cb3be1f954a739f72 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFieldBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFieldBuilder.ts
@@ -47,7 +47,7 @@ export function buildProperty2ArkField(
} else if (ts.isPropertyAccessExpression(member.name.expression)) {
fieldName = handlePropertyAccessExpression(member.name.expression);
} else {
- logger.warn('Other property expression type found!');
+ logger.warn(`Other property expression type found: ${member.name.expression.getText()}!`);
}
} else if (member.name && (ts.isIdentifier(member.name) || ts.isLiteralExpression(member.name))) {
fieldName = member.name.text;
@@ -56,7 +56,7 @@ export function buildProperty2ArkField(
fieldName = propertyName.substring(1);
field.addModifier(ModifierType.PRIVATE);
} else {
- logger.warn('Other type of property name found!');
+ logger.warn(`Other type of property name found: ${member.getText()}!`);
}
let fieldType: Type = UnknownType.getInstance();
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFileBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFileBuilder.ts
index 1e201453b195b0a2bc6bc66d515215471dc277dc..386cbca0855a900802890868b8bf10e6dddd5152 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFileBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkFileBuilder.ts
@@ -110,7 +110,7 @@ function buildArkFile(arkFile: ArkFile, astRoot: ts.SourceFile): void {
}
// TODO: Check
else if (ts.isMethodDeclaration(child)) {
- logger.warn('This is a MethodDeclaration in ArkFile.');
+ logger.trace('This is a MethodDeclaration in ArkFile.');
let mthd: ArkMethod = new ArkMethod();
buildArkMethodFromArkClass(child, arkFile.getDefaultClass(), mthd, astRoot);
@@ -143,7 +143,7 @@ function buildArkFile(arkFile: ArkFile, astRoot: ts.SourceFile): void {
} else if (ts.isExpressionStatement(child) && ts.isStringLiteral(child.expression)) {
child.expression.text.trim() === ARKTS_STATIC_MARK && arkFile.setLanguage(Language.ARKTS1_2);
} else {
- logger.info('Child joined default method of arkFile: ', ts.SyntaxKind[child.kind]);
+ logger.trace('Child joined default method of arkFile: ', ts.SyntaxKind[child.kind]);
}
});
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkMethodBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkMethodBuilder.ts
index 29221c377c4737302b92774d61b2e79941b2246d..cb00c3dff71d660b405974c57774b3914e7cb2ba 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkMethodBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkMethodBuilder.ts
@@ -113,14 +113,13 @@ export function buildArkMethodFromArkClass(
mtd.setImplementationSignature(methodSignature);
mtd.setLine(line + 1);
mtd.setColumn(character + 1);
+ let bodyBuilder = new BodyBuilder(mtd.getSignature(), methodNode, mtd, sourceFile);
+ mtd.setBodyBuilder(bodyBuilder);
} else {
mtd.setDeclareSignatures(methodSignature);
mtd.setDeclareLinesAndCols([line + 1], [character + 1]);
}
- let bodyBuilder = new BodyBuilder(mtd.getSignature(), methodNode, mtd, sourceFile);
- mtd.setBodyBuilder(bodyBuilder);
-
if (mtd.hasBuilderDecorator()) {
mtd.setViewTree(buildViewTree(mtd));
} else if (declaringClass.hasComponentDecorator() && mtd.getSubSignature().toString() === 'build()' && !mtd.isStatic()) {
@@ -430,10 +429,11 @@ export function addInitInConstructor(constructor: ArkMethod): void {
if (!thisLocal) {
return;
}
- const blocks = constructor.getCfg()?.getBlocks();
- if (!blocks) {
+ const cfg = constructor.getCfg();
+ if (cfg === undefined) {
return;
}
+ const blocks = cfg.getBlocks();
const firstBlockStmts = [...blocks][0].getStmts();
let index = 0;
for (let i = 0; i < firstBlockStmts.length; i++) {
@@ -454,6 +454,7 @@ export function addInitInConstructor(constructor: ArkMethod): void {
const initInvokeStmt = new ArkInvokeStmt(
new ArkInstanceInvokeExpr(thisLocal, constructor.getDeclaringArkClass().getInstanceInitMethod().getSignature(), [])
);
+ initInvokeStmt.setCfg(cfg);
firstBlockStmts.splice(index, 0, initInvokeStmt);
}
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkNamespaceBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkNamespaceBuilder.ts
index 930a0bba21cd77dab5d45b67ebc9b3a897842fef..b336fe921b54235da74958625d7e5083b3e70a35 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkNamespaceBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/builder/ArkNamespaceBuilder.ts
@@ -69,12 +69,12 @@ export function buildArkNamespace(node: ts.ModuleDeclaration, declaringInstance:
// NamespaceDeclaration extends ModuleDeclaration
//TODO: Check
else if (ts.isModuleDeclaration(node.body)) {
- logger.warn('This ModuleBody is an NamespaceDeclaration.');
+ logger.trace('This ModuleBody is an NamespaceDeclaration.');
let childNs: ArkNamespace = new ArkNamespace();
buildArkNamespace(node.body, ns, childNs, sourceFile);
ns.addNamespace(childNs);
} else if (ts.isIdentifier(node.body)) {
- logger.warn('ModuleBody is Identifier.');
+ logger.warn('ModuleBody is Identifier');
} else {
logger.warn('JSDocNamespaceDeclaration found.');
}
@@ -108,7 +108,7 @@ function buildNamespaceMembers(node: ts.ModuleBlock, namespace: ArkNamespace, so
}
// TODO: Check
else if (ts.isMethodDeclaration(child)) {
- logger.warn('This is a MethodDeclaration in ArkNamespace.');
+ logger.trace('This is a MethodDeclaration in ArkNamespace.');
let mthd: ArkMethod = new ArkMethod();
buildArkMethodFromArkClass(child, namespace.getDefaultClass(), mthd, sourceFile);
@@ -131,7 +131,7 @@ function buildNamespaceMembers(node: ts.ModuleBlock, namespace: ArkNamespace, so
} else if (ts.isVariableStatement(child) && isExported(child.modifiers)) {
buildExportVariableStatement(child, sourceFile, namespace.getDeclaringArkFile(), namespace).forEach(item => namespace.addExportInfo(item));
} else {
- logger.info('Child joined default method of arkFile: ', ts.SyntaxKind[child.kind]);
+ logger.trace('Child joined default method of arkFile: ', ts.SyntaxKind[child.kind]);
// join default method
}
});
diff --git a/ets2panda/linter/arkanalyzer/src/core/model/builder/BodyBuilder.ts b/ets2panda/linter/arkanalyzer/src/core/model/builder/BodyBuilder.ts
index 77b28a411fc80b6884620cdf50e2d5e564b93a81..8a6286bd30e384e17be1bae4bfbfd520df6bcbd1 100644
--- a/ets2panda/linter/arkanalyzer/src/core/model/builder/BodyBuilder.ts
+++ b/ets2panda/linter/arkanalyzer/src/core/model/builder/BodyBuilder.ts
@@ -571,6 +571,7 @@ export class BodyBuilder {
const closuresLocal = new Local(closuresParam.getName(), lexicalEnv);
body.addLocal(closuresLocal.getName(), closuresLocal);
let assignStmt = new ArkAssignStmt(closuresLocal, parameterRef);
+ assignStmt.setCfg(body.getCfg());
stmts.splice(index, 0, assignStmt);
closuresLocal.setDeclaringStmt(assignStmt);
@@ -590,6 +591,7 @@ export class BodyBuilder {
index++;
const closureFieldRef = new ClosureFieldRef(closuresParam, closure.getName(), closure.getType());
let assignStmt = new ArkAssignStmt(local, closureFieldRef);
+ assignStmt.setCfg(body.getCfg());
stmts.splice(index, 0, assignStmt);
local.setDeclaringStmt(assignStmt);
closuresLocal.addUsedStmt(assignStmt);
diff --git a/ets2panda/linter/arkanalyzer/src/save/JsonPrinter.ts b/ets2panda/linter/arkanalyzer/src/save/JsonPrinter.ts
index 283de26011aae158e95d678fccdac4a6ceed70b4..e9c2696bf8a6b6df1c57670ffd481b09075eb1e1 100644
--- a/ets2panda/linter/arkanalyzer/src/save/JsonPrinter.ts
+++ b/ets2panda/linter/arkanalyzer/src/save/JsonPrinter.ts
@@ -22,20 +22,20 @@ import { ArkField } from '../core/model/ArkField';
import {
AliasType,
AnnotationNamespaceType,
- AnnotationType,
AnnotationTypeQueryType,
AnyType,
ArrayType,
BigIntType,
BooleanType,
ClassType,
+ EnumValueType,
FunctionType,
GenericType,
+ IntersectionType,
LiteralType,
NeverType,
NullType,
NumberType,
- PrimitiveType,
StringType,
TupleType,
Type,
@@ -46,11 +46,16 @@ import {
VoidType,
} from '../core/base/Type';
import { Value } from '../core/base/Value';
-import { ArkAssignStmt, ArkIfStmt, ArkInvokeStmt, ArkReturnStmt, ArkReturnVoidStmt, ArkThrowStmt, Stmt } from '../core/base/Stmt';
import {
- AbstractBinopExpr,
- AbstractExpr,
- AbstractInvokeExpr,
+ ArkAssignStmt,
+ ArkIfStmt,
+ ArkInvokeStmt,
+ ArkReturnStmt,
+ ArkReturnVoidStmt,
+ ArkThrowStmt,
+ Stmt,
+} from '../core/base/Stmt';
+import {
ArkAwaitExpr,
ArkCastExpr,
ArkConditionExpr,
@@ -73,13 +78,12 @@ import { ImportInfo } from '../core/model/ArkImport';
import { ExportInfo } from '../core/model/ArkExport';
import { AliasTypeSignature, ClassSignature, FieldSignature, FileSignature, MethodSignature, NamespaceSignature } from '../core/model/ArkSignature';
import { LineColPosition } from '../core/base/Position';
-import { AbstractFieldRef, AbstractRef, ArkArrayRef, ArkInstanceFieldRef, ArkParameterRef, ArkStaticFieldRef, ArkThisRef } from '../core/base/Ref';
+import { ArkArrayRef, ArkCaughtExceptionRef, ArkInstanceFieldRef, ArkParameterRef, ArkStaticFieldRef, ArkThisRef, ClosureFieldRef, GlobalRef } from '../core/base/Ref';
import { Local } from '../core/base/Local';
import { Cfg } from '../core/graph/Cfg';
import { BasicBlock } from '../core/graph/BasicBlock';
import { ArkBody } from '../core/model/ArkBody';
import { Decorator } from '../core/base/Decorator';
-import util from 'util';
export class JsonPrinter extends Printer {
constructor(private arkFile: ArkFile) {
@@ -113,8 +117,9 @@ export class JsonPrinter extends Printer {
return {
signature: this.serializeClassSignature(clazz.getSignature()),
modifiers: clazz.getModifiers(),
- decorators: clazz.getDecorators().map(decorator => this.serializeDecorator(decorator)),
- typeParameters: clazz.getGenericsTypes()?.map(type => this.serializeType(type)),
+ decorators: clazz.getDecorators().map((decorator) => this.serializeDecorator(decorator)),
+ typeParameters: clazz.getGenericsTypes()?.map((type) => this.serializeType(type)),
+ category: clazz.getCategory(),
superClassName: clazz.getSuperClassName(),
implementedInterfaceNames: clazz.getImplementedInterfaceNames(),
fields: clazz.getFields().map(field => this.serializeField(field)),
@@ -155,6 +160,7 @@ export class JsonPrinter extends Printer {
name: parameter.getName(),
type: this.serializeType(parameter.getType()),
isOptional: parameter.isOptional(),
+ isRest: parameter.hasDotDotDotToken(),
};
}
@@ -220,6 +226,11 @@ export class JsonPrinter extends Printer {
_: 'UnionType',
types: type.getTypes().map(type => this.serializeType(type)),
};
+ } else if (type instanceof IntersectionType) {
+ return {
+ _: 'IntersectionType',
+ types: type.getTypes().map((type) => this.serializeType(type)),
+ };
} else if (type instanceof TupleType) {
return {
_: 'TupleType',
@@ -254,8 +265,6 @@ export class JsonPrinter extends Printer {
_: 'LiteralType',
literal: type.getLiteralName(),
};
- } else if (type instanceof PrimitiveType) {
- throw new Error('Unhandled PrimitiveType: ' + util.inspect(type, { showHidden: true, depth: null }));
} else if (type instanceof ClassType) {
return {
_: 'ClassType',
@@ -281,13 +290,13 @@ export class JsonPrinter extends Printer {
typeParameters: type.getGenericTypes().map(type => this.serializeType(type)),
};
} else if (type instanceof GenericType) {
- let defaultType = type.getDefaultType();
let constraint = type.getConstraint();
+ let defaultType = type.getDefaultType();
return {
_: 'GenericType',
name: type.getName(),
- defaultType: defaultType && this.serializeType(defaultType),
constraint: constraint && this.serializeType(constraint),
+ defaultType: defaultType && this.serializeType(defaultType),
};
} else if (type instanceof AliasType) {
return {
@@ -307,10 +316,19 @@ export class JsonPrinter extends Printer {
_: 'AnnotationTypeQueryType',
originType: type.getOriginType(),
};
- } else if (type instanceof AnnotationType) {
- throw new Error('Unhandled AnnotationType: ' + util.inspect(type, { showHidden: true, depth: null }));
+ } else if (type instanceof EnumValueType) {
+ const c = type.getConstant();
+ return {
+ _: 'EnumValueType',
+ signature: this.serializeFieldSignature(type.getFieldSignature()),
+ constant: c && this.serializeValue(c),
+ };
} else {
- throw new Error('Unhandled Type: ' + util.inspect(type, { showHidden: true, depth: null }));
+ console.warn(`Unhandled Type: ${type.constructor.name} (${type.toString()})`);
+ return {
+ _: type.constructor.name,
+ text: type.toString(),
+ };
}
}
@@ -415,6 +433,13 @@ export class JsonPrinter extends Printer {
};
}
+ private serializeConstant(constant: Constant): object {
+ return {
+ value: constant.getValue(),
+ type: this.serializeType(constant.getType()),
+ };
+ }
+
private serializeValue(value: Value): object {
if (value === undefined) {
throw new Error('Value is undefined');
@@ -428,8 +453,7 @@ export class JsonPrinter extends Printer {
} else if (value instanceof Constant) {
return {
_: 'Constant',
- value: value.getValue(),
- type: this.serializeType(value.getType()),
+ ...this.serializeConstant(value),
};
} else if (value instanceof ArkNewExpr) {
return {
@@ -498,8 +522,6 @@ export class JsonPrinter extends Printer {
left: this.serializeValue(value.getOp1()),
right: this.serializeValue(value.getOp2()),
};
- } else if (value instanceof AbstractBinopExpr) {
- return new Error('Unhandled BinopExpr: ' + util.inspect(value, { showHidden: true, depth: null }));
} else if (value instanceof ArkUnopExpr) {
return {
_: 'UnopExpr',
@@ -526,8 +548,6 @@ export class JsonPrinter extends Printer {
method: this.serializeMethodSignature(value.getMethodSignature()),
args: value.getArgs().map(arg => this.serializeValue(arg)),
};
- } else if (value instanceof AbstractInvokeExpr) {
- throw new Error('Unhandled CallExpr: ' + util.inspect(value, { showHidden: true, depth: null }));
} else if (value instanceof ArkThisRef) {
return {
_: 'ThisRef',
@@ -546,6 +566,25 @@ export class JsonPrinter extends Printer {
index: this.serializeValue(value.getIndex()),
type: this.serializeType(value.getType()),
};
+ } else if (value instanceof ArkCaughtExceptionRef) {
+ return {
+ _: 'CaughtExceptionRef',
+ type: this.serializeType(value.getType()),
+ };
+ } else if (value instanceof GlobalRef) {
+ let ref = value.getRef();
+ return {
+ _: 'GlobalRef',
+ name: value.getName(),
+ ref: ref ? this.serializeValue(ref) : null,
+ };
+ } else if (value instanceof ClosureFieldRef) {
+ return {
+ _: 'ClosureFieldRef',
+ base: this.serializeLocal(value.getBase()),
+ fieldName: value.getFieldName(),
+ type: this.serializeType(value.getType()),
+ };
} else if (value instanceof ArkInstanceFieldRef) {
return {
_: 'InstanceFieldRef',
@@ -557,14 +596,13 @@ export class JsonPrinter extends Printer {
_: 'StaticFieldRef',
field: this.serializeFieldSignature(value.getFieldSignature()),
};
- } else if (value instanceof AbstractFieldRef) {
- throw new Error('Unhandled FieldRef: ' + util.inspect(value, { showHidden: true, depth: null }));
- } else if (value instanceof AbstractRef) {
- throw new Error('Unhandled Ref: ' + util.inspect(value, { showHidden: true, depth: null }));
- } else if (value instanceof AbstractExpr) {
- throw new Error('Unhandled Expr: ' + util.inspect(value, { showHidden: true, depth: null }));
} else {
- throw new Error('Unhandled Value: ' + util.inspect(value, { showHidden: true, depth: null }));
+ console.warn(`Unhandled Value: ${value.constructor.name} (${value.toString()})`);
+ return {
+ _: value.constructor.name,
+ text: value.toString(),
+ type: this.serializeType(value.getType()),
+ };
}
}
@@ -600,7 +638,11 @@ export class JsonPrinter extends Printer {
arg: this.serializeValue(stmt.getOp()),
};
} else {
- throw new Error('Unhandled Stmt: ' + util.inspect(stmt, { showHidden: true, depth: null }));
+ console.warn(`Unhandled Stmt: ${stmt.constructor.name} (${stmt.toString()})`);
+ return {
+ _: stmt.constructor.name,
+ text: stmt.toString(),
+ };
}
}
}
diff --git a/ets2panda/linter/arkanalyzer/src/utils/SparseBitVector.ts b/ets2panda/linter/arkanalyzer/src/utils/SparseBitVector.ts
index fcb5c816ac5f5b5ef8e9b4f3ace185db43c041c4..313fb88f359040faa8c3ffbe7c681a5120e1a9ae 100644
--- a/ets2panda/linter/arkanalyzer/src/utils/SparseBitVector.ts
+++ b/ets2panda/linter/arkanalyzer/src/utils/SparseBitVector.ts
@@ -538,7 +538,6 @@ export class SparseBitVector {
return changed;
}
- // Dump as string
toString(): string {
let ar = [...this];
return ar.toString();
diff --git a/ets2panda/linter/arkanalyzer/typedoc.json b/ets2panda/linter/arkanalyzer/typedoc.json
index 1b08d68d6925c2b388da76585a545eef75630cf4..e582cf129b3186e882113f1961d5b90c729e0745 100644
--- a/ets2panda/linter/arkanalyzer/typedoc.json
+++ b/ets2panda/linter/arkanalyzer/typedoc.json
@@ -16,6 +16,7 @@
],
"excludeInternal": true,
"useTsLinkResolution": true,
+ "plugin": "typedoc-plugin-markdown",
"out": "docs/api_docs",
"readme": "./README.en.md"
}
\ No newline at end of file
diff --git a/ets2panda/linter/build_linter.py b/ets2panda/linter/build_linter.py
index bac519dd17763b0ac1b99f4a463311654c45d107..3634b84a25fa84e56a86343f8b0b5316acaf8a3f 100755
--- a/ets2panda/linter/build_linter.py
+++ b/ets2panda/linter/build_linter.py
@@ -36,6 +36,9 @@ def copy_files(source_path, dest_path, is_file=False):
def run_cmd(cmd, execution_path=None):
+ if (cmd and cmd[0].strip().endswith('npm')):
+ cmd.append('--registry')
+ cmd.append('https://repo.huaweicloud.com/repository/npm/')
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
diff --git a/ets2panda/linter/homecheck/src/Index.ts b/ets2panda/linter/homecheck/src/Index.ts
index 6ad78b6bfe25006f6ab5f366effe38a2e7136803..b3228e9bd598c32c541a12874d949bdf8559b560 100644
--- a/ets2panda/linter/homecheck/src/Index.ts
+++ b/ets2panda/linter/homecheck/src/Index.ts
@@ -42,4 +42,4 @@ export { Utils } from './utils/common/Utils';
// tools
export { runTool, Tools } from './tools/toolEntry';
-export { MigrationTool } from './tools/migrationTool/MigrationTool';
+export { MigrationTool } from './tools/migrationTool/MigrationTool';
\ No newline at end of file
diff --git a/ets2panda/linter/homecheck/src/checker/migration/AppStorageGetCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/AppStorageGetCheck.ts
index 693f8914126a9a7d9a5da0d9e697963b77e5e460..8e1ef29f16e35b25605f8c61be37708dc72dd945 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/AppStorageGetCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/AppStorageGetCheck.ts
@@ -139,7 +139,7 @@ export class AppStorageGetCheck implements BaseChecker {
}
private getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
diff --git a/ets2panda/linter/homecheck/src/checker/migration/CustomBuilderCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/CustomBuilderCheck.ts
index b8dcb06db7d2c47226110a65dfc9298937fdc42c..ac46794b550b697820f4dc515f0318c443545155 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/CustomBuilderCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/CustomBuilderCheck.ts
@@ -208,7 +208,7 @@ export class CustomBuilderCheck implements BaseChecker {
}
private getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
@@ -229,7 +229,7 @@ export class CustomBuilderCheck implements BaseChecker {
fixPosition.endLine = endPosition.line;
fixPosition.endCol = endPosition.col;
}
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const sourceFile = AstTreeUtils.getASTNode(arkFile.getName(), arkFile.getCode());
const range = FixUtils.getRangeWithAst(sourceFile, fixPosition);
ruleFix.range = range;
diff --git a/ets2panda/linter/homecheck/src/checker/migration/InteropAssignCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/InteropAssignCheck.ts
index d956fe529c7181a55527a35c870cabde40d9c4d8..a17b9064bad53d862df042578e47360a71a8513b 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/InteropAssignCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/InteropAssignCheck.ts
@@ -98,7 +98,7 @@ export class InteropAssignCheck implements BaseChecker {
callsites.forEach(cs => {
let hasTargetArg = false;
const invoke = cs.getInvokeExpr()!;
- const csMethod = cs.getCfg()?.getDeclaringMethod();
+ const csMethod = cs.getCfg().getDeclaringMethod();
invoke.getArgs().forEach(arg => {
const argTy = arg.getType();
if (argTy instanceof PrimitiveType || this.isBoxedType(argTy)) {
@@ -149,7 +149,7 @@ export class InteropAssignCheck implements BaseChecker {
const desc = `${this.metaData.description} (${RULE_ID})`;
const severity = this.metaData.severity;
const ruleId = this.rule.ruleId;
- const filePath = assign.getCfg()?.getDeclaringMethod().getDeclaringArkFile()?.getFilePath() ?? '';
+ const filePath = assign.getCfg().getDeclaringMethod().getDeclaringArkFile()?.getFilePath() ?? '';
const defeats = new Defects(line, column, column, problem, desc, severity, ruleId, filePath, '', true, false, false);
this.issues.push(new IssueReport(defeats, undefined));
});
@@ -265,8 +265,6 @@ export class InteropAssignCheck implements BaseChecker {
}
if (file) {
return file.getLanguage();
- } else {
- logger.error(`fail to identify which file the type definition ${type.toString()} is in.`);
}
return undefined;
}
diff --git a/ets2panda/linter/homecheck/src/checker/migration/InteropBackwardDFACheck.ts b/ets2panda/linter/homecheck/src/checker/migration/InteropBackwardDFACheck.ts
index 9651894a32e058ab673a856c3b29f5581600baa6..85a045b7f0334b703db5fd7fc2017f73ad7ca002 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/InteropBackwardDFACheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/InteropBackwardDFACheck.ts
@@ -214,7 +214,7 @@ export class InteropBackwardDFACheck implements BaseChecker {
private reportIssue(objDefInfo: ObjDefInfo, apiLang: Language, isReflect: boolean) {
const problemStmt = objDefInfo.problemStmt;
- const problemStmtMtd = problemStmt.getCfg()?.getDeclaringMethod();
+ const problemStmtMtd = problemStmt.getCfg().getDeclaringMethod();
const problemStmtLang = problemStmtMtd?.getLanguage();
const objLanguage = objDefInfo.objLanguage;
if (objLanguage === Language.UNKNOWN || problemStmtLang === Language.UNKNOWN) {
diff --git a/ets2panda/linter/homecheck/src/checker/migration/InteropBoxedTypeCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/InteropBoxedTypeCheck.ts
index 42b4dc0973a789fe6d96f7a86e20bb8323dbbdf0..d0a1c9b10fa1064e34fd46de5cbbdbb79c1e2859 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/InteropBoxedTypeCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/InteropBoxedTypeCheck.ts
@@ -40,7 +40,7 @@ import { WarnInfo } from '../../utils/common/Utils';
import { Language } from 'arkanalyzer/lib/core/model/ArkFile';
import { getLanguageStr } from './Utils';
-const logger = Logger.getLogger(LOG_MODULE_TYPE.HOMECHECK, 'ObservedDecoratorCheck');
+const logger = Logger.getLogger(LOG_MODULE_TYPE.HOMECHECK, 'InteropBoxedTypeCheck');
const gMetaData: BaseMetaData = {
severity: 1,
ruleDocPath: '',
diff --git a/ets2panda/linter/homecheck/src/checker/migration/InteropJSModifyPropertyCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/InteropJSModifyPropertyCheck.ts
index 3b912361f2bb7896b526e8a434388ddb7de83703..16ea7584bcb4d8889287c3486c4da61c259c7eca 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/InteropJSModifyPropertyCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/InteropJSModifyPropertyCheck.ts
@@ -276,10 +276,8 @@ export class InteropJSModifyPropertyCheck implements BaseChecker {
}
if (file) {
return file.getLanguage();
- } else {
- logger.error(`fail to identify which file the type definition ${type.toString()} is in.`);
- return Language.UNKNOWN;
}
+ return Language.UNKNOWN;
}
private reportIssue(problemStmt: Stmt) {
@@ -289,7 +287,7 @@ export class InteropJSModifyPropertyCheck implements BaseChecker {
const desc = `${this.metaData.description} (${RULE_ID})`;
const severity = this.metaData.severity;
const ruleId = this.rule.ruleId;
- const filePath = problemStmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile()?.getFilePath() ?? '';
+ const filePath = problemStmt.getCfg().getDeclaringMethod().getDeclaringArkFile()?.getFilePath() ?? '';
const defeats = new Defects(
line,
column,
diff --git a/ets2panda/linter/homecheck/src/checker/migration/ModifyStateVarCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/ModifyStateVarCheck.ts
index c25cc59611ec6e7b8182054beace616da724ba7a..dfabd40fe05228e763bbd99a440a70c3072378db 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/ModifyStateVarCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/ModifyStateVarCheck.ts
@@ -171,7 +171,7 @@ export class ModifyStateVarCheck implements BaseChecker {
}
private getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
diff --git a/ets2panda/linter/homecheck/src/checker/migration/NoTSLikeAsCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/NoTSLikeAsCheck.ts
index f45c63723cfb7b492c0972d4079cd9d6ef5d6740..3e6f594aa1aff68dc4c3412b80abd932b6702e5f 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/NoTSLikeAsCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/NoTSLikeAsCheck.ts
@@ -37,6 +37,13 @@ import {
BasicBlock,
ArkIfStmt,
ArkUnopExpr,
+ RelationalBinaryOperator,
+ LineColPosition,
+ UnaryOperator,
+ ArkNormalBinopExpr,
+ NormalBinaryOperator,
+ AbstractFieldRef,
+ ClassSignature,
} from 'arkanalyzer/lib';
import Logger, { LOG_MODULE_TYPE } from 'arkanalyzer/lib/utils/logger';
import { BaseChecker, BaseMetaData } from '../BaseChecker';
@@ -47,6 +54,7 @@ import { CALL_DEPTH_LIMIT, getGlobalsDefineInDefaultMethod, GlobalCallGraphHelpe
import { WarnInfo } from '../../utils/common/Utils';
import { ClassCategory } from 'arkanalyzer/lib/core/model/ArkClass';
import { Language } from 'arkanalyzer/lib/core/model/ArkFile';
+import { BooleanConstant } from 'arkanalyzer/lib/core/base/Constant';
const logger = Logger.getLogger(LOG_MODULE_TYPE.HOMECHECK, 'NoTSLikeAsCheck');
const gMetaData: BaseMetaData = {
@@ -55,6 +63,12 @@ const gMetaData: BaseMetaData = {
description: '',
};
+enum TypeAssuranceCondition {
+ Positive,
+ Negative,
+ NotExist,
+}
+
export class NoTSLikeAsCheck implements BaseChecker {
readonly metaData: BaseMetaData = gMetaData;
public rule: Rule;
@@ -181,21 +195,19 @@ export class NoTSLikeAsCheck implements BaseChecker {
return false;
}
for (const block of cfg.getBlocks()) {
- // 这里仅判断了cast op是否进行了instanceof判断,如果op是由op1赋值,op1进行了instanceof判断,此处不认为是做了有效检查
- // TODO: 还需进行复杂条件中包含类型守卫判断的情况,涉及&&,||等的复合
- const positiveCheck = this.isCastExprWithTypeAssurancePositive(block, castExpr);
- const negativeCheck = this.isCastExprWithTypeAssuranceNegative(block, castExpr);
- if (!(positiveCheck || negativeCheck)) {
+ // 这里仅判断了cast op是否进行了instanceof判断,如果op是由op1赋值,op1进行了instanceof判断,此处不认为是做了有效检查,因为此赋值链可能很长且中途发生类型变化,极易判断错误
+ const checkRes = this.checkTypeAssuranceInBasicBlock(block, castExpr);
+ if (checkRes === TypeAssuranceCondition.NotExist) {
continue;
}
let checkedBB: Set = new Set();
let needCheckBB: number[] = [];
checkedBB.add(block.getId());
const allSuccessors = block.getSuccessors();
- if (allSuccessors.length > 0 && positiveCheck) {
+ if (allSuccessors.length > 0 && checkRes === TypeAssuranceCondition.Positive) {
needCheckBB.push(allSuccessors[0].getId());
}
- if (allSuccessors.length > 1 && negativeCheck) {
+ if (allSuccessors.length > 1 && checkRes === TypeAssuranceCondition.Negative) {
needCheckBB.push(allSuccessors[1].getId());
}
while (needCheckBB.length > 0) {
@@ -221,26 +233,7 @@ export class NoTSLikeAsCheck implements BaseChecker {
return false;
}
- private isStmtInBlock(stmt: Stmt, block: BasicBlock): boolean {
- for (const s of block.getStmts()) {
- if (s === stmt) {
- return true;
- }
- }
- return false;
- }
-
- private getBlockWithId(id: number, cfg: Cfg): BasicBlock | null {
- const blocks = cfg.getBlocks();
- for (const bb of blocks) {
- if (bb.getId() === id) {
- return bb;
- }
- }
- return null;
- }
-
- private isCastExprWithTypeAssurancePositive(bb: BasicBlock, castExpr: ArkCastExpr): boolean {
+ private checkTypeAssuranceInBasicBlock(bb: BasicBlock, castExpr: ArkCastExpr): TypeAssuranceCondition {
for (const stmt of bb.getStmts()) {
if (!(stmt instanceof ArkIfStmt)) {
continue;
@@ -248,98 +241,109 @@ export class NoTSLikeAsCheck implements BaseChecker {
const conditionExpr = stmt.getConditionExpr();
const op1 = conditionExpr.getOp1();
const op2 = conditionExpr.getOp2();
- if (op1 instanceof Local) {
- const declareStmt = op1.getDeclaringStmt();
- if (declareStmt !== null && this.isStmtWithTypeAssurancePositive(declareStmt, castExpr)) {
- return true;
- }
- }
- if (op2 instanceof Local) {
- const declareStmt = op2.getDeclaringStmt();
- if (declareStmt !== null && this.isStmtWithTypeAssurancePositive(declareStmt, castExpr)) {
- return true;
- }
+ const operator = conditionExpr.getOperator();
+ // 对于if (i instanceof A)这种条件语句,op1总是临时变量,op2总是false,操作符总是!=
+ if (!(op1 instanceof Local && op2 instanceof BooleanConstant && op2.getValue() === 'false' && operator === RelationalBinaryOperator.InEquality)) {
+ break;
}
+ return this.checkTypeAssuranceWithLocal(op1, castExpr, stmt.getOriginPositionInfo(), true);
}
- return false;
+ return TypeAssuranceCondition.NotExist;
}
- private isCastExprWithTypeAssuranceNegative(bb: BasicBlock, castExpr: ArkCastExpr): boolean {
- for (const stmt of bb.getStmts()) {
- if (!(stmt instanceof ArkIfStmt)) {
- continue;
+ private checkTypeAssuranceWithLocal(operand: Local, castExpr: ArkCastExpr, ifStmtPos: LineColPosition, shouldBe: boolean): TypeAssuranceCondition {
+ const declaringStmt = operand.getDeclaringStmt();
+ if (declaringStmt === null) {
+ return TypeAssuranceCondition.NotExist;
+ }
+ // if语句中的所有条件遵从三地址码原则拆分成多个语句时,所有语句的位置信息是一致的,不一致时表示是条件语句之前的赋值或声明情况,不在本判断范围内
+ const stmtPos = declaringStmt.getOriginPositionInfo();
+ if (stmtPos.getLineNo() !== ifStmtPos.getLineNo() || stmtPos.getColNo() !== ifStmtPos.getColNo()) {
+ return TypeAssuranceCondition.NotExist;
+ }
+ if (!(declaringStmt instanceof ArkAssignStmt)) {
+ return TypeAssuranceCondition.NotExist;
+ }
+ const rightOp = declaringStmt.getRightOp();
+ if (rightOp instanceof ArkInstanceOfExpr) {
+ if (this.isTypeAssuranceMatchCast(rightOp, castExpr)) {
+ if (shouldBe) {
+ return TypeAssuranceCondition.Positive;
+ } else {
+ return TypeAssuranceCondition.Negative;
+ }
}
- const conditionExpr = stmt.getConditionExpr();
- const op1 = conditionExpr.getOp1();
- const op2 = conditionExpr.getOp2();
- if (op1 instanceof Local) {
- const declareStmt = op1.getDeclaringStmt();
- if (declareStmt !== null && this.isStmtWithTypeAssuranceNegative(declareStmt, castExpr)) {
- return true;
+ return TypeAssuranceCondition.NotExist;
+ }
+ if (rightOp instanceof ArkUnopExpr && rightOp.getOperator() === UnaryOperator.LogicalNot) {
+ const unaryOp = rightOp.getOp();
+ if (unaryOp instanceof Local) {
+ return this.checkTypeAssuranceWithLocal(unaryOp, castExpr, ifStmtPos, !shouldBe);
+ }
+ return TypeAssuranceCondition.NotExist;
+ }
+ if (rightOp instanceof ArkNormalBinopExpr) {
+ const op1 = rightOp.getOp1();
+ const op2 = rightOp.getOp2();
+ const operator = rightOp.getOperator();
+ // 这里仅判断&&和||两种逻辑运算符的场景,其他场景在包含类型守卫判断的条件语句中不常见,暂不考虑
+ let res: TypeAssuranceCondition;
+ if (operator === NormalBinaryOperator.LogicalAnd) {
+ if (op1 instanceof Local) {
+ res = this.checkTypeAssuranceWithLocal(op1, castExpr, ifStmtPos, shouldBe);
+ if (res !== TypeAssuranceCondition.NotExist) {
+ return res;
+ }
+ }
+ if (op2 instanceof Local) {
+ res = this.checkTypeAssuranceWithLocal(op2, castExpr, ifStmtPos, shouldBe);
+ if (res !== TypeAssuranceCondition.NotExist) {
+ return res;
+ }
}
+ return TypeAssuranceCondition.NotExist;
}
- if (op2 instanceof Local) {
- const declareStmt = op2.getDeclaringStmt();
- if (declareStmt !== null && this.isStmtWithTypeAssuranceNegative(declareStmt, castExpr)) {
- return true;
+ if (operator === NormalBinaryOperator.LogicalOr) {
+ // a or b,不论a或b里是类型守卫判断,均无法保证分支中的类型明确
+ if (shouldBe) {
+ return TypeAssuranceCondition.NotExist;
}
}
}
- return false;
+ return TypeAssuranceCondition.NotExist;
}
- private isStmtWithTypeAssurancePositive(declareStmt: Stmt, castExpr: ArkCastExpr): boolean {
- if (!(declareStmt instanceof ArkAssignStmt)) {
- return false;
- }
- const rightOp = declareStmt.getRightOp();
- if (!(rightOp instanceof ArkInstanceOfExpr)) {
- return false;
- }
+ private isTypeAssuranceMatchCast(instanceOfExpr: ArkInstanceOfExpr, castExpr: ArkCastExpr): boolean {
const castOp = castExpr.getOp();
const castType = castExpr.getType();
- const instanceofType = rightOp.getCheckType();
+ const instanceofType = instanceOfExpr.getCheckType();
if (castType.getTypeString() !== instanceofType.getTypeString()) {
return false;
}
- const instanceofOp = rightOp.getOp();
+ const instanceofOp = instanceOfExpr.getOp();
if (!(castOp instanceof Local && instanceofOp instanceof Local)) {
return false;
}
return castOp.getName() === instanceofOp.getName();
}
- private isStmtWithTypeAssuranceNegative(declareStmt: Stmt, castExpr: ArkCastExpr): boolean {
- if (!(declareStmt instanceof ArkAssignStmt)) {
- return false;
- }
- const rightOp = declareStmt.getRightOp();
- if (!(rightOp instanceof ArkUnopExpr && rightOp.getOperator() === '!')) {
- return false;
- }
- const unaryOp = rightOp.getOp();
- if (!(unaryOp instanceof Local)) {
- return false;
- }
- const unaryOpDeclareStmt = unaryOp.getDeclaringStmt();
- if (unaryOpDeclareStmt === null || !(unaryOpDeclareStmt instanceof ArkAssignStmt)) {
- return false;
- }
- const unaryOpRightOp = unaryOpDeclareStmt.getRightOp();
- if (!(unaryOpRightOp instanceof ArkInstanceOfExpr)) {
- return false;
- }
- const castOp = castExpr.getOp();
- const castType = castExpr.getType();
- const instanceofType = unaryOpRightOp.getCheckType();
- if (castType.getTypeString() !== instanceofType.getTypeString()) {
- return false;
+ private isStmtInBlock(stmt: Stmt, block: BasicBlock): boolean {
+ for (const s of block.getStmts()) {
+ if (s === stmt) {
+ return true;
+ }
}
- const instanceofOp = unaryOpRightOp.getOp();
- if (!(castOp instanceof Local && instanceofOp instanceof Local)) {
- return false;
+ return false;
+ }
+
+ private getBlockWithId(id: number, cfg: Cfg): BasicBlock | null {
+ const blocks = cfg.getBlocks();
+ for (const bb of blocks) {
+ if (bb.getId() === id) {
+ return bb;
+ }
}
- return castOp.getName() === instanceofOp.getName();
+ return null;
}
private checkFromStmt(
@@ -366,6 +370,11 @@ export class NoTSLikeAsCheck implements BaseChecker {
if (this.isWithInterfaceAnnotation(currentStmt, scene)) {
return currentStmt;
}
+
+ const fieldDeclareStmt = this.isCastOpFieldWithInterfaceType(currentStmt, scene);
+ if (fieldDeclareStmt) {
+ return fieldDeclareStmt;
+ }
const gv = this.checkIfCastOpIsGlobalVar(currentStmt);
if (gv) {
const globalDefs = globalVarMap.get(gv.getName());
@@ -401,9 +410,7 @@ export class NoTSLikeAsCheck implements BaseChecker {
const paramRef = this.isFromParameter(currentStmt);
if (paramRef) {
const paramIdx = paramRef.getIndex();
- const callsites = this.cg.getInvokeStmtByMethod(
- currentStmt.getCfg().getDeclaringMethod().getSignature()
- );
+ const callsites = this.cg.getInvokeStmtByMethod(currentStmt.getCfg().getDeclaringMethod().getSignature());
this.processCallsites(callsites);
const argDefs = this.collectArgDefs(paramIdx, callsites);
for (const stmt of argDefs) {
@@ -418,6 +425,34 @@ export class NoTSLikeAsCheck implements BaseChecker {
return null;
}
+ private isCastOpFieldWithInterfaceType(stmt: Stmt, scene: Scene): Stmt | undefined {
+ const obj = this.getCastOp(stmt);
+ if (obj === null || !(obj instanceof Local)) {
+ return undefined;
+ }
+ const declaringStmt = obj.getDeclaringStmt();
+ if (declaringStmt === null || !(declaringStmt instanceof ArkAssignStmt)) {
+ return undefined;
+ }
+ const rightOp = declaringStmt.getRightOp();
+ if (!(rightOp instanceof AbstractFieldRef)) {
+ return undefined;
+ }
+ const fieldDeclaring = rightOp.getFieldSignature().getDeclaringSignature();
+ if (fieldDeclaring instanceof ClassSignature) {
+ const field = scene.getClass(fieldDeclaring)?.getField(rightOp.getFieldSignature());
+ if (!field) {
+ return undefined;
+ }
+ const fieldInitializer = field.getInitializer();
+ const lastStmt = fieldInitializer[fieldInitializer.length - 1];
+ if (this.isWithInterfaceAnnotation(lastStmt, scene)) {
+ return lastStmt;
+ }
+ }
+ return undefined;
+ }
+
private checkIfCastOpIsGlobalVar(stmt: Stmt): Local | undefined {
const obj = this.getCastOp(stmt);
if (obj instanceof Local && !obj.getDeclaringStmt()) {
@@ -568,7 +603,7 @@ export class NoTSLikeAsCheck implements BaseChecker {
}
private getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
diff --git a/ets2panda/linter/homecheck/src/checker/migration/ObjectLiteralCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/ObjectLiteralCheck.ts
index 66a5c66380b92443cde465bcf577ad4e05791028..b582c90aaf7befd5ec9c52e4dd94af836da2f2dc 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/ObjectLiteralCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/ObjectLiteralCheck.ts
@@ -68,7 +68,7 @@ export class ObjectLiteralCheck implements BaseChecker {
for (let arkFile of scene.getFiles()) {
const topLevelVarMap: Map = new Map();
- this.collectImportedVar(topLevelVarMap, arkFile);
+ this.collectImportedVar(topLevelVarMap, arkFile, scene);
this.collectTopLevelVar(topLevelVarMap, arkFile, scene);
const handleClass = (cls: ArkClass): void => {
@@ -106,7 +106,7 @@ export class ObjectLiteralCheck implements BaseChecker {
}
}
- private collectImportedVar(importVarMap: Map, file: ArkFile) {
+ private collectImportedVar(importVarMap: Map, file: ArkFile, scene: Scene) {
file.getImportInfos().forEach(importInfo => {
const exportInfo = importInfo.getLazyExportInfo();
if (exportInfo === null) {
@@ -120,6 +120,7 @@ export class ObjectLiteralCheck implements BaseChecker {
if (!declaringStmt) {
return;
}
+ DVFGHelper.buildSingleDVFG(declaringStmt.getCfg().getDeclaringMethod(), scene);
importVarMap.set(arkExport.getName(), [declaringStmt]);
});
}
@@ -382,7 +383,7 @@ export class ObjectLiteralCheck implements BaseChecker {
}
private getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
diff --git a/ets2panda/linter/homecheck/src/checker/migration/ObservedDecoratorCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/ObservedDecoratorCheck.ts
index a6a56e9b4d2ef3d9d95783a0f6d5e03f4fd5004e..8f9c5cdb03a5d1dce03fee6273281375b72ca439 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/ObservedDecoratorCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/ObservedDecoratorCheck.ts
@@ -266,7 +266,7 @@ export class ObservedDecoratorCheck implements BaseChecker {
canFindAllTargets: boolean = true
): string {
if (issueClass === null || !canFindAllTargets) {
- return `can not find all classes, please check this field manually`;
+ return `can not find all classes, please check this field manually (arkui-data-observation)`;
}
const fieldLine = field.getOriginPosition().getLineNo();
const fieldColumn = field.getOriginPosition().getColNo();
@@ -275,10 +275,10 @@ export class ObservedDecoratorCheck implements BaseChecker {
const issueClassSig = issueClass.getDeclaringArkFile().getFileSignature();
let res = `but it's not be annotated by @Observed (arkui-data-observation)`;
if (fileSignatureCompare(fieldFileSig, issueClassSig)) {
- res = `The class is used by state property in [${fieldLine}, ${fieldColumn}], ` + res;
+ res = `Class ${issueClass.getName()} is used by state property in [${fieldLine}, ${fieldColumn}], ` + res;
} else {
const filePath = path.normalize(fieldFileSig.getFileName());
- res = `The class is used by state property in file ${filePath} [${fieldLine}, ${fieldColumn}], ` + res;
+ res = `Class ${issueClass.getName()} is used by state property in file ${filePath} [${fieldLine}, ${fieldColumn}], ` + res;
}
return res;
}
diff --git a/ets2panda/linter/homecheck/src/checker/migration/ThisBindCheck.ts b/ets2panda/linter/homecheck/src/checker/migration/ThisBindCheck.ts
index b4921ec648dbd5e359ece5cab47d3ef4923277fc..62a43d0c37bbca88d74a1eea1c329f356770b660 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/ThisBindCheck.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/ThisBindCheck.ts
@@ -360,7 +360,7 @@ export class ThisBindCheck implements BaseChecker {
}
private getLineAndColumn(stmt: ArkAssignStmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
diff --git a/ets2panda/linter/homecheck/src/checker/migration/Utils.ts b/ets2panda/linter/homecheck/src/checker/migration/Utils.ts
index 0992bcbe88d2748a8d25a3b7b12b9c8b6492578c..02f114bd0f9d453a33f779834c19a9159a462b57 100644
--- a/ets2panda/linter/homecheck/src/checker/migration/Utils.ts
+++ b/ets2panda/linter/homecheck/src/checker/migration/Utils.ts
@@ -13,7 +13,18 @@
* limitations under the License.
*/
-import { ArkAssignStmt, ArkMethod, CallGraph, CallGraphBuilder, Local, LOG_MODULE_TYPE, Logger, Scene, Stmt, Value } from 'arkanalyzer/lib';
+import {
+ ArkAssignStmt,
+ ArkMethod,
+ CallGraph,
+ CallGraphBuilder,
+ Local,
+ LOG_MODULE_TYPE,
+ Logger,
+ Scene,
+ Stmt,
+ Value,
+} from 'arkanalyzer/lib';
import { WarnInfo } from '../../utils/common/Utils';
import { Language } from 'arkanalyzer/lib/core/model/ArkFile';
import { DVFG, DVFGNode } from 'arkanalyzer/lib/VFG/DVFG';
@@ -25,6 +36,10 @@ export const CALL_DEPTH_LIMIT = 2;
export class CallGraphHelper {
private static cgInstance: CallGraph | null = null;
+ public static dispose(): void {
+ this.cgInstance = null;
+ }
+
public static getCGInstance(scene: Scene): CallGraph {
if (!this.cgInstance) {
this.cgInstance = new CallGraph(scene);
@@ -36,6 +51,10 @@ export class CallGraphHelper {
export class GlobalCallGraphHelper {
private static cgInstance: CallGraph | null = null;
+ public static dispose(): void {
+ this.cgInstance = null;
+ }
+
public static getCGInstance(scene: Scene): CallGraph {
if (!this.cgInstance) {
this.cgInstance = new CallGraph(scene);
@@ -51,6 +70,14 @@ export class DVFGHelper {
private static dvfgBuilder: DVFGBuilder;
private static built: Set = new Set();
+ public static dispose(): void {
+ // @ts-ignore
+ this.dvfgInstance = null;
+ // @ts-ignore
+ this.dvfgBuilder = null;
+ this.built.clear();
+ }
+
private static createDVFGInstance(scene: Scene): void {
if (!this.dvfgInstance) {
this.dvfgInstance = new DVFG(GlobalCallGraphHelper.getCGInstance(scene));
@@ -117,7 +144,7 @@ export function getLanguageStr(language: Language): string {
}
export function getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
- const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
+ const arkFile = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile();
const originPosition = stmt.getOperandOriginalPosition(operand);
if (arkFile && originPosition) {
const originPath = arkFile.getFilePath();
@@ -126,7 +153,7 @@ export function getLineAndColumn(stmt: Stmt, operand: Value): WarnInfo {
const endCol = startCol;
return { line, startCol, endCol, filePath: originPath };
} else {
- logger.debug('ArkFile is null.');
+ logger.debug('ArkFile or operand position is null.');
}
return { line: -1, startCol: -1, endCol: -1, filePath: '' };
}
diff --git a/ets2panda/linter/homecheck/src/tools/migrationTool/MigrationTool.ts b/ets2panda/linter/homecheck/src/tools/migrationTool/MigrationTool.ts
index 5c3f6478eda979502d63bbb9e1cd817ead03cd0e..7be52a159ab6906519aff74c6c3634d503716c0e 100644
--- a/ets2panda/linter/homecheck/src/tools/migrationTool/MigrationTool.ts
+++ b/ets2panda/linter/homecheck/src/tools/migrationTool/MigrationTool.ts
@@ -21,7 +21,8 @@ import { CheckerStorage } from '../../utils/common/CheckerStorage';
import Logger, { LOG_MODULE_TYPE } from 'arkanalyzer/lib/utils/logger';
import { FileUtils } from '../../utils/common/FileUtils';
import { DefaultMessage } from '../../model/Message';
-import { FileIssues } from "../../model/Defects";
+import { FileIssues } from '../../model/Defects';
+import { CallGraphHelper, DVFGHelper, GlobalCallGraphHelper } from '../../checker/migration/Utils';
const logger = Logger.getLogger(LOG_MODULE_TYPE.HOMECHECK, 'MigrationTool');
@@ -68,7 +69,16 @@ export class MigrationTool {
await this.checkEntry.runAll();
let result = this.checkEntry.sortIssues();
+ this.dispose();
logger.info(`MigrationTool run end`);
return result;
}
+
+ private dispose(): void {
+ CallGraphHelper.dispose();
+ GlobalCallGraphHelper.dispose();
+ DVFGHelper.dispose();
+ CheckerStorage.dispose();
+ this.checkEntry.scene.dispose();
+ }
}
\ No newline at end of file
diff --git a/ets2panda/linter/homecheck/src/utils/common/CheckerStorage.ts b/ets2panda/linter/homecheck/src/utils/common/CheckerStorage.ts
index f3bedd5017d59910d6579916b5fb00d2a2f1a9c3..922b716e95b63524327ca53c62cd89ff72d5b855 100644
--- a/ets2panda/linter/homecheck/src/utils/common/CheckerStorage.ts
+++ b/ets2panda/linter/homecheck/src/utils/common/CheckerStorage.ts
@@ -21,6 +21,11 @@ export class CheckerStorage {
private apiVersion: number = 16;
private product: string = '';
+ public static dispose(): void {
+ // @ts-ignore
+ this.instance = null;
+ }
+
/**
* 获取 CheckerStorage 的单例实例
* @returns {CheckerStorage} CheckerStorage 的单例实例
diff --git a/ets2panda/linter/homecheck/src/utils/common/FileUtils.ts b/ets2panda/linter/homecheck/src/utils/common/FileUtils.ts
index 48b06a414dc94e9e5474890f8a89dd32be5116fd..f17425f284605ab9f4cd9738a2ec9fc9c72121ba 100644
--- a/ets2panda/linter/homecheck/src/utils/common/FileUtils.ts
+++ b/ets2panda/linter/homecheck/src/utils/common/FileUtils.ts
@@ -232,7 +232,7 @@ export class FileUtils {
}
private static shouldSkipFile(fileName: string): boolean {
- return ['oh_modules', 'node_modules', 'hvigorfile.ts', 'ohosTest'].includes(fileName);
+ return ['oh_modules', 'node_modules', 'hvigorfile.ts', 'hvigorfile.js', 'hvigor-wrapper.js', 'ohosTest'].includes(fileName);
}
private static shouldAddFile(filePath: string, exts: string[]): boolean {
@@ -310,4 +310,4 @@ export class FileUtils {
export enum WriteFileMode {
OVERWRITE,
APPEND
-}
\ No newline at end of file
+}
diff --git a/ets2panda/linter/package-lock.json b/ets2panda/linter/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..8049e8b633f8b19027d0117e754d2e1966571761
--- /dev/null
+++ b/ets2panda/linter/package-lock.json
@@ -0,0 +1,5657 @@
+{
+ "name": "@panda/tslinter",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@panda/tslinter",
+ "version": "1.0.0",
+ "bundleDependencies": [
+ "log4js",
+ "commander",
+ "homecheck"
+ ],
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "commander": "^9.4.0",
+ "fs-extra": "11.2.0",
+ "homecheck": "file:./homecheck",
+ "json5": "2.2.3",
+ "log4js": "^6.4.0",
+ "yup": "^1.4.0"
+ },
+ "bin": {
+ "tslinter": "bin/tslinter.js"
+ },
+ "devDependencies": {
+ "@eslint/compat": "latest",
+ "@eslint/js": "latest",
+ "@stylistic/eslint-plugin": "latest",
+ "@types/node": "18.11.7",
+ "brace-expansion": "2.0.1",
+ "eslint": "latest",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jsdoc": "^48.0.6",
+ "eslint-plugin-n": "^17.9.0",
+ "eslint-plugin-no-null": "^1.0.2",
+ "glob": "^11.0.0",
+ "path-scurry": "^2.0.0",
+ "prettier": "latest",
+ "rimraf": "^5.0.10",
+ "shelljs": "^0.8.5",
+ "typescript-eslint": "latest",
+ "webpack": "^5.75.0",
+ "webpack-cli": "^5.0.1"
+ }
+ },
+ "arkanalyzer": {
+ "version": "1.0.8",
+ "dependencies": {
+ "commander": "^9.4.0",
+ "json5": "2.2.3",
+ "log4js": "^6.4.0"
+ }
+ },
+ "homecheck": {
+ "version": "0.9.11-arkts1.2",
+ "license": "ISC",
+ "dependencies": {
+ "arkanalyzer": "file:../arkanalyzer",
+ "commander": "^9.4.0",
+ "fs-extra": "11.2.0",
+ "json5": "2.2.3",
+ "log4js": "^6.4.0"
+ }
+ },
+ "node_modules/@discoveryjs/json-ext": {
+ "version": "0.5.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@es-joy/jsdoccomment": {
+ "version": "0.46.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz",
+ "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==",
+ "dev": true,
+ "dependencies": {
+ "comment-parser": "1.4.1",
+ "esquery": "^1.6.0",
+ "jsdoc-type-pratt-parser": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.7.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/compat": {
+ "version": "1.2.9",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/compat/-/compat-1.2.9.tgz",
+ "integrity": "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": "^9.10.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.20.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/config-array/-/config-array-0.20.0.tgz",
+ "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
+ "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.14.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/core/-/core-0.14.0.tgz",
+ "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.28.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/js/-/js-9.28.0.tgz",
+ "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
+ "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/core": "^0.14.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@pkgr/core/-/core-0.1.2.tgz",
+ "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+ "dev": true
+ },
+ "node_modules/@stylistic/eslint-plugin": {
+ "version": "4.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@stylistic/eslint-plugin/-/eslint-plugin-4.4.1.tgz",
+ "integrity": "sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "^8.32.1",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "estraverse": "^5.3.0",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=9.0.0"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.11.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/node/-/node-18.11.7.tgz",
+ "integrity": "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz",
+ "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.33.1",
+ "@typescript-eslint/type-utils": "8.33.1",
+ "@typescript-eslint/utils": "8.33.1",
+ "@typescript-eslint/visitor-keys": "8.33.1",
+ "graphemer": "^1.4.0",
+ "ignore": "^7.0.0",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.33.1",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/parser/-/parser-8.33.1.tgz",
+ "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.33.1",
+ "@typescript-eslint/types": "8.33.1",
+ "@typescript-eslint/typescript-estree": "8.33.1",
+ "@typescript-eslint/visitor-keys": "8.33.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/project-service/-/project-service-8.33.1.tgz",
+ "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.33.1",
+ "@typescript-eslint/types": "^8.33.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz",
+ "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "8.33.1",
+ "@typescript-eslint/visitor-keys": "8.33.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz",
+ "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz",
+ "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.33.1",
+ "@typescript-eslint/utils": "8.33.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/types/-/types-8.33.1.tgz",
+ "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz",
+ "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.33.1",
+ "@typescript-eslint/tsconfig-utils": "8.33.1",
+ "@typescript-eslint/types": "8.33.1",
+ "@typescript-eslint/visitor-keys": "8.33.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/utils/-/utils-8.33.1.tgz",
+ "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.33.1",
+ "@typescript-eslint/types": "8.33.1",
+ "@typescript-eslint/typescript-estree": "8.33.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz",
+ "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "8.33.1",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.13.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/helper-wasm-section": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-opt": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1",
+ "@webassemblyjs/wast-printer": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webpack-cli/configtest": {
+ "version": "2.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
+ "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ }
+ },
+ "node_modules/@webpack-cli/info": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webpack-cli/info/-/info-2.0.2.tgz",
+ "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ }
+ },
+ "node_modules/@webpack-cli/serve": {
+ "version": "2.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@webpack-cli/serve/-/serve-2.0.5.tgz",
+ "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ },
+ "peerDependenciesMeta": {
+ "webpack-dev-server": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/are-docs-informative": {
+ "version": "0.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+ "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/arkanalyzer": {
+ "resolved": "arkanalyzer",
+ "link": true
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.9",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/array-includes/-/array-includes-3.1.9.tgz",
+ "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.24.0",
+ "es-object-atoms": "^1.1.1",
+ "get-intrinsic": "^1.3.0",
+ "is-string": "^1.1.1",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+ "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "es-shim-unscopables": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/async-function": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.25.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/browserslist/-/browserslist-4.25.0.tgz",
+ "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001718",
+ "electron-to-chromium": "^1.5.160",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dev": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001721",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
+ "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "inBundle": true,
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/comment-parser": {
+ "version": "1.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/comment-parser/-/comment-parser-1.4.1.tgz",
+ "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12.0.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/date-format": {
+ "version": "4.0.14",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/date-format/-/date-format-4.0.14.tgz",
+ "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
+ "inBundle": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "inBundle": true,
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.165",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz",
+ "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/envinfo": {
+ "version": "7.14.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/envinfo/-/envinfo-7.14.0.tgz",
+ "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
+ "dev": true,
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.24.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-abstract/-/es-abstract-1.24.0.tgz",
+ "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.2.1",
+ "is-set": "^2.0.3",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.1",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.4",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.4",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "stop-iteration-iterator": "^1.1.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.19"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "dev": true
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.28.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint/-/eslint-9.28.0.tgz",
+ "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.28.0",
+ "@eslint/plugin-kit": "^0.3.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-compat-utils": {
+ "version": "0.5.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+ "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-es-x": {
+ "version": "7.8.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+ "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/ota-meshi",
+ "https://opencollective.com/eslint"
+ ],
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.11.0",
+ "eslint-compat-utils": "^0.5.1"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "dev": true,
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsdoc": {
+ "version": "48.11.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz",
+ "integrity": "sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==",
+ "dev": true,
+ "dependencies": {
+ "@es-joy/jsdoccomment": "~0.46.0",
+ "are-docs-informative": "^0.0.2",
+ "comment-parser": "1.4.1",
+ "debug": "^4.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "espree": "^10.1.0",
+ "esquery": "^1.6.0",
+ "parse-imports": "^2.1.1",
+ "semver": "^7.6.3",
+ "spdx-expression-parse": "^4.0.0",
+ "synckit": "^0.9.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-n": {
+ "version": "17.19.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-n/-/eslint-plugin-n-17.19.0.tgz",
+ "integrity": "sha512-qxn1NaDHtizbhVAPpbMT8wWFaLtPnwhfN/e+chdu2i6Vgzmo/tGM62tcJ1Hf7J5Ie4dhse3DOPMmDxduzfifzw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.5.0",
+ "@typescript-eslint/utils": "^8.26.1",
+ "enhanced-resolve": "^5.17.1",
+ "eslint-plugin-es-x": "^7.8.0",
+ "get-tsconfig": "^4.8.1",
+ "globals": "^15.11.0",
+ "ignore": "^5.3.2",
+ "minimatch": "^9.0.5",
+ "semver": "^7.6.3",
+ "ts-declaration-location": "^1.0.6"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.23.0"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/globals": {
+ "version": "15.15.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-no-null": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-no-null/-/eslint-plugin-no-null-1.0.2.tgz",
+ "integrity": "sha512-uRDiz88zCO/2rzGfgG15DBjNsgwWtWiSo4Ezy7zzajUgpnFIqd1TjepKeRmJZHEfBGu58o2a8S0D7vglvvhkVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=5.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=3.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fast-uri": {
+ "version": "3.0.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fast-uri/-/fast-uri-3.0.6.tgz",
+ "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "inBundle": true
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.10.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
+ "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "11.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-11.0.2.tgz",
+ "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^4.0.1",
+ "minimatch": "^10.0.0",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "10.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-10.0.1.tgz",
+ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "inBundle": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "dev": true,
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/homecheck": {
+ "resolved": "homecheck",
+ "link": true
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-async-function": {
+ "version": "2.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+ "dev": true,
+ "dependencies": {
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.2.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "4.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/jackspeak/-/jackspeak-4.1.1.tgz",
+ "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdoc-type-pratt-parser": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+ "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/log4js": {
+ "version": "6.9.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/log4js/-/log4js-6.9.1.tgz",
+ "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
+ "inBundle": true,
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "flatted": "^3.2.7",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.1.5"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "11.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-11.1.0.tgz",
+ "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==",
+ "dev": true,
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "inBundle": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-imports": {
+ "version": "2.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/parse-imports/-/parse-imports-2.2.1.tgz",
+ "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==",
+ "dev": true,
+ "dependencies": {
+ "es-module-lexer": "^1.5.3",
+ "slashes": "^3.0.12"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.5.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/property-expr": {
+ "version": "2.0.6",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/property-expr/-/property-expr-2.0.6.tgz",
+ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "inBundle": true
+ },
+ "node_modules/rimraf": {
+ "version": "5.0.10",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/rimraf/-/rimraf-5.0.10.tgz",
+ "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/rimraf/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/rimraf/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/schema-utils": {
+ "version": "4.3.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/schema-utils/-/schema-utils-4.3.2.tgz",
+ "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ },
+ "bin": {
+ "shjs": "bin/shjs"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/shelljs/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/shelljs/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/shelljs/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/slashes": {
+ "version": "3.0.12",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/slashes/-/slashes-3.0.12.tgz",
+ "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
+ "dev": true
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+ "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.21",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
+ "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+ "dev": true
+ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
+ "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "internal-slot": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/streamroller": {
+ "version": "3.1.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/streamroller/-/streamroller-3.1.5.tgz",
+ "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
+ "inBundle": true,
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "fs-extra": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/streamroller/node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "inBundle": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/streamroller/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "inBundle": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/streamroller/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "inBundle": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.9.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/synckit/-/synckit-0.9.3.tgz",
+ "integrity": "sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/tapable/-/tapable-2.2.2.tgz",
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.42.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/terser/-/terser-5.42.0.tgz",
+ "integrity": "sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.14.0",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.14",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
+ "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^4.3.0",
+ "serialize-javascript": "^6.0.2",
+ "terser": "^5.31.1"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "node_modules/tiny-case": {
+ "version": "1.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/tiny-case/-/tiny-case-1.0.3.tgz",
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toposort": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/ts-declaration-location": {
+ "version": "1.0.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz",
+ "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "ko-fi",
+ "url": "https://ko-fi.com/rebeccastevens"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/ts-declaration-location"
+ }
+ ],
+ "dependencies": {
+ "picomatch": "^4.0.2"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.33.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/typescript-eslint/-/typescript-eslint-8.33.1.tgz",
+ "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.33.1",
+ "@typescript-eslint/parser": "8.33.1",
+ "@typescript-eslint/utils": "8.33.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/watchpack/-/watchpack-2.4.4.tgz",
+ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
+ "dev": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.99.9",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/webpack/-/webpack-5.99.9.tgz",
+ "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.7",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "@webassemblyjs/ast": "^1.14.1",
+ "@webassemblyjs/wasm-edit": "^1.14.1",
+ "@webassemblyjs/wasm-parser": "^1.14.1",
+ "acorn": "^8.14.0",
+ "browserslist": "^4.24.0",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.17.1",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.11",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^4.3.2",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.11",
+ "watchpack": "^2.4.1",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-cli": {
+ "version": "5.1.4",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/webpack-cli/-/webpack-cli-5.1.4.tgz",
+ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
+ "dev": true,
+ "dependencies": {
+ "@discoveryjs/json-ext": "^0.5.0",
+ "@webpack-cli/configtest": "^2.1.1",
+ "@webpack-cli/info": "^2.0.2",
+ "@webpack-cli/serve": "^2.0.5",
+ "colorette": "^2.0.14",
+ "commander": "^10.0.1",
+ "cross-spawn": "^7.0.3",
+ "envinfo": "^7.7.3",
+ "fastest-levenshtein": "^1.0.12",
+ "import-local": "^3.0.2",
+ "interpret": "^3.1.1",
+ "rechoir": "^0.8.0",
+ "webpack-merge": "^5.7.3"
+ },
+ "bin": {
+ "webpack-cli": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x"
+ },
+ "peerDependenciesMeta": {
+ "@webpack-cli/generators": {
+ "optional": true
+ },
+ "webpack-bundle-analyzer": {
+ "optional": true
+ },
+ "webpack-dev-server": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-cli/node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/interpret": {
+ "version": "3.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/interpret/-/interpret-3.1.1.tgz",
+ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/rechoir": {
+ "version": "0.8.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/rechoir/-/rechoir-0.8.0.tgz",
+ "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.20.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/webpack-merge": {
+ "version": "5.10.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/webpack-merge/-/webpack-merge-5.10.0.tgz",
+ "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+ "dev": true,
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "flat": "^5.0.2",
+ "wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.3.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/webpack-sources/-/webpack-sources-3.3.2.tgz",
+ "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/webpack/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.19",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/which-typed-array/-/which-typed-array-1.1.19.tgz",
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wildcard": {
+ "version": "2.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/wildcard/-/wildcard-2.0.1.tgz",
+ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
+ "dev": true
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yup": {
+ "version": "1.6.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/yup/-/yup-1.6.1.tgz",
+ "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==",
+ "dependencies": {
+ "property-expr": "^2.0.5",
+ "tiny-case": "^1.0.3",
+ "toposort": "^2.0.2",
+ "type-fest": "^2.19.0"
+ }
+ }
+ }
+}
diff --git a/ets2panda/linter/package.json b/ets2panda/linter/package.json
index cadf353451f5c52376a1b416e3394904aa019710..7b374c99446f72623c7be16bb317357464add5a4 100644
--- a/ets2panda/linter/package.json
+++ b/ets2panda/linter/package.json
@@ -16,9 +16,8 @@
"compile": "npm run tsc",
"postcompile": "node scripts/testRunner/post-compile.mjs",
"build": "npm run clean && npm run compile && npm run webpack && npm run pack:linter",
- "preinstall": "npm install --production --prefix arkanalyzer && npm install --production --prefix homecheck",
"install-ohos-typescript": "node scripts/install-ohos-typescript-and-homecheck.mjs",
- "pack:linter": "rimraf bundle && mkdir bundle && npm pack --pack-destination bundle",
+ "pack:linter": "rimraf bundle && mkdir bundle && npm pack && mv panda-tslinter-*.tgz bundle",
"pretest": " npm run fix",
"test": "npm run test_all && npm run test_ts_import_ets",
"test_all": "npm run testrunner -- -d test/main,test/rules,test/regression,test/extended_features,test/migration,test/ohmurl,test/interop,test/sdkwhite,test/concurrent,test/builtin",
diff --git a/ets2panda/linter/src/cli/LinterCLI.ts b/ets2panda/linter/src/cli/LinterCLI.ts
index 45bd9fddcd788362a353d59c33e646bac8156c4e..e45d56a7d5513400fd06b8e040abbe7d258725b8 100644
--- a/ets2panda/linter/src/cli/LinterCLI.ts
+++ b/ets2panda/linter/src/cli/LinterCLI.ts
@@ -58,9 +58,10 @@ async function runIdeInteractiveMode(cmdOptions: CommandLineOptions): Promise {
+ return problem.rule.includes('s2d');
+ });
+ }
mergedProblems.get(filePath)!.push(...filteredProblems);
}
diff --git a/ets2panda/linter/src/lib/CookBookMsg.ts b/ets2panda/linter/src/lib/CookBookMsg.ts
index 0f0fcffa77fb6c2ff9f0e941da765638e3beee40..0682f850be436ba2c9ddfc41958c308f1a10da70 100644
--- a/ets2panda/linter/src/lib/CookBookMsg.ts
+++ b/ets2panda/linter/src/lib/CookBookMsg.ts
@@ -245,7 +245,7 @@ cookBookTag[210] =
cookBookTag[211] = 'No two case constant expressions have identical values.(arkts-case-expr)';
cookBookTag[212] = 'The index expression must be zero or positive value.(arkts-array-index-negative)';
cookBookTag[213] = 'Class cannot have static codeblocks. (arkts-class-lazy-import)';
-cookBookTag[214] = 'The Class object does not have a constructor. (arkts-no-arkts-constructor)';
+cookBookTag[214] = 'Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)';
cookBookTag[215] = 'Array bound not checked. (arkts-runtime-array-check)';
cookBookTag[222] = 'Import for side-effect only is prohibited.(arkts-no-side-effect-import)';
cookBookTag[232] = 'Lazy import is not supported(arkts-no-lazy-import)';
diff --git a/ets2panda/linter/src/lib/LinterRunner.ts b/ets2panda/linter/src/lib/LinterRunner.ts
index 9cf5cd2f09b4b0466a8adb34fa733bebbf19fd34..453731f7bcaf14ae41e51d199c22b75f73572acb 100644
--- a/ets2panda/linter/src/lib/LinterRunner.ts
+++ b/ets2panda/linter/src/lib/LinterRunner.ts
@@ -46,7 +46,6 @@ function prepareInputFilesList(cmdOptions: CommandLineOptions): string[] {
let inputFiles = cmdOptions.inputFiles.map((x) => {
return path.normalize(x);
});
-
if (!cmdOptions.parsedConfigFile) {
return inputFiles;
}
diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts
index e99ab2db6689fa1490b3d03eb7850891e764d0b3..a15641503fd7aa6af889b0b1b95a5af54dd1809e 100644
--- a/ets2panda/linter/src/lib/TypeScriptLinter.ts
+++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts
@@ -139,6 +139,7 @@ import { BaseTypeScriptLinter } from './BaseTypeScriptLinter';
import type { ArrayAccess, UncheckedIdentifier, CheckedIdentifier } from './utils/consts/RuntimeCheckAPI';
import { CheckResult } from './utils/consts/RuntimeCheckAPI';
import { NUMBER_LITERAL } from './utils/consts/RuntimeCheckAPI';
+import { globalApiAssociatedInfo } from './utils/consts/AssociatedInfo';
interface InterfaceSymbolTypeResult {
propNames: string[];
@@ -690,7 +691,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleDeclarationDestructuring(tsParam);
this.handleDeclarationInferredType(tsParam);
this.handleInvalidIdentifier(tsParam);
- this.handleSdkDuplicateDeclName(tsParam);
+ this.handleSdkGlobalApi(tsParam);
const typeNode = tsParam.type;
if (this.options.arkts2 && typeNode && typeNode.kind === ts.SyntaxKind.VoidKeyword) {
this.incrementCounters(typeNode, FaultID.LimitedVoidType);
@@ -1372,6 +1373,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleLimitedVoidTypeFromSdkOnPropertyAccessExpression(node as ts.PropertyAccessExpression);
this.checkDepricatedIsConcurrent(node as ts.PropertyAccessExpression);
this.propertyAccessExpressionForBuiltin(node as ts.PropertyAccessExpression);
+ this.checkConstrutorAccess(node as ts.PropertyAccessExpression);
if (ts.isCallExpression(node.parent) && node === node.parent.expression) {
return;
@@ -1470,19 +1472,18 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
return;
}
- if (
- ts.isBinaryExpression(propertyAccessNode.parent) &&
- propertyAccessNode.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken
- ) {
- if (!ts.isExpressionStatement(propertyAccessNode.parent.parent)) {
- return;
- }
- const autofix = this.autofixer?.fixInteropBinaryExpression(propertyAccessNode.parent);
- this.incrementCounters(propertyAccessNode.parent, FaultID.InteropObjectProperty, autofix);
- } else if (
- ts.isExpressionStatement(propertyAccessNode.parent) ||
- ts.isVariableDeclaration(propertyAccessNode.parent)
- ) {
+ if (ts.isBinaryExpression(propertyAccessNode.parent)) {
+ const isAssignment = propertyAccessNode.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
+ const autofix = isAssignment ?
+ this.autofixer?.fixInteropBinaryExpression(propertyAccessNode.parent) :
+ this.autofixer?.fixInteropPropertyAccessExpression(propertyAccessNode);
+
+ this.incrementCounters(
+ isAssignment ? propertyAccessNode.parent : propertyAccessNode,
+ FaultID.InteropObjectProperty,
+ autofix
+ );
+ } else {
const autofix = this.autofixer?.fixInteropPropertyAccessExpression(propertyAccessNode);
this.incrementCounters(propertyAccessNode, FaultID.InteropObjectProperty, autofix);
}
@@ -1651,7 +1652,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleInvalidIdentifier(node);
this.handleStructPropertyDecl(node);
this.handlePropertyDeclarationForProp(node);
- this.handleSdkDuplicateDeclName(node);
+ this.handleSdkGlobalApi(node);
this.handleObjectLiteralAssignmentToClass(node);
}
@@ -2174,7 +2175,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.checkAssignmentMatching(tsBinaryExpr, leftOperandType, tsRhsExpr);
this.checkFunctionTypeCompatible(typeNode, tsRhsExpr);
this.handleEsObjectAssignment(tsBinaryExpr, typeNode, tsRhsExpr);
- this.handleSdkDuplicateDeclName(tsBinaryExpr);
+ this.handleSdkGlobalApi(tsBinaryExpr);
this.checkArrayTypeImmutable(tsBinaryExpr);
break;
case ts.SyntaxKind.AmpersandAmpersandEqualsToken:
@@ -2620,7 +2621,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleObjectLiteralAssignmentToClass(tsVarDecl);
this.handleObjectLiteralAssignment(tsVarDecl);
this.handlePropertyDescriptorInScenarios(tsVarDecl);
- this.handleSdkDuplicateDeclName(tsVarDecl);
+ this.handleSdkGlobalApi(tsVarDecl);
this.checkArrayTypeImmutable(tsVarDecl);
}
@@ -3540,6 +3541,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
}
this.checkDefaultParamBeforeRequired(tsMethodDecl);
this.handleMethodInherit(tsMethodDecl);
+ this.handleSdkGlobalApi(tsMethodDecl);
}
private checkDefaultParamBeforeRequired(node: ts.FunctionLikeDeclarationBase): void {
@@ -4580,8 +4582,9 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleNoTsLikeFunctionCall(tsCallExpr);
this.handleObjectLiteralInFunctionArgs(tsCallExpr);
this.handleTaskPoolDeprecatedUsages(tsCallExpr);
- this.handleSdkDuplicateDeclName(tsCallExpr);
+ this.handleSdkGlobalApi(tsCallExpr);
this.handleObjectLiteralAssignmentToClass(tsCallExpr);
+ this.checkRestrictedAPICall(tsCallExpr)
}
handleNoTsLikeFunctionCall(callExpr: ts.CallExpression): void {
@@ -4761,6 +4764,37 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
return false;
}
+ private checkRestrictedAPICall(node: ts.Node): void {
+ if (ts.isCallExpression(node)) {
+ if (TypeScriptLinter.isReflectAPICall(node)) {
+ this.incrementCounters(node.parent, FaultID.InteropCallReflect);
+ return;
+ }
+
+ const signature = this.tsTypeChecker.getResolvedSignature(node);
+ if (signature) {
+ this.checkForForbiddenAPIs(signature, node);
+ }
+ }
+ }
+
+ static isReflectAPICall(callExpr: ts.CallExpression): boolean {
+ if (ts.isPropertyAccessExpression(callExpr.expression)) {
+ const expr = callExpr.expression.expression;
+ if (ts.isIdentifier(expr) && expr.text === REFLECT_LITERAL) {
+ return true;
+ }
+ }
+
+ if (ts.isElementAccessExpression(callExpr.expression)) {
+ const expr = callExpr.expression.expression;
+ if (ts.isIdentifier(expr) && expr.text === REFLECT_LITERAL) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private checkForForbiddenAPIs(callSignature: ts.Signature, tsCallExpr: ts.CallExpression): void {
if (!callSignature.declaration) {
return;
@@ -4775,6 +4809,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
if (!TypeScriptLinter.isFunctionLike(functionDeclaration)) {
return;
}
+
switch (TypeScriptLinter.containsForbiddenAPI(functionDeclaration)) {
case REFLECT_LITERAL:
this.incrementCounters(tsCallExpr.parent, FaultID.InteropCallReflect);
@@ -4782,8 +4817,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
case OBJECT_LITERAL:
this.incrementCounters(tsCallExpr.parent, FaultID.InteropCallObjectParam);
break;
- default:
- break;
+ default: break;
}
}
@@ -5105,17 +5139,13 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
);
}
- private checkConstrutorAccess(newExpr: ts.NewExpression): void {
+ private checkConstrutorAccess(propertyAccessExpr: ts.PropertyAccessExpression): void {
if (!this.options.arkts2 || !this.useStatic) {
return;
}
- if (!ts.isPropertyAccessExpression(newExpr.parent)) {
- return;
- }
-
- if (newExpr.parent.name.text === 'constructor') {
- this.incrementCounters(newExpr.parent, FaultID.NoConstructorOnClass);
+ if (propertyAccessExpr.name.text === 'constructor') {
+ this.incrementCounters(propertyAccessExpr, FaultID.NoConstructorOnClass);
}
}
@@ -5154,8 +5184,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.checkForInterfaceInitialization(tsNewExpr);
this.handleSharedArrayBuffer(tsNewExpr);
- this.handleSdkDuplicateDeclName(tsNewExpr);
- this.checkConstrutorAccess(tsNewExpr);
+ this.handleSdkGlobalApi(tsNewExpr);
this.checkCreatingPrimitiveTypes(tsNewExpr);
if (this.options.advancedClassChecks || this.options.arkts2) {
@@ -5413,7 +5442,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleBuiltinCtorCallSignature(typeRef);
this.handleSharedArrayBuffer(typeRef);
- this.handleSdkDuplicateDeclName(typeRef);
+ this.handleSdkGlobalApi(typeRef);
this.handleSdkConstructorIface(typeRef);
@@ -5549,7 +5578,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
const faultId = this.options.arkts2 ? FaultID.EsValueTypeError : FaultID.EsValueType;
this.incrementCounters(tsTypeExpr, faultId);
}
- this.handleSdkDuplicateDeclName(tsTypeExpr);
+ this.handleSdkGlobalApi(tsTypeExpr);
}
private handleComputedPropertyName(node: ts.Node): void {
@@ -5803,6 +5832,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
private handleConstructorDeclaration(node: ts.Node): void {
const ctorDecl = node as ts.ConstructorDeclaration;
+ this.checkDefaultParamBeforeRequired(ctorDecl);
this.handleTSOverload(ctorDecl);
const paramProperties = ctorDecl.parameters.filter((x) => {
return this.tsUtils.hasAccessModifier(x);
@@ -6252,10 +6282,12 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
// Helper function to check if a call is recursive
private static isRecursiveCall(callExpr: ts.CallExpression, fn: ts.FunctionLikeDeclaration): boolean {
- return ts.isIdentifier(callExpr.expression) &&
- ts.isFunctionDeclaration(fn) &&
- !!fn.name &&
- fn.name.text === callExpr.expression.text;
+ return (
+ ts.isIdentifier(callExpr.expression) &&
+ ts.isFunctionDeclaration(fn) &&
+ !!fn.name &&
+ fn.name.text === callExpr.expression.text
+ );
}
private handleArrayType(arrayType: ts.Node): void {
@@ -7818,8 +7850,14 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
return undefined;
}
- private processApiNodeSdkDuplicateDeclName(apiName: string, errorNode: ts.Node): void {
- const setApiListItem = TypeScriptLinter.globalApiInfo.get(SdkProblem.DeclWithDuplicateName);
+ private processApiNodeSdkGlobalApi(apiName: string, errorNode: ts.Node): void {
+ for (const [key, value] of globalApiAssociatedInfo) {
+ this.doProcessApiNodeSdkGlobalApi(apiName, errorNode, key, value);
+ }
+ }
+
+ private doProcessApiNodeSdkGlobalApi(apiName: string, errorNode: ts.Node, key: string, faultId: number): void {
+ const setApiListItem = TypeScriptLinter.globalApiInfo.get(key);
if (!setApiListItem) {
return;
}
@@ -7842,11 +7880,11 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
});
if (matchedApi) {
- this.incrementCounters(errorNode, FaultID.DuplicateDeclNameFromSdk);
+ this.incrementCounters(errorNode, faultId);
}
}
- private handleSdkDuplicateDeclName(
+ private handleSdkGlobalApi(
node:
| ts.TypeReferenceNode
| ts.NewExpression
@@ -7857,75 +7895,86 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
| ts.BinaryExpression
| ts.ExpressionWithTypeArguments
| ts.Identifier
+ | ts.MethodDeclaration
): void {
if (!this.options.arkts2) {
return;
}
switch (node.kind) {
case ts.SyntaxKind.TypeReference:
- this.checkTypeReferenceForSdkDuplicateDeclName(node);
+ this.checkTypeReferenceForSdkGlobalApi(node);
break;
case ts.SyntaxKind.NewExpression:
- this.checkNewExpressionForSdkDuplicateDeclName(node);
+ this.checkNewExpressionForSdkGlobalApi(node);
break;
case ts.SyntaxKind.Identifier:
- this.checkHeritageClauseForSdkDuplicateDeclName(node);
+ this.checkHeritageClauseForSdkGlobalApi(node);
break;
case ts.SyntaxKind.VariableDeclaration:
case ts.SyntaxKind.PropertyDeclaration:
case ts.SyntaxKind.Parameter:
- this.checkDeclarationForSdkDuplicateDeclName(node);
+ this.checkDeclarationForSdkGlobalApi(node);
break;
case ts.SyntaxKind.CallExpression:
- this.checkCallExpressionForSdkDuplicateDeclName(node);
+ this.checkCallExpressionForSdkGlobalApi(node);
break;
case ts.SyntaxKind.BinaryExpression:
- this.checkBinaryExpressionForSdkDuplicateDeclName(node);
+ this.checkBinaryExpressionForSdkGlobalApi(node);
+ break;
+ case ts.SyntaxKind.MethodDeclaration:
+ this.checkMethodDeclarationForSdkGlobalApi(node);
break;
default:
}
}
- private checkTypeReferenceForSdkDuplicateDeclName(node: ts.TypeReferenceNode): void {
+ private checkTypeReferenceForSdkGlobalApi(node: ts.TypeReferenceNode): void {
const typeName = node.typeName;
if (ts.isIdentifier(typeName)) {
- this.processApiNodeSdkDuplicateDeclName(typeName.text, node);
+ this.processApiNodeSdkGlobalApi(typeName.text, node);
}
}
- private checkNewExpressionForSdkDuplicateDeclName(node: ts.NewExpression): void {
+ private checkNewExpressionForSdkGlobalApi(node: ts.NewExpression): void {
const expression = node.expression;
if (ts.isIdentifier(expression)) {
- this.processApiNodeSdkDuplicateDeclName(expression.text, expression);
+ this.processApiNodeSdkGlobalApi(expression.text, expression);
}
}
- private checkHeritageClauseForSdkDuplicateDeclName(node: ts.Identifier): void {
+ private checkHeritageClauseForSdkGlobalApi(node: ts.Identifier): void {
if (ts.isIdentifier(node)) {
- this.processApiNodeSdkDuplicateDeclName(node.text, node);
+ this.processApiNodeSdkGlobalApi(node.text, node);
}
}
- private checkDeclarationForSdkDuplicateDeclName(
+ private checkDeclarationForSdkGlobalApi(
node: ts.VariableDeclaration | ts.PropertyDeclaration | ts.ParameterDeclaration
): void {
const expression = node.initializer;
if (expression && ts.isIdentifier(expression)) {
- this.processApiNodeSdkDuplicateDeclName(expression.text, expression);
+ this.processApiNodeSdkGlobalApi(expression.text, expression);
}
}
- private checkCallExpressionForSdkDuplicateDeclName(node: ts.CallExpression): void {
+ private checkCallExpressionForSdkGlobalApi(node: ts.CallExpression): void {
if (ts.isPropertyAccessExpression(node.expression) && ts.isIdentifier(node.expression.expression)) {
const expression = node.expression.expression;
- this.processApiNodeSdkDuplicateDeclName(expression.text, expression);
+ this.processApiNodeSdkGlobalApi(expression.text, expression);
}
}
- private checkBinaryExpressionForSdkDuplicateDeclName(node: ts.BinaryExpression): void {
+ private checkBinaryExpressionForSdkGlobalApi(node: ts.BinaryExpression): void {
const expression = node.right;
if (ts.isIdentifier(expression)) {
- this.processApiNodeSdkDuplicateDeclName(expression.text, expression);
+ this.processApiNodeSdkGlobalApi(expression.text, expression);
+ }
+ }
+
+ private checkMethodDeclarationForSdkGlobalApi(node: ts.MethodDeclaration): void {
+ const expression = node.name;
+ if (ts.isIdentifier(expression)) {
+ this.processApiNodeSdkGlobalApi(expression.text, expression);
}
}
@@ -7938,7 +7987,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter {
this.handleSharedArrayBuffer(type);
const expr = type.expression;
if (ts.isIdentifier(expr)) {
- this.processApiNodeSdkDuplicateDeclName(expr.text, expr);
+ this.processApiNodeSdkGlobalApi(expr.text, expr);
}
});
}
diff --git a/ets2panda/linter/src/lib/autofixes/Autofixer.ts b/ets2panda/linter/src/lib/autofixes/Autofixer.ts
index bfeb543cd969894bb80f546fe2c1b46b411d7645..4ae5c879821774aeb3227d627adc77c4a51a738c 100644
--- a/ets2panda/linter/src/lib/autofixes/Autofixer.ts
+++ b/ets2panda/linter/src/lib/autofixes/Autofixer.ts
@@ -975,7 +975,43 @@ export class Autofixer {
return this.renameSymbolAsIdentifier(symbol, enumMember);
}
+ renameAsObjectElementAccessExpression(node: ts.ElementAccessExpression): Autofix[] | undefined {
+ const parenExpr = ts.isParenthesizedExpression(node.expression) ? node.expression : undefined;
+ const asExpr = parenExpr && ts.isAsExpression(parenExpr.expression) ? parenExpr.expression : undefined;
+ if (!asExpr) {
+ return undefined;
+ }
+
+ const argument = node.argumentExpression;
+ const propertyName = ts.isStringLiteral(argument) ? argument.text : undefined;
+ if (!propertyName) {
+ return undefined;
+ }
+
+ const realObj = asExpr.expression;
+ const type = this.typeChecker.getTypeAtLocation(realObj);
+ const property = this.typeChecker.getPropertyOfType(type, propertyName);
+ if (!property) {
+ return undefined;
+ }
+
+ return [
+ {
+ replacementText: realObj.getText() + '.' + propertyName,
+ start: node.getStart(),
+ end: node.getEnd()
+ }
+ ];
+ }
+
fixPropertyAccessByIndex(node: ts.ElementAccessExpression): Autofix[] | undefined {
+ if (ts.isParenthesizedExpression(node.expression) && ts.isAsExpression(node.expression.expression)) {
+ const assertedType = this.typeChecker.getTypeAtLocation(node.expression.expression.type);
+ if (this.typeChecker.typeToString(assertedType) === 'object') {
+ return this.renameAsObjectElementAccessExpression(node);
+ }
+ }
+
const symbol = this.typeChecker.getSymbolAtLocation(node.argumentExpression);
if (symbol === undefined) {
return undefined;
diff --git a/ets2panda/linter/src/lib/utils/consts/AssociatedInfo.ts b/ets2panda/linter/src/lib/utils/consts/AssociatedInfo.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c3409d7ce7b8ac80d9a3931cb5019bc7e44d6dd
--- /dev/null
+++ b/ets2panda/linter/src/lib/utils/consts/AssociatedInfo.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { FaultID } from '../../Problems';
+import { SdkProblem } from './SdkWhitelist';
+
+export const globalApiAssociatedInfo: Map = new Map([
+ [SdkProblem.DeclWithDuplicateName, FaultID.DuplicateDeclNameFromSdk],
+ [SdkProblem.LimitedVoidType, FaultID.LimitedVoidTypeFromSdk]
+]);
diff --git a/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.arkts2.json b/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.arkts2.json
index 36254158540286646fc21063b6b306396f132eb7..2a6b56517a1405887a664ab9dc3192310aed2963 100755
--- a/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.arkts2.json
+++ b/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.arkts2.json
@@ -14,6 +14,16 @@
"limitations under the License."
],
"result": [
+ {
+ "line": 17,
+ "column": 5,
+ "endLine": 17,
+ "endColumn": 56,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 17,
"column": 40,
diff --git a/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.json b/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.json
index 8af4f78669b31c787e4cd40ae005aff560769df3..28c397d84b60c01802aa10c57ae051b20a183e7c 100755
--- a/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.json
+++ b/ets2panda/linter/test/builtin/builtin_symbol_iterator.ets.json
@@ -13,5 +13,16 @@
"See the License for the specific language governing permissions and",
"limitations under the License."
],
- "result": []
+ "result": [
+ {
+ "line": 17,
+ "column": 5,
+ "endLine": 17,
+ "endColumn": 56,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ }
+ ]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json
index 88784c2392e997667f1905cc123a601a9c260d2f..6734ea601860e570b16353085ab2dddd748c54d2 100644
--- a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.arkts2.json
@@ -373,6 +373,26 @@
"suggest": "",
"rule": "Binary operations on js objects (arkts-interop-js2s-binary-op)",
"severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 6,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 9,
+ "endLine": 43,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json
index 02657b315262d64811922b09efbc6f62fb2f933a..8bf1b635a68ff6b9b200e96005430d8081c31da9 100644
--- a/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json
+++ b/ets2panda/linter/test/interop/binary_operation_js_obj.ets.autofix.json
@@ -787,6 +787,48 @@
"suggest": "",
"rule": "Binary operations on js objects (arkts-interop-js2s-binary-op)",
"severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 6,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 884,
+ "end": 889,
+ "replacementText": "foo.getPropertyByName(\"a\")",
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 6
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 9,
+ "endLine": 43,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 892,
+ "end": 897,
+ "replacementText": "foo.getPropertyByName(\"b\")",
+ "line": 43,
+ "column": 9,
+ "endLine": 43,
+ "endColumn": 14
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.arkts2.json b/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.arkts2.json
index 5733e4a0f97db5f9cd00d71fb1957baef5ac7e53..20513d8aadfe64b7b17b4d954a458946d60ab978 100644
--- a/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.arkts2.json
@@ -44,6 +44,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 17,
+ "column": 5,
+ "endLine": 17,
+ "endColumn": 12,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 18,
"column": 5,
@@ -54,6 +64,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 18,
+ "column": 7,
+ "endLine": 18,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 19,
"column": 5,
@@ -64,6 +84,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 19,
+ "column": 5,
+ "endLine": 19,
+ "endColumn": 12,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 20,
"column": 5,
@@ -74,6 +104,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 20,
+ "column": 7,
+ "endLine": 20,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 1,
@@ -84,6 +124,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 1,
+ "endLine": 22,
+ "endColumn": 8,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 1,
@@ -94,6 +144,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 3,
+ "endLine": 23,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 24,
"column": 1,
@@ -104,6 +164,16 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 24,
+ "column": 1,
+ "endLine": 24,
+ "endColumn": 8,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 25,
"column": 1,
@@ -113,6 +183,16 @@
"suggest": "",
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
+ },
+ {
+ "line": 25,
+ "column": 3,
+ "endLine": 25,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
diff --git a/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.autofix.json b/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.autofix.json
index 74a00a0cf400aac6057b177eb9ef4f11c895846d..e48a8565b9797a819a48576450a0c1ddaf2d4b5d 100644
--- a/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.autofix.json
+++ b/ets2panda/linter/test/interop/increases_decreases_js_obj.ets.autofix.json
@@ -14,7 +14,7 @@
"limitations under the License."
],
"result": [
- {
+ {
"line": 15,
"column": 1,
"endLine": 15,
@@ -86,6 +86,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 17,
+ "column": 5,
+ "endLine": 17,
+ "endColumn": 12,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 677,
+ "end": 684,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 17,
+ "column": 5,
+ "endLine": 17,
+ "endColumn": 12
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 18,
"column": 5,
@@ -107,6 +128,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 18,
+ "column": 7,
+ "endLine": 18,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 693,
+ "end": 700,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 18,
+ "column": 7,
+ "endLine": 18,
+ "endColumn": 14
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 19,
"column": 5,
@@ -128,6 +170,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 19,
+ "column": 5,
+ "endLine": 19,
+ "endColumn": 12,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 705,
+ "end": 712,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 19,
+ "column": 5,
+ "endLine": 19,
+ "endColumn": 12
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 20,
"column": 5,
@@ -149,6 +212,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 20,
+ "column": 7,
+ "endLine": 20,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 721,
+ "end": 728,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 20,
+ "column": 7,
+ "endLine": 20,
+ "endColumn": 14
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 1,
@@ -170,6 +254,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 1,
+ "endLine": 22,
+ "endColumn": 8,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 730,
+ "end": 737,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 22,
+ "column": 1,
+ "endLine": 22,
+ "endColumn": 8
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 1,
@@ -191,6 +296,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 3,
+ "endLine": 23,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 742,
+ "end": 749,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 23,
+ "column": 3,
+ "endLine": 23,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 24,
"column": 1,
@@ -212,6 +338,27 @@
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
},
+ {
+ "line": 24,
+ "column": 1,
+ "endLine": 24,
+ "endColumn": 8,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 750,
+ "end": 757,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 24,
+ "column": 1,
+ "endLine": 24,
+ "endColumn": 8
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 25,
"column": 1,
@@ -232,6 +379,27 @@
"suggest": "",
"rule": "Interop objects can't be incremented or decremented (arkts-interop-js2s-self-addtion-reduction)",
"severity": "ERROR"
+ },
+ {
+ "line": 25,
+ "column": 3,
+ "endLine": 25,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 762,
+ "end": 769,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 25,
+ "column": 3,
+ "endLine": 25,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
diff --git a/ets2panda/linter/test/interop/interop_convert_import.ets.arkts2.json b/ets2panda/linter/test/interop/interop_convert_import.ets.arkts2.json
index f4460de05a9e7dc5972246339c58ae190b3e0d0c..d6f91a557d1e1a3e03b5b1a4c6049645c84a0a5b 100644
--- a/ets2panda/linter/test/interop/interop_convert_import.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_convert_import.ets.arkts2.json
@@ -44,6 +44,16 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 20,
+ "column": 18,
+ "endLine": 20,
+ "endColumn": 25,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 21,
"column": 20,
@@ -54,6 +64,16 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 21,
+ "column": 20,
+ "endLine": 21,
+ "endColumn": 29,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 19,
@@ -64,6 +84,16 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 19,
+ "endLine": 22,
+ "endColumn": 27,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 19,
@@ -74,6 +104,16 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 19,
+ "endLine": 23,
+ "endColumn": 27,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 26,
"column": 9,
diff --git a/ets2panda/linter/test/interop/interop_convert_import.ets.autofix.json b/ets2panda/linter/test/interop/interop_convert_import.ets.autofix.json
index cfa646085ae972fb91eb01d4262ff3e50896825c..b49b275bb55fe496eed776379f50e210e3354a4b 100644
--- a/ets2panda/linter/test/interop/interop_convert_import.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_convert_import.ets.autofix.json
@@ -75,6 +75,27 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 20,
+ "column": 18,
+ "endLine": 20,
+ "endColumn": 25,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 774,
+ "end": 781,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 20,
+ "column": 18,
+ "endLine": 20,
+ "endColumn": 25
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 21,
"column": 20,
@@ -96,6 +117,27 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 21,
+ "column": 20,
+ "endLine": 21,
+ "endColumn": 29,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 812,
+ "end": 821,
+ "replacementText": "foo2.getPropertyByName(\"bool\")",
+ "line": 21,
+ "column": 20,
+ "endLine": 21,
+ "endColumn": 29
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 19,
@@ -117,6 +159,27 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 19,
+ "endLine": 22,
+ "endColumn": 27,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 853,
+ "end": 861,
+ "replacementText": "foo3.getPropertyByName(\"str\")",
+ "line": 22,
+ "column": 19,
+ "endLine": 22,
+ "endColumn": 27
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 19,
@@ -138,6 +201,27 @@
"rule": "Casting interop JS objects to primitive types is not allowed (arkts-interop-js2s-convert-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 19,
+ "endLine": 23,
+ "endColumn": 27,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 892,
+ "end": 900,
+ "replacementText": "foo4.getPropertyByName(\"big\")",
+ "line": 23,
+ "column": 19,
+ "endLine": 23,
+ "endColumn": 27
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 26,
"column": 9,
diff --git a/ets2panda/linter/test/interop/interop_import_js_compare.ets.arkts2.json b/ets2panda/linter/test/interop/interop_import_js_compare.ets.arkts2.json
index 0d056023ed8e8713385e538bf7503c5f56f868ac..620252abbfd70ab2b6a4a1b9d1c6dfa1eb1c96c4 100644
--- a/ets2panda/linter/test/interop/interop_import_js_compare.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_import_js_compare.ets.arkts2.json
@@ -273,6 +273,26 @@
"suggest": "",
"rule": "Importing data directly from the \"JS\" module for comparison is not supported (arkts-interop-js2s-compare-js-data)",
"severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 6,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 9,
+ "endLine": 43,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_import_js_compare.ets.autofix.json b/ets2panda/linter/test/interop/interop_import_js_compare.ets.autofix.json
index 8b8b4fe079c2d73f6205158b607ca2de110deb0d..2b90e5d9f02599b8a3707341f813b61aef70870f 100644
--- a/ets2panda/linter/test/interop/interop_import_js_compare.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_import_js_compare.ets.autofix.json
@@ -577,6 +577,48 @@
"suggest": "",
"rule": "Importing data directly from the \"JS\" module for comparison is not supported (arkts-interop-js2s-compare-js-data)",
"severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 6,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 881,
+ "end": 886,
+ "replacementText": "foo.getPropertyByName(\"a\")",
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 6
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 9,
+ "endLine": 43,
+ "endColumn": 14,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 889,
+ "end": 894,
+ "replacementText": "foo.getPropertyByName(\"b\")",
+ "line": 43,
+ "column": 9,
+ "endLine": 43,
+ "endColumn": 14
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_import_js_index.ets.arkts2.json b/ets2panda/linter/test/interop/interop_import_js_index.ets.arkts2.json
index 7586fcda516c5f43d38db25d1c078340dd210010..5414e5c1c43e4c950cfe4cd929b5d62d40548533 100644
--- a/ets2panda/linter/test/interop/interop_import_js_index.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_import_js_index.ets.arkts2.json
@@ -104,6 +104,16 @@
"rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 11,
+ "endLine": 22,
+ "endColumn": 22,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 10,
@@ -124,6 +134,16 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 21,
+ "endLine": 23,
+ "endColumn": 32,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 24,
"column": 17,
diff --git a/ets2panda/linter/test/interop/interop_import_js_index.ets.autofix.json b/ets2panda/linter/test/interop/interop_import_js_index.ets.autofix.json
index 8e7830812f31d816979d970d4b868fe9d09e4b29..3652409b23fbf7d2b35f03aa6b806a6f48d6f1da 100644
--- a/ets2panda/linter/test/interop/interop_import_js_index.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_import_js_index.ets.autofix.json
@@ -199,6 +199,27 @@
"rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 11,
+ "endLine": 22,
+ "endColumn": 22,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 770,
+ "end": 781,
+ "replacementText": "arr1.getPropertyByName(\"length\")",
+ "line": 22,
+ "column": 11,
+ "endLine": 22,
+ "endColumn": 22
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 10,
@@ -241,6 +262,27 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 21,
+ "endLine": 23,
+ "endColumn": 32,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 812,
+ "end": 823,
+ "replacementText": "arr1.getPropertyByName(\"length\")",
+ "line": 23,
+ "column": 21,
+ "endLine": 23,
+ "endColumn": 32
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 24,
"column": 17,
diff --git a/ets2panda/linter/test/interop/interop_import_js_index.ets.migrate.ets b/ets2panda/linter/test/interop/interop_import_js_index.ets.migrate.ets
index adc49e209c6e53d525ad87a85dc33c2be55914fd..8e707c2f6752b0f9a58a59b51ed9fbed9d7bb213 100644
--- a/ets2panda/linter/test/interop/interop_import_js_index.ets.migrate.ets
+++ b/ets2panda/linter/test/interop/interop_import_js_index.ets.migrate.ets
@@ -23,8 +23,8 @@ arr.getPropertyByIndex(1.0)
arr.setPropertyByIndex(3.0, ESValue.wrap(4.0))
let arr1 = ff3.getPropertyByName("arr")
-let len: number = arr1.length as number
-for (let i: number = 0.0; i < arr1.length; ++i) {
+let len: number = arr1.getPropertyByName("length") as number
+for (let i: number = 0.0; i < arr1.getPropertyByName("length"); ++i) {
console.log(arr1.getPropertyByIndex(i).toNumber()+''); //error
let x = arr1.getPropertyByIndex(i).toNumber() //error
arr1.setPropertyByIndex(i, ESValue.wrap(0.0 //error
diff --git a/ets2panda/linter/test/interop/interop_import_js_rules.ets.arkts2.json b/ets2panda/linter/test/interop/interop_import_js_rules.ets.arkts2.json
index 2fdc4e604ec7c6f910fa33f4722bf2ac4ae60ca8..d9f270ec5e6f677618a97014922a8567d43b1ca2 100644
--- a/ets2panda/linter/test/interop/interop_import_js_rules.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_import_js_rules.ets.arkts2.json
@@ -194,6 +194,16 @@
"rule": "Importing directly from \"JS\" module is not supported (arkts-interop-js2s-import-js)",
"severity": "ERROR"
},
+ {
+ "line": 32,
+ "column": 5,
+ "endLine": 32,
+ "endColumn": 15,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 32,
"column": 5,
@@ -214,6 +224,16 @@
"rule": "Importing data directly from the \"JS\" module for comparison is not supported (arkts-interop-js2s-compare-js-data)",
"severity": "ERROR"
},
+ {
+ "line": 34,
+ "column": 5,
+ "endLine": 34,
+ "endColumn": 11,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 34,
"column": 5,
@@ -294,6 +314,16 @@
"rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
"severity": "ERROR"
},
+ {
+ "line": 51,
+ "column": 11,
+ "endLine": 51,
+ "endColumn": 21,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 54,
"column": 3,
@@ -554,6 +584,16 @@
"rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
"severity": "ERROR"
},
+ {
+ "line": 84,
+ "column": 5,
+ "endLine": 84,
+ "endColumn": 24,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 84,
"column": 29,
diff --git a/ets2panda/linter/test/interop/interop_import_js_rules.ets.autofix.json b/ets2panda/linter/test/interop/interop_import_js_rules.ets.autofix.json
index 415bd82dc4208d62065c844da75ccded6a6495fd..a85d137032e0362398eb7bbc7cce90fccd764b3c 100644
--- a/ets2panda/linter/test/interop/interop_import_js_rules.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_import_js_rules.ets.autofix.json
@@ -374,6 +374,27 @@
"rule": "Importing directly from \"JS\" module is not supported (arkts-interop-js2s-import-js)",
"severity": "ERROR"
},
+ {
+ "line": 32,
+ "column": 5,
+ "endLine": 32,
+ "endColumn": 15,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1098,
+ "end": 1108,
+ "replacementText": "foo.getPropertyByName(\"isGood\")",
+ "line": 32,
+ "column": 5,
+ "endLine": 32,
+ "endColumn": 15
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 32,
"column": 5,
@@ -416,6 +437,27 @@
"rule": "Importing data directly from the \"JS\" module for comparison is not supported (arkts-interop-js2s-compare-js-data)",
"severity": "ERROR"
},
+ {
+ "line": 34,
+ "column": 5,
+ "endLine": 34,
+ "endColumn": 11,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1118,
+ "end": 1124,
+ "replacementText": "ff1.getPropertyByName(\"f1\")",
+ "line": 34,
+ "column": 5,
+ "endLine": 34,
+ "endColumn": 11
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 34,
"column": 5,
@@ -540,6 +582,27 @@
"rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
"severity": "ERROR"
},
+ {
+ "line": 51,
+ "column": 11,
+ "endLine": 51,
+ "endColumn": 21,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1362,
+ "end": 1372,
+ "replacementText": "arr.getPropertyByName(\"length\")",
+ "line": 51,
+ "column": 11,
+ "endLine": 51,
+ "endColumn": 21
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 54,
"column": 3,
@@ -1009,6 +1072,27 @@
"rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
"severity": "ERROR"
},
+ {
+ "line": 84,
+ "column": 5,
+ "endLine": 84,
+ "endColumn": 24,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1831,
+ "end": 1850,
+ "replacementText": "orange.getPropertyByName(\"isVegetable1\")",
+ "line": 84,
+ "column": 5,
+ "endLine": 84,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 84,
"column": 29,
diff --git a/ets2panda/linter/test/interop/interop_import_typeof_js.ets.arkts2.json b/ets2panda/linter/test/interop/interop_import_typeof_js.ets.arkts2.json
index a388ad4be8c63120888e9e286e64ea86074e1ba8..e1fc6d18dd6d307f7f56be2cebc081176947a3fb 100644
--- a/ets2panda/linter/test/interop/interop_import_typeof_js.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_import_typeof_js.ets.arkts2.json
@@ -134,6 +134,16 @@
"rule": "The \"typeof\" expression can't be used with interop JS objects (arkts-interop-js2s-typeof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 27,
+ "column": 8,
+ "endLine": 27,
+ "endColumn": 17,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 28,
"column": 1,
@@ -294,6 +304,16 @@
"rule": "The \"typeof\" expression can't be used with interop JS objects (arkts-interop-js2s-typeof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 61,
+ "column": 12,
+ "endLine": 61,
+ "endColumn": 21,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 65,
"column": 28,
@@ -334,6 +354,16 @@
"rule": "The \"typeof\" expression can't be used with interop JS objects (arkts-interop-js2s-typeof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 70,
+ "column": 8,
+ "endLine": 70,
+ "endColumn": 25,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 70,
"column": 8,
diff --git a/ets2panda/linter/test/interop/interop_import_typeof_js.ets.autofix.json b/ets2panda/linter/test/interop/interop_import_typeof_js.ets.autofix.json
index bf0571a063533513cd92b5d75d7460f612526031..a080a8877dd435a10899ad762d2ee6ab0862b41b 100644
--- a/ets2panda/linter/test/interop/interop_import_typeof_js.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_import_typeof_js.ets.autofix.json
@@ -271,6 +271,27 @@
"rule": "The \"typeof\" expression can't be used with interop JS objects (arkts-interop-js2s-typeof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 27,
+ "column": 8,
+ "endLine": 27,
+ "endColumn": 17,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 944,
+ "end": 953,
+ "replacementText": "Wiki.getPropertyByName(\"name\")",
+ "line": 27,
+ "column": 8,
+ "endLine": 27,
+ "endColumn": 17
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 28,
"column": 1,
@@ -574,6 +595,27 @@
"rule": "The \"typeof\" expression can't be used with interop JS objects (arkts-interop-js2s-typeof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 61,
+ "column": 12,
+ "endLine": 61,
+ "endColumn": 21,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1708,
+ "end": 1717,
+ "replacementText": "wiki.getPropertyByName(\"name\")",
+ "line": 61,
+ "column": 12,
+ "endLine": 61,
+ "endColumn": 21
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 65,
"column": 28,
@@ -658,6 +700,27 @@
"rule": "The \"typeof\" expression can't be used with interop JS objects (arkts-interop-js2s-typeof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 70,
+ "column": 8,
+ "endLine": 70,
+ "endColumn": 25,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1875,
+ "end": 1892,
+ "replacementText": "new Person().getPropertyByName(\"name\")",
+ "line": 70,
+ "column": 8,
+ "endLine": 70,
+ "endColumn": 25
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 70,
"column": 8,
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets
index e76e5da604bfb9a165443bea31759aaae62188da..3aa24611b1453b4efbe69a0875f4b5e7194d0deb 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets
+++ b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets
@@ -14,13 +14,50 @@
*/
'use static'
-import {foo, person} from "./interop_not_have_property_js"
+import { foo, person, TestHelper, Machine, User, Person, Employee } from "./interop_not_have_property_js"
foo.name
foo.name = "456"
person.age = 23
person.male = [2, 3]
foo.age = 12
+if (foo.name = "456") { print("true") }
let a = new foo()
-a.age = 12
\ No newline at end of file
+a.age = 12
+
+let test_helper = new TestHelper("TEST_INSTANTIATE_JS_OBJECT");
+test_helper.test(() => {
+ let machine = new Machine();
+ return machine.name === "machine"; // arkts-interop-js2s-access-js-prop
+}, "machine.name === 'machine'");
+
+test_helper.test(() => {
+ let user = new User("Bob");
+ return user.id === "Bob"; // arkts-interop-js2s-access-js-prop
+}, "user.id === 'Bob'");
+
+test_helper.test(() => {
+let user = new User(10);
+return user.id === 10;// arkts-interop-js2s-access-js-prop
+}, "user.id === 10");
+
+test_helper.test(() => {
+ let user = new User(123n);
+ return user.id === 123n; // arkts-interop-js2s-access-js-prop
+}, "user.id === 123n");
+
+test_helper.test(() => {
+ let user = new User(true);
+ return user.id === true;// arkts-interop-js2s-access-js-prop
+}, "user.id === true");
+
+test_helper.test(() => {
+ let machine = new Person("John", 10);
+ return machine.name === "machine"; // arkts-interop-js2s-access-js-prop
+}, "machine.name === 'machine'");
+
+test_helper.test(() => {
+ let employee = new Employee();
+ return employee.name === "employee"; // arkts-interop-js2s-access-js-prop
+}, "employee.name === 'employee'");
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.arkts2.json b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.arkts2.json
index 4b9d5b3863831a92b9d05b5f61cdb688e4c20351..18802c22d55cdd07435bcafaf0f27f6cfc11847f 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.arkts2.json
@@ -18,7 +18,7 @@
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59,
+ "endColumn": 106,
"problem": "ImportAfterStatement",
"suggest": "",
"rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
@@ -28,7 +28,7 @@
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59,
+ "endColumn": 106,
"problem": "InterOpImportJs",
"suggest": "",
"rule": "Importing directly from \"JS\" module is not supported (arkts-interop-js2s-import-js)",
@@ -125,9 +125,29 @@
"severity": "ERROR"
},
{
- "line": 25,
+ "line": 24,
"column": 5,
- "endLine": 25,
+ "endLine": 24,
+ "endColumn": 21,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 13,
+ "problem": "InteropJsObjectConditionJudgment",
+ "suggest": "",
+ "rule": "Direct usage of interop JS objects is not supported (arkts-interop-js2s-condition-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 26,
+ "column": 5,
+ "endLine": 26,
"endColumn": 18,
"problem": "AnyType",
"suggest": "",
@@ -135,9 +155,9 @@
"severity": "ERROR"
},
{
- "line": 25,
+ "line": 26,
"column": 9,
- "endLine": 25,
+ "endLine": 26,
"endColumn": 18,
"problem": "InstantiatedJsOjbect",
"suggest": "",
@@ -145,9 +165,9 @@
"severity": "ERROR"
},
{
- "line": 26,
+ "line": 27,
"column": 1,
- "endLine": 26,
+ "endLine": 27,
"endColumn": 11,
"problem": "InteropObjectProperty",
"suggest": "",
@@ -155,14 +175,334 @@
"severity": "ERROR"
},
{
- "line": 26,
+ "line": 27,
"column": 9,
- "endLine": 26,
+ "endLine": 27,
"endColumn": 11,
"problem": "NumericSemantics",
"suggest": "",
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
+ },
+ {
+ "line": 29,
+ "column": 19,
+ "endLine": 29,
+ "endColumn": 63,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 30,
+ "column": 1,
+ "endLine": 33,
+ "endColumn": 33,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 31,
+ "column": 19,
+ "endLine": 31,
+ "endColumn": 32,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 32,
+ "column": 12,
+ "endLine": 32,
+ "endColumn": 38,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 32,
+ "column": 12,
+ "endLine": 32,
+ "endColumn": 24,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 35,
+ "column": 1,
+ "endLine": 38,
+ "endColumn": 24,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 36,
+ "column": 16,
+ "endLine": 36,
+ "endColumn": 31,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 12,
+ "endLine": 37,
+ "endColumn": 29,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 12,
+ "endLine": 37,
+ "endColumn": 19,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 40,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 21,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 12,
+ "endLine": 41,
+ "endColumn": 24,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 21,
+ "endLine": 41,
+ "endColumn": 23,
+ "problem": "NumericSemantics",
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 8,
+ "endLine": 42,
+ "endColumn": 22,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 8,
+ "endLine": 42,
+ "endColumn": 15,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 20,
+ "endLine": 42,
+ "endColumn": 22,
+ "problem": "NumericSemantics",
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 45,
+ "column": 1,
+ "endLine": 48,
+ "endColumn": 23,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 16,
+ "endLine": 46,
+ "endColumn": 30,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 47,
+ "column": 12,
+ "endLine": 47,
+ "endColumn": 28,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 47,
+ "column": 12,
+ "endLine": 47,
+ "endColumn": 19,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 50,
+ "column": 1,
+ "endLine": 53,
+ "endColumn": 23,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 51,
+ "column": 16,
+ "endLine": 51,
+ "endColumn": 30,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 52,
+ "column": 12,
+ "endLine": 52,
+ "endColumn": 28,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 52,
+ "column": 12,
+ "endLine": 52,
+ "endColumn": 19,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 1,
+ "endLine": 58,
+ "endColumn": 33,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 19,
+ "endLine": 56,
+ "endColumn": 41,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 38,
+ "endLine": 56,
+ "endColumn": 40,
+ "problem": "NumericSemantics",
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 12,
+ "endLine": 57,
+ "endColumn": 38,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 12,
+ "endLine": 57,
+ "endColumn": 24,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 60,
+ "column": 1,
+ "endLine": 63,
+ "endColumn": 35,
+ "problem": "InteropCallObjectMethods",
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 61,
+ "column": 20,
+ "endLine": 61,
+ "endColumn": 34,
+ "problem": "InstantiatedJsOjbect",
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 62,
+ "column": 12,
+ "endLine": 62,
+ "endColumn": 40,
+ "problem": "InteropEqualityJudgment",
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 62,
+ "column": 12,
+ "endLine": 62,
+ "endColumn": 25,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.autofix.json b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.autofix.json
index 1324eb3b623f8641e9e9d24c62eb5f70891a2253..d66995a3c66e2ece5eb31247a9916ca8ce6bf5c4 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.autofix.json
@@ -18,7 +18,7 @@
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59,
+ "endColumn": 106,
"problem": "ImportAfterStatement",
"suggest": "",
"rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
@@ -28,26 +28,26 @@
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59,
+ "endColumn": 106,
"problem": "InterOpImportJs",
"autofix": [
{
"start": 618,
- "end": 676,
+ "end": 723,
"replacementText": "",
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59
+ "endColumn": 106
},
{
- "start": 676,
- "end": 676,
- "replacementText": "let GeneratedImportVar_1 = ESValue.load('./interop_not_have_property_js');\nlet foo = GeneratedImportVar_1.getPropertyByName('foo');\nlet person = GeneratedImportVar_1.getPropertyByName('person');\n",
+ "start": 723,
+ "end": 723,
+ "replacementText": "let GeneratedImportVar_1 = ESValue.load('./interop_not_have_property_js');\nlet foo = GeneratedImportVar_1.getPropertyByName('foo');\nlet person = GeneratedImportVar_1.getPropertyByName('person');\nlet TestHelper = GeneratedImportVar_1.getPropertyByName('TestHelper');\nlet Machine = GeneratedImportVar_1.getPropertyByName('Machine');\nlet User = GeneratedImportVar_1.getPropertyByName('User');\nlet Person = GeneratedImportVar_1.getPropertyByName('Person');\nlet Employee = GeneratedImportVar_1.getPropertyByName('Employee');\n",
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59
+ "endColumn": 106
}
],
"suggest": "",
@@ -62,8 +62,8 @@
"problem": "InteropObjectProperty",
"autofix": [
{
- "start": 678,
- "end": 686,
+ "start": 725,
+ "end": 733,
"replacementText": "foo.getPropertyByName(\"name\")",
"line": 19,
"column": 1,
@@ -83,8 +83,8 @@
"problem": "InteropObjectProperty",
"autofix": [
{
- "start": 687,
- "end": 703,
+ "start": 734,
+ "end": 750,
"replacementText": "foo.setPropertyByName(\"name\", ESValue.wrap(\"456\"))",
"line": 20,
"column": 1,
@@ -104,8 +104,8 @@
"problem": "InteropObjectProperty",
"autofix": [
{
- "start": 704,
- "end": 719,
+ "start": 751,
+ "end": 766,
"replacementText": "person.setPropertyByName(\"age\", ESValue.wrap(23))",
"line": 21,
"column": 1,
@@ -125,8 +125,8 @@
"problem": "NumericSemantics",
"autofix": [
{
- "start": 717,
- "end": 719,
+ "start": 764,
+ "end": 766,
"replacementText": "23.0",
"line": 21,
"column": 14,
@@ -146,8 +146,8 @@
"problem": "InteropObjectProperty",
"autofix": [
{
- "start": 720,
- "end": 740,
+ "start": 767,
+ "end": 787,
"replacementText": "person.setPropertyByName(\"male\", ESValue.wrap([2, 3]))",
"line": 22,
"column": 1,
@@ -167,8 +167,8 @@
"problem": "NumericSemantics",
"autofix": [
{
- "start": 735,
- "end": 736,
+ "start": 782,
+ "end": 783,
"replacementText": "2.0",
"line": 22,
"column": 16,
@@ -188,8 +188,8 @@
"problem": "NumericSemantics",
"autofix": [
{
- "start": 738,
- "end": 739,
+ "start": 785,
+ "end": 786,
"replacementText": "3.0",
"line": 22,
"column": 19,
@@ -209,8 +209,8 @@
"problem": "InteropObjectProperty",
"autofix": [
{
- "start": 741,
- "end": 753,
+ "start": 788,
+ "end": 800,
"replacementText": "foo.setPropertyByName(\"age\", ESValue.wrap(12))",
"line": 23,
"column": 1,
@@ -230,8 +230,8 @@
"problem": "NumericSemantics",
"autofix": [
{
- "start": 751,
- "end": 753,
+ "start": 798,
+ "end": 800,
"replacementText": "12.0",
"line": 23,
"column": 11,
@@ -244,9 +244,51 @@
"severity": "ERROR"
},
{
- "line": 25,
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 21,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 805,
+ "end": 821,
+ "replacementText": "foo.setPropertyByName(\"name\", ESValue.wrap(\"456\"))",
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 21
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 13,
+ "problem": "InteropJsObjectConditionJudgment",
+ "autofix": [
+ {
+ "replacementText": "foo.getPropertyByName('name').toString()",
+ "start": 805,
+ "end": 813,
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 13
+ }
+ ],
+ "suggest": "",
+ "rule": "Direct usage of interop JS objects is not supported (arkts-interop-js2s-condition-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 26,
"column": 5,
- "endLine": 25,
+ "endLine": 26,
"endColumn": 18,
"problem": "AnyType",
"suggest": "",
@@ -254,19 +296,19 @@
"severity": "ERROR"
},
{
- "line": 25,
+ "line": 26,
"column": 9,
- "endLine": 25,
+ "endLine": 26,
"endColumn": 18,
"problem": "InstantiatedJsOjbect",
"autofix": [
{
- "start": 763,
- "end": 772,
+ "start": 850,
+ "end": 859,
"replacementText": "foo.instantiate()",
- "line": 25,
+ "line": 26,
"column": 9,
- "endLine": 25,
+ "endLine": 26,
"endColumn": 18
}
],
@@ -275,19 +317,19 @@
"severity": "ERROR"
},
{
- "line": 26,
+ "line": 27,
"column": 1,
- "endLine": 26,
+ "endLine": 27,
"endColumn": 11,
"problem": "InteropObjectProperty",
"autofix": [
{
- "start": 773,
- "end": 783,
+ "start": 860,
+ "end": 870,
"replacementText": "a.setPropertyByName(\"age\", ESValue.wrap(12))",
- "line": 26,
+ "line": 27,
"column": 1,
- "endLine": 26,
+ "endLine": 27,
"endColumn": 11
}
],
@@ -296,25 +338,697 @@
"severity": "ERROR"
},
{
- "line": 26,
+ "line": 27,
"column": 9,
- "endLine": 26,
+ "endLine": 27,
"endColumn": 11,
"problem": "NumericSemantics",
"autofix": [
{
- "start": 781,
- "end": 783,
+ "start": 868,
+ "end": 870,
"replacementText": "12.0",
- "line": 26,
+ "line": 27,
"column": 9,
- "endLine": 26,
+ "endLine": 27,
"endColumn": 11
}
],
"suggest": "",
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
+ },
+ {
+ "line": 29,
+ "column": 19,
+ "endLine": 29,
+ "endColumn": 63,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 890,
+ "end": 934,
+ "replacementText": "TestHelper.instantiate(ESValue.wrap(\"TEST_INSTANTIATE_JS_OBJECT\"))",
+ "line": 29,
+ "column": 19,
+ "endLine": 29,
+ "endColumn": 63
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 30,
+ "column": 1,
+ "endLine": 33,
+ "endColumn": 33,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 936,
+ "end": 1102,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\n let machine = new Machine();\n return machine.name === \"machine\"; // arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"machine.name === 'machine'\"))",
+ "line": 30,
+ "column": 1,
+ "endLine": 33,
+ "endColumn": 33
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 31,
+ "column": 19,
+ "endLine": 31,
+ "endColumn": 32,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 979,
+ "end": 992,
+ "replacementText": "Machine.instantiate()",
+ "line": 31,
+ "column": 19,
+ "endLine": 31,
+ "endColumn": 32
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 32,
+ "column": 12,
+ "endLine": 32,
+ "endColumn": 38,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1005,
+ "end": 1031,
+ "replacementText": "machine.name.areStrictlyEqual(\"machine\")",
+ "line": 32,
+ "column": 12,
+ "endLine": 32,
+ "endColumn": 38
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 32,
+ "column": 12,
+ "endLine": 32,
+ "endColumn": 24,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1005,
+ "end": 1017,
+ "replacementText": "machine.getPropertyByName(\"name\")",
+ "line": 32,
+ "column": 12,
+ "endLine": 32,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 35,
+ "column": 1,
+ "endLine": 38,
+ "endColumn": 24,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 1105,
+ "end": 1252,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\n let user = new User(\"Bob\");\n return user.id === \"Bob\"; // arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"user.id === 'Bob'\"))",
+ "line": 35,
+ "column": 1,
+ "endLine": 38,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 36,
+ "column": 16,
+ "endLine": 36,
+ "endColumn": 31,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 1145,
+ "end": 1160,
+ "replacementText": "User.instantiate(ESValue.wrap(\"Bob\"))",
+ "line": 36,
+ "column": 16,
+ "endLine": 36,
+ "endColumn": 31
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 12,
+ "endLine": 37,
+ "endColumn": 29,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1173,
+ "end": 1190,
+ "replacementText": "user.id.areStrictlyEqual(\"Bob\")",
+ "line": 37,
+ "column": 12,
+ "endLine": 37,
+ "endColumn": 29
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 12,
+ "endLine": 37,
+ "endColumn": 19,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1173,
+ "end": 1180,
+ "replacementText": "user.getPropertyByName(\"id\")",
+ "line": 37,
+ "column": 12,
+ "endLine": 37,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 40,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 21,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 1255,
+ "end": 1384,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\nlet user = new User(10);\nreturn user.id === 10;// arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"user.id === 10\"))",
+ "line": 40,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 21
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 12,
+ "endLine": 41,
+ "endColumn": 24,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 1291,
+ "end": 1303,
+ "replacementText": "User.instantiate(ESValue.wrap(10))",
+ "line": 41,
+ "column": 12,
+ "endLine": 41,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 21,
+ "endLine": 41,
+ "endColumn": 23,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1300,
+ "end": 1302,
+ "replacementText": "10.0",
+ "line": 41,
+ "column": 21,
+ "endLine": 41,
+ "endColumn": 23
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 8,
+ "endLine": 42,
+ "endColumn": 22,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1312,
+ "end": 1326,
+ "replacementText": "user.id.areStrictlyEqual(10)",
+ "line": 42,
+ "column": 8,
+ "endLine": 42,
+ "endColumn": 22
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 8,
+ "endLine": 42,
+ "endColumn": 15,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1312,
+ "end": 1319,
+ "replacementText": "user.getPropertyByName(\"id\")",
+ "line": 42,
+ "column": 8,
+ "endLine": 42,
+ "endColumn": 15
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 20,
+ "endLine": 42,
+ "endColumn": 22,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1324,
+ "end": 1326,
+ "replacementText": "10.0",
+ "line": 42,
+ "column": 20,
+ "endLine": 42,
+ "endColumn": 22
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 45,
+ "column": 1,
+ "endLine": 48,
+ "endColumn": 23,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 1387,
+ "end": 1531,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\n let user = new User(123n);\n return user.id === 123n; // arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"user.id === 123n\"))",
+ "line": 45,
+ "column": 1,
+ "endLine": 48,
+ "endColumn": 23
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 16,
+ "endLine": 46,
+ "endColumn": 30,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 1427,
+ "end": 1441,
+ "replacementText": "User.instantiate(ESValue.wrap(123n))",
+ "line": 46,
+ "column": 16,
+ "endLine": 46,
+ "endColumn": 30
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 47,
+ "column": 12,
+ "endLine": 47,
+ "endColumn": 28,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1454,
+ "end": 1470,
+ "replacementText": "user.id.areStrictlyEqual(123n)",
+ "line": 47,
+ "column": 12,
+ "endLine": 47,
+ "endColumn": 28
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 47,
+ "column": 12,
+ "endLine": 47,
+ "endColumn": 19,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1454,
+ "end": 1461,
+ "replacementText": "user.getPropertyByName(\"id\")",
+ "line": 47,
+ "column": 12,
+ "endLine": 47,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 50,
+ "column": 1,
+ "endLine": 53,
+ "endColumn": 23,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 1534,
+ "end": 1677,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\n let user = new User(true);\n return user.id === true;// arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"user.id === true\"))",
+ "line": 50,
+ "column": 1,
+ "endLine": 53,
+ "endColumn": 23
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 51,
+ "column": 16,
+ "endLine": 51,
+ "endColumn": 30,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 1574,
+ "end": 1588,
+ "replacementText": "User.instantiate(ESValue.wrap(true))",
+ "line": 51,
+ "column": 16,
+ "endLine": 51,
+ "endColumn": 30
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 52,
+ "column": 12,
+ "endLine": 52,
+ "endColumn": 28,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1601,
+ "end": 1617,
+ "replacementText": "user.id.areStrictlyEqual(true)",
+ "line": 52,
+ "column": 12,
+ "endLine": 52,
+ "endColumn": 28
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 52,
+ "column": 12,
+ "endLine": 52,
+ "endColumn": 19,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1601,
+ "end": 1608,
+ "replacementText": "user.getPropertyByName(\"id\")",
+ "line": 52,
+ "column": 12,
+ "endLine": 52,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 1,
+ "endLine": 58,
+ "endColumn": 33,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 1680,
+ "end": 1855,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\n let machine = new Person(\"John\", 10);\n return machine.name === \"machine\"; // arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"machine.name === 'machine'\"))",
+ "line": 55,
+ "column": 1,
+ "endLine": 58,
+ "endColumn": 33
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 19,
+ "endLine": 56,
+ "endColumn": 41,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 1723,
+ "end": 1745,
+ "replacementText": "Person.instantiate(ESValue.wrap(\"John\"), ESValue.wrap(10))",
+ "line": 56,
+ "column": 19,
+ "endLine": 56,
+ "endColumn": 41
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 38,
+ "endLine": 56,
+ "endColumn": 40,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1742,
+ "end": 1744,
+ "replacementText": "10.0",
+ "line": 56,
+ "column": 38,
+ "endLine": 56,
+ "endColumn": 40
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 12,
+ "endLine": 57,
+ "endColumn": 38,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1758,
+ "end": 1784,
+ "replacementText": "machine.name.areStrictlyEqual(\"machine\")",
+ "line": 57,
+ "column": 12,
+ "endLine": 57,
+ "endColumn": 38
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 12,
+ "endLine": 57,
+ "endColumn": 24,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1758,
+ "end": 1770,
+ "replacementText": "machine.getPropertyByName(\"name\")",
+ "line": 57,
+ "column": 12,
+ "endLine": 57,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 60,
+ "column": 1,
+ "endLine": 63,
+ "endColumn": 35,
+ "problem": "InteropCallObjectMethods",
+ "autofix": [
+ {
+ "start": 1858,
+ "end": 2030,
+ "replacementText": "test_helper.invokeMethod(\"test\", ESValue.wrap(() => {\n let employee = new Employee();\n return employee.name === \"employee\"; // arkts-interop-js2s-access-js-prop\n}), ESValue.wrap(\"employee.name === 'employee'\"))",
+ "line": 60,
+ "column": 1,
+ "endLine": 63,
+ "endColumn": 35
+ }
+ ],
+ "suggest": "",
+ "rule": "Calling methods of JS Object directly in interop is not allowed (arkts-interop-js2s-call-js-method)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 61,
+ "column": 20,
+ "endLine": 61,
+ "endColumn": 34,
+ "problem": "InstantiatedJsOjbect",
+ "autofix": [
+ {
+ "start": 1902,
+ "end": 1916,
+ "replacementText": "Employee.instantiate()",
+ "line": 61,
+ "column": 20,
+ "endLine": 61,
+ "endColumn": 34
+ }
+ ],
+ "suggest": "",
+ "rule": "ArkTS directly instantiated JS objects is not supported (arkts-interop-js2s-create-js-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 62,
+ "column": 12,
+ "endLine": 62,
+ "endColumn": 40,
+ "problem": "InteropEqualityJudgment",
+ "autofix": [
+ {
+ "start": 1929,
+ "end": 1957,
+ "replacementText": "employee.name.areStrictlyEqual(\"employee\")",
+ "line": 62,
+ "column": 12,
+ "endLine": 62,
+ "endColumn": 40
+ }
+ ],
+ "suggest": "",
+ "rule": "\"JS\" objects can't be used directly as operands of the equality operators (arkts-interop-js2s-equality-judgment)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 62,
+ "column": 12,
+ "endLine": 62,
+ "endColumn": 25,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1929,
+ "end": 1942,
+ "replacementText": "employee.getPropertyByName(\"name\")",
+ "line": 62,
+ "column": 12,
+ "endLine": 62,
+ "endColumn": 25
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.json b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.json
index aa378b7cdb4ef25f5efdc51efc742feadd27c0b0..e96c8ee4d27b5de8fd471382863075ddee071158 100755
--- a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.json
+++ b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.json
@@ -18,16 +18,16 @@
"line": 17,
"column": 1,
"endLine": 17,
- "endColumn": 59,
+ "endColumn": 106,
"problem": "ImportAfterStatement",
"suggest": "",
"rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
"severity": "ERROR"
},
{
- "line": 25,
+ "line": 26,
"column": 5,
- "endLine": 25,
+ "endLine": 26,
"endColumn": 18,
"problem": "AnyType",
"suggest": "",
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.ets b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.ets
index 41e6e710a6a039c31c94fc6284b0b535ccc208a0..b5185b29e459cd193a63b971d694af9e248ef987 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.ets
+++ b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.ets
@@ -17,6 +17,11 @@
let GeneratedImportVar_1 = ESValue.load('./interop_not_have_property_js');
let foo = GeneratedImportVar_1.getPropertyByName('foo');
let person = GeneratedImportVar_1.getPropertyByName('person');
+let TestHelper = GeneratedImportVar_1.getPropertyByName('TestHelper');
+let Machine = GeneratedImportVar_1.getPropertyByName('Machine');
+let User = GeneratedImportVar_1.getPropertyByName('User');
+let Person = GeneratedImportVar_1.getPropertyByName('Person');
+let Employee = GeneratedImportVar_1.getPropertyByName('Employee');
foo.getPropertyByName("name")
@@ -24,6 +29,43 @@ foo.setPropertyByName("name", ESValue.wrap("456"))
person.setPropertyByName("age", ESValue.wrap(23.0))
person.setPropertyByName("male", ESValue.wrap([2.0, 3.0]))
foo.setPropertyByName("age", ESValue.wrap(12.0))
+if (foo.setPropertyByName("name", ESValue.wrap("456"))) { print("true") }
let a = foo.instantiate()
-a.setPropertyByName("age", ESValue.wrap(12.0))
\ No newline at end of file
+a.setPropertyByName("age", ESValue.wrap(12.0))
+
+let test_helper = TestHelper.instantiate(ESValue.wrap("TEST_INSTANTIATE_JS_OBJECT"));
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+ let machine = new Machine();
+ return machine.name === "machine"; // arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("machine.name === 'machine'"));
+
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+ let user = new User("Bob");
+ return user.id === "Bob"; // arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("user.id === 'Bob'"));
+
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+let user = new User(10.0);
+return user.id === 10.0;// arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("user.id === 10"));
+
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+ let user = new User(123n);
+ return user.id === 123n; // arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("user.id === 123n"));
+
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+ let user = new User(true);
+ return user.id === true;// arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("user.id === true"));
+
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+ let machine = new Person("John", 10.0);
+ return machine.name === "machine"; // arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("machine.name === 'machine'"));
+
+test_helper.invokeMethod("test", ESValue.wrap(() => {
+ let employee = new Employee();
+ return employee.name === "employee"; // arkts-interop-js2s-access-js-prop
+}), ESValue.wrap("employee.name === 'employee'"));
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.json b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.json
index 5d0bee805955ab80029eb797ece8afc7f6907d4e..540b5557d45cc7365dc242397e5fad526524d7bd 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.json
+++ b/ets2panda/linter/test/interop/interop_not_have_property_arkts2.ets.migrate.json
@@ -45,14 +45,214 @@
"severity": "ERROR"
},
{
- "line": 28,
+ "line": 20,
"column": 5,
- "endLine": 28,
+ "endLine": 20,
+ "endColumn": 70,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 21,
+ "column": 5,
+ "endLine": 21,
+ "endColumn": 64,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 22,
+ "column": 5,
+ "endLine": 22,
+ "endColumn": 58,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 23,
+ "column": 5,
+ "endLine": 23,
+ "endColumn": 62,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 66,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 34,
+ "column": 5,
+ "endLine": 34,
"endColumn": 26,
"problem": "AnyType",
"suggest": "",
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 5,
+ "endLine": 37,
+ "endColumn": 85,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 39,
+ "column": 9,
+ "endLine": 39,
+ "endColumn": 32,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 39,
+ "column": 23,
+ "endLine": 39,
+ "endColumn": 30,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 44,
+ "column": 9,
+ "endLine": 44,
+ "endColumn": 31,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 44,
+ "column": 20,
+ "endLine": 44,
+ "endColumn": 24,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 49,
+ "column": 5,
+ "endLine": 49,
+ "endColumn": 26,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 49,
+ "column": 16,
+ "endLine": 49,
+ "endColumn": 20,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 9,
+ "endLine": 54,
+ "endColumn": 30,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 20,
+ "endLine": 54,
+ "endColumn": 24,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 59,
+ "column": 9,
+ "endLine": 59,
+ "endColumn": 30,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 59,
+ "column": 20,
+ "endLine": 59,
+ "endColumn": 24,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 64,
+ "column": 9,
+ "endLine": 64,
+ "endColumn": 43,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 64,
+ "column": 23,
+ "endLine": 64,
+ "endColumn": 29,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 69,
+ "column": 9,
+ "endLine": 69,
+ "endColumn": 34,
+ "problem": "AnyType",
+ "suggest": "",
+ "rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 69,
+ "column": 24,
+ "endLine": 69,
+ "endColumn": 32,
+ "problem": "DynamicCtorCall",
+ "suggest": "",
+ "rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_js.js b/ets2panda/linter/test/interop/interop_not_have_property_js.js
index cd3b2ad79c827240efb0dfeb83a5057f3238fb3d..45b2953a2cf654d08f72cf6f2811e3e7892f37d0 100755
--- a/ets2panda/linter/test/interop/interop_not_have_property_js.js
+++ b/ets2panda/linter/test/interop/interop_not_have_property_js.js
@@ -13,4 +13,61 @@
* limitations under the License.
*/
export let foo = {name: "123"}
-export let person = {age: 12, male: [1, 2, 3]}
\ No newline at end of file
+export let person = {age: 12, male: [1, 2, 3]}
+export class TestHelper {
+ constructor(testName) {
+ this.testName = testName;
+ this.passed = 0;
+ this.failed = 0;
+ }
+
+ test(testFunction, description) {
+ const result = testFunction();
+ if (result) {
+ this.passed++;
+ console.log(`[PASS] ${this.testName}: ${description}`);
+ } else {
+ this.failed++;
+ console.error(`[FAIL] ${this.testName}: ${description}`);
+ }
+ }
+
+ getStats() {
+ return {
+ passed: this.passed,
+ failed: this.failed,
+ total: this.passed + this.failed
+ };
+ }
+
+ printSummary() {
+ const stats = this.getStats();
+ }
+}
+
+export class Machine {
+ name = "machine";
+}
+
+export class User {
+ id;
+ constructor(a){
+ this.id = a;
+ }
+}
+
+export class Person {
+ name;
+ age;
+ constructor(a, b){
+ this.name = a;
+ this.age = b;
+ }
+}
+
+export class Employee {
+ name;
+ constructor(a = "employee"){
+ this.name = a;
+ }
+}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.arkts2.json b/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.arkts2.json
index 622761b380a175be670c7374af4cafe45e881106..ccb4943134ffca9cc6af97e2bdd741057074e0e4 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.arkts2.json
@@ -34,6 +34,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 19,
"column": 1,
@@ -44,6 +54,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 20,
"column": 1,
@@ -54,6 +74,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 21,
"column": 1,
@@ -64,6 +94,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 21,
+ "column": 2,
+ "endLine": 21,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 1,
@@ -74,6 +114,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 3,
+ "endLine": 22,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 1,
@@ -84,6 +134,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 3,
+ "endLine": 23,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 24,
"column": 1,
@@ -94,6 +154,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 24,
+ "column": 3,
+ "endLine": 24,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 25,
"column": 1,
@@ -103,6 +173,16 @@
"suggest": "",
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
+ },
+ {
+ "line": 25,
+ "column": 3,
+ "endLine": 25,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.autofix.json b/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.autofix.json
index fc4732acc47bc4af5e2f97cf2cfaad248fe51d35..c638dec23eb3a73a32118f3b47305f1a70ee4777 100644
--- a/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.autofix.json
+++ b/ets2panda/linter/test/interop/interop_not_have_property_num_arkts2.ets.autofix.json
@@ -65,6 +65,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 653,
+ "end": 660,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 19,
"column": 1,
@@ -86,6 +107,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 663,
+ "end": 670,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 20,
"column": 1,
@@ -107,6 +149,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 673,
+ "end": 680,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 21,
"column": 1,
@@ -128,6 +191,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 21,
+ "column": 2,
+ "endLine": 21,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 683,
+ "end": 690,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 21,
+ "column": 2,
+ "endLine": 21,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 1,
@@ -149,6 +233,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 22,
+ "column": 3,
+ "endLine": 22,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 694,
+ "end": 701,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 22,
+ "column": 3,
+ "endLine": 22,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 23,
"column": 1,
@@ -170,6 +275,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 23,
+ "column": 3,
+ "endLine": 23,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 706,
+ "end": 713,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 23,
+ "column": 3,
+ "endLine": 23,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 24,
"column": 1,
@@ -191,6 +317,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 24,
+ "column": 3,
+ "endLine": 24,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 718,
+ "end": 725,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 24,
+ "column": 3,
+ "endLine": 24,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 25,
"column": 1,
@@ -211,6 +358,27 @@
"suggest": "",
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
+ },
+ {
+ "line": 25,
+ "column": 3,
+ "endLine": 25,
+ "endColumn": 10,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 730,
+ "end": 737,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 25,
+ "column": 3,
+ "endLine": 25,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/no_js_instanceof.ets.arkts2.json b/ets2panda/linter/test/interop/no_js_instanceof.ets.arkts2.json
index 616006bedfa5985d09e37f9e6ad479315039b548..4c2e0aa32a85010fb6a1740e8c9d192c60057df8 100644
--- a/ets2panda/linter/test/interop/no_js_instanceof.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/no_js_instanceof.ets.arkts2.json
@@ -154,6 +154,16 @@
"rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
"severity": "ERROR"
},
+ {
+ "line": 72,
+ "column": 36,
+ "endLine": 72,
+ "endColumn": 51,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 74,
"column": 5,
@@ -164,6 +174,16 @@
"rule": "Usage of \"instanceof\" operator is not allowed with interop objects (arkts-interop-js2s-instanceof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 74,
+ "column": 22,
+ "endLine": 74,
+ "endColumn": 37,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 74,
"column": 22,
diff --git a/ets2panda/linter/test/interop/no_js_instanceof.ets.autofix.json b/ets2panda/linter/test/interop/no_js_instanceof.ets.autofix.json
index c1c3153c902ced5a24f5c3e25aa1c7c191e5ef51..8b4189586e0b1125edaff37961ec27611be6773f 100644
--- a/ets2panda/linter/test/interop/no_js_instanceof.ets.autofix.json
+++ b/ets2panda/linter/test/interop/no_js_instanceof.ets.autofix.json
@@ -306,6 +306,27 @@
"rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
"severity": "ERROR"
},
+ {
+ "line": 72,
+ "column": 36,
+ "endLine": 72,
+ "endColumn": 51,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1296,
+ "end": 1311,
+ "replacementText": "MyNamespace.getPropertyByName(\"Dog\")",
+ "line": 72,
+ "column": 36,
+ "endLine": 72,
+ "endColumn": 51
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 74,
"column": 5,
@@ -327,6 +348,27 @@
"rule": "Usage of \"instanceof\" operator is not allowed with interop objects (arkts-interop-js2s-instanceof-js-type)",
"severity": "ERROR"
},
+ {
+ "line": 74,
+ "column": 22,
+ "endLine": 74,
+ "endColumn": 37,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 1344,
+ "end": 1359,
+ "replacementText": "MyNamespace.getPropertyByName(\"Dog\")",
+ "line": 74,
+ "column": 22,
+ "endLine": 74,
+ "endColumn": 37
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 74,
"column": 22,
diff --git a/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.ets b/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.ets
index 729ddeb90e7e63268dd5dabbbe8942f6f65f7249..b71a99dcc06a6df1d775598ef974668c47b22515 100644
--- a/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.ets
+++ b/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.ets
@@ -76,7 +76,7 @@ if(b().isInstanceOf(Array)) {
}
-const myDog: MyNamespace.Dog = new MyNamespace.Dog('Buddy');
+const myDog: MyNamespace.Dog = new MyNamespace.getPropertyByName("Dog")('Buddy');
if (myDog.isInstanceOf(MyNamespace.Dog)) {
console.log("This is a Dog!");
diff --git a/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.json b/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.json
index 992f388c81b589589fd96d52e0ea0603ba4c6188..63aabda70294bfb97625479c42d6e0484f4acc62 100644
--- a/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.json
+++ b/ets2panda/linter/test/interop/no_js_instanceof.ets.migrate.json
@@ -108,7 +108,7 @@
"line": 79,
"column": 36,
"endLine": 79,
- "endColumn": 51,
+ "endColumn": 65,
"problem": "DynamicCtorCall",
"suggest": "",
"rule": "\"new\" expression with dynamic constructor type is not supported (arkts-no-dynamic-ctor-call)",
diff --git a/ets2panda/linter/test/interop/object_built_in.ets.arkts2.json b/ets2panda/linter/test/interop/object_built_in.ets.arkts2.json
index aea5d55ddb15b333934bc86eb79cd04096e9f178..d9cadcd5d49e623871668199b128d069f02e845d 100644
--- a/ets2panda/linter/test/interop/object_built_in.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/object_built_in.ets.arkts2.json
@@ -44,6 +44,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 27,
+ "column": 1,
+ "endLine": 27,
+ "endColumn": 14,
+ "problem": "InteropCallObjectParam",
+ "suggest": "",
+ "rule": "Class type is not compatible with \"Object\" parameter in interop call (arkts-interop-d2s-static-object-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 27,
"column": 1,
diff --git a/ets2panda/linter/test/interop/object_built_in.ets.json b/ets2panda/linter/test/interop/object_built_in.ets.json
index d756197f15700b6f96caf8e023ffe8537cfcd193..d2adea10e51a874fd0c51386e85d2b4552fbecd7 100644
--- a/ets2panda/linter/test/interop/object_built_in.ets.json
+++ b/ets2panda/linter/test/interop/object_built_in.ets.json
@@ -43,6 +43,16 @@
"suggest": "",
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
+ },
+ {
+ "line": 27,
+ "column": 1,
+ "endLine": 27,
+ "endColumn": 14,
+ "problem": "InteropCallObjectParam",
+ "suggest": "",
+ "rule": "Class type is not compatible with \"Object\" parameter in interop call (arkts-interop-d2s-static-object-on-dynamic-instance)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/oh_modules/reflect_export.ets b/ets2panda/linter/test/interop/oh_modules/reflect_export.ets
index 418b723cf91853fba46d93ca52b7934df77ed6ae..5bfb75a30158144e237625107f8896eed1276e9c 100644
--- a/ets2panda/linter/test/interop/oh_modules/reflect_export.ets
+++ b/ets2panda/linter/test/interop/oh_modules/reflect_export.ets
@@ -27,3 +27,37 @@ export class X {
a: string = 'hello'
getName() { return this.a }
}
+
+export class Reflect1 {
+ a: string = 'hello'
+ getName() { return this.a }
+}
+export let obj_Reflect1 = new Reflect1();
+
+interface Iface {
+ a:number
+}
+export let objInter:Iface = {a:1}
+
+export function reflect_method1(prx: ESObject) {
+ Reflect.ownKeys(prx) // ['a']
+ Reflect.set(prx, 'a', 7) // true
+ Reflect.get(prx, 'a') // true
+ Reflect.has(prx, 'a') // true
+}
+
+export function reflect_method1_set(prx: ESObject) {
+ Reflect.set(prx, 'a', 7) // true
+}
+
+export function reflect_method1_get(prx: ESObject) {
+ Reflect.get(prx, 'a') // true
+}
+
+export function reflect_method1_ownKeys(prx: ESObject) {
+ Reflect.ownKeys(prx) // ['a']
+}
+
+export function reflect_method1_has(prx: ESObject) {
+ Reflect.has(prx, 'a') // true
+}
diff --git a/ets2panda/linter/test/interop/reflect_built_in.ets b/ets2panda/linter/test/interop/reflect_built_in.ets
index 63eb6869e286dacf17910c0e1f44dc2feab1b3fa..90b377fc15ded3c6fd2617cfedbe2c12d2adbc67 100644
--- a/ets2panda/linter/test/interop/reflect_built_in.ets
+++ b/ets2panda/linter/test/interop/reflect_built_in.ets
@@ -12,8 +12,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
import { X } from "./oh_modules/reflect_export"
export function foo(prx: Object) {
@@ -29,3 +27,34 @@ export function bar(obj: Object) {
foo(new X()); //illegal
bar(new X()); //illegal
+
+import {Reflect1} from "./oh_modules/reflect_export"
+import {obj_Reflect1} from "./oh_modules/reflect_export"
+import {objInter} from "./oh_modules/reflect_export"
+
+function reflect_method2(prx: Object) {
+ Reflect.get(prx, 'a') // 'hello'
+ Reflect.set(prx, 'a', 'world') // true
+ Reflect.ownKeys(prx) // ['a']
+}
+
+reflect_method2(new Reflect1());
+Reflect.get(new Reflect1(), 'a')
+Reflect.set(new Reflect1(), 'a', 'world')
+Reflect.ownKeys(new Reflect1())
+let obj = new Reflect1()
+reflect_method2(obj);
+Reflect.get(obj, 'a')
+Reflect.set(obj, 'a', 'world')
+Reflect.ownKeys(obj)
+
+reflect_method2(obj_Reflect1);
+Reflect.get(obj_Reflect1, 'a')
+Reflect.set(obj_Reflect1, 'a', 'world')
+Reflect.ownKeys(obj_Reflect1)
+
+reflect_method2(objInter);
+Reflect.get(objInter, 'a')
+Reflect.set(objInter, 'a', 'world')
+Reflect.ownKeys(objInter)
+
diff --git a/ets2panda/linter/test/interop/reflect_built_in.ets.arkts2.json b/ets2panda/linter/test/interop/reflect_built_in.ets.arkts2.json
index e874522c3461ed3f99cfdaba2eb5321e4fed2062..1dd3014588321927823c43ed04ac101322efcd1e 100644
--- a/ets2panda/linter/test/interop/reflect_built_in.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/reflect_built_in.ets.arkts2.json
@@ -14,6 +14,76 @@
"limitations under the License."
],
"result": [
+ {
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 23,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 37,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 27,
+ "column": 1,
+ "endLine": 27,
+ "endColumn": 14,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 27,
+ "column": 1,
+ "endLine": 27,
+ "endColumn": 14,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 29,
+ "column": 1,
+ "endLine": 29,
+ "endColumn": 14,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 29,
"column": 1,
@@ -28,7 +98,257 @@
"line": 31,
"column": 1,
"endLine": 31,
- "endColumn": 14,
+ "endColumn": 53,
+ "problem": "ImportAfterStatement",
+ "suggest": "",
+ "rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 32,
+ "column": 1,
+ "endLine": 32,
+ "endColumn": 57,
+ "problem": "ImportAfterStatement",
+ "suggest": "",
+ "rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 33,
+ "column": 1,
+ "endLine": 33,
+ "endColumn": 53,
+ "problem": "ImportAfterStatement",
+ "suggest": "",
+ "rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 36,
+ "column": 5,
+ "endLine": 36,
+ "endColumn": 26,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 5,
+ "endLine": 37,
+ "endColumn": 35,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 38,
+ "column": 5,
+ "endLine": 38,
+ "endColumn": 25,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 1,
+ "endLine": 41,
+ "endColumn": 33,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 1,
+ "endLine": 41,
+ "endColumn": 33,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 1,
+ "endLine": 42,
+ "endColumn": 33,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 42,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 44,
+ "column": 1,
+ "endLine": 44,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 1,
+ "endLine": 46,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 1,
+ "endLine": 46,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 47,
+ "column": 1,
+ "endLine": 47,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 48,
+ "column": 1,
+ "endLine": 48,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 49,
+ "column": 1,
+ "endLine": 49,
+ "endColumn": 21,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 51,
+ "column": 1,
+ "endLine": 51,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 51,
+ "column": 1,
+ "endLine": 51,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 52,
+ "column": 1,
+ "endLine": 52,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 53,
+ "column": 1,
+ "endLine": 53,
+ "endColumn": 40,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 1,
+ "endLine": 54,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 1,
+ "endLine": 56,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 1,
+ "endLine": 56,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 1,
+ "endLine": 57,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 58,
+ "column": 1,
+ "endLine": 58,
+ "endColumn": 36,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 59,
+ "column": 1,
+ "endLine": 59,
+ "endColumn": 26,
"problem": "InteropCallReflect",
"suggest": "",
"rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
diff --git a/ets2panda/linter/test/interop/reflect_built_in.ets.json b/ets2panda/linter/test/interop/reflect_built_in.ets.json
index ca88f857e960b437dcf767c0ac40be998c8f1236..eb39c3a62eade80d254e29b2184277b8f560519d 100644
--- a/ets2panda/linter/test/interop/reflect_built_in.ets.json
+++ b/ets2panda/linter/test/interop/reflect_built_in.ets.json
@@ -13,5 +13,286 @@
"See the License for the specific language governing permissions and",
"limitations under the License."
],
- "result": []
+ "result": [
+ {
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 23,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 24,
+ "column": 5,
+ "endLine": 24,
+ "endColumn": 37,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 27,
+ "column": 1,
+ "endLine": 27,
+ "endColumn": 14,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 29,
+ "column": 1,
+ "endLine": 29,
+ "endColumn": 14,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 31,
+ "column": 1,
+ "endLine": 31,
+ "endColumn": 53,
+ "problem": "ImportAfterStatement",
+ "suggest": "",
+ "rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 32,
+ "column": 1,
+ "endLine": 32,
+ "endColumn": 57,
+ "problem": "ImportAfterStatement",
+ "suggest": "",
+ "rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 33,
+ "column": 1,
+ "endLine": 33,
+ "endColumn": 53,
+ "problem": "ImportAfterStatement",
+ "suggest": "",
+ "rule": "\"import\" statements after other statements are not allowed (arkts-no-misplaced-imports)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 36,
+ "column": 5,
+ "endLine": 36,
+ "endColumn": 26,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 5,
+ "endLine": 37,
+ "endColumn": 35,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 38,
+ "column": 5,
+ "endLine": 38,
+ "endColumn": 25,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 1,
+ "endLine": 41,
+ "endColumn": 33,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 1,
+ "endLine": 42,
+ "endColumn": 33,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 43,
+ "column": 1,
+ "endLine": 43,
+ "endColumn": 42,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 44,
+ "column": 1,
+ "endLine": 44,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 1,
+ "endLine": 46,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 47,
+ "column": 1,
+ "endLine": 47,
+ "endColumn": 22,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 48,
+ "column": 1,
+ "endLine": 48,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 49,
+ "column": 1,
+ "endLine": 49,
+ "endColumn": 21,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 51,
+ "column": 1,
+ "endLine": 51,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 52,
+ "column": 1,
+ "endLine": 52,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 53,
+ "column": 1,
+ "endLine": 53,
+ "endColumn": 40,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 1,
+ "endLine": 54,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 1,
+ "endLine": 56,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 1,
+ "endLine": 57,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 58,
+ "column": 1,
+ "endLine": 58,
+ "endColumn": 36,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 59,
+ "column": 1,
+ "endLine": 59,
+ "endColumn": 26,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ }
+ ]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/unary_operation_js_obj.ets.arkts2.json b/ets2panda/linter/test/interop/unary_operation_js_obj.ets.arkts2.json
index c935900b7d1d21c644eeee800720f6856bb53686..13a3e19d15ee7fea3b3f88f509ec22e8b06a9f6c 100644
--- a/ets2panda/linter/test/interop/unary_operation_js_obj.ets.arkts2.json
+++ b/ets2panda/linter/test/interop/unary_operation_js_obj.ets.arkts2.json
@@ -20,6 +20,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 17,
+ "column": 2,
+ "endLine": 17,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 18,
"column": 1,
@@ -30,6 +40,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 19,
"column": 1,
@@ -40,6 +60,16 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 20,
"column": 1,
@@ -49,6 +79,16 @@
"suggest": "",
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
+ },
+ {
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/interop/unary_operation_js_obj.ets.autofix.json b/ets2panda/linter/test/interop/unary_operation_js_obj.ets.autofix.json
index f9cba0c86385e77bfab4a5d927efed836a9f886f..07cb92eb1a8bc087eb8a4dbbc0cf08eda485a176 100644
--- a/ets2panda/linter/test/interop/unary_operation_js_obj.ets.autofix.json
+++ b/ets2panda/linter/test/interop/unary_operation_js_obj.ets.autofix.json
@@ -65,6 +65,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 17,
+ "column": 2,
+ "endLine": 17,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 657,
+ "end": 664,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 17,
+ "column": 2,
+ "endLine": 17,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 18,
"column": 1,
@@ -86,6 +107,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 667,
+ "end": 674,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 18,
+ "column": 2,
+ "endLine": 18,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 19,
"column": 1,
@@ -107,6 +149,27 @@
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
},
+ {
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 677,
+ "end": 684,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 19,
+ "column": 2,
+ "endLine": 19,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
+ },
{
"line": 20,
"column": 1,
@@ -127,6 +190,27 @@
"suggest": "",
"rule": "Interop object does not have property num (arkts-interop-js2s-unary-op)",
"severity": "ERROR"
+ },
+ {
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 9,
+ "problem": "InteropObjectProperty",
+ "autofix": [
+ {
+ "start": 687,
+ "end": 694,
+ "replacementText": "foo.getPropertyByName(\"num\")",
+ "line": 20,
+ "column": 2,
+ "endLine": 20,
+ "endColumn": 9
+ }
+ ],
+ "suggest": "",
+ "rule": "Properties of interop objects can't be accessed directly (arkts-interop-js2s-access-js-prop)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/class_no_constructor.ets b/ets2panda/linter/test/main/class_no_constructor.ets
index c13aa9b54ab1233ccdae9d6496c2f0e0147d1570..deb0598bc5812f2ca3d2f86f185f3c1020dbd16b 100644
--- a/ets2panda/linter/test/main/class_no_constructor.ets
+++ b/ets2panda/linter/test/main/class_no_constructor.ets
@@ -17,3 +17,13 @@
class A {}
const variable = new A().constructor
+
+let a = new A()
+console.log(a.constructor + "");
+
+function foo3(): A {
+ return new A();
+}
+console.log(foo3().constructor + "");
+
+console.log(A.constructor + "");
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json b/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json
index 12f07f6aefeab765323013130ba3901be22f8c2f..940e32b5f0db67161e3a9f6e0e07d54293a1c577 100644
--- a/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json
+++ b/ets2panda/linter/test/main/class_no_constructor.ets.arkts2.json
@@ -21,7 +21,37 @@
"endColumn": 37,
"problem": "NoConstructorOnClass",
"suggest": "",
- "rule": "The Class object does not have a constructor. (arkts-no-arkts-constructor)",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 22,
+ "column": 13,
+ "endLine": 22,
+ "endColumn": 26,
+ "problem": "NoConstructorOnClass",
+ "suggest": "",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 27,
+ "column": 13,
+ "endLine": 27,
+ "endColumn": 31,
+ "problem": "NoConstructorOnClass",
+ "suggest": "",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 29,
+ "column": 13,
+ "endLine": 29,
+ "endColumn": 26,
+ "problem": "NoConstructorOnClass",
+ "suggest": "",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
"severity": "ERROR"
}
]
diff --git a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets
index c13aa9b54ab1233ccdae9d6496c2f0e0147d1570..deb0598bc5812f2ca3d2f86f185f3c1020dbd16b 100644
--- a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets
+++ b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.ets
@@ -17,3 +17,13 @@
class A {}
const variable = new A().constructor
+
+let a = new A()
+console.log(a.constructor + "");
+
+function foo3(): A {
+ return new A();
+}
+console.log(foo3().constructor + "");
+
+console.log(A.constructor + "");
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json
index 12f07f6aefeab765323013130ba3901be22f8c2f..940e32b5f0db67161e3a9f6e0e07d54293a1c577 100644
--- a/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json
+++ b/ets2panda/linter/test/main/class_no_constructor.ets.migrate.json
@@ -21,7 +21,37 @@
"endColumn": 37,
"problem": "NoConstructorOnClass",
"suggest": "",
- "rule": "The Class object does not have a constructor. (arkts-no-arkts-constructor)",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 22,
+ "column": 13,
+ "endLine": 22,
+ "endColumn": 26,
+ "problem": "NoConstructorOnClass",
+ "suggest": "",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 27,
+ "column": 13,
+ "endLine": 27,
+ "endColumn": 31,
+ "problem": "NoConstructorOnClass",
+ "suggest": "",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 29,
+ "column": 13,
+ "endLine": 29,
+ "endColumn": 26,
+ "problem": "NoConstructorOnClass",
+ "suggest": "",
+ "rule": "Objects have no constructor property in ArkTS1.2 (arkts-obj-no-constructor)",
"severity": "ERROR"
}
]
diff --git a/ets2panda/linter/test/main/default_required_args.ets b/ets2panda/linter/test/main/default_required_args.ets
index cbccdb42cf31c8bdadd160e270814f14ec671829..613b5ac307b2e9511bb410529417538300235a77 100644
--- a/ets2panda/linter/test/main/default_required_args.ets
+++ b/ets2panda/linter/test/main/default_required_args.ets
@@ -57,4 +57,17 @@ function log(level: string = 'info', some: string, message?: string): void {
function config(debug: boolean = true, verbose?: boolean): string { //legal
return `Debug: ${debug ?? false}, Verbose: ${verbose ?? false}`;
+}
+
+export class DefaultArgsA {
+ readonly left: number;
+ readonly right: number;
+ constructor(left: number = 0.0, right: number) { // 漏扫
+ this.left = left;
+ this.right = right;
+ }
+
+ defaultArgsFoo1(left: number = 0.0, right: number): number {
+ return left + right;
+ }
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/default_required_args.ets.arkts2.json b/ets2panda/linter/test/main/default_required_args.ets.arkts2.json
index bbcdfcb08550783a6ee99afe23bf3147a0334e5f..33a446a7017acd20152c663e8960786dc2be8dd3 100644
--- a/ets2panda/linter/test/main/default_required_args.ets.arkts2.json
+++ b/ets2panda/linter/test/main/default_required_args.ets.arkts2.json
@@ -173,6 +173,26 @@
"suggest": "",
"rule": "Default parameters must be placed after mandatory parameters (arkts-default-args-behind-required-args)",
"severity": "ERROR"
+ },
+ {
+ "line": 65,
+ "column": 15,
+ "endLine": 65,
+ "endColumn": 19,
+ "problem": "DefaultArgsBehindRequiredArgs",
+ "suggest": "",
+ "rule": "Default parameters must be placed after mandatory parameters (arkts-default-args-behind-required-args)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 70,
+ "column": 19,
+ "endLine": 70,
+ "endColumn": 23,
+ "problem": "DefaultArgsBehindRequiredArgs",
+ "suggest": "",
+ "rule": "Default parameters must be placed after mandatory parameters (arkts-default-args-behind-required-args)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/limited_stdlib_api.ets.arkts2.json b/ets2panda/linter/test/main/limited_stdlib_api.ets.arkts2.json
index affb940597e111dc0e82345f4353752bafc14639..e7bcfd0d2d6ae20f818ec874cc5ce5345d993f87 100644
--- a/ets2panda/linter/test/main/limited_stdlib_api.ets.arkts2.json
+++ b/ets2panda/linter/test/main/limited_stdlib_api.ets.arkts2.json
@@ -354,6 +354,16 @@
"rule": "Using \"Object.getOwnPropertyNames\" is not allowed in this API (arkts-builtin-object-getOwnPropertyNames))",
"severity": "ERROR"
},
+ {
+ "line": 85,
+ "column": 1,
+ "endLine": 85,
+ "endColumn": 51,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 85,
"column": 9,
@@ -364,6 +374,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 86,
+ "column": 1,
+ "endLine": 86,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 86,
"column": 9,
@@ -384,6 +404,16 @@
"rule": "Classes cannot be used as objects (arkts-no-classes-as-obj)",
"severity": "ERROR"
},
+ {
+ "line": 87,
+ "column": 1,
+ "endLine": 87,
+ "endColumn": 36,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 87,
"column": 9,
@@ -404,6 +434,16 @@
"rule": "Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj-literals)",
"severity": "ERROR"
},
+ {
+ "line": 88,
+ "column": 1,
+ "endLine": 88,
+ "endColumn": 34,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 88,
"column": 9,
@@ -414,6 +454,26 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 89,
+ "column": 1,
+ "endLine": 89,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 90,
+ "column": 1,
+ "endLine": 90,
+ "endColumn": 53,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 90,
"column": 9,
@@ -424,6 +484,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 91,
+ "column": 1,
+ "endLine": 91,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 91,
"column": 9,
@@ -434,6 +504,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 92,
+ "column": 1,
+ "endLine": 92,
+ "endColumn": 25,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 92,
"column": 9,
@@ -444,6 +524,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 93,
+ "column": 1,
+ "endLine": 93,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 93,
"column": 9,
@@ -454,6 +544,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 94,
+ "column": 1,
+ "endLine": 94,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 94,
"column": 9,
@@ -464,6 +564,66 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 95,
+ "column": 1,
+ "endLine": 95,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 96,
+ "column": 1,
+ "endLine": 96,
+ "endColumn": 46,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 97,
+ "column": 1,
+ "endLine": 97,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 98,
+ "column": 1,
+ "endLine": 98,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 99,
+ "column": 1,
+ "endLine": 99,
+ "endColumn": 38,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 100,
+ "column": 1,
+ "endLine": 100,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 100,
"column": 27,
@@ -474,6 +634,16 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 101,
+ "column": 1,
+ "endLine": 101,
+ "endColumn": 29,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 101,
"column": 19,
diff --git a/ets2panda/linter/test/main/limited_stdlib_api.ets.json b/ets2panda/linter/test/main/limited_stdlib_api.ets.json
index 0b436b2d76124a34bd7ba9709100409e382d9762..75f3d7b10e9b7ff3f3b2577f5761e7c4a0b426f1 100644
--- a/ets2panda/linter/test/main/limited_stdlib_api.ets.json
+++ b/ets2panda/linter/test/main/limited_stdlib_api.ets.json
@@ -274,6 +274,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 85,
+ "column": 1,
+ "endLine": 85,
+ "endColumn": 51,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 86,
"column": 1,
@@ -284,6 +294,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 86,
+ "column": 1,
+ "endLine": 86,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 86,
"column": 32,
@@ -304,6 +324,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 87,
+ "column": 1,
+ "endLine": 87,
+ "endColumn": 36,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 87,
"column": 32,
@@ -324,6 +354,26 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 88,
+ "column": 1,
+ "endLine": 88,
+ "endColumn": 34,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 89,
+ "column": 1,
+ "endLine": 89,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 90,
"column": 1,
@@ -334,6 +384,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 90,
+ "column": 1,
+ "endLine": 90,
+ "endColumn": 53,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 91,
"column": 1,
@@ -344,6 +404,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 91,
+ "column": 1,
+ "endLine": 91,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 92,
"column": 1,
@@ -354,6 +424,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 92,
+ "column": 1,
+ "endLine": 92,
+ "endColumn": 25,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 93,
"column": 1,
@@ -364,6 +444,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 93,
+ "column": 1,
+ "endLine": 93,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 94,
"column": 1,
@@ -374,6 +464,86 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 94,
+ "column": 1,
+ "endLine": 94,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 95,
+ "column": 1,
+ "endLine": 95,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 96,
+ "column": 1,
+ "endLine": 96,
+ "endColumn": 46,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 97,
+ "column": 1,
+ "endLine": 97,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 98,
+ "column": 1,
+ "endLine": 98,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 99,
+ "column": 1,
+ "endLine": 99,
+ "endColumn": 38,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 100,
+ "column": 1,
+ "endLine": 100,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 101,
+ "column": 1,
+ "endLine": 101,
+ "endColumn": 29,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 104,
"column": 32,
diff --git a/ets2panda/linter/test/main/parameter_properties.ets.arkts2.json b/ets2panda/linter/test/main/parameter_properties.ets.arkts2.json
index 70d8cbcfa4df48aa1d164eeb6c88d7ce540829db..a4cd69b2173b1a88ba75033250ea92bf6425fb14 100644
--- a/ets2panda/linter/test/main/parameter_properties.ets.arkts2.json
+++ b/ets2panda/linter/test/main/parameter_properties.ets.arkts2.json
@@ -84,6 +84,16 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 34,
+ "column": 33,
+ "endLine": 34,
+ "endColumn": 34,
+ "problem": "DefaultArgsBehindRequiredArgs",
+ "suggest": "",
+ "rule": "Default parameters must be placed after mandatory parameters (arkts-default-args-behind-required-args)",
+ "severity": "ERROR"
+ },
{
"line": 34,
"column": 26,
diff --git a/ets2panda/linter/test/main/parameter_properties.ets.autofix.json b/ets2panda/linter/test/main/parameter_properties.ets.autofix.json
index cd0ccd75eea12792b175ccd228d33d91e6cb5b8f..6e139d8b9efbcf3d68ec3cd90f849f418ed88c76 100644
--- a/ets2panda/linter/test/main/parameter_properties.ets.autofix.json
+++ b/ets2panda/linter/test/main/parameter_properties.ets.autofix.json
@@ -269,6 +269,16 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 34,
+ "column": 33,
+ "endLine": 34,
+ "endColumn": 34,
+ "problem": "DefaultArgsBehindRequiredArgs",
+ "suggest": "",
+ "rule": "Default parameters must be placed after mandatory parameters (arkts-default-args-behind-required-args)",
+ "severity": "ERROR"
+ },
{
"line": 34,
"column": 26,
diff --git a/ets2panda/linter/test/main/parameter_properties.ets.migrate.json b/ets2panda/linter/test/main/parameter_properties.ets.migrate.json
index 03cac9f4e47f0a3b2f7cc5966991917f603ee4d0..f5bbbab5413b751bcc375dc9c7b788749e4839a7 100644
--- a/ets2panda/linter/test/main/parameter_properties.ets.migrate.json
+++ b/ets2panda/linter/test/main/parameter_properties.ets.migrate.json
@@ -14,6 +14,16 @@
"limitations under the License."
],
"result": [
+ {
+ "line": 43,
+ "column": 24,
+ "endLine": 43,
+ "endColumn": 25,
+ "problem": "DefaultArgsBehindRequiredArgs",
+ "suggest": "",
+ "rule": "Default parameters must be placed after mandatory parameters (arkts-default-args-behind-required-args)",
+ "severity": "ERROR"
+ },
{
"line": 54,
"column": 15,
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets b/ets2panda/linter/test/main/property_access_by_index.ets
index a19d0154802a6a02c685d077909c66a95a19c687..6424bdfec86f3cf4c1a962d3c841a9f8de416604 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets
+++ b/ets2panda/linter/test/main/property_access_by_index.ets
@@ -182,3 +182,15 @@ class MyClass extends collections.BitVector {
}
}
}
+
+class AA {
+ i: number = 1.0;
+ func(b: number) {}
+}
+let a: object = new AA();
+let b: AA = new AA();
+b[i] = 1.0;
+a["i"] = 2.0;
+(b as object)["i"] = 2.0;
+(b as object)["func"](1.0);
+(b as object)["func1"](1.0);
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets.args.json b/ets2panda/linter/test/main/property_access_by_index.ets.args.json
index 7341e330faa243cfdd4795226601488b62c2f729..25a9f93078835dbe3acbe3159154fe49f5a70b35 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets.args.json
+++ b/ets2panda/linter/test/main/property_access_by_index.ets.args.json
@@ -14,8 +14,8 @@
"limitations under the License."
],
"mode": {
- "autofix": "",
+ "autofix": "--arkts-2",
"arkts2": "",
- "migrate": ""
+ "migrate": "--arkts-2"
}
}
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets.arkts2.json b/ets2panda/linter/test/main/property_access_by_index.ets.arkts2.json
index 2a1abb34901f25ae0d08bf050bffe8a5ad58b166..f04269d5b686b90edb6030ec0056e6266c8d7927 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets.arkts2.json
+++ b/ets2panda/linter/test/main/property_access_by_index.ets.arkts2.json
@@ -953,6 +953,56 @@
"suggest": "",
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
+ },
+ {
+ "line": 192,
+ "column": 1,
+ "endLine": 192,
+ "endColumn": 5,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 193,
+ "column": 1,
+ "endLine": 193,
+ "endColumn": 7,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 194,
+ "column": 1,
+ "endLine": 194,
+ "endColumn": 19,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 195,
+ "column": 1,
+ "endLine": 195,
+ "endColumn": 22,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 196,
+ "column": 1,
+ "endLine": 196,
+ "endColumn": 23,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets.autofix.json b/ets2panda/linter/test/main/property_access_by_index.ets.autofix.json
index f1ca92fec988d00ac08f6046bf68933a27b0ca0a..5c1a5ed91bdc1bccc97a2ad5b14416a8077f1bb4 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets.autofix.json
+++ b/ets2panda/linter/test/main/property_access_by_index.ets.autofix.json
@@ -14,6 +14,27 @@
"limitations under the License."
],
"result": [
+ {
+ "line": 16,
+ "column": 10,
+ "endLine": 16,
+ "endColumn": 21,
+ "problem": "NoNeedStdLibSendableContainer",
+ "autofix": [
+ {
+ "start": 662,
+ "end": 713,
+ "replacementText": "",
+ "line": 16,
+ "column": 10,
+ "endLine": 16,
+ "endColumn": 21
+ }
+ ],
+ "suggest": "",
+ "rule": "Sendable containers are not supported (arkts-no-need-stdlib-sendable-containers)",
+ "severity": "ERROR"
+ },
{
"line": 22,
"column": 3,
@@ -34,6 +55,256 @@
"rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
"severity": "ERROR"
},
+ {
+ "line": 33,
+ "column": 5,
+ "endLine": 33,
+ "endColumn": 23,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1158,
+ "end": 1176,
+ "replacementText": "ar1: number[] = [1, 2, 3, 4]",
+ "line": 33,
+ "column": 5,
+ "endLine": 33,
+ "endColumn": 23
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 33,
+ "column": 12,
+ "endLine": 33,
+ "endColumn": 13,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1165,
+ "end": 1166,
+ "replacementText": "1.0",
+ "line": 33,
+ "column": 12,
+ "endLine": 33,
+ "endColumn": 13
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 33,
+ "column": 15,
+ "endLine": 33,
+ "endColumn": 16,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1168,
+ "end": 1169,
+ "replacementText": "2.0",
+ "line": 33,
+ "column": 15,
+ "endLine": 33,
+ "endColumn": 16
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 33,
+ "column": 18,
+ "endLine": 33,
+ "endColumn": 19,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1171,
+ "end": 1172,
+ "replacementText": "3.0",
+ "line": 33,
+ "column": 18,
+ "endLine": 33,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 33,
+ "column": 21,
+ "endLine": 33,
+ "endColumn": 22,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1174,
+ "end": 1175,
+ "replacementText": "4.0",
+ "line": 33,
+ "column": 21,
+ "endLine": 33,
+ "endColumn": 22
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 34,
+ "column": 12,
+ "endLine": 34,
+ "endColumn": 13,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1189,
+ "end": 1190,
+ "replacementText": "1.0",
+ "line": 34,
+ "column": 12,
+ "endLine": 34,
+ "endColumn": 13
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 34,
+ "column": 20,
+ "endLine": 34,
+ "endColumn": 21,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1197,
+ "end": 1198,
+ "replacementText": "3.0",
+ "line": 34,
+ "column": 20,
+ "endLine": 34,
+ "endColumn": 21
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 34,
+ "column": 23,
+ "endLine": 34,
+ "endColumn": 24,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1200,
+ "end": 1201,
+ "replacementText": "4.0",
+ "line": 34,
+ "column": 23,
+ "endLine": 34,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 37,
+ "column": 1,
+ "endLine": 37,
+ "endColumn": 7,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 38,
+ "column": 1,
+ "endLine": 38,
+ "endColumn": 7,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 39,
+ "column": 1,
+ "endLine": 39,
+ "endColumn": 7,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 41,
+ "column": 7,
+ "endLine": 41,
+ "endColumn": 24,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1260,
+ "end": 1277,
+ "replacementText": "r0: number = [1, 2, 3][1]",
+ "line": 41,
+ "column": 7,
+ "endLine": 41,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 42,
+ "column": 5,
+ "endLine": 42,
+ "endColumn": 25,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1283,
+ "end": 1303,
+ "replacementText": "r1: number = [1, 2, 3, 4][0]",
+ "line": 42,
+ "column": 5,
+ "endLine": 42,
+ "endColumn": 25
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 3,
+ "endLine": 46,
+ "endColumn": 9,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
{
"line": 50,
"column": 3,
@@ -44,6 +315,405 @@
"rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
"severity": "ERROR"
},
+ {
+ "line": 53,
+ "column": 5,
+ "endLine": 53,
+ "endColumn": 19,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1422,
+ "end": 1436,
+ "replacementText": "array1: number[] = [0, 1]",
+ "line": 53,
+ "column": 5,
+ "endLine": 53,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 53,
+ "column": 15,
+ "endLine": 53,
+ "endColumn": 16,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1432,
+ "end": 1433,
+ "replacementText": "0.0",
+ "line": 53,
+ "column": 15,
+ "endLine": 53,
+ "endColumn": 16
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 53,
+ "column": 17,
+ "endLine": 53,
+ "endColumn": 18,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1434,
+ "end": 1435,
+ "replacementText": "1.0",
+ "line": 53,
+ "column": 17,
+ "endLine": 53,
+ "endColumn": 18
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 5,
+ "endLine": 54,
+ "endColumn": 25,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1441,
+ "end": 1461,
+ "replacementText": "array2: number[] = [1, 2, 3, 4, 5]",
+ "line": 54,
+ "column": 5,
+ "endLine": 54,
+ "endColumn": 25
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 15,
+ "endLine": 54,
+ "endColumn": 16,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1451,
+ "end": 1452,
+ "replacementText": "1.0",
+ "line": 54,
+ "column": 15,
+ "endLine": 54,
+ "endColumn": 16
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 17,
+ "endLine": 54,
+ "endColumn": 18,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1453,
+ "end": 1454,
+ "replacementText": "2.0",
+ "line": 54,
+ "column": 17,
+ "endLine": 54,
+ "endColumn": 18
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 19,
+ "endLine": 54,
+ "endColumn": 20,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1455,
+ "end": 1456,
+ "replacementText": "3.0",
+ "line": 54,
+ "column": 19,
+ "endLine": 54,
+ "endColumn": 20
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 21,
+ "endLine": 54,
+ "endColumn": 22,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1457,
+ "end": 1458,
+ "replacementText": "4.0",
+ "line": 54,
+ "column": 21,
+ "endLine": 54,
+ "endColumn": 22
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 54,
+ "column": 23,
+ "endLine": 54,
+ "endColumn": 24,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1459,
+ "end": 1460,
+ "replacementText": "5.0",
+ "line": 54,
+ "column": 23,
+ "endLine": 54,
+ "endColumn": 24
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 25,
+ "endLine": 55,
+ "endColumn": 26,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1486,
+ "end": 1487,
+ "replacementText": "1.0",
+ "line": 55,
+ "column": 25,
+ "endLine": 55,
+ "endColumn": 26
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 27,
+ "endLine": 55,
+ "endColumn": 28,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1488,
+ "end": 1489,
+ "replacementText": "2.0",
+ "line": 55,
+ "column": 27,
+ "endLine": 55,
+ "endColumn": 28
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 29,
+ "endLine": 55,
+ "endColumn": 30,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1490,
+ "end": 1491,
+ "replacementText": "3.0",
+ "line": 55,
+ "column": 29,
+ "endLine": 55,
+ "endColumn": 30
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 31,
+ "endLine": 55,
+ "endColumn": 32,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1492,
+ "end": 1493,
+ "replacementText": "4.0",
+ "line": 55,
+ "column": 31,
+ "endLine": 55,
+ "endColumn": 32
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 55,
+ "column": 33,
+ "endLine": 55,
+ "endColumn": 34,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1494,
+ "end": 1495,
+ "replacementText": "5.0",
+ "line": 55,
+ "column": 33,
+ "endLine": 55,
+ "endColumn": 34
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 30,
+ "endLine": 56,
+ "endColumn": 31,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1526,
+ "end": 1527,
+ "replacementText": "1.0",
+ "line": 56,
+ "column": 30,
+ "endLine": 56,
+ "endColumn": 31
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 32,
+ "endLine": 56,
+ "endColumn": 33,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1528,
+ "end": 1529,
+ "replacementText": "2.0",
+ "line": 56,
+ "column": 32,
+ "endLine": 56,
+ "endColumn": 33
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 34,
+ "endLine": 56,
+ "endColumn": 35,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1530,
+ "end": 1531,
+ "replacementText": "3.0",
+ "line": 56,
+ "column": 34,
+ "endLine": 56,
+ "endColumn": 35
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 36,
+ "endLine": 56,
+ "endColumn": 37,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1532,
+ "end": 1533,
+ "replacementText": "4.0",
+ "line": 56,
+ "column": 36,
+ "endLine": 56,
+ "endColumn": 37
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 56,
+ "column": 38,
+ "endLine": 56,
+ "endColumn": 39,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1534,
+ "end": 1535,
+ "replacementText": "5.0",
+ "line": 56,
+ "column": 38,
+ "endLine": 56,
+ "endColumn": 39
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
{
"line": 57,
"column": 5,
@@ -54,6 +724,541 @@
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
},
+ {
+ "line": 57,
+ "column": 14,
+ "endLine": 57,
+ "endColumn": 27,
+ "problem": "GenericCallNoTypeArgs",
+ "suggest": "",
+ "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 57,
+ "column": 24,
+ "endLine": 57,
+ "endColumn": 26,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1560,
+ "end": 1562,
+ "replacementText": "10.0",
+ "line": 57,
+ "column": 24,
+ "endLine": 57,
+ "endColumn": 26
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 58,
+ "column": 28,
+ "endLine": 58,
+ "endColumn": 30,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1591,
+ "end": 1593,
+ "replacementText": "10.0",
+ "line": 58,
+ "column": 28,
+ "endLine": 58,
+ "endColumn": 30
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 59,
+ "column": 29,
+ "endLine": 59,
+ "endColumn": 31,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1623,
+ "end": 1625,
+ "replacementText": "10.0",
+ "line": 59,
+ "column": 29,
+ "endLine": 59,
+ "endColumn": 31
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 60,
+ "column": 36,
+ "endLine": 60,
+ "endColumn": 38,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1662,
+ "end": 1664,
+ "replacementText": "10.0",
+ "line": 60,
+ "column": 36,
+ "endLine": 60,
+ "endColumn": 38
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 61,
+ "column": 29,
+ "endLine": 61,
+ "endColumn": 31,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1694,
+ "end": 1696,
+ "replacementText": "10.0",
+ "line": 61,
+ "column": 29,
+ "endLine": 61,
+ "endColumn": 31
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 62,
+ "column": 31,
+ "endLine": 62,
+ "endColumn": 33,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1728,
+ "end": 1730,
+ "replacementText": "10.0",
+ "line": 62,
+ "column": 31,
+ "endLine": 62,
+ "endColumn": 33
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 63,
+ "column": 30,
+ "endLine": 63,
+ "endColumn": 32,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1761,
+ "end": 1763,
+ "replacementText": "10.0",
+ "line": 63,
+ "column": 30,
+ "endLine": 63,
+ "endColumn": 32
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 64,
+ "column": 31,
+ "endLine": 64,
+ "endColumn": 33,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1795,
+ "end": 1797,
+ "replacementText": "10.0",
+ "line": 64,
+ "column": 31,
+ "endLine": 64,
+ "endColumn": 33
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 65,
+ "column": 32,
+ "endLine": 65,
+ "endColumn": 34,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1830,
+ "end": 1832,
+ "replacementText": "10.0",
+ "line": 65,
+ "column": 32,
+ "endLine": 65,
+ "endColumn": 34
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 66,
+ "column": 32,
+ "endLine": 66,
+ "endColumn": 34,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1865,
+ "end": 1867,
+ "replacementText": "10.0",
+ "line": 66,
+ "column": 32,
+ "endLine": 66,
+ "endColumn": 34
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 67,
+ "column": 33,
+ "endLine": 67,
+ "endColumn": 35,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1901,
+ "end": 1903,
+ "replacementText": "10.0",
+ "line": 67,
+ "column": 33,
+ "endLine": 67,
+ "endColumn": 35
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 68,
+ "column": 34,
+ "endLine": 68,
+ "endColumn": 36,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 1938,
+ "end": 1940,
+ "replacementText": "10.0",
+ "line": 68,
+ "column": 34,
+ "endLine": 68,
+ "endColumn": 36
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 70,
+ "column": 1,
+ "endLine": 70,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 71,
+ "column": 1,
+ "endLine": 71,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 72,
+ "column": 1,
+ "endLine": 72,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 73,
+ "column": 1,
+ "endLine": 73,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 74,
+ "column": 1,
+ "endLine": 74,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 75,
+ "column": 1,
+ "endLine": 75,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 76,
+ "column": 1,
+ "endLine": 76,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 77,
+ "column": 1,
+ "endLine": 77,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 78,
+ "column": 1,
+ "endLine": 78,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 79,
+ "column": 1,
+ "endLine": 79,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 80,
+ "column": 1,
+ "endLine": 80,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 81,
+ "column": 1,
+ "endLine": 81,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 82,
+ "column": 1,
+ "endLine": 82,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 83,
+ "column": 1,
+ "endLine": 83,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 84,
+ "column": 1,
+ "endLine": 84,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 85,
+ "column": 1,
+ "endLine": 85,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 97,
+ "column": 1,
+ "endLine": 97,
+ "endColumn": 18,
+ "problem": "UnsupportPropNameFromValue",
+ "suggest": "",
+ "rule": "Enum cannot get member name by member value (arkts-unsupport-prop-name-from-value)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 98,
+ "column": 1,
+ "endLine": 98,
+ "endColumn": 17,
+ "problem": "UnsupportPropNameFromValue",
+ "suggest": "",
+ "rule": "Enum cannot get member name by member value (arkts-unsupport-prop-name-from-value)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 99,
+ "column": 1,
+ "endLine": 99,
+ "endColumn": 17,
+ "problem": "UnsupportPropNameFromValue",
+ "suggest": "",
+ "rule": "Enum cannot get member name by member value (arkts-unsupport-prop-name-from-value)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 105,
+ "column": 31,
+ "endLine": 105,
+ "endColumn": 32,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 2388,
+ "end": 2389,
+ "replacementText": "1.0",
+ "line": 105,
+ "column": 31,
+ "endLine": 105,
+ "endColumn": 32
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 105,
+ "column": 33,
+ "endLine": 105,
+ "endColumn": 34,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 2390,
+ "end": 2391,
+ "replacementText": "2.0",
+ "line": 105,
+ "column": 33,
+ "endLine": 105,
+ "endColumn": 34
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 105,
+ "column": 35,
+ "endLine": 105,
+ "endColumn": 36,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 2392,
+ "end": 2393,
+ "replacementText": "3.0",
+ "line": 105,
+ "column": 35,
+ "endLine": 105,
+ "endColumn": 36
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 107,
+ "column": 24,
+ "endLine": 107,
+ "endColumn": 39,
+ "problem": "ArrayIndexExprType",
+ "suggest": "",
+ "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 107,
+ "column": 24,
+ "endLine": 107,
+ "endColumn": 39,
+ "problem": "BuiltinSymbolIterator",
+ "suggest": "",
+ "rule": "Using \"Symbol.iterator\" is not allowed in this API (arkts-builtin-symbol-iterator)",
+ "severity": "ERROR"
+ },
{
"line": 108,
"column": 5,
@@ -64,6 +1269,46 @@
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
},
+ {
+ "line": 108,
+ "column": 17,
+ "endLine": 108,
+ "endColumn": 40,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 112,
+ "column": 15,
+ "endLine": 112,
+ "endColumn": 38,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 117,
+ "column": 20,
+ "endLine": 117,
+ "endColumn": 35,
+ "problem": "ArrayIndexExprType",
+ "suggest": "",
+ "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 117,
+ "column": 20,
+ "endLine": 117,
+ "endColumn": 35,
+ "problem": "BuiltinSymbolIterator",
+ "suggest": "",
+ "rule": "Using \"Symbol.iterator\" is not allowed in this API (arkts-builtin-symbol-iterator)",
+ "severity": "ERROR"
+ },
{
"line": 118,
"column": 5,
@@ -74,6 +1319,36 @@
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
},
+ {
+ "line": 118,
+ "column": 15,
+ "endLine": 118,
+ "endColumn": 36,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 121,
+ "column": 13,
+ "endLine": 121,
+ "endColumn": 34,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 139,
+ "column": 12,
+ "endLine": 139,
+ "endColumn": 31,
+ "problem": "CreatingPrimitiveTypes",
+ "suggest": "",
+ "rule": "Primitive types are normalized with their boxed type (arkts-primitive-type-normalization)",
+ "severity": "ERROR"
+ },
{
"line": 159,
"column": 3,
@@ -83,6 +1358,234 @@
"suggest": "",
"rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
"severity": "ERROR"
+ },
+ {
+ "line": 172,
+ "column": 1,
+ "endLine": 172,
+ "endColumn": 9,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 173,
+ "column": 1,
+ "endLine": 173,
+ "endColumn": 13,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 174,
+ "column": 1,
+ "endLine": 174,
+ "endColumn": 13,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 176,
+ "column": 1,
+ "endLine": 176,
+ "endColumn": 10,
+ "problem": "LimitedStdLibNoSendableDecorator",
+ "autofix": [
+ {
+ "start": 3701,
+ "end": 3710,
+ "replacementText": "",
+ "line": 176,
+ "column": 1,
+ "endLine": 176,
+ "endColumn": 10
+ }
+ ],
+ "suggest": "",
+ "rule": "Usage of standard library is restricted(arkts-limited-stdlib-no-sendable-decorator)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 177,
+ "column": 23,
+ "endLine": 177,
+ "endColumn": 34,
+ "problem": "NoNeedStdLibSendableContainer",
+ "autofix": [
+ {
+ "start": 3733,
+ "end": 3754,
+ "replacementText": "BitVector",
+ "line": 177,
+ "column": 23,
+ "endLine": 177,
+ "endColumn": 34
+ }
+ ],
+ "suggest": "",
+ "rule": "Sendable containers are not supported (arkts-no-need-stdlib-sendable-containers)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 179,
+ "column": 11,
+ "endLine": 179,
+ "endColumn": 12,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 3785,
+ "end": 3786,
+ "replacementText": "0.0",
+ "line": 179,
+ "column": 11,
+ "endLine": 179,
+ "endColumn": 12
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 180,
+ "column": 14,
+ "endLine": 180,
+ "endColumn": 19,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 3802,
+ "end": 3807,
+ "replacementText": "i: number = 0",
+ "line": 180,
+ "column": 14,
+ "endLine": 180,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 180,
+ "column": 18,
+ "endLine": 180,
+ "endColumn": 19,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 3806,
+ "end": 3807,
+ "replacementText": "0.0",
+ "line": 180,
+ "column": 18,
+ "endLine": 180,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 181,
+ "column": 17,
+ "endLine": 181,
+ "endColumn": 18,
+ "problem": "NumericSemantics",
+ "autofix": [
+ {
+ "start": 3849,
+ "end": 3850,
+ "replacementText": "1.0",
+ "line": 181,
+ "column": 17,
+ "endLine": 181,
+ "endColumn": 18
+ }
+ ],
+ "suggest": "",
+ "rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 192,
+ "column": 1,
+ "endLine": 192,
+ "endColumn": 5,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 193,
+ "column": 1,
+ "endLine": 193,
+ "endColumn": 7,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 194,
+ "column": 1,
+ "endLine": 194,
+ "endColumn": 19,
+ "problem": "PropertyAccessByIndex",
+ "autofix": [
+ {
+ "replacementText": "b.i",
+ "start": 3992,
+ "end": 4010,
+ "line": 194,
+ "column": 1,
+ "endLine": 194,
+ "endColumn": 19
+ }
+ ],
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 195,
+ "column": 1,
+ "endLine": 195,
+ "endColumn": 22,
+ "problem": "PropertyAccessByIndex",
+ "autofix": [
+ {
+ "replacementText": "b.func",
+ "start": 4018,
+ "end": 4039,
+ "line": 195,
+ "column": 1,
+ "endLine": 195,
+ "endColumn": 22
+ }
+ ],
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 196,
+ "column": 1,
+ "endLine": 196,
+ "endColumn": 23,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets.json b/ets2panda/linter/test/main/property_access_by_index.ets.json
index f1ca92fec988d00ac08f6046bf68933a27b0ca0a..18153ecebacd4a6737b2d4af02623fe7c41582df 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets.json
+++ b/ets2panda/linter/test/main/property_access_by_index.ets.json
@@ -83,6 +83,16 @@
"suggest": "",
"rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
"severity": "ERROR"
+ },
+ {
+ "line": 192,
+ "column": 1,
+ "endLine": 192,
+ "endColumn": 5,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets.migrate.ets b/ets2panda/linter/test/main/property_access_by_index.ets.migrate.ets
index a19d0154802a6a02c685d077909c66a95a19c687..6d696292479ae1de787de6f538bcd47e72cf3c4b 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets.migrate.ets
+++ b/ets2panda/linter/test/main/property_access_by_index.ets.migrate.ets
@@ -13,7 +13,7 @@
* limitations under the License.
*/
import {OhosInterface} from './oh_modules/ohos_lib';
-import { collections } from './@arkts.collections';
+
// #14071
class A {
v: string = '';
@@ -30,16 +30,16 @@ function test() {
return GetProperty(a, 'v') + GetProperty(a, 'u');
}
-let ar1 = [1, 2, 3, 4];
-let ar2 = [1, '2', 3, 4];
+let ar1: number[] = [1.0, 2.0, 3.0, 4.0];
+let ar2 = [1.0, '2', 3.0, 4.0];
let ar3: number[] = [];
ar1[2];
ar2[2];
ar3[2];
-const r0 = [1, 2, 3][1];
-let r1 = [1, 2, 3, 4][0]
+const r0: number = [1, 2, 3][1];
+let r1: number = [1, 2, 3, 4][0]
let r2 = [1, '2', 3, 4][0]
function fobject1(o: object) {
@@ -50,22 +50,22 @@ function fobject2(o: Object) {
o['k']
}
-let array1 = [0,1]
-let array2 = [1,2,3,4,5]
-let array3: number[] = [1,2,3,4,5]
-let array4: Array = [1,2,3,4,5]
-let array5 = new Array(10)
-let array6 = new Int8Array(10)
-let array7 = new Uint8Array(10)
-let array8 = new Uint8ClampedArray(10)
-let array9 = new Int16Array(10)
-let array10 = new Uint16Array(10)
-let array11 = new Int32Array(10)
-let array12 = new Uint32Array(10)
-let array13 = new Float32Array(10)
-let array14 = new Float64Array(10)
-let array15 = new BigInt64Array(10)
-let array16 = new BigUint64Array(10)
+let array1: number[] = [0.0, 1.0]
+let array2: number[] = [1.0, 2.0, 3.0, 4.0, 5.0]
+let array3: number[] = [1.0,2.0,3.0,4.0,5.0]
+let array4: Array = [1.0,2.0,3.0,4.0,5.0]
+let array5 = new Array(10.0)
+let array6 = new Int8Array(10.0)
+let array7 = new Uint8Array(10.0)
+let array8 = new Uint8ClampedArray(10.0)
+let array9 = new Int16Array(10.0)
+let array10 = new Uint16Array(10.0)
+let array11 = new Int32Array(10.0)
+let array12 = new Uint32Array(10.0)
+let array13 = new Float32Array(10.0)
+let array14 = new Float64Array(10.0)
+let array15 = new BigInt64Array(10.0)
+let array16 = new BigUint64Array(10.0)
array1[0];
array2[0];
@@ -102,7 +102,7 @@ CCCCCCCCC[CCCCCCCCC.KATE]
CCCCCCCCC[CCCCCCCCC.BOB]
CCCCCCCCC[CCCCCCCCC.ROB]
-let arr32 = new Float32Array([1,2,3])
+let arr32 = new Float32Array([1.0,2.0,3.0])
let iter_arr32 = arr32[Symbol.iterator]()
let tmp_arr32 = iter_arr32.next().value;
@@ -173,12 +173,24 @@ mmap1[1];
mmap2['222'];
mmap3["kkr"];
-@Sendable
-class MyClass extends collections.BitVector {
+
+class MyClass extends BitVector {
constructor() {
- super(0);
- for (let i = 0; i < this.length; i++) {
- this[i] = 1;
+ super(0.0);
+ for (let i: number = 0.0; i < this.length; i++) {
+ this[i] = 1.0;
}
}
}
+
+class AA {
+ i: number = 1.0;
+ func(b: number) {}
+}
+let a: object = new AA();
+let b: AA = new AA();
+b[i] = 1.0;
+a["i"] = 2.0;
+b.i = 2.0;
+b.func(1.0);
+(b as object)["func1"](1.0);
diff --git a/ets2panda/linter/test/main/property_access_by_index.ets.migrate.json b/ets2panda/linter/test/main/property_access_by_index.ets.migrate.json
index e700885404cdb3909d85aea7ff974569658ce43f..729a3b75ebb00fb7a3e31695d6ecdf5619c45801 100644
--- a/ets2panda/linter/test/main/property_access_by_index.ets.migrate.json
+++ b/ets2panda/linter/test/main/property_access_by_index.ets.migrate.json
@@ -34,6 +34,46 @@
"rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
"severity": "ERROR"
},
+ {
+ "line": 37,
+ "column": 1,
+ "endLine": 37,
+ "endColumn": 7,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 38,
+ "column": 1,
+ "endLine": 38,
+ "endColumn": 7,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 39,
+ "column": 1,
+ "endLine": 39,
+ "endColumn": 7,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 46,
+ "column": 3,
+ "endLine": 46,
+ "endColumn": 9,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
{
"line": 50,
"column": 3,
@@ -48,12 +88,232 @@
"line": 57,
"column": 5,
"endLine": 57,
- "endColumn": 27,
+ "endColumn": 29,
"problem": "AnyType",
"suggest": "",
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
},
+ {
+ "line": 57,
+ "column": 14,
+ "endLine": 57,
+ "endColumn": 29,
+ "problem": "GenericCallNoTypeArgs",
+ "suggest": "",
+ "rule": "Type inference in case of generic function calls is limited (arkts-no-inferred-generic-params)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 70,
+ "column": 1,
+ "endLine": 70,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 71,
+ "column": 1,
+ "endLine": 71,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 72,
+ "column": 1,
+ "endLine": 72,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 73,
+ "column": 1,
+ "endLine": 73,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 74,
+ "column": 1,
+ "endLine": 74,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 75,
+ "column": 1,
+ "endLine": 75,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 76,
+ "column": 1,
+ "endLine": 76,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 77,
+ "column": 1,
+ "endLine": 77,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 78,
+ "column": 1,
+ "endLine": 78,
+ "endColumn": 10,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 79,
+ "column": 1,
+ "endLine": 79,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 80,
+ "column": 1,
+ "endLine": 80,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 81,
+ "column": 1,
+ "endLine": 81,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 82,
+ "column": 1,
+ "endLine": 82,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 83,
+ "column": 1,
+ "endLine": 83,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 84,
+ "column": 1,
+ "endLine": 84,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 85,
+ "column": 1,
+ "endLine": 85,
+ "endColumn": 11,
+ "problem": "RuntimeArrayCheck",
+ "suggest": "",
+ "rule": "Array bound not checked. (arkts-runtime-array-check)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 97,
+ "column": 1,
+ "endLine": 97,
+ "endColumn": 18,
+ "problem": "UnsupportPropNameFromValue",
+ "suggest": "",
+ "rule": "Enum cannot get member name by member value (arkts-unsupport-prop-name-from-value)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 98,
+ "column": 1,
+ "endLine": 98,
+ "endColumn": 17,
+ "problem": "UnsupportPropNameFromValue",
+ "suggest": "",
+ "rule": "Enum cannot get member name by member value (arkts-unsupport-prop-name-from-value)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 99,
+ "column": 1,
+ "endLine": 99,
+ "endColumn": 17,
+ "problem": "UnsupportPropNameFromValue",
+ "suggest": "",
+ "rule": "Enum cannot get member name by member value (arkts-unsupport-prop-name-from-value)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 107,
+ "column": 24,
+ "endLine": 107,
+ "endColumn": 39,
+ "problem": "ArrayIndexExprType",
+ "suggest": "",
+ "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 107,
+ "column": 24,
+ "endLine": 107,
+ "endColumn": 39,
+ "problem": "BuiltinSymbolIterator",
+ "suggest": "",
+ "rule": "Using \"Symbol.iterator\" is not allowed in this API (arkts-builtin-symbol-iterator)",
+ "severity": "ERROR"
+ },
{
"line": 108,
"column": 5,
@@ -64,6 +324,46 @@
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
},
+ {
+ "line": 108,
+ "column": 17,
+ "endLine": 108,
+ "endColumn": 40,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 112,
+ "column": 15,
+ "endLine": 112,
+ "endColumn": 38,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 117,
+ "column": 20,
+ "endLine": 117,
+ "endColumn": 35,
+ "problem": "ArrayIndexExprType",
+ "suggest": "",
+ "rule": "The index expression must be of a numeric type (arkts-array-index-expr-type)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 117,
+ "column": 20,
+ "endLine": 117,
+ "endColumn": 35,
+ "problem": "BuiltinSymbolIterator",
+ "suggest": "",
+ "rule": "Using \"Symbol.iterator\" is not allowed in this API (arkts-builtin-symbol-iterator)",
+ "severity": "ERROR"
+ },
{
"line": 118,
"column": 5,
@@ -74,6 +374,36 @@
"rule": "Use explicit types instead of \"any\", \"unknown\" (arkts-no-any-unknown)",
"severity": "ERROR"
},
+ {
+ "line": 118,
+ "column": 15,
+ "endLine": 118,
+ "endColumn": 36,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 121,
+ "column": 13,
+ "endLine": 121,
+ "endColumn": 34,
+ "problem": "AvoidUnionTypes",
+ "suggest": "",
+ "rule": "Avoid using union types (arkts-common-union-member-access)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 139,
+ "column": 12,
+ "endLine": 139,
+ "endColumn": 31,
+ "problem": "CreatingPrimitiveTypes",
+ "suggest": "",
+ "rule": "Primitive types are normalized with their boxed type (arkts-primitive-type-normalization)",
+ "severity": "ERROR"
+ },
{
"line": 159,
"column": 3,
@@ -83,6 +413,76 @@
"suggest": "",
"rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
"severity": "ERROR"
+ },
+ {
+ "line": 172,
+ "column": 1,
+ "endLine": 172,
+ "endColumn": 9,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 173,
+ "column": 1,
+ "endLine": 173,
+ "endColumn": 13,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 174,
+ "column": 1,
+ "endLine": 174,
+ "endColumn": 13,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 181,
+ "column": 7,
+ "endLine": 181,
+ "endColumn": 14,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 192,
+ "column": 1,
+ "endLine": 192,
+ "endColumn": 5,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 193,
+ "column": 1,
+ "endLine": 193,
+ "endColumn": 7,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 196,
+ "column": 1,
+ "endLine": 196,
+ "endColumn": 23,
+ "problem": "PropertyAccessByIndex",
+ "suggest": "",
+ "rule": "Indexed access is not supported for fields (arkts-no-props-by-index)",
+ "severity": "ERROR"
}
]
}
\ No newline at end of file
diff --git a/ets2panda/linter/test/main/styles_decorator_struct_1.ets.arkts2.json b/ets2panda/linter/test/main/styles_decorator_struct_1.ets.arkts2.json
index c4491ce76c85e78ae3744d72560d97a5696cf707..fe74c1ad2825954e1d238e3eb922d7c8dee0bfce 100644
--- a/ets2panda/linter/test/main/styles_decorator_struct_1.ets.arkts2.json
+++ b/ets2panda/linter/test/main/styles_decorator_struct_1.ets.arkts2.json
@@ -74,6 +74,16 @@
"rule": "\"@Styles\" decorator is not supported (arkui-no-styles-decorator)",
"severity": "ERROR"
},
+ {
+ "line": 103,
+ "column": 24,
+ "endLine": 103,
+ "endColumn": 37,
+ "problem": "LimitedVoidTypeFromSdk",
+ "suggest": "",
+ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)",
+ "severity": "ERROR"
+ },
{
"line": 105,
"column": 3,
diff --git a/ets2panda/linter/test/main/styles_decorator_struct_1.ets.autofix.json b/ets2panda/linter/test/main/styles_decorator_struct_1.ets.autofix.json
index 3575cf7b84094c6a660c67fa31e736c2d582318a..129ca0c809bae479faa7a539ed0ce1c67d345b03 100644
--- a/ets2panda/linter/test/main/styles_decorator_struct_1.ets.autofix.json
+++ b/ets2panda/linter/test/main/styles_decorator_struct_1.ets.autofix.json
@@ -176,6 +176,16 @@
"rule": "\"@Styles\" decorator is not supported (arkui-no-styles-decorator)",
"severity": "ERROR"
},
+ {
+ "line": 103,
+ "column": 24,
+ "endLine": 103,
+ "endColumn": 37,
+ "problem": "LimitedVoidTypeFromSdk",
+ "suggest": "",
+ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)",
+ "severity": "ERROR"
+ },
{
"line": 105,
"column": 3,
diff --git a/ets2panda/linter/test/main/styles_decorator_struct_1.ets.migrate.json b/ets2panda/linter/test/main/styles_decorator_struct_1.ets.migrate.json
index 0e17a7dad5ec718d7915c535975cf8c692eecda6..b0daffd23c9959179c3a9632a63638689ccc439f 100644
--- a/ets2panda/linter/test/main/styles_decorator_struct_1.ets.migrate.json
+++ b/ets2panda/linter/test/main/styles_decorator_struct_1.ets.migrate.json
@@ -14,6 +14,16 @@
"limitations under the License."
],
"result": [
+ {
+ "line": 101,
+ "column": 24,
+ "endLine": 101,
+ "endColumn": 37,
+ "problem": "LimitedVoidTypeFromSdk",
+ "suggest": "",
+ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)",
+ "severity": "ERROR"
+ },
{
"line": 105,
"column": 26,
diff --git a/ets2panda/linter/test/main/styles_decorator_struct_2.ets.arkts2.json b/ets2panda/linter/test/main/styles_decorator_struct_2.ets.arkts2.json
index 7ead10ecf2f79fd56a689b48ec5e545119665be1..1e21ab6ed34665cddbc059e3ea8e8188b5f854ce 100644
--- a/ets2panda/linter/test/main/styles_decorator_struct_2.ets.arkts2.json
+++ b/ets2panda/linter/test/main/styles_decorator_struct_2.ets.arkts2.json
@@ -34,6 +34,16 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 101,
+ "column": 24,
+ "endLine": 101,
+ "endColumn": 37,
+ "problem": "LimitedVoidTypeFromSdk",
+ "suggest": "",
+ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)",
+ "severity": "ERROR"
+ },
{
"line": 105,
"column": 26,
diff --git a/ets2panda/linter/test/main/styles_decorator_struct_2.ets.autofix.json b/ets2panda/linter/test/main/styles_decorator_struct_2.ets.autofix.json
index 524d890233577d219c594060a424967e22f1b257..bfbd6bbec990feb4e8b0382f3887eb2ef30bdc25 100644
--- a/ets2panda/linter/test/main/styles_decorator_struct_2.ets.autofix.json
+++ b/ets2panda/linter/test/main/styles_decorator_struct_2.ets.autofix.json
@@ -56,6 +56,16 @@
"rule": "Numeric semantics is different for integer values (arkts-numeric-semantic)",
"severity": "ERROR"
},
+ {
+ "line": 101,
+ "column": 24,
+ "endLine": 101,
+ "endColumn": 37,
+ "problem": "LimitedVoidTypeFromSdk",
+ "suggest": "",
+ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)",
+ "severity": "ERROR"
+ },
{
"line": 105,
"column": 26,
diff --git a/ets2panda/linter/test/main/styles_decorator_struct_2.ets.migrate.json b/ets2panda/linter/test/main/styles_decorator_struct_2.ets.migrate.json
index 0e17a7dad5ec718d7915c535975cf8c692eecda6..b0daffd23c9959179c3a9632a63638689ccc439f 100644
--- a/ets2panda/linter/test/main/styles_decorator_struct_2.ets.migrate.json
+++ b/ets2panda/linter/test/main/styles_decorator_struct_2.ets.migrate.json
@@ -14,6 +14,16 @@
"limitations under the License."
],
"result": [
+ {
+ "line": 101,
+ "column": 24,
+ "endLine": 101,
+ "endColumn": 37,
+ "problem": "LimitedVoidTypeFromSdk",
+ "suggest": "",
+ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)",
+ "severity": "ERROR"
+ },
{
"line": 105,
"column": 26,
diff --git a/ets2panda/linter/test/rules/rule144.ets.json b/ets2panda/linter/test/rules/rule144.ets.json
index c52a53a30f9636fb50e46086b03ff2f864d0fe20..9bbf5b7e7c41749d4583c23cfd4c6b7f4371e22e 100644
--- a/ets2panda/linter/test/rules/rule144.ets.json
+++ b/ets2panda/linter/test/rules/rule144.ets.json
@@ -274,6 +274,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 85,
+ "column": 1,
+ "endLine": 85,
+ "endColumn": 51,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 86,
"column": 1,
@@ -284,6 +294,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 86,
+ "column": 1,
+ "endLine": 86,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 86,
"column": 32,
@@ -304,6 +324,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 87,
+ "column": 1,
+ "endLine": 87,
+ "endColumn": 36,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 87,
"column": 32,
@@ -324,6 +354,26 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 88,
+ "column": 1,
+ "endLine": 88,
+ "endColumn": 34,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 89,
+ "column": 1,
+ "endLine": 89,
+ "endColumn": 32,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 90,
"column": 1,
@@ -334,6 +384,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 90,
+ "column": 1,
+ "endLine": 90,
+ "endColumn": 53,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 91,
"column": 1,
@@ -344,6 +404,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 91,
+ "column": 1,
+ "endLine": 91,
+ "endColumn": 27,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 92,
"column": 1,
@@ -354,6 +424,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 92,
+ "column": 1,
+ "endLine": 92,
+ "endColumn": 25,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 93,
"column": 1,
@@ -364,6 +444,16 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 93,
+ "column": 1,
+ "endLine": 93,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 94,
"column": 1,
@@ -374,6 +464,86 @@
"rule": "Usage of standard library is restricted (arkts-limited-stdlib)",
"severity": "ERROR"
},
+ {
+ "line": 94,
+ "column": 1,
+ "endLine": 94,
+ "endColumn": 30,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 95,
+ "column": 1,
+ "endLine": 95,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 96,
+ "column": 1,
+ "endLine": 96,
+ "endColumn": 46,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 97,
+ "column": 1,
+ "endLine": 97,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 98,
+ "column": 1,
+ "endLine": 98,
+ "endColumn": 39,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 99,
+ "column": 1,
+ "endLine": 99,
+ "endColumn": 38,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 100,
+ "column": 1,
+ "endLine": 100,
+ "endColumn": 31,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
+ {
+ "line": 101,
+ "column": 1,
+ "endLine": 101,
+ "endColumn": 29,
+ "problem": "InteropCallReflect",
+ "suggest": "",
+ "rule": "Reflect API usage is not allowed in interop calls when an \"Object\" parameter receives a class instance (arkts-interop-d2s-static-reflect-on-dynamic-instance)",
+ "severity": "ERROR"
+ },
{
"line": 104,
"column": 32,