arkanalyzer 1.0.85 → 1.0.87

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 (400) hide show
  1. package/README.en.md +69 -65
  2. package/README.md +56 -70
  3. package/config/arkanalyzer.json +7 -2
  4. package/docs/cppFrontend/ArkAnalyzer-cpp_usage_guide.md +245 -0
  5. package/docs/cppFrontend/cpp_frontend_build_guide.md +126 -0
  6. package/docs/cppFrontend/cpp_frontend_user_guide.md +175 -0
  7. package/docs/cppFrontend/img.png +0 -0
  8. package/docs/cppFrontend/img_1.png +0 -0
  9. package/docs/cppFrontend/img_10.png +0 -0
  10. package/docs/cppFrontend/img_11.png +0 -0
  11. package/docs/cppFrontend/img_12.png +0 -0
  12. package/docs/cppFrontend/img_13.png +0 -0
  13. package/docs/cppFrontend/img_14.png +0 -0
  14. package/docs/cppFrontend/img_15.png +0 -0
  15. package/docs/cppFrontend/img_16.png +0 -0
  16. package/docs/cppFrontend/img_17.png +0 -0
  17. package/docs/cppFrontend/img_18.png +0 -0
  18. package/docs/cppFrontend/img_19.png +0 -0
  19. package/docs/cppFrontend/img_2.png +0 -0
  20. package/docs/cppFrontend/img_20.png +0 -0
  21. package/docs/cppFrontend/img_21.png +0 -0
  22. package/docs/cppFrontend/img_22.png +0 -0
  23. package/docs/cppFrontend/img_23.png +0 -0
  24. package/docs/cppFrontend/img_3.png +0 -0
  25. package/docs/cppFrontend/img_4.png +0 -0
  26. package/docs/cppFrontend/img_5.png +0 -0
  27. package/docs/cppFrontend/img_6.png +0 -0
  28. package/docs/cppFrontend/img_7.png +0 -0
  29. package/docs/cppFrontend/img_8.png +0 -0
  30. package/docs/cppFrontend/img_9.png +0 -0
  31. package/docs/sig_programanalysis.en.md +66 -0
  32. package/docs/sig_programanalysis.md +73 -0
  33. package/lib/Config.d.ts +32 -1
  34. package/lib/Config.d.ts.map +1 -1
  35. package/lib/Config.js +76 -2
  36. package/lib/Scene.d.ts +25 -2
  37. package/lib/Scene.d.ts.map +1 -1
  38. package/lib/Scene.js +148 -40
  39. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +4 -3
  40. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
  41. package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -17
  42. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +6 -1
  43. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  44. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +117 -14
  45. package/lib/callgraph/common/Statistics.d.ts +4 -2
  46. package/lib/callgraph/common/Statistics.d.ts.map +1 -1
  47. package/lib/callgraph/common/Statistics.js +14 -2
  48. package/lib/callgraph/model/CallGraph.d.ts +12 -8
  49. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  50. package/lib/callgraph/model/CallGraph.js +53 -29
  51. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
  52. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
  53. package/lib/callgraph/model/builder/CallGraphBuilder.js +5 -1
  54. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  55. package/lib/callgraph/pointerAnalysis/Pag.js +3 -0
  56. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
  57. package/lib/cli/cli.d.ts +3 -0
  58. package/lib/cli/cli.d.ts.map +1 -0
  59. package/lib/cli/cli.js +82 -0
  60. package/lib/cli/commands/cg.d.ts +32 -0
  61. package/lib/cli/commands/cg.d.ts.map +1 -0
  62. package/lib/cli/commands/cg.js +401 -0
  63. package/lib/cli/commands/index.d.ts +6 -0
  64. package/lib/cli/commands/index.d.ts.map +1 -0
  65. package/lib/cli/commands/index.js +64 -0
  66. package/lib/cli/commands/ir.d.ts +26 -0
  67. package/lib/cli/commands/ir.d.ts.map +1 -0
  68. package/lib/cli/commands/ir.js +94 -0
  69. package/lib/core/base/Constant.d.ts +1 -1
  70. package/lib/core/base/Constant.d.ts.map +1 -1
  71. package/lib/core/base/Constant.js +1 -1
  72. package/lib/core/base/Expr.d.ts +29 -5
  73. package/lib/core/base/Expr.d.ts.map +1 -1
  74. package/lib/core/base/Expr.js +144 -22
  75. package/lib/core/base/Position.d.ts +14 -0
  76. package/lib/core/base/Position.d.ts.map +1 -1
  77. package/lib/core/base/Position.js +27 -0
  78. package/lib/core/base/Ref.d.ts +1 -0
  79. package/lib/core/base/Ref.d.ts.map +1 -1
  80. package/lib/core/base/Ref.js +4 -1
  81. package/lib/core/base/Type.d.ts +64 -24
  82. package/lib/core/base/Type.d.ts.map +1 -1
  83. package/lib/core/base/Type.js +144 -49
  84. package/lib/core/common/ArkError.d.ts +26 -2
  85. package/lib/core/common/ArkError.d.ts.map +1 -1
  86. package/lib/core/common/ArkError.js +56 -2
  87. package/lib/core/common/ArkIRTransformer.d.ts +11 -10
  88. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  89. package/lib/core/common/ArkIRTransformer.js +1 -1
  90. package/lib/core/common/ArkValueTransformer.d.ts +14 -12
  91. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  92. package/lib/core/common/ArkValueTransformer.js +1 -5
  93. package/lib/core/common/Const.d.ts +3 -0
  94. package/lib/core/common/Const.d.ts.map +1 -1
  95. package/lib/core/common/Const.js +4 -1
  96. package/lib/core/common/DummyMainCreater.d.ts +23 -13
  97. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  98. package/lib/core/common/DummyMainCreater.js +66 -43
  99. package/lib/core/common/EtsConst.d.ts +11 -0
  100. package/lib/core/common/EtsConst.d.ts.map +1 -1
  101. package/lib/core/common/EtsConst.js +12 -1
  102. package/lib/core/common/IRInference.d.ts.map +1 -1
  103. package/lib/core/common/IRInference.js +5 -1
  104. package/lib/core/common/ModelUtils.d.ts +4 -7
  105. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  106. package/lib/core/common/ModelUtils.js +77 -110
  107. package/lib/core/common/SdkUtils.d.ts +1 -1
  108. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  109. package/lib/core/common/SdkUtils.js +14 -5
  110. package/lib/core/common/TypeInference.d.ts.map +1 -1
  111. package/lib/core/common/TypeInference.js +9 -3
  112. package/lib/core/graph/BaseExplicitGraph.d.ts +4 -4
  113. package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
  114. package/lib/core/graph/BaseExplicitGraph.js +15 -8
  115. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  116. package/lib/core/graph/Scc.d.ts.map +1 -1
  117. package/lib/core/graph/Scc.js +7 -2
  118. package/lib/core/graph/builder/CfgBuilder.d.ts +10 -7
  119. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  120. package/lib/core/graph/builder/CfgBuilder.js +12 -5
  121. package/lib/core/inference/Inference.d.ts.map +1 -1
  122. package/lib/core/inference/Inference.js +7 -0
  123. package/lib/core/inference/ModelInference.d.ts +1 -1
  124. package/lib/core/inference/ModelInference.d.ts.map +1 -1
  125. package/lib/core/inference/ValueInference.d.ts +3 -2
  126. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  127. package/lib/core/inference/ValueInference.js +64 -12
  128. package/lib/core/inference/abc/AbcInference.d.ts +28 -2
  129. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  130. package/lib/core/inference/abc/AbcInference.js +105 -4
  131. package/lib/core/model/ArkBaseModel.d.ts +14 -1
  132. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  133. package/lib/core/model/ArkBaseModel.js +61 -2
  134. package/lib/core/model/ArkBody.d.ts.map +1 -1
  135. package/lib/core/model/ArkBody.js +1 -3
  136. package/lib/core/model/ArkClass.d.ts +22 -2
  137. package/lib/core/model/ArkClass.d.ts.map +1 -1
  138. package/lib/core/model/ArkClass.js +59 -28
  139. package/lib/core/model/ArkField.d.ts.map +1 -1
  140. package/lib/core/model/ArkField.js +3 -1
  141. package/lib/core/model/ArkFile.d.ts +4 -1
  142. package/lib/core/model/ArkFile.d.ts.map +1 -1
  143. package/lib/core/model/ArkFile.js +44 -3
  144. package/lib/core/model/ArkImport.d.ts.map +1 -1
  145. package/lib/core/model/ArkImport.js +9 -1
  146. package/lib/core/model/ArkMethod.d.ts +5 -0
  147. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  148. package/lib/core/model/ArkMethod.js +33 -1
  149. package/lib/core/model/ArkNamespace.d.ts +2 -0
  150. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  151. package/lib/core/model/ArkNamespace.js +11 -0
  152. package/lib/core/model/ArkSignature.d.ts +3 -3
  153. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  154. package/lib/core/model/ArkSignature.js +14 -9
  155. package/lib/core/model/builder/ArkClassBuilder.d.ts +2 -0
  156. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  157. package/lib/core/model/builder/ArkClassBuilder.js +3 -3
  158. package/lib/core/model/builder/ArkMethodBuilder.d.ts +4 -1
  159. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  160. package/lib/core/model/builder/ArkMethodBuilder.js +19 -6
  161. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +1 -0
  162. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  163. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -1
  164. package/lib/core/model/builder/BodyBuilder.d.ts +4 -0
  165. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  166. package/lib/core/model/builder/builderUtils.d.ts +1 -0
  167. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  168. package/lib/core/model/builder/builderUtils.js +7 -3
  169. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts +296 -0
  170. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +1 -0
  171. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.js +145 -0
  172. package/lib/frontend/cppFrontend/ast/astUtils.d.ts +51 -0
  173. package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
  174. package/lib/frontend/cppFrontend/ast/astUtils.js +470 -0
  175. package/lib/frontend/cppFrontend/ast/const.d.ts +30 -0
  176. package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
  177. package/lib/frontend/cppFrontend/ast/const.js +134 -0
  178. package/lib/frontend/cppFrontend/base/Constant.d.ts +9 -0
  179. package/lib/frontend/cppFrontend/base/Constant.d.ts.map +1 -0
  180. package/lib/frontend/cppFrontend/base/Constant.js +33 -0
  181. package/lib/frontend/cppFrontend/base/Expr.d.ts +174 -0
  182. package/lib/frontend/cppFrontend/base/Expr.d.ts.map +1 -0
  183. package/lib/frontend/cppFrontend/base/Expr.js +530 -0
  184. package/lib/frontend/cppFrontend/base/Ref.d.ts +25 -0
  185. package/lib/frontend/cppFrontend/base/Ref.d.ts.map +1 -0
  186. package/lib/frontend/cppFrontend/base/Ref.js +53 -0
  187. package/lib/frontend/cppFrontend/base/Trap.d.ts +8 -0
  188. package/lib/frontend/cppFrontend/base/Trap.d.ts.map +1 -0
  189. package/lib/frontend/cppFrontend/base/Trap.js +28 -0
  190. package/lib/frontend/cppFrontend/base/Type.d.ts +264 -0
  191. package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -0
  192. package/lib/frontend/cppFrontend/base/Type.js +600 -0
  193. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +109 -0
  194. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -0
  195. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +925 -0
  196. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +477 -0
  197. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -0
  198. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +2746 -0
  199. package/lib/frontend/cppFrontend/common/Builtin.d.ts +57 -0
  200. package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -0
  201. package/lib/frontend/cppFrontend/common/Builtin.js +106 -0
  202. package/lib/frontend/cppFrontend/common/IRInference.d.ts +94 -0
  203. package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -0
  204. package/lib/frontend/cppFrontend/common/IRInference.js +1087 -0
  205. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +23 -0
  206. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -0
  207. package/lib/frontend/cppFrontend/common/IRUtils.js +168 -0
  208. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +44 -0
  209. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -0
  210. package/lib/frontend/cppFrontend/common/ModelUtils.js +567 -0
  211. package/lib/frontend/cppFrontend/common/TypeInference.d.ts +278 -0
  212. package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -0
  213. package/lib/frontend/cppFrontend/common/TypeInference.js +1354 -0
  214. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts +16 -0
  215. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts.map +1 -0
  216. package/lib/frontend/cppFrontend/common/ValueUtil.js +61 -0
  217. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +182 -0
  218. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -0
  219. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +1435 -0
  220. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts +21 -0
  221. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts.map +1 -0
  222. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.js +303 -0
  223. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts +15 -0
  224. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts.map +1 -0
  225. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.js +161 -0
  226. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts +21 -0
  227. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts.map +1 -0
  228. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.js +261 -0
  229. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts +12 -0
  230. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -0
  231. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +155 -0
  232. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts +29 -0
  233. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts.map +1 -0
  234. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.js +302 -0
  235. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts +10 -0
  236. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts.map +1 -0
  237. package/lib/frontend/cppFrontend/inference/CxxInference.js +41 -0
  238. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +28 -0
  239. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -0
  240. package/lib/frontend/cppFrontend/inference/CxxModelInference.js +98 -0
  241. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts +20 -0
  242. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -0
  243. package/lib/frontend/cppFrontend/inference/CxxValueInference.js +128 -0
  244. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +11 -0
  245. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -0
  246. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +413 -0
  247. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +5 -0
  248. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -0
  249. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +61 -0
  250. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +17 -0
  251. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -0
  252. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +285 -0
  253. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +6 -0
  254. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -0
  255. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.js +57 -0
  256. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +14 -0
  257. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -0
  258. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +422 -0
  259. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +8 -0
  260. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
  261. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +194 -0
  262. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +59 -0
  263. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -0
  264. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +605 -0
  265. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +46 -0
  266. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -0
  267. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +499 -0
  268. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts +44 -0
  269. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts.map +1 -0
  270. package/lib/frontend/cppFrontend/utils/cmakeUtils.js +240 -0
  271. package/lib/index.d.ts +1 -0
  272. package/lib/index.d.ts.map +1 -1
  273. package/lib/index.js +7 -1
  274. package/lib/node_modules/ohos-typescript/.ohos-typescript-version +1 -0
  275. package/{node_modules → lib/node_modules}/ohos-typescript/package.json +2 -1
  276. package/lib/save/CGJsonPrinter.d.ts +8 -0
  277. package/lib/save/CGJsonPrinter.d.ts.map +1 -0
  278. package/lib/save/CGJsonPrinter.js +41 -0
  279. package/lib/save/GraphPrinter.js +2 -2
  280. package/lib/save/json/JsonDto.d.ts +86 -2
  281. package/lib/save/json/JsonDto.d.ts.map +1 -1
  282. package/lib/save/json/JsonSerialization.d.ts +1 -1
  283. package/lib/save/json/JsonSerialization.d.ts.map +1 -1
  284. package/lib/save/json/JsonSerialization.js +235 -145
  285. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  286. package/lib/save/source/SourceTransformer.js +0 -3
  287. package/lib/utils/CxxSceneUtils.d.ts +11 -0
  288. package/lib/utils/CxxSceneUtils.d.ts.map +1 -0
  289. package/lib/utils/CxxSceneUtils.js +178 -0
  290. package/lib/utils/FileUtils.d.ts +7 -8
  291. package/lib/utils/FileUtils.d.ts.map +1 -1
  292. package/lib/utils/FileUtils.js +27 -45
  293. package/lib/utils/LRUCacheDecorator.d.ts +20 -0
  294. package/lib/utils/LRUCacheDecorator.d.ts.map +1 -0
  295. package/lib/utils/LRUCacheDecorator.js +89 -0
  296. package/lib/utils/ModuleUtils.d.ts +39 -0
  297. package/lib/utils/ModuleUtils.d.ts.map +1 -0
  298. package/lib/utils/ModuleUtils.js +261 -0
  299. package/package.json +15 -12
  300. /package/{node_modules → lib/node_modules}/ohos-typescript/LICENSE +0 -0
  301. /package/{node_modules → lib/node_modules}/ohos-typescript/README.OpenSource +0 -0
  302. /package/{node_modules → lib/node_modules}/ohos-typescript/README.md +0 -0
  303. /package/{node_modules → lib/node_modules}/ohos-typescript/SECURITY.md +0 -0
  304. /package/{node_modules → lib/node_modules}/ohos-typescript/ThirdPartyNoticeText.txt +0 -0
  305. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsc +0 -0
  306. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsserver +0 -0
  307. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/README.md +0 -0
  308. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cancellationToken.js +0 -0
  309. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -0
  310. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -0
  311. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -0
  312. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -0
  313. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -0
  314. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -0
  315. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -0
  316. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.d.ts +0 -0
  317. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.d.ts +0 -0
  318. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -0
  319. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.collection.d.ts +0 -0
  320. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.core.d.ts +0 -0
  321. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.d.ts +0 -0
  322. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.generator.d.ts +0 -0
  323. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.iterable.d.ts +0 -0
  324. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.promise.d.ts +0 -0
  325. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.proxy.d.ts +0 -0
  326. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.reflect.d.ts +0 -0
  327. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.d.ts +0 -0
  328. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
  329. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.array.include.d.ts +0 -0
  330. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.d.ts +0 -0
  331. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.full.d.ts +0 -0
  332. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.d.ts +0 -0
  333. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.full.d.ts +0 -0
  334. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.intl.d.ts +0 -0
  335. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.object.d.ts +0 -0
  336. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
  337. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.string.d.ts +0 -0
  338. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
  339. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
  340. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
  341. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.d.ts +0 -0
  342. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.full.d.ts +0 -0
  343. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.intl.d.ts +0 -0
  344. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.promise.d.ts +0 -0
  345. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.regexp.d.ts +0 -0
  346. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.array.d.ts +0 -0
  347. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.d.ts +0 -0
  348. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.full.d.ts +0 -0
  349. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.intl.d.ts +0 -0
  350. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.object.d.ts +0 -0
  351. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.string.d.ts +0 -0
  352. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.symbol.d.ts +0 -0
  353. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.bigint.d.ts +0 -0
  354. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.d.ts +0 -0
  355. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.date.d.ts +0 -0
  356. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.full.d.ts +0 -0
  357. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.intl.d.ts +0 -0
  358. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.number.d.ts +0 -0
  359. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.promise.d.ts +0 -0
  360. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
  361. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.string.d.ts +0 -0
  362. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
  363. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.d.ts +0 -0
  364. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.full.d.ts +0 -0
  365. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.intl.d.ts +0 -0
  366. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.promise.d.ts +0 -0
  367. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.string.d.ts +0 -0
  368. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.weakref.d.ts +0 -0
  369. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.array.d.ts +0 -0
  370. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.d.ts +0 -0
  371. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.error.d.ts +0 -0
  372. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.full.d.ts +0 -0
  373. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.intl.d.ts +0 -0
  374. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.object.d.ts +0 -0
  375. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.sharedmemory.d.ts +0 -0
  376. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.string.d.ts +0 -0
  377. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es5.d.ts +0 -0
  378. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es6.d.ts +0 -0
  379. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.d.ts +0 -0
  380. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.full.d.ts +0 -0
  381. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.intl.d.ts +0 -0
  382. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.scripthost.d.ts +0 -0
  383. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.d.ts +0 -0
  384. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -0
  385. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -0
  386. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -0
  387. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
  388. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -0
  389. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -0
  390. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsc.js +0 -0
  391. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserver.js +0 -0
  392. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.d.ts +0 -0
  393. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.js +0 -0
  394. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typesMap.json +0 -0
  395. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.d.ts +0 -0
  396. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.js +0 -0
  397. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typingsInstaller.js +0 -0
  398. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/watchGuard.js +0 -0
  399. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
  400. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
3
+ * Copyright (c) 2024-2026 Huawei Device Co., Ltd.
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
6
6
  * You may obtain a copy of the License at
@@ -40,14 +40,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  return (mod && mod.__esModule) ? mod : { "default": mod };
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.getFileRecursively = exports.ModulePath = exports.FileUtils = void 0;
43
+ exports.getFileAbsPath = exports.getFileRecursively = exports.FileUtils = void 0;
44
44
  const fs_1 = __importDefault(require("fs"));
45
45
  const path_1 = __importDefault(require("path"));
46
46
  const logger_1 = __importStar(require("./logger"));
47
- const pathTransfer_1 = require("./pathTransfer");
48
- const EtsConst_1 = require("../core/common/EtsConst");
49
47
  const ArkFile_1 = require("../core/model/ArkFile");
48
+ const const_1 = require("../frontend/cppFrontend/ast/const");
50
49
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'FileUtils');
50
+ const CXX_EXTENSION_SET = (0, const_1.getCxxSourceFileExtensionSet)();
51
51
  class FileUtils {
52
52
  static getIndexFileName(srcPath) {
53
53
  for (const fileInDir of fs_1.default.readdirSync(srcPath, { withFileTypes: true })) {
@@ -70,40 +70,6 @@ class FileUtils {
70
70
  static isAbsolutePath(path) {
71
71
  return /^(\/|\\|[A-Z]:\\)/.test(path);
72
72
  }
73
- static generateModuleMap(ohPkgContentMap) {
74
- const moduleMap = new Map();
75
- ohPkgContentMap.forEach((content, filePath) => {
76
- const moduleName = content.name;
77
- if (moduleName && moduleName.startsWith('@')) {
78
- const modulePath = path_1.default.dirname(filePath);
79
- moduleMap.set(moduleName, new ModulePath(modulePath, content.main ? path_1.default.resolve(modulePath, content.main) : ''));
80
- }
81
- });
82
- ohPkgContentMap.forEach((content, filePath) => {
83
- if (!content.dependencies) {
84
- return;
85
- }
86
- Object.entries(content.dependencies).forEach(([name, value]) => {
87
- if (moduleMap.get(name)) {
88
- return;
89
- }
90
- const dir = path_1.default.dirname(filePath);
91
- let modulePath = path_1.default.resolve(dir, value.replace('file:', ''));
92
- let main = '';
93
- if (this.isDirectory(modulePath)) {
94
- const target = ohPkgContentMap.get(path_1.default.resolve(modulePath, EtsConst_1.OH_PACKAGE_JSON5));
95
- if (target === null || target === void 0 ? void 0 : target.main) {
96
- main = path_1.default.resolve(modulePath, target.main);
97
- }
98
- }
99
- else {
100
- modulePath = path_1.default.resolve(dir, 'oh_modules', name);
101
- }
102
- moduleMap.set(name, new ModulePath(modulePath, main));
103
- });
104
- });
105
- return moduleMap;
106
- }
107
73
  static getFileLanguage(file, fileTags) {
108
74
  if (fileTags && fileTags.has(file)) {
109
75
  return fileTags.get(file);
@@ -117,6 +83,9 @@ class FileUtils {
117
83
  case '.js':
118
84
  return ArkFile_1.Language.JAVASCRIPT;
119
85
  default:
86
+ if (CXX_EXTENSION_SET.has(extension)) {
87
+ return ArkFile_1.Language.CXX;
88
+ }
120
89
  return ArkFile_1.Language.UNKNOWN;
121
90
  }
122
91
  }
@@ -126,13 +95,6 @@ FileUtils.FILE_FILTER = {
126
95
  ignores: ['.git', '.preview', '.hvigor', '.idea', 'test', 'ohosTest'],
127
96
  include: /(?<!\.d)\.(ets|ts|json5)$/,
128
97
  };
129
- class ModulePath {
130
- constructor(path, main) {
131
- this.path = (0, pathTransfer_1.transfer2UnixPath)(path);
132
- this.main = main ? (0, pathTransfer_1.transfer2UnixPath)(main) : main;
133
- }
134
- }
135
- exports.ModulePath = ModulePath;
136
98
  function getFileRecursively(srcDir, fileName, visited = new Set()) {
137
99
  let res = '';
138
100
  if (!FileUtils.isDirectory(srcDir)) {
@@ -160,3 +122,23 @@ function getFileRecursively(srcDir, fileName, visited = new Set()) {
160
122
  return res;
161
123
  }
162
124
  exports.getFileRecursively = getFileRecursively;
125
+ /**
126
+ * Try to combine each source path in the array with the relative path, returning the first absolute path that exists.
127
+ * @param srcPathList Source path array (absolute or relative paths)
128
+ * @param relativePath The relative path to concatenate
129
+ * @returns The first concatenated absolute path that exists; otherwise returns an empty string
130
+ */
131
+ function getFileAbsPath(srcPathList, relativePath) {
132
+ if (!srcPathList || srcPathList.length === 0 || !relativePath) {
133
+ return '';
134
+ }
135
+ for (const srcPath of srcPathList) {
136
+ const srcDir = path_1.default.dirname(path_1.default.resolve(srcPath));
137
+ const absPath = path_1.default.resolve(srcDir, relativePath);
138
+ if (fs_1.default.existsSync(absPath)) {
139
+ return absPath;
140
+ }
141
+ }
142
+ return '';
143
+ }
144
+ exports.getFileAbsPath = getFileAbsPath;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A function that generates a cache key from method arguments.
3
+ */
4
+ export type KeyGenerator = (...args: any[]) => string;
5
+ /**
6
+ * LRU (Least Recently Used) cache decorator for methods.
7
+ * Caches return values based on method arguments, evicting the oldest entry
8
+ * when the cache reaches maxSize.
9
+ *
10
+ * @param maxSize - Maximum number of entries to keep in the cache.
11
+ * @param keyGenerator - Optional custom function to generate cache keys from method arguments.
12
+ */
13
+ export declare function LRUCache(maxSize?: number, keyGenerator?: KeyGenerator): (_target: any, _propertyKey: string, descriptor: PropertyDescriptor) => void;
14
+ /**
15
+ * Clear the LRU cache associated with a decorated method.
16
+ * @param target - The class (for static methods) or instance (for instance methods).
17
+ * @param propertyKey - The method name.
18
+ */
19
+ export declare function clearLRUCache(target: any, propertyKey: string): void;
20
+ //# sourceMappingURL=LRUCacheDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LRUCacheDecorator.d.ts","sourceRoot":"","sources":["../../src/utils/LRUCacheDecorator.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC;AAItD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,MAAa,EAAE,YAAY,CAAC,EAAE,YAAY,aAG9C,GAAG,gBAAgB,MAAM,cAAc,kBAAkB,UAuBtF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAGpE"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024-2026 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
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.clearLRUCache = exports.LRUCache = void 0;
18
+ /**
19
+ * LRU Cache Decorator — method-level caching with Least Recently Used eviction.
20
+ *
21
+ * Usage:
22
+ * import { LRUCache, clearLRUCache } from './LRUCacheDecorator';
23
+ *
24
+ * class Foo {
25
+ * // Basic: cache up to 4096 entries (default)
26
+ * @LRUCache()
27
+ * static resolve(path: string): string { ... }
28
+ *
29
+ * // Custom capacity
30
+ * @LRUCache(1024)
31
+ * static lookup(id: number): string { ... }
32
+ *
33
+ * // Custom key generator — useful when you want case-insensitive keys,
34
+ * // partial-argument keys, or any custom serialization.
35
+ * @LRUCache(4096, (srcPath) => srcPath.toLowerCase())
36
+ * static getFileRealPath(srcPath: string): string { ... }
37
+ * }
38
+ *
39
+ * // Clear the cache of a decorated method (e.g. on dispose)
40
+ * clearLRUCache(Foo, 'resolve');
41
+ */
42
+ const LRU_CACHE_SYMBOL = Symbol('LRUCache');
43
+ const defaultKeyGenerator = (...args) => args.join();
44
+ /**
45
+ * LRU (Least Recently Used) cache decorator for methods.
46
+ * Caches return values based on method arguments, evicting the oldest entry
47
+ * when the cache reaches maxSize.
48
+ *
49
+ * @param maxSize - Maximum number of entries to keep in the cache.
50
+ * @param keyGenerator - Optional custom function to generate cache keys from method arguments.
51
+ */
52
+ function LRUCache(maxSize = 4096, keyGenerator) {
53
+ const resolveKey = keyGenerator !== null && keyGenerator !== void 0 ? keyGenerator : defaultKeyGenerator;
54
+ const cache = new Map();
55
+ return function (_target, _propertyKey, descriptor) {
56
+ const originalMethod = descriptor.value;
57
+ descriptor.value = function (...args) {
58
+ const key = resolveKey(...args);
59
+ if (cache.has(key)) {
60
+ const value = cache.get(key);
61
+ cache.delete(key);
62
+ cache.set(key, value);
63
+ return value;
64
+ }
65
+ const result = originalMethod.apply(this, args);
66
+ if (cache.size >= maxSize) {
67
+ const firstKey = cache.keys().next().value;
68
+ if (firstKey) {
69
+ cache.delete(firstKey);
70
+ }
71
+ }
72
+ cache.set(key, result);
73
+ return result;
74
+ };
75
+ descriptor.value[LRU_CACHE_SYMBOL] = cache;
76
+ };
77
+ }
78
+ exports.LRUCache = LRUCache;
79
+ /**
80
+ * Clear the LRU cache associated with a decorated method.
81
+ * @param target - The class (for static methods) or instance (for instance methods).
82
+ * @param propertyKey - The method name.
83
+ */
84
+ function clearLRUCache(target, propertyKey) {
85
+ var _a;
86
+ const cache = (_a = target[propertyKey]) === null || _a === void 0 ? void 0 : _a[LRU_CACHE_SYMBOL];
87
+ cache === null || cache === void 0 ? void 0 : cache.clear();
88
+ }
89
+ exports.clearLRUCache = clearLRUCache;
@@ -0,0 +1,39 @@
1
+ export declare class ModulePath {
2
+ path: string;
3
+ main: string;
4
+ /**
5
+ * Create a new ModulePath instance.
6
+ * @param path - The module path.
7
+ * @param main - The main entry file path of the module.
8
+ */
9
+ constructor(path: string, main: string);
10
+ }
11
+ export declare class ModuleUtils {
12
+ private static readonly FILE_EXT;
13
+ private static readonly OH_PACKAGE_DEPENDENCY_KEYS;
14
+ static MODULES: Map<string, ModulePath>;
15
+ static dispose(): void;
16
+ /**
17
+ * Get the real file path for a given source path, resolving file extensions and checking existence.
18
+ * Results are cached via LRU for performance.
19
+ * @param srcPath - The source path to resolve, e.g.: /projectA/src/foo
20
+ * @returns The resolved real file path, or empty string if not found.
21
+ */
22
+ static getFileRealPath(srcPath: string): string;
23
+ /**
24
+ * Generate a module map from oh-package.json5 content.
25
+ * @param ohPkgContentMap - A map of oh-package.json5 file paths to their parsed content.
26
+ * @returns A map of module names to their module paths.
27
+ */
28
+ static generateModuleMap(ohPkgContentMap: Map<string, {
29
+ [k: string]: unknown;
30
+ }>): Map<string, ModulePath>;
31
+ private static addDependModule;
32
+ private static processDependency;
33
+ /**
34
+ * Handle "foo_test": "@module:Foo" dependency.
35
+ */
36
+ private static handleModuleRefDependency;
37
+ private static findModulePathInOHPM;
38
+ }
39
+ //# sourceMappingURL=ModuleUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ModuleUtils.ts"],"names":[],"mappings":"AA2BA,qBAAa,UAAU;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAIzC;AAGD,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA+F;IAC/H,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAA8D;IAChH,OAAc,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAa;WAM7C,OAAO,IAAI,IAAI;IAK7B;;;;;OAKG;WAEW,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IA6CtD;;;;OAIG;WACW,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IA2BhH,OAAO,CAAC,MAAM,CAAC,eAAe;IA6B9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA8BhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAaxC,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAyBtC"}
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024-2026 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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
33
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
35
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
36
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
37
+ };
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.ModuleUtils = exports.ModulePath = void 0;
50
+ const path_1 = __importDefault(require("path"));
51
+ const json5parser_1 = require("./json5parser");
52
+ const EtsConst_1 = require("../core/common/EtsConst");
53
+ const FileUtils_1 = require("./FileUtils");
54
+ const pathTransfer_1 = require("./pathTransfer");
55
+ const fs_1 = __importDefault(require("fs"));
56
+ const logger_1 = __importStar(require("./logger"));
57
+ const LRUCacheDecorator_1 = require("./LRUCacheDecorator");
58
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ModuleUtils');
59
+ const jsExt = '.js';
60
+ class ModulePath {
61
+ /**
62
+ * Create a new ModulePath instance.
63
+ * @param path - The module path.
64
+ * @param main - The main entry file path of the module.
65
+ */
66
+ constructor(path, main) {
67
+ this.path = (0, pathTransfer_1.transfer2UnixPath)(path);
68
+ this.main = (0, pathTransfer_1.transfer2UnixPath)(main);
69
+ }
70
+ }
71
+ exports.ModulePath = ModulePath;
72
+ class ModuleUtils {
73
+ /*
74
+ * Set static field to be null, then all related objects could be freed by GC.
75
+ * Class SdkUtils is only internally used by ArkAnalyzer type inference, the dispose method should be called at the end of type inference.
76
+ */
77
+ static dispose() {
78
+ (0, LRUCacheDecorator_1.clearLRUCache)(ModuleUtils, 'getFileRealPath');
79
+ this.MODULES.clear();
80
+ }
81
+ /**
82
+ * Get the real file path for a given source path, resolving file extensions and checking existence.
83
+ * Results are cached via LRU for performance.
84
+ * @param srcPath - The source path to resolve, e.g.: /projectA/src/foo
85
+ * @returns The resolved real file path, or empty string if not found.
86
+ */
87
+ static getFileRealPath(srcPath) {
88
+ if (srcPath.endsWith(EtsConst_1.OH_PACKAGE_JSON5)) {
89
+ return fs_1.default.realpathSync(srcPath);
90
+ }
91
+ let result = '';
92
+ try {
93
+ const stats = fs_1.default.statSync(srcPath, { throwIfNoEntry: false });
94
+ const dir = (stats === null || stats === void 0 ? void 0 : stats.isDirectory()) ? srcPath : path_1.default.dirname(srcPath);
95
+ const baseName = (stats === null || stats === void 0 ? void 0 : stats.isDirectory()) ? 'index' : path_1.default.basename(srcPath);
96
+ const files = fs_1.default.readdirSync(dir, { withFileTypes: true });
97
+ let bestOrder = Number.POSITIVE_INFINITY;
98
+ let bestName = '';
99
+ const length = baseName.length;
100
+ for (const file of files) {
101
+ const name = file.name;
102
+ const regex = new RegExp(`^${baseName}`, 'i');
103
+ if (!regex.test(name)) {
104
+ continue;
105
+ }
106
+ const suffix = name.slice(length);
107
+ if (suffix.length === 0) {
108
+ bestName = name;
109
+ break;
110
+ }
111
+ const order = this.FILE_EXT.get(suffix);
112
+ if (order === undefined) {
113
+ continue;
114
+ }
115
+ if (order < bestOrder) {
116
+ bestOrder = order;
117
+ bestName = name;
118
+ }
119
+ if (order <= 1) {
120
+ break;
121
+ }
122
+ }
123
+ if (bestName) {
124
+ result = fs_1.default.realpathSync(path_1.default.join(dir, bestName));
125
+ }
126
+ }
127
+ catch (e) {
128
+ logger.warn(srcPath + ' not found.');
129
+ }
130
+ return result;
131
+ }
132
+ /**
133
+ * Generate a module map from oh-package.json5 content.
134
+ * @param ohPkgContentMap - A map of oh-package.json5 file paths to their parsed content.
135
+ * @returns A map of module names to their module paths.
136
+ */
137
+ static generateModuleMap(ohPkgContentMap) {
138
+ if (ohPkgContentMap.size > 0 && this.MODULES.size === 0) {
139
+ const pkgs = Array.from(ohPkgContentMap);
140
+ const projectPkg = pkgs[0];
141
+ const projectDir = path_1.default.dirname(projectPkg[0]);
142
+ pkgs.reverse().forEach((entry) => {
143
+ var _a;
144
+ const filePath = entry[0];
145
+ const content = entry[1];
146
+ const moduleName = (_a = content.name) !== null && _a !== void 0 ? _a : '';
147
+ this.addDependModule(filePath, content, this.MODULES, moduleName, false, projectDir);
148
+ });
149
+ //process project oh-package.json5 override
150
+ this.processDependency(projectPkg[1].overrides, projectDir, this.MODULES, true, projectDir);
151
+ const overrideDependencyMap = projectPkg[1].overrideDependencyMap;
152
+ if (overrideDependencyMap) {
153
+ Object.entries(overrideDependencyMap).forEach(([name, value]) => {
154
+ const dFile = path_1.default.isAbsolute(value) ? value : path_1.default.resolve(projectDir, value);
155
+ const dFileContent = (0, json5parser_1.fetchDependenciesFromFile)(dFile);
156
+ this.addDependModule(dFile, dFileContent, this.MODULES, name, true, projectDir);
157
+ });
158
+ }
159
+ }
160
+ return this.MODULES;
161
+ }
162
+ static addDependModule(ohPkgFile, content, ret, moduleName, override, projectDir) {
163
+ if (Object.keys(content).length === 0) {
164
+ return;
165
+ }
166
+ const ohPkgFileRealPath = this.getFileRealPath(ohPkgFile);
167
+ if (!ohPkgFileRealPath) {
168
+ return;
169
+ }
170
+ const modulePath = path_1.default.dirname(ohPkgFileRealPath);
171
+ // deep first
172
+ this.OH_PACKAGE_DEPENDENCY_KEYS.forEach((dependencyKey) => this.processDependency(content[dependencyKey], modulePath, ret, override, projectDir));
173
+ // skip empty or duplicate module
174
+ if (!moduleName || (!override && ret.has(moduleName))) {
175
+ return;
176
+ }
177
+ let entry = content.types || content.main;
178
+ if (!entry) {
179
+ entry = '';
180
+ }
181
+ else if (entry.endsWith(jsExt)) {
182
+ entry = entry.substring(0, entry.length - jsExt.length);
183
+ }
184
+ const main = this.getFileRealPath(path_1.default.resolve(modulePath, entry));
185
+ ret.set(moduleName, new ModulePath(modulePath, main));
186
+ }
187
+ static processDependency(dependencies, modulePath, ret, override, projectDir) {
188
+ if (!dependencies) {
189
+ return;
190
+ }
191
+ Object.entries(dependencies).forEach(([name, value]) => {
192
+ if (!override && ret.get(name)) {
193
+ return;
194
+ }
195
+ if (this.handleModuleRefDependency(name, value, ret)) {
196
+ return;
197
+ }
198
+ // order: 1. local module 2. current module oh_modules 3. project oh_modules 4. project oh_modules .ohpm
199
+ const candidates = [
200
+ path_1.default.resolve(modulePath, value.replace('file:', '')),
201
+ path_1.default.resolve(value.endsWith('.har') && modulePath.includes(EtsConst_1.OHPM) ? modulePath.substring(0, modulePath.lastIndexOf(EtsConst_1.OH_MODULES)) : modulePath, EtsConst_1.OH_MODULES, name),
202
+ path_1.default.resolve(projectDir, EtsConst_1.OH_MODULES, name),
203
+ this.findModulePathInOHPM(projectDir, name, value),
204
+ ];
205
+ const dPath = candidates.find((candidate) => FileUtils_1.FileUtils.isDirectory(candidate));
206
+ if (!dPath) {
207
+ logger.warn(`Cannot find module: ${name} dependency in ${modulePath} ${EtsConst_1.OH_PACKAGE_JSON5}`);
208
+ return;
209
+ }
210
+ const dFile = path_1.default.resolve(dPath, EtsConst_1.OH_PACKAGE_JSON5);
211
+ const dFileContent = (0, json5parser_1.fetchDependenciesFromFile)(dFile);
212
+ this.addDependModule(dFile, dFileContent, ret, name, override, projectDir);
213
+ });
214
+ }
215
+ /**
216
+ * Handle "foo_test": "@module:Foo" dependency.
217
+ */
218
+ static handleModuleRefDependency(name, value, ret) {
219
+ if (!value.startsWith(EtsConst_1.MODULE_PREFIX)) {
220
+ return false;
221
+ }
222
+ const moduleRef = ret.get(value.slice(EtsConst_1.MODULE_PREFIX.length));
223
+ if (moduleRef) {
224
+ ret.set(name, moduleRef);
225
+ return true;
226
+ }
227
+ logger.warn(`Cannot find module: ${name}`);
228
+ return false;
229
+ }
230
+ static findModulePathInOHPM(projectDir, moduleName, value) {
231
+ const OHPMPath = path_1.default.resolve(projectDir, EtsConst_1.OH_MODULES, EtsConst_1.OHPM);
232
+ const prefix = `${moduleName.replace('/', '+')}@`;
233
+ // fix version
234
+ if (/^\d+(?:\.\d+){2}(?:-[0-9A-Za-z-]+)?$/.test(value)) {
235
+ return path_1.default.resolve(OHPMPath, prefix + value, EtsConst_1.OH_MODULES, moduleName);
236
+ }
237
+ // try to find the best version
238
+ try {
239
+ const dirs = fs_1.default.readdirSync(OHPMPath, { withFileTypes: true })
240
+ .filter((dir) => dir.isDirectory() && dir.name.startsWith(prefix));
241
+ for (const dir of dirs) {
242
+ const dirName = dir.name;
243
+ if (value.startsWith('^') && dirName.split('@')[1] < value.substring(1)) {
244
+ continue;
245
+ }
246
+ return path_1.default.resolve(OHPMPath, dirName, EtsConst_1.OH_MODULES, moduleName);
247
+ }
248
+ }
249
+ catch (e) {
250
+ logger.warn(`Cannot find module: ${moduleName} in ${OHPMPath}`);
251
+ }
252
+ return '';
253
+ }
254
+ }
255
+ ModuleUtils.FILE_EXT = new Map([['.ets', 0], ['.ts', 1], ['.d.ets', 2], ['.d.ts', 3], ['.js', 4]]);
256
+ ModuleUtils.OH_PACKAGE_DEPENDENCY_KEYS = ['dependencies', 'devDependencies', 'dynamicDependencies'];
257
+ ModuleUtils.MODULES = new Map();
258
+ __decorate([
259
+ (0, LRUCacheDecorator_1.LRUCache)()
260
+ ], ModuleUtils, "getFileRealPath", null);
261
+ exports.ModuleUtils = ModuleUtils;
package/package.json CHANGED
@@ -1,32 +1,35 @@
1
1
  {
2
2
  "name": "arkanalyzer",
3
- "version": "1.0.85",
3
+ "version": "1.0.87",
4
4
  "files": [
5
5
  "docs",
6
6
  "lib",
7
7
  "config"
8
8
  ],
9
9
  "main": "lib/index.js",
10
+ "bin": {
11
+ "arkanalyzer": "lib/cli/cli.js"
12
+ },
10
13
  "scripts": {
14
+ "prebuild": "node script/npmInstall.js",
11
15
  "build": "tsc",
12
- "prepack": "tsc -p ./tsconfig.prod.json",
13
- "test": "vitest",
14
- "testonce": "vitest --no-color run",
15
- "coverage": "vitest run --coverage",
16
+ "build:cpp": "node script/buildCpp.js",
17
+ "prepack": "npm run build && tsc -p ./tsconfig.prod.json && node script/vendorOhosTypescript.js && copyfiles -f arkCppAst/* lib/ast",
18
+ "test": "npm run build && vitest",
19
+ "testonce": "npm run build && vitest --no-color run",
20
+ "coverage": "npm run build && vitest run --coverage",
16
21
  "heapdump": "npm run build && node --expose-gc out/tests/HeapDumpTest.js",
17
- "postinstall": "node script/npmInstall.js",
18
- "gendoc": "npx typedoc"
22
+ "gendoc": "npm run build && npx typedoc"
19
23
  },
20
24
  "dependencies": {
21
25
  "commander": "13.1.0",
22
- "log4js": "6.9.1",
23
- "ohos-typescript": "^4.9.5-r4"
26
+ "log4js": "6.9.1"
24
27
  },
25
- "bundledDependencies": [
26
- "ohos-typescript"
27
- ],
28
28
  "devDependencies": {
29
+ "copyfiles": "^2.4.1",
30
+ "@types/node": "^25.5.0",
29
31
  "@vitest/coverage-v8": "^1.5.0",
32
+ "ohos-typescript": "^4.9.5-r4",
30
33
  "ts-node": "^10.9.1",
31
34
  "typedoc": "^0.28.0",
32
35
  "typedoc-plugin-markdown": "^4.6.3",