arkanalyzer 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/arkanalyzer.json +8 -0
- package/lib/Config.d.ts +9 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +24 -11
- package/lib/Scene.d.ts +49 -42
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +124 -93
- package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -1
- package/lib/callgraph/common/Statistics.js +1 -1
- package/lib/callgraph/model/CallGraph.d.ts +3 -2
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +15 -5
- package/lib/callgraph/model/builder/CallGraphBuilder.js +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +35 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +89 -8
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +32 -5
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +378 -83
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +3 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +71 -18
- package/lib/core/base/Constant.d.ts +25 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +46 -8
- package/lib/core/base/Expr.d.ts +45 -40
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +236 -150
- package/lib/core/base/Local.d.ts +2 -2
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +2 -2
- package/lib/core/base/Ref.d.ts +38 -37
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +102 -70
- package/lib/core/base/Stmt.d.ts +4 -0
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +12 -1
- package/lib/core/base/Type.d.ts +4 -0
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +41 -17
- package/lib/core/common/ArkError.d.ts +15 -0
- package/lib/core/common/ArkError.d.ts.map +1 -0
- package/lib/core/common/ArkError.js +28 -0
- package/lib/core/common/ArkIRTransformer.d.ts +1 -1
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +24 -8
- package/lib/core/common/CfgBuilder.d.ts.map +1 -1
- package/lib/core/common/CfgBuilder.js +5 -0
- package/lib/core/common/Const.d.ts +15 -10
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +18 -11
- package/lib/core/common/DummyMainCreater.d.ts +2 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +28 -15
- package/lib/core/common/EtsConst.d.ts +1 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +2 -1
- package/lib/core/common/IRUtils.d.ts +6 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +29 -2
- package/lib/core/common/ModelUtils.d.ts +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +32 -32
- package/lib/core/common/TSConst.d.ts +10 -3
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TSConst.js +11 -4
- package/lib/core/common/TypeInference.d.ts +8 -2
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +218 -87
- package/lib/core/common/ValueUtil.d.ts +0 -4
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +8 -25
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +2 -4
- package/lib/core/dataflow/TiantAnalysis.js +2 -1
- package/lib/core/dataflow/Util.d.ts +1 -1
- package/lib/core/dataflow/Util.d.ts.map +1 -1
- package/lib/core/dataflow/Util.js +8 -7
- package/lib/core/graph/BasicBlock.d.ts +41 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +132 -1
- package/lib/core/graph/Cfg.d.ts +30 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +129 -6
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +3 -2
- package/lib/core/model/ArkBaseModel.d.ts +8 -0
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
- package/lib/core/model/ArkBaseModel.js +55 -3
- package/lib/core/model/ArkClass.d.ts +36 -30
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +78 -39
- package/lib/core/model/ArkExport.d.ts +3 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +10 -0
- package/lib/core/model/ArkField.d.ts +2 -0
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +3 -0
- package/lib/core/model/ArkFile.d.ts +4 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +20 -0
- package/lib/core/model/ArkImport.d.ts +2 -0
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +3 -0
- package/lib/core/model/ArkMetadata.d.ts +20 -0
- package/lib/core/model/ArkMetadata.d.ts.map +1 -0
- package/lib/core/model/ArkMetadata.js +44 -0
- package/lib/core/model/ArkMethod.d.ts +156 -53
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +309 -54
- package/lib/core/model/ArkNamespace.d.ts +4 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +13 -0
- package/lib/core/model/ArkSignature.d.ts +11 -5
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +38 -18
- package/lib/core/model/builder/ArkClassBuilder.d.ts +0 -1
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +9 -34
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +6 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +3 -0
- package/lib/core/model/builder/ArkFileBuilder.js +1 -1
- package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkImportBuilder.js +12 -5
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +87 -47
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +25 -2
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +4 -0
- package/lib/save/source/SourceField.d.ts.map +1 -1
- package/lib/save/source/SourceField.js +4 -0
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +7 -0
- package/lib/save/source/SourceModule.d.ts.map +1 -1
- package/lib/save/source/SourceModule.js +14 -9
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +4 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +15 -3
- package/lib/save/source/SourceTransformer.d.ts +6 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +72 -41
- package/lib/save/source/SourceUtils.d.ts.map +1 -1
- package/lib/save/source/SourceUtils.js +3 -2
- package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +41 -7
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -10
- package/lib/utils/crypto_utils.d.ts +6 -0
- package/lib/utils/crypto_utils.d.ts.map +1 -0
- package/lib/utils/crypto_utils.js +57 -0
- package/lib/utils/getAllFiles.d.ts +1 -1
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +4 -5
- package/package.json +3 -2
|
@@ -74,10 +74,11 @@ class SourceTransformer {
|
|
|
74
74
|
invokeExpr.getArgs().forEach((v) => {
|
|
75
75
|
args.push(this.valueToString(v));
|
|
76
76
|
});
|
|
77
|
+
let genericCode = this.genericTypesToString(invokeExpr.getRealGenericTypes());
|
|
77
78
|
if (SourceUtils_1.SourceUtils.isComponentAttributeInvoke(invokeExpr) && this.context.isInBuilderMethod()) {
|
|
78
|
-
return `.${methodName}(${args.join(', ')})`;
|
|
79
|
+
return `.${methodName}${genericCode}(${args.join(', ')})`;
|
|
79
80
|
}
|
|
80
|
-
return `${this.valueToString(invokeExpr.getBase())}.${methodName}(${args.join(', ')})`;
|
|
81
|
+
return `${this.valueToString(invokeExpr.getBase())}.${methodName}${genericCode}(${args.join(', ')})`;
|
|
81
82
|
}
|
|
82
83
|
staticInvokeExprToString(invokeExpr) {
|
|
83
84
|
let methodSignature = invokeExpr.getMethodSignature();
|
|
@@ -92,6 +93,7 @@ class SourceTransformer {
|
|
|
92
93
|
invokeExpr.getArgs().forEach((v) => {
|
|
93
94
|
args.push(this.valueToString(v));
|
|
94
95
|
});
|
|
96
|
+
let genericCode = this.genericTypesToString(invokeExpr.getRealGenericTypes());
|
|
95
97
|
if (this.context.isInBuilderMethod()) {
|
|
96
98
|
if (className === EtsConst_1.COMPONENT_CUSTOMVIEW) {
|
|
97
99
|
if (methodName === EtsConst_1.COMPONENT_CREATE_FUNCTION) {
|
|
@@ -109,7 +111,7 @@ class SourceTransformer {
|
|
|
109
111
|
if (className === EtsConst_1.COMPONENT_IF) {
|
|
110
112
|
return `if (${args.join(', ')})`;
|
|
111
113
|
}
|
|
112
|
-
return `${className}(${args.join(', ')})`;
|
|
114
|
+
return `${className}${genericCode}(${args.join(', ')})`;
|
|
113
115
|
}
|
|
114
116
|
if (SourceUtils_1.SourceUtils.isComponentIfBranchInvoke(invokeExpr)) {
|
|
115
117
|
let arg0 = invokeExpr.getArg(0);
|
|
@@ -125,9 +127,19 @@ class SourceTransformer {
|
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
129
|
if (className && className.length > 0) {
|
|
128
|
-
return `${className}.${methodName}(${args.join(', ')})`;
|
|
130
|
+
return `${className}.${methodName}${genericCode}(${args.join(', ')})`;
|
|
129
131
|
}
|
|
130
|
-
return `${methodName}(${args.join(', ')})`;
|
|
132
|
+
return `${methodName}${genericCode}(${args.join(', ')})`;
|
|
133
|
+
}
|
|
134
|
+
genericTypesToString(types) {
|
|
135
|
+
if (!types) {
|
|
136
|
+
return '';
|
|
137
|
+
}
|
|
138
|
+
let code = this.typeArrayToString(types);
|
|
139
|
+
if (code.length > 0) {
|
|
140
|
+
return `<${code}>`;
|
|
141
|
+
}
|
|
142
|
+
return '';
|
|
131
143
|
}
|
|
132
144
|
typeArrayToString(types, split = ', ') {
|
|
133
145
|
let typesStr = [];
|
|
@@ -264,21 +276,13 @@ class SourceTransformer {
|
|
|
264
276
|
}
|
|
265
277
|
typeToString(type) {
|
|
266
278
|
if (type instanceof Type_1.LiteralType) {
|
|
267
|
-
|
|
268
|
-
if (typeof literalName === 'string' && literalName.endsWith('Keyword')) {
|
|
269
|
-
return literalName.substring(0, literalName.length - 'Keyword'.length).toLowerCase();
|
|
270
|
-
}
|
|
271
|
-
return `${literalName}`;
|
|
279
|
+
return this.literalType2string(type);
|
|
272
280
|
}
|
|
273
281
|
if (type instanceof Type_1.PrimitiveType) {
|
|
274
282
|
return type.getName();
|
|
275
283
|
}
|
|
276
284
|
if (type instanceof Type_1.UnionType) {
|
|
277
|
-
|
|
278
|
-
for (const member of type.getTypes()) {
|
|
279
|
-
typesStr.push(this.typeToString(member));
|
|
280
|
-
}
|
|
281
|
-
return typesStr.join(' | ');
|
|
285
|
+
return this.unionType2string(type);
|
|
282
286
|
}
|
|
283
287
|
if (type instanceof Type_1.UnknownType) {
|
|
284
288
|
return 'any';
|
|
@@ -287,29 +291,10 @@ class SourceTransformer {
|
|
|
287
291
|
return 'void';
|
|
288
292
|
}
|
|
289
293
|
if (type instanceof Type_1.ClassType) {
|
|
290
|
-
|
|
291
|
-
if (SourceUtils_1.SourceUtils.isDefaultClass(name)) {
|
|
292
|
-
return 'any';
|
|
293
|
-
}
|
|
294
|
-
if (SourceUtils_1.SourceUtils.isAnonymousClass(name)) {
|
|
295
|
-
let cls = this.context.getClass(type.getClassSignature());
|
|
296
|
-
if (cls && cls.getCategory() === ArkClass_1.ClassCategory.TYPE_LITERAL) {
|
|
297
|
-
return this.anonymousClassToString(cls, this.context.getPrinter().getIndent());
|
|
298
|
-
}
|
|
299
|
-
return 'Object';
|
|
300
|
-
}
|
|
301
|
-
return name;
|
|
294
|
+
return this.classType2string(type);
|
|
302
295
|
}
|
|
303
296
|
if (type instanceof Type_1.ArrayType) {
|
|
304
|
-
|
|
305
|
-
for (let i = 0; i < type.getDimension(); i++) {
|
|
306
|
-
dimensions.push('[]');
|
|
307
|
-
}
|
|
308
|
-
let baseType = type.getBaseType();
|
|
309
|
-
if (baseType instanceof Type_1.UnionType) {
|
|
310
|
-
return `(${this.typeToString(baseType)})${dimensions.join('')}`;
|
|
311
|
-
}
|
|
312
|
-
return `${this.typeToString(baseType)}${dimensions.join('')}`;
|
|
297
|
+
return this.arrayType2string(type);
|
|
313
298
|
}
|
|
314
299
|
if (type instanceof Type_1.FunctionType) {
|
|
315
300
|
let methodSignature = type.getMethodSignature();
|
|
@@ -319,11 +304,7 @@ class SourceTransformer {
|
|
|
319
304
|
}
|
|
320
305
|
}
|
|
321
306
|
if (type instanceof Type_1.UnclearReferenceType) {
|
|
322
|
-
|
|
323
|
-
if (genericTypes.length > 0) {
|
|
324
|
-
return `${type.getName()}<${genericTypes.join(', ')}>`;
|
|
325
|
-
}
|
|
326
|
-
return type.getName();
|
|
307
|
+
return this.unclearReferenceType2string(type);
|
|
327
308
|
}
|
|
328
309
|
if (type instanceof Type_1.GenericType) {
|
|
329
310
|
return type.getName();
|
|
@@ -334,5 +315,55 @@ class SourceTransformer {
|
|
|
334
315
|
logger.info(`valueToString ${type.constructor} not support.`);
|
|
335
316
|
return type.toString();
|
|
336
317
|
}
|
|
318
|
+
literalType2string(type) {
|
|
319
|
+
let literalName = type.getLiteralName();
|
|
320
|
+
if (typeof literalName === 'string' && literalName.endsWith('Keyword')) {
|
|
321
|
+
return literalName.substring(0, literalName.length - 'Keyword'.length).toLowerCase();
|
|
322
|
+
}
|
|
323
|
+
return `${literalName}`;
|
|
324
|
+
}
|
|
325
|
+
unionType2string(type) {
|
|
326
|
+
let typesStr = [];
|
|
327
|
+
for (const member of type.getTypes()) {
|
|
328
|
+
typesStr.push(this.typeToString(member));
|
|
329
|
+
}
|
|
330
|
+
return typesStr.join(' | ');
|
|
331
|
+
}
|
|
332
|
+
arrayType2string(type) {
|
|
333
|
+
const dimensions = [];
|
|
334
|
+
for (let i = 0; i < type.getDimension(); i++) {
|
|
335
|
+
dimensions.push('[]');
|
|
336
|
+
}
|
|
337
|
+
let baseType = type.getBaseType();
|
|
338
|
+
if (baseType instanceof Type_1.UnionType) {
|
|
339
|
+
return `(${this.typeToString(baseType)})${dimensions.join('')}`;
|
|
340
|
+
}
|
|
341
|
+
return `${this.typeToString(baseType)}${dimensions.join('')}`;
|
|
342
|
+
}
|
|
343
|
+
unclearReferenceType2string(type) {
|
|
344
|
+
let genericTypes = type.getGenericTypes();
|
|
345
|
+
if (genericTypes.length > 0) {
|
|
346
|
+
return `${type.getName()}<${genericTypes.join(', ')}>`;
|
|
347
|
+
}
|
|
348
|
+
return type.getName();
|
|
349
|
+
}
|
|
350
|
+
classType2string(type) {
|
|
351
|
+
let name = type.getClassSignature().getClassName();
|
|
352
|
+
if (SourceUtils_1.SourceUtils.isDefaultClass(name)) {
|
|
353
|
+
return 'any';
|
|
354
|
+
}
|
|
355
|
+
if (SourceUtils_1.SourceUtils.isAnonymousClass(name)) {
|
|
356
|
+
let cls = this.context.getClass(type.getClassSignature());
|
|
357
|
+
if (cls && cls.getCategory() === ArkClass_1.ClassCategory.TYPE_LITERAL) {
|
|
358
|
+
return this.anonymousClassToString(cls, this.context.getPrinter().getIndent());
|
|
359
|
+
}
|
|
360
|
+
return 'Object';
|
|
361
|
+
}
|
|
362
|
+
let genericTypes = type.getRealGenericTypes();
|
|
363
|
+
if (genericTypes && genericTypes.length > 0) {
|
|
364
|
+
return `${name}<${genericTypes.join(', ')}>`;
|
|
365
|
+
}
|
|
366
|
+
return name;
|
|
367
|
+
}
|
|
337
368
|
}
|
|
338
369
|
exports.SourceTransformer = SourceTransformer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceUtils.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,qBAAqB,EAErB,mBAAmB,EACnB,oBAAoB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAS3D,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"SourceUtils.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,qBAAqB,EAErB,mBAAmB,EACnB,oBAAoB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAS3D,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAM7D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,qBAAa,WAAW;IACpB,OAAc,uBAAuB,sBAQlC;WAEW,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIvC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIxC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI1C,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,oBAAoB,GAAG,OAAO;WAqBvE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI7B,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM;WAOpC,cAAc,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO;WAcxD,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO;WAc3D,0BAA0B,CACpC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,GAAG,CAAC,qBAAqB,CAAa,GAChD,OAAO;WA2BI,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO;WAUnE,uBAAuB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO;WAajE,4BAA4B,CACtC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,YAAY,GAAG,SAAS,GACpC,MAAM;WAeK,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAevC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAY7C"}
|
|
@@ -50,6 +50,7 @@ const ArkClass_1 = require("../../core/model/ArkClass");
|
|
|
50
50
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
51
51
|
const Const_1 = require("../../core/common/Const");
|
|
52
52
|
const ohos_typescript_1 = __importDefault(require("ohos-typescript"));
|
|
53
|
+
const Const_2 = require("../../core/common/Const");
|
|
53
54
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'SourceUtils');
|
|
54
55
|
exports.CLASS_CATEGORY_COMPONENT = 100;
|
|
55
56
|
class SourceUtils {
|
|
@@ -60,7 +61,7 @@ class SourceUtils {
|
|
|
60
61
|
return name === Const_1.DEFAULT_ARK_CLASS_NAME;
|
|
61
62
|
}
|
|
62
63
|
static isAnonymousMethod(name) {
|
|
63
|
-
return name.startsWith(
|
|
64
|
+
return name.startsWith(Const_1.ANONYMOUS_METHOD_PREFIX);
|
|
64
65
|
}
|
|
65
66
|
static isConstructorMethod(name) {
|
|
66
67
|
return name === 'constructor';
|
|
@@ -83,7 +84,7 @@ class SourceUtils {
|
|
|
83
84
|
return leftOp.getName() === op1.getName() && operator === op && op2.getValue() === '1';
|
|
84
85
|
}
|
|
85
86
|
static isTemp(name) {
|
|
86
|
-
return name.startsWith(
|
|
87
|
+
return name.startsWith(Const_2.TEMP_LOCAL_PREFIX);
|
|
87
88
|
}
|
|
88
89
|
static getOriginType(cls) {
|
|
89
90
|
if (cls.hasComponentDecorator()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfgStructualAnalysis.d.ts","sourceRoot":"","sources":["../../src/utils/CfgStructualAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,oBAAY,aAAa;IACrB,MAAM,IAAA;IACN,EAAE,IAAA;IACF,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,QAAQ,IAAA;IACR,EAAE,IAAA;IACF,QAAQ,IAAA;IACR,KAAK,IAAA;IACL,GAAG,IAAA;IACH,YAAY,IAAA;CACf;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7F,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,OAAO,CAAmD;gBAEtD,GAAG,EAAE,GAAG;IAsBb,QAAQ,IAAI,YAAY;IAIxB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAM7C,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,GAAE,GAAG,CAAC,YAAY,CAAa;IAUvG,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"CfgStructualAnalysis.d.ts","sourceRoot":"","sources":["../../src/utils/CfgStructualAnalysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -145,12 +145,15 @@ class AbstractFlowGraph {
|
|
|
145
145
|
let dom = this.buildDominator();
|
|
146
146
|
let loops = [];
|
|
147
147
|
for (const header of this.nodes) {
|
|
148
|
-
let innermost
|
|
148
|
+
let innermost;
|
|
149
149
|
let longest = 0;
|
|
150
150
|
let backEdges = this.getBackEdges(dom, header);
|
|
151
151
|
if (backEdges.size === 0) {
|
|
152
152
|
continue;
|
|
153
153
|
}
|
|
154
|
+
if (this.isSelfLoopNode(header)) {
|
|
155
|
+
loops.push(new Set([header]));
|
|
156
|
+
}
|
|
154
157
|
for (const start of backEdges) {
|
|
155
158
|
let loop = this.naturalLoop(start, header);
|
|
156
159
|
if (!innermost || loop.size > longest) {
|
|
@@ -218,6 +221,21 @@ class AbstractFlowGraph {
|
|
|
218
221
|
}
|
|
219
222
|
return loop;
|
|
220
223
|
}
|
|
224
|
+
isSelfLoopNode(node) {
|
|
225
|
+
let inSucc = false;
|
|
226
|
+
let inPred = false;
|
|
227
|
+
for (const pred of node.getPred()) {
|
|
228
|
+
if (pred === node) {
|
|
229
|
+
inPred = true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
for (const succ of node.getSucc()) {
|
|
233
|
+
if (succ === node) {
|
|
234
|
+
inSucc = true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return inSucc && inPred;
|
|
238
|
+
}
|
|
221
239
|
isForLoopIncNode(node) {
|
|
222
240
|
for (const loop of this.loopMap.values()) {
|
|
223
241
|
if (loop.getType() === RegionType.FOR_LOOP_REGION) {
|
|
@@ -401,6 +419,9 @@ class AbstractFlowGraph {
|
|
|
401
419
|
}
|
|
402
420
|
if (new Set(node.getPred()).has(node) && new Set(node.getSucc()).has(node)) {
|
|
403
421
|
nodeSet.add(node);
|
|
422
|
+
if (inLoop) {
|
|
423
|
+
return region === null || region === void 0 ? void 0 : region.getType();
|
|
424
|
+
}
|
|
404
425
|
return RegionType.SELF_LOOP_REGION;
|
|
405
426
|
}
|
|
406
427
|
if (node.getSucc().length !== 2) {
|
|
@@ -440,11 +461,15 @@ class AbstractFlowGraph {
|
|
|
440
461
|
return undefined;
|
|
441
462
|
}
|
|
442
463
|
cyclicRegionType(nodeSet) {
|
|
443
|
-
var _a, _b;
|
|
464
|
+
var _a, _b, _c;
|
|
444
465
|
let nodes = Array.from(nodeSet);
|
|
445
466
|
let header = nodes[0];
|
|
446
467
|
if (nodeSet.size === 1) {
|
|
447
|
-
|
|
468
|
+
let tail = (_a = nodes[0].getBlock()) === null || _a === void 0 ? void 0 : _a.getTail();
|
|
469
|
+
if (tail instanceof Stmt_1.ArkIfStmt) {
|
|
470
|
+
return RegionType.DO_WHILE_LOOP_REGION;
|
|
471
|
+
}
|
|
472
|
+
return RegionType.WHILE_LOOP_REGION;
|
|
448
473
|
}
|
|
449
474
|
let back = nodes[1];
|
|
450
475
|
// exit loop from back
|
|
@@ -458,7 +483,7 @@ class AbstractFlowGraph {
|
|
|
458
483
|
}
|
|
459
484
|
}
|
|
460
485
|
// for
|
|
461
|
-
if (back.getSucc().length === 1 && ((
|
|
486
|
+
if (back.getSucc().length === 1 && ((_c = (_b = back.getBlock()) === null || _b === void 0 ? void 0 : _b.getStmts()) === null || _c === void 0 ? void 0 : _c.length) === 1) {
|
|
462
487
|
let isForLoop = true;
|
|
463
488
|
for (const pred of header.getPred()) {
|
|
464
489
|
if (nodeSet.has(pred) && pred !== back) {
|
|
@@ -715,7 +740,12 @@ class NaturalLoopRegion extends Region {
|
|
|
715
740
|
super(nset, type);
|
|
716
741
|
let nodes = Array.from(nset);
|
|
717
742
|
this.header = nodes[0];
|
|
718
|
-
|
|
743
|
+
if (nset.size > 1) {
|
|
744
|
+
this.back = nodes[1];
|
|
745
|
+
}
|
|
746
|
+
else {
|
|
747
|
+
this.back = nodes[0];
|
|
748
|
+
}
|
|
719
749
|
this.control = new Set([this.header]);
|
|
720
750
|
}
|
|
721
751
|
replace() {
|
|
@@ -794,7 +824,9 @@ class WhileLoopRegion extends NaturalLoopRegion {
|
|
|
794
824
|
}
|
|
795
825
|
traversal(callback) {
|
|
796
826
|
this.header.traversal(callback, CodeBlockType.WHILE);
|
|
797
|
-
this.
|
|
827
|
+
if (this.header !== this.back) {
|
|
828
|
+
this.back.traversal(callback, CodeBlockType.NORMAL);
|
|
829
|
+
}
|
|
798
830
|
callback(undefined, CodeBlockType.COMPOUND_END);
|
|
799
831
|
}
|
|
800
832
|
getExitNode() {
|
|
@@ -809,7 +841,9 @@ class DoWhileLoopRegion extends NaturalLoopRegion {
|
|
|
809
841
|
}
|
|
810
842
|
traversal(callback) {
|
|
811
843
|
callback(undefined, CodeBlockType.DO);
|
|
812
|
-
this.header
|
|
844
|
+
if (this.header !== this.back) {
|
|
845
|
+
this.header.traversal(callback, CodeBlockType.NORMAL);
|
|
846
|
+
}
|
|
813
847
|
this.back.traversal(callback, CodeBlockType.DO_WHILE);
|
|
814
848
|
}
|
|
815
849
|
getExitNode() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callGraphUtils.d.ts","sourceRoot":"","sources":["../../src/utils/callGraphUtils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7E,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAAyB;IAE/C,IAAI,QAAQ,IAAI,eAAe,EAAE,CAEhC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,EAEnC;IAED,IAAI,aAAa,IAAI,eAAe,EAAE,CAErC;IAED,IAAI,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,EAExC;IAEM,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS;IAIvE,mBAAmB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO;IAKxD,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAU/C,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAUpD,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAIpD,uBAAuB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;CAGnE;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAS;IAEvB,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAErB;IAEM,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"callGraphUtils.d.ts","sourceRoot":"","sources":["../../src/utils/callGraphUtils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7E,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAAyB;IAE/C,IAAI,QAAQ,IAAI,eAAe,EAAE,CAEhC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,EAEnC;IAED,IAAI,aAAa,IAAI,eAAe,EAAE,CAErC;IAED,IAAI,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,EAExC;IAEM,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS;IAIvE,mBAAmB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO;IAKxD,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAU/C,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAUpD,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAIpD,uBAAuB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;CAGnE;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAS;IAEvB,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAErB;IAEM,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI;IAiBpD,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI;IAkBnD,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,QAAQ,EAAE;CAmClE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAOtG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAY5D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAsB1I;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/D"}
|
|
@@ -94,14 +94,12 @@ class SceneManager {
|
|
|
94
94
|
let targetMethod = this._scene.getMethod(method);
|
|
95
95
|
if (targetMethod == null) {
|
|
96
96
|
// 支持SDK调用解析
|
|
97
|
-
let
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return methodUnderFile;
|
|
104
|
-
}
|
|
97
|
+
let file = this._scene.getFile(method.getDeclaringClassSignature().getDeclaringFileSignature());
|
|
98
|
+
if (file) {
|
|
99
|
+
const methods = ModelUtils_1.ModelUtils.getAllMethodsInFile(file);
|
|
100
|
+
for (let methodUnderFile of methods) {
|
|
101
|
+
if (method.toString() === methodUnderFile.getSignature().toString()) {
|
|
102
|
+
return methodUnderFile;
|
|
105
103
|
}
|
|
106
104
|
}
|
|
107
105
|
}
|
|
@@ -113,8 +111,7 @@ class SceneManager {
|
|
|
113
111
|
return null;
|
|
114
112
|
let classInstance = this._scene.getClass(arkClass);
|
|
115
113
|
if (classInstance == null) {
|
|
116
|
-
let sdkOrTargetProjectFile = this._scene.
|
|
117
|
-
.get(arkClass.getDeclaringFileSignature().toString());
|
|
114
|
+
let sdkOrTargetProjectFile = this._scene.getFile(arkClass.getDeclaringFileSignature());
|
|
118
115
|
// TODO: support get sdk class, targetProject class waiting to be supported
|
|
119
116
|
if (sdkOrTargetProjectFile != null) {
|
|
120
117
|
for (let classUnderFile of ModelUtils_1.ModelUtils.getAllClassesInFile(sdkOrTargetProjectFile)) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto_utils.d.ts","sourceRoot":"","sources":["../../src/utils/crypto_utils.ts"],"names":[],"mappings":"AAiBA,qBAAa,WAAW;WAEN,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;WAI/B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;WAIhD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAOlD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.CryptoUtils = void 0;
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
42
|
+
class CryptoUtils {
|
|
43
|
+
static sha256(content) {
|
|
44
|
+
return this.hash(content, 'sha256');
|
|
45
|
+
}
|
|
46
|
+
static hash(content, algorithm) {
|
|
47
|
+
return crypto.createHash(algorithm).update(content).digest('base64url');
|
|
48
|
+
}
|
|
49
|
+
static hashcode(content) {
|
|
50
|
+
let h = 0;
|
|
51
|
+
for (let i = 0; i < content.length; i++) {
|
|
52
|
+
h = Math.imul(31, h) + content.charCodeAt(i) | 0;
|
|
53
|
+
}
|
|
54
|
+
return h;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.CryptoUtils = CryptoUtils;
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* @param visited: Set<string> 用来存放已经访问过的路径,避免递归栈溢出,可不传,默认为空数组
|
|
7
7
|
* @return string[] 提取出的文件的原始路径数组
|
|
8
8
|
*/
|
|
9
|
-
export declare function getAllFiles(srcPath: string, exts: string[], filenameArr?: string[], visited?: Set<string>): string[];
|
|
9
|
+
export declare function getAllFiles(srcPath: string, exts: string[], ignore?: string[], filenameArr?: string[], visited?: Set<string>): string[];
|
|
10
10
|
//# sourceMappingURL=getAllFiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAllFiles.d.ts","sourceRoot":"","sources":["../../src/utils/getAllFiles.ts"],"names":[],"mappings":"AAoBA;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,GAAE,MAAM,EAAO,EAC1B,OAAO,GAAE,GAAG,CAAC,MAAM,CAAqB,GACvC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"getAllFiles.d.ts","sourceRoot":"","sources":["../../src/utils/getAllFiles.ts"],"names":[],"mappings":"AAoBA;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,GAAE,MAAM,EAAO,EACrB,WAAW,GAAE,MAAM,EAAO,EAC1B,OAAO,GAAE,GAAG,CAAC,MAAM,CAAqB,GACvC,MAAM,EAAE,CAoCV"}
|
package/lib/utils/getAllFiles.js
CHANGED
|
@@ -53,7 +53,8 @@ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER,
|
|
|
53
53
|
* @param visited: Set<string> 用来存放已经访问过的路径,避免递归栈溢出,可不传,默认为空数组
|
|
54
54
|
* @return string[] 提取出的文件的原始路径数组
|
|
55
55
|
*/
|
|
56
|
-
function getAllFiles(srcPath, exts, filenameArr = [], visited = new Set()) {
|
|
56
|
+
function getAllFiles(srcPath, exts, ignore = [], filenameArr = [], visited = new Set()) {
|
|
57
|
+
let ignoreFiles = new Set(ignore);
|
|
57
58
|
// 如果源目录不存在,直接结束程序
|
|
58
59
|
if (!fs_1.default.existsSync(srcPath)) {
|
|
59
60
|
logger.error(`Input directory is not exist, please check!`);
|
|
@@ -67,9 +68,7 @@ function getAllFiles(srcPath, exts, filenameArr = [], visited = new Set()) {
|
|
|
67
68
|
visited.add(realSrc);
|
|
68
69
|
// 遍历src,判断文件类型
|
|
69
70
|
fs_1.default.readdirSync(realSrc).forEach(filename => {
|
|
70
|
-
if (filename
|
|
71
|
-
filename === 'node_modules' ||
|
|
72
|
-
filename === 'hviforfile.ts') {
|
|
71
|
+
if (ignoreFiles.has(filename)) {
|
|
73
72
|
return;
|
|
74
73
|
}
|
|
75
74
|
// 拼接文件的绝对路径
|
|
@@ -77,7 +76,7 @@ function getAllFiles(srcPath, exts, filenameArr = [], visited = new Set()) {
|
|
|
77
76
|
//TODO: 增加排除文件后缀和目录
|
|
78
77
|
// 如果是目录,递归提取
|
|
79
78
|
if (fs_1.default.statSync(realFile).isDirectory()) {
|
|
80
|
-
getAllFiles(realFile, exts, filenameArr, visited);
|
|
79
|
+
getAllFiles(realFile, exts, ignore, filenameArr, visited);
|
|
81
80
|
}
|
|
82
81
|
else {
|
|
83
82
|
// 如果是文件,则判断其扩展名是否在给定的扩展名数组中
|