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.
Files changed (164) hide show
  1. package/config/arkanalyzer.json +8 -0
  2. package/lib/Config.d.ts +9 -1
  3. package/lib/Config.d.ts.map +1 -1
  4. package/lib/Config.js +24 -11
  5. package/lib/Scene.d.ts +49 -42
  6. package/lib/Scene.d.ts.map +1 -1
  7. package/lib/Scene.js +124 -93
  8. package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -1
  9. package/lib/callgraph/common/Statistics.js +1 -1
  10. package/lib/callgraph/model/CallGraph.d.ts +3 -2
  11. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  12. package/lib/callgraph/model/CallGraph.js +15 -5
  13. package/lib/callgraph/model/builder/CallGraphBuilder.js +1 -1
  14. package/lib/callgraph/pointerAnalysis/Pag.d.ts +35 -8
  15. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  16. package/lib/callgraph/pointerAnalysis/Pag.js +89 -8
  17. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +32 -5
  18. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/PagBuilder.js +378 -83
  20. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +3 -0
  21. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  22. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +71 -18
  23. package/lib/core/base/Constant.d.ts +25 -5
  24. package/lib/core/base/Constant.d.ts.map +1 -1
  25. package/lib/core/base/Constant.js +46 -8
  26. package/lib/core/base/Expr.d.ts +45 -40
  27. package/lib/core/base/Expr.d.ts.map +1 -1
  28. package/lib/core/base/Expr.js +236 -150
  29. package/lib/core/base/Local.d.ts +2 -2
  30. package/lib/core/base/Local.d.ts.map +1 -1
  31. package/lib/core/base/Local.js +2 -2
  32. package/lib/core/base/Ref.d.ts +38 -37
  33. package/lib/core/base/Ref.d.ts.map +1 -1
  34. package/lib/core/base/Ref.js +102 -70
  35. package/lib/core/base/Stmt.d.ts +4 -0
  36. package/lib/core/base/Stmt.d.ts.map +1 -1
  37. package/lib/core/base/Stmt.js +12 -1
  38. package/lib/core/base/Type.d.ts +4 -0
  39. package/lib/core/base/Type.d.ts.map +1 -1
  40. package/lib/core/base/Type.js +41 -17
  41. package/lib/core/common/ArkError.d.ts +15 -0
  42. package/lib/core/common/ArkError.d.ts.map +1 -0
  43. package/lib/core/common/ArkError.js +28 -0
  44. package/lib/core/common/ArkIRTransformer.d.ts +1 -1
  45. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  46. package/lib/core/common/ArkIRTransformer.js +24 -8
  47. package/lib/core/common/CfgBuilder.d.ts.map +1 -1
  48. package/lib/core/common/CfgBuilder.js +5 -0
  49. package/lib/core/common/Const.d.ts +15 -10
  50. package/lib/core/common/Const.d.ts.map +1 -1
  51. package/lib/core/common/Const.js +18 -11
  52. package/lib/core/common/DummyMainCreater.d.ts +2 -1
  53. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  54. package/lib/core/common/DummyMainCreater.js +28 -15
  55. package/lib/core/common/EtsConst.d.ts +1 -0
  56. package/lib/core/common/EtsConst.d.ts.map +1 -1
  57. package/lib/core/common/EtsConst.js +2 -1
  58. package/lib/core/common/IRUtils.d.ts +6 -0
  59. package/lib/core/common/IRUtils.d.ts.map +1 -1
  60. package/lib/core/common/IRUtils.js +29 -2
  61. package/lib/core/common/ModelUtils.d.ts +1 -0
  62. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  63. package/lib/core/common/ModelUtils.js +32 -32
  64. package/lib/core/common/TSConst.d.ts +10 -3
  65. package/lib/core/common/TSConst.d.ts.map +1 -1
  66. package/lib/core/common/TSConst.js +11 -4
  67. package/lib/core/common/TypeInference.d.ts +8 -2
  68. package/lib/core/common/TypeInference.d.ts.map +1 -1
  69. package/lib/core/common/TypeInference.js +218 -87
  70. package/lib/core/common/ValueUtil.d.ts +0 -4
  71. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  72. package/lib/core/common/ValueUtil.js +8 -25
  73. package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
  74. package/lib/core/dataflow/DataflowSolver.js +2 -4
  75. package/lib/core/dataflow/TiantAnalysis.js +2 -1
  76. package/lib/core/dataflow/Util.d.ts +1 -1
  77. package/lib/core/dataflow/Util.d.ts.map +1 -1
  78. package/lib/core/dataflow/Util.js +8 -7
  79. package/lib/core/graph/BasicBlock.d.ts +41 -0
  80. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  81. package/lib/core/graph/BasicBlock.js +132 -1
  82. package/lib/core/graph/Cfg.d.ts +30 -1
  83. package/lib/core/graph/Cfg.d.ts.map +1 -1
  84. package/lib/core/graph/Cfg.js +129 -6
  85. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  86. package/lib/core/graph/builder/ViewTreeBuilder.js +3 -2
  87. package/lib/core/model/ArkBaseModel.d.ts +8 -0
  88. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  89. package/lib/core/model/ArkBaseModel.js +55 -3
  90. package/lib/core/model/ArkClass.d.ts +36 -30
  91. package/lib/core/model/ArkClass.d.ts.map +1 -1
  92. package/lib/core/model/ArkClass.js +78 -39
  93. package/lib/core/model/ArkExport.d.ts +3 -0
  94. package/lib/core/model/ArkExport.d.ts.map +1 -1
  95. package/lib/core/model/ArkExport.js +10 -0
  96. package/lib/core/model/ArkField.d.ts +2 -0
  97. package/lib/core/model/ArkField.d.ts.map +1 -1
  98. package/lib/core/model/ArkField.js +3 -0
  99. package/lib/core/model/ArkFile.d.ts +4 -0
  100. package/lib/core/model/ArkFile.d.ts.map +1 -1
  101. package/lib/core/model/ArkFile.js +20 -0
  102. package/lib/core/model/ArkImport.d.ts +2 -0
  103. package/lib/core/model/ArkImport.d.ts.map +1 -1
  104. package/lib/core/model/ArkImport.js +3 -0
  105. package/lib/core/model/ArkMetadata.d.ts +20 -0
  106. package/lib/core/model/ArkMetadata.d.ts.map +1 -0
  107. package/lib/core/model/ArkMetadata.js +44 -0
  108. package/lib/core/model/ArkMethod.d.ts +156 -53
  109. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  110. package/lib/core/model/ArkMethod.js +309 -54
  111. package/lib/core/model/ArkNamespace.d.ts +4 -0
  112. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  113. package/lib/core/model/ArkNamespace.js +13 -0
  114. package/lib/core/model/ArkSignature.d.ts +11 -5
  115. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  116. package/lib/core/model/ArkSignature.js +38 -18
  117. package/lib/core/model/builder/ArkClassBuilder.d.ts +0 -1
  118. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  119. package/lib/core/model/builder/ArkClassBuilder.js +9 -34
  120. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
  121. package/lib/core/model/builder/ArkExportBuilder.js +6 -1
  122. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  123. package/lib/core/model/builder/ArkFieldBuilder.js +3 -0
  124. package/lib/core/model/builder/ArkFileBuilder.js +1 -1
  125. package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
  126. package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
  127. package/lib/core/model/builder/ArkImportBuilder.js +12 -5
  128. package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
  129. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  130. package/lib/core/model/builder/ArkMethodBuilder.js +87 -47
  131. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  132. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -0
  133. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  134. package/lib/core/model/builder/builderUtils.js +25 -2
  135. package/lib/save/source/SourceClass.d.ts.map +1 -1
  136. package/lib/save/source/SourceClass.js +4 -0
  137. package/lib/save/source/SourceField.d.ts.map +1 -1
  138. package/lib/save/source/SourceField.js +4 -0
  139. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  140. package/lib/save/source/SourceMethod.js +7 -0
  141. package/lib/save/source/SourceModule.d.ts.map +1 -1
  142. package/lib/save/source/SourceModule.js +14 -9
  143. package/lib/save/source/SourceNamespace.d.ts.map +1 -1
  144. package/lib/save/source/SourceNamespace.js +4 -0
  145. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  146. package/lib/save/source/SourceStmt.js +15 -3
  147. package/lib/save/source/SourceTransformer.d.ts +6 -0
  148. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  149. package/lib/save/source/SourceTransformer.js +72 -41
  150. package/lib/save/source/SourceUtils.d.ts.map +1 -1
  151. package/lib/save/source/SourceUtils.js +3 -2
  152. package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
  153. package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
  154. package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
  155. package/lib/utils/CfgStructualAnalysis.js +41 -7
  156. package/lib/utils/callGraphUtils.d.ts.map +1 -1
  157. package/lib/utils/callGraphUtils.js +7 -10
  158. package/lib/utils/crypto_utils.d.ts +6 -0
  159. package/lib/utils/crypto_utils.d.ts.map +1 -0
  160. package/lib/utils/crypto_utils.js +57 -0
  161. package/lib/utils/getAllFiles.d.ts +1 -1
  162. package/lib/utils/getAllFiles.d.ts.map +1 -1
  163. package/lib/utils/getAllFiles.js +4 -5
  164. 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
- let literalName = type.getLiteralName();
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
- let typesStr = [];
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
- let name = type.getClassSignature().getClassName();
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
- const dimensions = [];
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
- let genericTypes = type.getGenericTypes();
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;AAK7D,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"}
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('AnonymousMethod-');
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('$temp');
87
+ return name.startsWith(Const_2.TEMP_LOCAL_PREFIX);
87
88
  }
88
89
  static getOriginType(cls) {
89
90
  if (cls.hasComponentDecorator()) {
@@ -119,7 +119,7 @@ class StaticSingleAssignmentFormer {
119
119
  }
120
120
  }
121
121
  for (const phi of phis) {
122
- cfg.insertBefore(block.getHead(), phi);
122
+ cfg.insertBefore(phi, block.getHead());
123
123
  }
124
124
  }
125
125
  }
@@ -32,6 +32,7 @@ export declare class AbstractFlowGraph {
32
32
  private buildDominator;
33
33
  private getBackEdges;
34
34
  private naturalLoop;
35
+ private isSelfLoopNode;
35
36
  private isForLoopIncNode;
36
37
  private isValidInBlocks;
37
38
  private isIfRegion;
@@ -1 +1 @@
1
- {"version":3,"file":"CfgStructualAnalysis.d.ts","sourceRoot":"","sources":["../../src/utils/CfgStructualAnalysis.ts"],"names":[],"mappings":"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"}
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 = undefined;
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
- return RegionType.SELF_LOOP_REGION;
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 && ((_b = (_a = back.getBlock()) === null || _a === void 0 ? void 0 : _a.getStmts()) === null || _b === void 0 ? void 0 : _b.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
- this.back = nodes[1];
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.back.traversal(callback, CodeBlockType.NORMAL);
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.traversal(callback, CodeBlockType.NORMAL);
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;IAmBpD,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI;IAmBnD,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"}
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 sdkMap = this.scene.getSdkArkFilesMap();
98
- for (let file of sdkMap.values()) {
99
- if (file.getFileSignature().toString() === method.getDeclaringClassSignature().getDeclaringFileSignature().toString()) {
100
- const methods = ModelUtils_1.ModelUtils.getAllMethodsInFile(file);
101
- for (let methodUnderFile of methods) {
102
- if (method.toString() === methodUnderFile.getSignature().toString()) {
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.getSdkArkFilesMap()
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,6 @@
1
+ export declare class CryptoUtils {
2
+ static sha256(content: string): string;
3
+ static hash(content: string, algorithm: string): string;
4
+ static hashcode(content: string): number;
5
+ }
6
+ //# sourceMappingURL=crypto_utils.d.ts.map
@@ -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,CAuCV"}
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"}
@@ -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 === 'oh_modules' ||
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
  // 如果是文件,则判断其扩展名是否在给定的扩展名数组中
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "arkanalyzer",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "files": [
5
5
  "docs",
6
- "lib"
6
+ "lib",
7
+ "config"
7
8
  ],
8
9
  "main": "lib/index.js",
9
10
  "scripts": {