@lcap/nasl 3.3.3-beta.8 → 3.3.6-beta.1

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 (436) hide show
  1. package/.nyc_output/{78804420-ead6-486f-b682-ab54ccd95dc9.json → d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json} +1 -1
  2. package/.nyc_output/processinfo/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -1
  4. package/coverage/index.html +126 -141
  5. package/coverage/src/automate/engine/index.html +1 -1
  6. package/coverage/src/automate/engine/utils.js.html +36 -36
  7. package/coverage/src/bak/index.html +14 -14
  8. package/coverage/src/bak/translator.js.html +57 -393
  9. package/coverage/src/breakpoint/generator/AfterStartNode.ts.html +1 -1
  10. package/coverage/src/breakpoint/generator/BeforeEndNode.ts.html +1 -1
  11. package/coverage/src/breakpoint/generator/BreakpointNode.ts.html +1 -1
  12. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +1 -1
  13. package/coverage/src/breakpoint/generator/index.html +1 -1
  14. package/coverage/src/breakpoint/generator/index.ts.html +1 -1
  15. package/coverage/src/breakpoint/index.html +1 -1
  16. package/coverage/src/breakpoint/index.ts.html +1 -1
  17. package/coverage/src/breakpoint/shared/constants.ts.html +1 -1
  18. package/coverage/src/breakpoint/shared/index.html +1 -1
  19. package/coverage/src/breakpoint/shared/index.ts.html +1 -1
  20. package/coverage/src/breakpoint/shared/operations.ts.html +2 -2
  21. package/coverage/src/breakpoint/shared/socket.ts.html +1 -1
  22. package/coverage/src/breakpoint/shared/utils.ts.html +1 -1
  23. package/coverage/src/breakpoint/store/core.ts.html +3 -3
  24. package/coverage/src/breakpoint/store/dock.ts.html +1 -1
  25. package/coverage/src/breakpoint/store/index.html +1 -1
  26. package/coverage/src/breakpoint/store/index.ts.html +1 -1
  27. package/coverage/src/common/BaseNode.ts.html +164 -593
  28. package/coverage/src/common/Command.ts.html +1 -1
  29. package/coverage/src/common/EventEmitter.ts.html +31 -31
  30. package/coverage/src/common/Messager.ts.html +1 -1
  31. package/coverage/src/common/asyncFuncMap.ts.html +1 -1
  32. package/coverage/src/common/index.html +23 -38
  33. package/coverage/src/common/index.ts.html +4 -7
  34. package/coverage/src/concepts/Abort__.ts.html +9 -39
  35. package/coverage/src/concepts/Anchor__.ts.html +29 -86
  36. package/coverage/src/concepts/AnonymousFunction__.ts.html +169 -262
  37. package/coverage/src/concepts/App__.ts.html +152 -1205
  38. package/coverage/src/concepts/Argument__.ts.html +53 -137
  39. package/coverage/src/concepts/Assignee__.ts.html +34 -124
  40. package/coverage/src/concepts/AssignmentLine__.ts.html +15 -48
  41. package/coverage/src/concepts/Assignment__.ts.html +81 -213
  42. package/coverage/src/concepts/Attribute__.ts.html +14 -41
  43. package/coverage/src/concepts/AuthInterface__.ts.html +6 -9
  44. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +144 -108
  45. package/coverage/src/concepts/AuthLogic__.ts.html +6 -18
  46. package/coverage/src/concepts/BackendVariable__.ts.html +48 -168
  47. package/coverage/src/concepts/Backend__.ts.html +28 -106
  48. package/coverage/src/concepts/BatchAssignment__.ts.html +169 -274
  49. package/coverage/src/concepts/BinaryExpression__.ts.html +129 -285
  50. package/coverage/src/concepts/BindAttribute__.ts.html +111 -522
  51. package/coverage/src/concepts/BindDirective__.ts.html +26 -131
  52. package/coverage/src/concepts/BindEvent__.ts.html +64 -160
  53. package/coverage/src/concepts/BindStyle__.ts.html +21 -78
  54. package/coverage/src/concepts/BooleanLiteral__.ts.html +20 -47
  55. package/coverage/src/concepts/CallAuthInterface__.ts.html +48 -105
  56. package/coverage/src/concepts/CallConnector__.ts.html +35 -62
  57. package/coverage/src/concepts/CallFunction__.ts.html +144 -288
  58. package/coverage/src/concepts/CallInterface__.ts.html +60 -93
  59. package/coverage/src/concepts/CallLogic__.ts.html +343 -292
  60. package/coverage/src/concepts/CallQueryComponent__.ts.html +93 -126
  61. package/coverage/src/concepts/Comment__.ts.html +10 -43
  62. package/coverage/src/concepts/CompletionProperty__.ts.html +13 -40
  63. package/coverage/src/concepts/ConfigGroup__.ts.html +20 -47
  64. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +19 -22
  65. package/coverage/src/concepts/ConfigProperty__.ts.html +40 -97
  66. package/coverage/src/concepts/Configuration__.ts.html +21 -48
  67. package/coverage/src/concepts/Connection__.ts.html +22 -97
  68. package/coverage/src/concepts/ConnectorTrigger__.ts.html +6 -9
  69. package/coverage/src/concepts/Connector__.ts.html +38 -161
  70. package/coverage/src/concepts/Constant__.ts.html +24 -84
  71. package/coverage/src/concepts/DataSource__.ts.html +57 -111
  72. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +6 -9
  73. package/coverage/src/concepts/Destination__.ts.html +55 -97
  74. package/coverage/src/concepts/End__.ts.html +21 -51
  75. package/coverage/src/concepts/EntityIndex__.ts.html +10 -40
  76. package/coverage/src/concepts/EntityProperty__.ts.html +56 -164
  77. package/coverage/src/concepts/Entity__.ts.html +89 -167
  78. package/coverage/src/concepts/EnumItem__.ts.html +10 -40
  79. package/coverage/src/concepts/Enum__.ts.html +24 -84
  80. package/coverage/src/concepts/Event__.ts.html +14 -41
  81. package/coverage/src/concepts/ExternalDestination__.ts.html +21 -75
  82. package/coverage/src/concepts/ForEachStatement__.ts.html +64 -139
  83. package/coverage/src/concepts/FrontendLibrary__.ts.html +20 -71
  84. package/coverage/src/concepts/FrontendVariable__.ts.html +1 -1
  85. package/coverage/src/concepts/Frontend__.ts.html +57 -213
  86. package/coverage/src/concepts/Function__.ts.html +86 -239
  87. package/coverage/src/concepts/Identifier__.ts.html +72 -111
  88. package/coverage/src/concepts/IfStatement__.ts.html +75 -138
  89. package/coverage/src/concepts/Integration__.ts.html +19 -70
  90. package/coverage/src/concepts/InterfaceParam__.ts.html +21 -78
  91. package/coverage/src/concepts/Interface__.ts.html +60 -162
  92. package/coverage/src/concepts/JSBlock__.ts.html +11 -215
  93. package/coverage/src/concepts/JavaLogic__.ts.html +9 -42
  94. package/coverage/src/concepts/LogicItem__.ts.html +21 -51
  95. package/coverage/src/concepts/Logic__.ts.html +321 -405
  96. package/coverage/src/concepts/MatchCase__.ts.html +97 -181
  97. package/coverage/src/concepts/Match__.ts.html +59 -116
  98. package/coverage/src/concepts/MemberExpression__.ts.html +128 -182
  99. package/coverage/src/concepts/MicroApp__.ts.html +6 -9
  100. package/coverage/src/concepts/Module__.ts.html +18 -672
  101. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +14 -41
  102. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +14 -41
  103. package/coverage/src/concepts/Namespace__.ts.html +91 -358
  104. package/coverage/src/concepts/NewComposite__.ts.html +125 -278
  105. package/coverage/src/concepts/NewList__.ts.html +57 -195
  106. package/coverage/src/concepts/NewMap__.ts.html +63 -168
  107. package/coverage/src/concepts/New__.ts.html +9 -39
  108. package/coverage/src/concepts/NullLiteral__.ts.html +9 -36
  109. package/coverage/src/concepts/NumericLiteral__.ts.html +33 -90
  110. package/coverage/src/concepts/OqlQueryComponent__.ts.html +35 -161
  111. package/coverage/src/concepts/OverriddenLogic__.ts.html +201 -324
  112. package/coverage/src/concepts/Param__.ts.html +75 -189
  113. package/coverage/src/concepts/Point__.ts.html +6 -9
  114. package/coverage/src/concepts/ProcessComponent__.ts.html +21 -72
  115. package/coverage/src/concepts/ProcessElement__.ts.html +115 -316
  116. package/coverage/src/concepts/ProcessOutcome__.ts.html +13 -85
  117. package/coverage/src/concepts/ProcessOutcomes__.ts.html +13 -85
  118. package/coverage/src/concepts/Process__.ts.html +70 -211
  119. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +16 -67
  120. package/coverage/src/concepts/QueryFieldExpression__.ts.html +11 -41
  121. package/coverage/src/concepts/QueryFromExpression__.ts.html +21 -81
  122. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +19 -70
  123. package/coverage/src/concepts/QueryJoinExpression__.ts.html +25 -85
  124. package/coverage/src/concepts/QueryLimitExpression__.ts.html +20 -77
  125. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +20 -80
  126. package/coverage/src/concepts/QuerySelectExpression__.ts.html +15 -42
  127. package/coverage/src/concepts/Rect__.ts.html +6 -9
  128. package/coverage/src/concepts/Return__.ts.html +44 -164
  129. package/coverage/src/concepts/Role__.ts.html +15 -45
  130. package/coverage/src/concepts/SelectMembers__.ts.html +24 -81
  131. package/coverage/src/concepts/Slot__.ts.html +13 -40
  132. package/coverage/src/concepts/SqlQueryComponent__.ts.html +24 -84
  133. package/coverage/src/concepts/Start__.ts.html +9 -36
  134. package/coverage/src/concepts/StringInterpolation__.ts.html +29 -104
  135. package/coverage/src/concepts/StringLiteral__.ts.html +32 -62
  136. package/coverage/src/concepts/StructureProperty__.ts.html +23 -80
  137. package/coverage/src/concepts/Structure__.ts.html +32 -116
  138. package/coverage/src/concepts/SwitchCase__.ts.html +36 -87
  139. package/coverage/src/concepts/SwitchStatement__.ts.html +33 -90
  140. package/coverage/src/concepts/Theme__.ts.html +12 -15
  141. package/coverage/src/concepts/Transactional__.ts.html +6 -9
  142. package/coverage/src/concepts/TriggerEvent__.ts.html +14 -41
  143. package/coverage/src/concepts/TriggerLauncher__.ts.html +13 -46
  144. package/coverage/src/concepts/TypeAnnotation__.ts.html +116 -347
  145. package/coverage/src/concepts/TypeParam__.ts.html +12 -42
  146. package/coverage/src/concepts/UnaryExpression__.ts.html +27 -105
  147. package/coverage/src/concepts/Unparsed__.ts.html +12 -36
  148. package/coverage/src/concepts/UseComponent__.ts.html +6 -9
  149. package/coverage/src/concepts/ValidationRule__.ts.html +40 -79
  150. package/coverage/src/concepts/Variable__.ts.html +37 -157
  151. package/coverage/src/concepts/ViewBlock__.ts.html +6 -9
  152. package/coverage/src/concepts/ViewComponent__.ts.html +24 -99
  153. package/coverage/src/concepts/ViewElement__.ts.html +278 -692
  154. package/coverage/src/concepts/View__.ts.html +163 -517
  155. package/coverage/src/concepts/WhileStatement__.ts.html +55 -118
  156. package/coverage/src/concepts/basics/stdlib/index.html +1 -1
  157. package/coverage/src/concepts/basics/stdlib/index.ts.html +1 -1
  158. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +1 -1
  159. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +1 -1
  160. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +1 -1
  161. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +1 -1
  162. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +1 -1
  163. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +1 -1
  164. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +1 -1
  165. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +1 -1
  166. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +1 -1
  167. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +1 -1
  168. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +1 -1
  169. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +1 -1
  170. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +3 -3
  171. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1 -1
  172. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +1 -1
  173. package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +1 -1
  174. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +1 -1
  175. package/coverage/src/concepts/basics/types/index.html +1 -1
  176. package/coverage/src/concepts/basics/types/index.ts.html +1 -1
  177. package/coverage/src/concepts/index.html +965 -980
  178. package/coverage/src/concepts/index.ts.html +1 -1
  179. package/coverage/src/concepts/index__.ts.html +4 -7
  180. package/coverage/src/config.ts.html +1 -1
  181. package/coverage/src/decorators/index.html +5 -5
  182. package/coverage/src/decorators/index.ts.html +32 -32
  183. package/coverage/src/decorators/promise.ts.html +10 -10
  184. package/coverage/src/eventBus.ts.html +1 -1
  185. package/coverage/src/generator/compileComponent.ts.html +4 -4
  186. package/coverage/src/generator/genBundleFiles.ts.html +23 -17
  187. package/coverage/src/generator/genHash.ts.html +3 -3
  188. package/coverage/src/generator/genMetaData.ts.html +16 -103
  189. package/coverage/src/generator/genReleaseBody.ts.html +3 -3
  190. package/coverage/src/generator/icestark.ts.html +4 -10
  191. package/coverage/src/generator/index.html +21 -21
  192. package/coverage/src/generator/index.ts.html +1 -1
  193. package/coverage/src/generator/microApp.ts.html +1 -1
  194. package/coverage/src/generator/permission.ts.html +20 -92
  195. package/coverage/src/generator/qiankun.ts.html +3 -9
  196. package/coverage/src/generator/styleReplacer.ts.html +1 -1
  197. package/coverage/src/index.html +7 -7
  198. package/coverage/src/index.ts.html +4 -4
  199. package/coverage/src/manager/diagnostic.ts.html +14 -11
  200. package/coverage/src/manager/index.html +13 -13
  201. package/coverage/src/manager/stepRecorder.ts.html +1 -1
  202. package/coverage/src/natural/genNaturalTS.ts.html +1 -1
  203. package/coverage/src/natural/index.html +15 -15
  204. package/coverage/src/natural/index.ts.html +1 -1
  205. package/coverage/src/natural/naslStdlibMap.ts.html +1 -1
  206. package/coverage/src/natural/transformTSCode.ts.html +18 -78
  207. package/coverage/src/sentry/index.html +14 -14
  208. package/coverage/src/sentry/index.ts.html +32 -38
  209. package/coverage/src/server/createUiTs.ts.html +6 -15
  210. package/coverage/src/server/entity2LogicNamespace.ts.html +9 -9
  211. package/coverage/src/server/event.js.html +1 -1
  212. package/coverage/src/server/extendBaseNode.ts.html +4 -7
  213. package/coverage/src/server/formatTsUtils.ts.html +9 -9
  214. package/coverage/src/server/getConnector.ts.html +1 -1
  215. package/coverage/src/server/getExtensionModules.ts.html +1 -1
  216. package/coverage/src/server/getFunctions.ts.html +4 -4
  217. package/coverage/src/server/getInterfaces.ts.html +1 -1
  218. package/coverage/src/server/getLogging.ts.html +2 -2
  219. package/coverage/src/server/getLogics.ts.html +1 -1
  220. package/coverage/src/server/getMemberIdentifier.ts.html +119 -167
  221. package/coverage/src/server/getProcessComponents.ts.html +3 -3
  222. package/coverage/src/server/getProcesses.ts.html +1 -1
  223. package/coverage/src/server/getValidates.ts.html +4 -4
  224. package/coverage/src/server/index.html +34 -34
  225. package/coverage/src/server/index.ts.html +1 -1
  226. package/coverage/src/server/naslServer.ts.html +943 -1195
  227. package/coverage/src/server/naslStdlibMap.ts.html +1 -1
  228. package/coverage/src/server/process2LogicNamespace.ts.html +52 -52
  229. package/coverage/src/server/translator.ts.html +14 -50
  230. package/coverage/src/service/creator/add.configs.js.html +9 -27
  231. package/coverage/src/service/creator/errHandles.js.html +37 -19
  232. package/coverage/src/service/creator/index.html +22 -22
  233. package/coverage/src/service/creator/index.js.html +1 -1
  234. package/coverage/src/service/datasource/api.js.html +1 -1
  235. package/coverage/src/service/datasource/index.html +1 -1
  236. package/coverage/src/service/datasource/index.js.html +1 -1
  237. package/coverage/src/service/logic/api.js.html +1 -1
  238. package/coverage/src/service/logic/index.html +1 -1
  239. package/coverage/src/service/logic/index.js.html +1 -1
  240. package/coverage/src/service/storage/api.js.html +1 -1
  241. package/coverage/src/service/storage/index.html +29 -29
  242. package/coverage/src/service/storage/index.ts.html +1 -1
  243. package/coverage/src/service/storage/init.ts.html +601 -1534
  244. package/coverage/src/service/storage/jsoner.ts.html +13 -76
  245. package/coverage/src/service/storage/map.ts.html +3 -3
  246. package/coverage/src/service/storage/service.ts.html +1 -1
  247. package/coverage/src/service/storage/storagePoint.ts.html +1 -1
  248. package/coverage/src/templator/genCallComponentLogic.ts.html +1 -1
  249. package/coverage/src/templator/genCreateBlock.ts.html +56 -47
  250. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +31 -49
  251. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +89 -80
  252. package/coverage/src/templator/genEditTableBlock.ts.html +11 -80
  253. package/coverage/src/templator/genEnumSelectBlock.ts.html +1 -1
  254. package/coverage/src/templator/genGetBlock.ts.html +1 -1
  255. package/coverage/src/templator/genGridViewBlock.ts.html +1 -1
  256. package/coverage/src/templator/genListViewBlock.ts.html +1 -1
  257. package/coverage/src/templator/genQueryComponent.ts.html +1 -1
  258. package/coverage/src/templator/genSelectBlock.ts.html +1 -1
  259. package/coverage/src/templator/genTableBlock.ts.html +3 -66
  260. package/coverage/src/templator/genUpdateBlock.ts.html +36 -48
  261. package/coverage/src/templator/index.html +39 -39
  262. package/coverage/src/templator/index.ts.html +1 -1
  263. package/coverage/src/templator/utils.ts.html +11 -77
  264. package/coverage/src/translator/constant.ts.html +1 -1
  265. package/coverage/src/translator/index.html +21 -21
  266. package/coverage/src/translator/index.ts.html +1 -1
  267. package/coverage/src/translator/utils.ts.html +68 -389
  268. package/coverage/src/utils/cookie.ts.html +4 -4
  269. package/coverage/src/utils/env.ts.html +1 -1
  270. package/coverage/src/utils/index.html +51 -36
  271. package/coverage/src/utils/index.ts.html +22 -115
  272. package/coverage/src/utils/logger.ts.html +13 -13
  273. package/coverage/src/utils/sortTsString.ts.html +10 -25
  274. package/coverage/src/utils/string.ts.html +8 -110
  275. package/coverage/src/utils/time-slicing.ts.html +1 -1
  276. package/coverage/src/utils/traverse.ts.html +1 -1
  277. package/coverage/src/utils/window.ts.html +1 -1
  278. package/out/bak/translator.js.map +1 -1
  279. package/out/common/Command.js +1 -1
  280. package/out/common/Command.js.map +1 -1
  281. package/out/concepts/Argument__.js +7 -2
  282. package/out/concepts/Argument__.js.map +1 -1
  283. package/out/concepts/Assignment__.js +20 -3
  284. package/out/concepts/Assignment__.js.map +1 -1
  285. package/out/concepts/BackendVariable__.js +24 -2
  286. package/out/concepts/BackendVariable__.js.map +1 -1
  287. package/out/concepts/BinaryExpression__.js +40 -13
  288. package/out/concepts/BinaryExpression__.js.map +1 -1
  289. package/out/concepts/CallLogic__.js +7 -12
  290. package/out/concepts/CallLogic__.js.map +1 -1
  291. package/out/concepts/CountersignPolicy__.d.ts +26 -0
  292. package/out/concepts/CountersignPolicy__.js +73 -0
  293. package/out/concepts/CountersignPolicy__.js.map +1 -0
  294. package/out/concepts/ForEachStatement__.js +12 -26
  295. package/out/concepts/ForEachStatement__.js.map +1 -1
  296. package/out/concepts/Identifier__.js +3 -0
  297. package/out/concepts/Identifier__.js.map +1 -1
  298. package/out/concepts/JSBlock__.js +56 -0
  299. package/out/concepts/JSBlock__.js.map +1 -1
  300. package/out/concepts/LogicItem__.js +2 -1
  301. package/out/concepts/LogicItem__.js.map +1 -1
  302. package/out/concepts/Logic__.js +2 -0
  303. package/out/concepts/Logic__.js.map +1 -1
  304. package/out/concepts/Match__.js +1 -1
  305. package/out/concepts/Match__.js.map +1 -1
  306. package/out/concepts/MultiApprovalPolicy__.d.ts +24 -0
  307. package/out/concepts/MultiApprovalPolicy__.js +65 -0
  308. package/out/concepts/MultiApprovalPolicy__.js.map +1 -0
  309. package/out/concepts/NewComposite__.js +18 -10
  310. package/out/concepts/NewComposite__.js.map +1 -1
  311. package/out/concepts/NumericLiteral__.js +1 -1
  312. package/out/concepts/NumericLiteral__.js.map +1 -1
  313. package/out/concepts/Param__.js +24 -2
  314. package/out/concepts/Param__.js.map +1 -1
  315. package/out/concepts/ProcessElement__.d.ts +16 -0
  316. package/out/concepts/ProcessElement__.js +56 -1
  317. package/out/concepts/ProcessElement__.js.map +1 -1
  318. package/out/concepts/Return__.js +24 -2
  319. package/out/concepts/Return__.js.map +1 -1
  320. package/out/concepts/SequentialPolicy__.d.ts +18 -0
  321. package/out/concepts/SequentialPolicy__.js +54 -0
  322. package/out/concepts/SequentialPolicy__.js.map +1 -0
  323. package/out/concepts/Variable__.js +24 -2
  324. package/out/concepts/Variable__.js.map +1 -1
  325. package/out/concepts/ViewElement__.js.map +1 -1
  326. package/out/concepts/View__.js +2 -2
  327. package/out/concepts/View__.js.map +1 -1
  328. package/out/concepts/index__.d.ts +3 -0
  329. package/out/concepts/index__.js +3 -0
  330. package/out/concepts/index__.js.map +1 -1
  331. package/out/concepts/types__.d.ts +4 -1
  332. package/out/generator/genReleaseBody.js +2 -2
  333. package/out/generator/genReleaseBody.js.map +1 -1
  334. package/out/server/extendBaseNode.js +32 -1
  335. package/out/server/extendBaseNode.js.map +1 -1
  336. package/out/server/getLogics.d.ts +1 -0
  337. package/out/server/getLogics.js +6 -2
  338. package/out/server/getLogics.js.map +1 -1
  339. package/out/server/getProcesses.js +66 -6
  340. package/out/server/getProcesses.js.map +1 -1
  341. package/out/server/index.js +1 -0
  342. package/out/server/index.js.map +1 -1
  343. package/out/server/naslServer.js +2 -2
  344. package/out/server/naslServer.js.map +1 -1
  345. package/out/server/translator.js +3 -0
  346. package/out/server/translator.js.map +1 -1
  347. package/out/service/creator/errHandles.js +6 -3
  348. package/out/service/creator/errHandles.js.map +1 -1
  349. package/out/service/storage/init.js +2 -2
  350. package/out/service/storage/init.js.map +1 -1
  351. package/out/templator/genCreateBlock.js +9 -5
  352. package/out/templator/genCreateBlock.js.map +1 -1
  353. package/out/templator/genCurdEditMultipleKeyBlock.js +18 -12
  354. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  355. package/out/templator/genCurdMultipleKeyBlock.js +10 -8
  356. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  357. package/out/templator/genEditTableBlock.js +3 -2
  358. package/out/templator/genEditTableBlock.js.map +1 -1
  359. package/out/templator/genUpdateBlock.js +12 -9
  360. package/out/templator/genUpdateBlock.js.map +1 -1
  361. package/out/templator/utils.js.map +1 -1
  362. package/package.json +2 -2
  363. package/sandbox/stdlib/nasl.core.ts +2 -0
  364. package/sandbox/stdlib/nasl.util.ts +3 -3
  365. package/src/bak/translator.js +0 -1
  366. package/src/common/Command.ts +1 -1
  367. package/src/concepts/Argument__.ts +7 -2
  368. package/src/concepts/Assignment__.ts +31 -13
  369. package/src/concepts/BackendVariable__.ts +22 -3
  370. package/src/concepts/BinaryExpression__.ts +39 -13
  371. package/src/concepts/CallLogic__.ts +13 -23
  372. package/src/concepts/CountersignPolicy__.ts +77 -0
  373. package/src/concepts/ForEachStatement__.ts +17 -26
  374. package/src/concepts/Identifier__.ts +4 -1
  375. package/src/concepts/JSBlock__.ts +58 -0
  376. package/src/concepts/LogicItem__.ts +2 -2
  377. package/src/concepts/Logic__.ts +1 -0
  378. package/src/concepts/Match__.ts +1 -1
  379. package/src/concepts/MultiApprovalPolicy__.ts +69 -0
  380. package/src/concepts/NewComposite__.ts +18 -9
  381. package/src/concepts/NumericLiteral__.ts +1 -1
  382. package/src/concepts/Param__.ts +24 -2
  383. package/src/concepts/ProcessElement__.ts +70 -1
  384. package/src/concepts/Return__.ts +23 -3
  385. package/src/concepts/SequentialPolicy__.ts +58 -0
  386. package/src/concepts/Variable__.ts +23 -3
  387. package/src/concepts/ViewElement__.ts +6 -4
  388. package/src/concepts/View__.ts +5 -5
  389. package/src/concepts/index__.ts +3 -0
  390. package/src/concepts/types__.ts +6 -0
  391. package/src/generator/genReleaseBody.ts +40 -40
  392. package/src/server/extendBaseNode.ts +30 -2
  393. package/src/server/getLogics.ts +4 -0
  394. package/src/server/getProcesses.ts +66 -6
  395. package/src/server/index.ts +2 -1
  396. package/src/server/naslServer.ts +2 -2
  397. package/src/server/translator.ts +3 -0
  398. package/src/service/creator/errHandles.js +7 -4
  399. package/src/service/storage/init.ts +2 -2
  400. package/src/templator/genCreateBlock.ts +9 -5
  401. package/src/templator/genCurdEditMultipleKeyBlock.ts +19 -13
  402. package/src/templator/genCurdMultipleKeyBlock.ts +14 -11
  403. package/src/templator/genEditTableBlock.ts +4 -2
  404. package/src/templator/genUpdateBlock.ts +15 -12
  405. package/src/templator/utils.ts +8 -7
  406. package/test/concepts/anonymous-function/__snapshots__/toJS.spec.ts.snap +1 -1
  407. package/test/concepts/assignment/__snapshots__/toJS.spec.ts.snap +1 -1
  408. package/test/concepts/batch-assignment/__snapshots__/toJS.spec.ts.snap +2 -2
  409. package/test/concepts/binary-expression/__snapshots__/toJS.spec.ts.snap +3 -2
  410. package/test/concepts/call-interface/__snapshots__/toJS.spec.ts.snap +2 -2
  411. package/test/concepts/call-logic/__snapshots__/toJS.spec.ts.snap +3 -3
  412. package/test/concepts/match/__snapshots__/toJS.spec.ts.snap +1 -1
  413. package/test/concepts/numeric-literal/__snapshots__/toJS.spec.ts.snap +1 -1
  414. package/test/concepts/validation-rule/__snapshots__/toJS.spec.ts.snap +3 -3
  415. package/.nyc_output/processinfo/78804420-ead6-486f-b682-ab54ccd95dc9.json +0 -1
  416. package/coverage/cobertura-coverage.xml +0 -71878
  417. package/coverage/src/automate/engine/index.js.html +0 -1471
  418. package/coverage/src/automate/engine/operators.js.html +0 -862
  419. package/coverage/src/automate/engine/uniqueName.js.html +0 -412
  420. package/coverage/src/automate/engine/viewCache.js.html +0 -214
  421. package/coverage/src/automate/template/index.html +0 -116
  422. package/coverage/src/automate/template/myProcess.js.html +0 -34645
  423. package/coverage/src/common/utils.ts.html +0 -136
  424. package/coverage/src/concepts/DataElement__.ts.html +0 -118
  425. package/coverage/src/concepts/MetadataType__.ts.html +0 -2053
  426. package/coverage/src/utils/time-slicing/constant.ts.html +0 -196
  427. package/coverage/src/utils/time-slicing/controller.ts.html +0 -1111
  428. package/coverage/src/utils/time-slicing/index.html +0 -236
  429. package/coverage/src/utils/time-slicing/index.ts.html +0 -103
  430. package/coverage/src/utils/time-slicing/page-state.ts.html +0 -121
  431. package/coverage/src/utils/time-slicing/performance.ts.html +0 -253
  432. package/coverage/src/utils/time-slicing/runner.ts.html +0 -247
  433. package/coverage/src/utils/time-slicing/tool.ts.html +0 -220
  434. package/coverage/src/utils/time-slicing/utils.ts.html +0 -355
  435. package/coverage/src/utils/time-slicing/wrapper.ts.html +0 -259
  436. package/coverage/src/utils/time.ts.html +0 -118
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">1.74% </span>
26
+ <span class="strong">1.72% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>38/2172</span>
28
+ <span class='fraction'>38/2199</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1770</span>
35
+ <span class='fraction'>0/1682</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/251</span>
42
+ <span class='fraction'>0/259</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">1.77% </span>
47
+ <span class="strong">1.76% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>37/2087</span>
49
+ <span class='fraction'>37/2102</span>
50
50
  </div>
51
51
 
52
52
 
@@ -4835,91 +4835,7 @@
4835
4835
  <a name='L4770'></a><a href='#L4770'>4770</a>
4836
4836
  <a name='L4771'></a><a href='#L4771'>4771</a>
4837
4837
  <a name='L4772'></a><a href='#L4772'>4772</a>
4838
- <a name='L4773'></a><a href='#L4773'>4773</a>
4839
- <a name='L4774'></a><a href='#L4774'>4774</a>
4840
- <a name='L4775'></a><a href='#L4775'>4775</a>
4841
- <a name='L4776'></a><a href='#L4776'>4776</a>
4842
- <a name='L4777'></a><a href='#L4777'>4777</a>
4843
- <a name='L4778'></a><a href='#L4778'>4778</a>
4844
- <a name='L4779'></a><a href='#L4779'>4779</a>
4845
- <a name='L4780'></a><a href='#L4780'>4780</a>
4846
- <a name='L4781'></a><a href='#L4781'>4781</a>
4847
- <a name='L4782'></a><a href='#L4782'>4782</a>
4848
- <a name='L4783'></a><a href='#L4783'>4783</a>
4849
- <a name='L4784'></a><a href='#L4784'>4784</a>
4850
- <a name='L4785'></a><a href='#L4785'>4785</a>
4851
- <a name='L4786'></a><a href='#L4786'>4786</a>
4852
- <a name='L4787'></a><a href='#L4787'>4787</a>
4853
- <a name='L4788'></a><a href='#L4788'>4788</a>
4854
- <a name='L4789'></a><a href='#L4789'>4789</a>
4855
- <a name='L4790'></a><a href='#L4790'>4790</a>
4856
- <a name='L4791'></a><a href='#L4791'>4791</a>
4857
- <a name='L4792'></a><a href='#L4792'>4792</a>
4858
- <a name='L4793'></a><a href='#L4793'>4793</a>
4859
- <a name='L4794'></a><a href='#L4794'>4794</a>
4860
- <a name='L4795'></a><a href='#L4795'>4795</a>
4861
- <a name='L4796'></a><a href='#L4796'>4796</a>
4862
- <a name='L4797'></a><a href='#L4797'>4797</a>
4863
- <a name='L4798'></a><a href='#L4798'>4798</a>
4864
- <a name='L4799'></a><a href='#L4799'>4799</a>
4865
- <a name='L4800'></a><a href='#L4800'>4800</a>
4866
- <a name='L4801'></a><a href='#L4801'>4801</a>
4867
- <a name='L4802'></a><a href='#L4802'>4802</a>
4868
- <a name='L4803'></a><a href='#L4803'>4803</a>
4869
- <a name='L4804'></a><a href='#L4804'>4804</a>
4870
- <a name='L4805'></a><a href='#L4805'>4805</a>
4871
- <a name='L4806'></a><a href='#L4806'>4806</a>
4872
- <a name='L4807'></a><a href='#L4807'>4807</a>
4873
- <a name='L4808'></a><a href='#L4808'>4808</a>
4874
- <a name='L4809'></a><a href='#L4809'>4809</a>
4875
- <a name='L4810'></a><a href='#L4810'>4810</a>
4876
- <a name='L4811'></a><a href='#L4811'>4811</a>
4877
- <a name='L4812'></a><a href='#L4812'>4812</a>
4878
- <a name='L4813'></a><a href='#L4813'>4813</a>
4879
- <a name='L4814'></a><a href='#L4814'>4814</a>
4880
- <a name='L4815'></a><a href='#L4815'>4815</a>
4881
- <a name='L4816'></a><a href='#L4816'>4816</a>
4882
- <a name='L4817'></a><a href='#L4817'>4817</a>
4883
- <a name='L4818'></a><a href='#L4818'>4818</a>
4884
- <a name='L4819'></a><a href='#L4819'>4819</a>
4885
- <a name='L4820'></a><a href='#L4820'>4820</a>
4886
- <a name='L4821'></a><a href='#L4821'>4821</a>
4887
- <a name='L4822'></a><a href='#L4822'>4822</a>
4888
- <a name='L4823'></a><a href='#L4823'>4823</a>
4889
- <a name='L4824'></a><a href='#L4824'>4824</a>
4890
- <a name='L4825'></a><a href='#L4825'>4825</a>
4891
- <a name='L4826'></a><a href='#L4826'>4826</a>
4892
- <a name='L4827'></a><a href='#L4827'>4827</a>
4893
- <a name='L4828'></a><a href='#L4828'>4828</a>
4894
- <a name='L4829'></a><a href='#L4829'>4829</a>
4895
- <a name='L4830'></a><a href='#L4830'>4830</a>
4896
- <a name='L4831'></a><a href='#L4831'>4831</a>
4897
- <a name='L4832'></a><a href='#L4832'>4832</a>
4898
- <a name='L4833'></a><a href='#L4833'>4833</a>
4899
- <a name='L4834'></a><a href='#L4834'>4834</a>
4900
- <a name='L4835'></a><a href='#L4835'>4835</a>
4901
- <a name='L4836'></a><a href='#L4836'>4836</a>
4902
- <a name='L4837'></a><a href='#L4837'>4837</a>
4903
- <a name='L4838'></a><a href='#L4838'>4838</a>
4904
- <a name='L4839'></a><a href='#L4839'>4839</a>
4905
- <a name='L4840'></a><a href='#L4840'>4840</a>
4906
- <a name='L4841'></a><a href='#L4841'>4841</a>
4907
- <a name='L4842'></a><a href='#L4842'>4842</a>
4908
- <a name='L4843'></a><a href='#L4843'>4843</a>
4909
- <a name='L4844'></a><a href='#L4844'>4844</a>
4910
- <a name='L4845'></a><a href='#L4845'>4845</a>
4911
- <a name='L4846'></a><a href='#L4846'>4846</a>
4912
- <a name='L4847'></a><a href='#L4847'>4847</a>
4913
- <a name='L4848'></a><a href='#L4848'>4848</a>
4914
- <a name='L4849'></a><a href='#L4849'>4849</a>
4915
- <a name='L4850'></a><a href='#L4850'>4850</a>
4916
- <a name='L4851'></a><a href='#L4851'>4851</a>
4917
- <a name='L4852'></a><a href='#L4852'>4852</a>
4918
- <a name='L4853'></a><a href='#L4853'>4853</a>
4919
- <a name='L4854'></a><a href='#L4854'>4854</a>
4920
- <a name='L4855'></a><a href='#L4855'>4855</a>
4921
- <a name='L4856'></a><a href='#L4856'>4856</a>
4922
- <a name='L4857'></a><a href='#L4857'>4857</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
4838
+ <a name='L4773'></a><a href='#L4773'>4773</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
4923
4839
  <span class="cline-any cline-yes">1x</span>
4924
4840
  <span class="cline-any cline-yes">1x</span>
4925
4841
  <span class="cline-any cline-yes">1x</span>
@@ -5007,7 +4923,6 @@
5007
4923
  <span class="cline-any cline-neutral">&nbsp;</span>
5008
4924
  <span class="cline-any cline-neutral">&nbsp;</span>
5009
4925
  <span class="cline-any cline-neutral">&nbsp;</span>
5010
- <span class="cline-any cline-neutral">&nbsp;</span>
5011
4926
  <span class="cline-any cline-yes">1x</span>
5012
4927
  <span class="cline-any cline-yes">1x</span>
5013
4928
  <span class="cline-any cline-yes">1x</span>
@@ -5023,6 +4938,7 @@
5023
4938
  <span class="cline-any cline-neutral">&nbsp;</span>
5024
4939
  <span class="cline-any cline-yes">1x</span>
5025
4940
  <span class="cline-any cline-yes">1x</span>
4941
+ <span class="cline-any cline-neutral">&nbsp;</span>
5026
4942
  <span class="cline-any cline-yes">1x</span>
5027
4943
  <span class="cline-any cline-neutral">&nbsp;</span>
5028
4944
  <span class="cline-any cline-yes">1x</span>
@@ -5060,6 +4976,9 @@
5060
4976
  <span class="cline-any cline-neutral">&nbsp;</span>
5061
4977
  <span class="cline-any cline-neutral">&nbsp;</span>
5062
4978
  <span class="cline-any cline-neutral">&nbsp;</span>
4979
+ <span class="cline-any cline-neutral">&nbsp;</span>
4980
+ <span class="cline-any cline-neutral">&nbsp;</span>
4981
+ <span class="cline-any cline-neutral">&nbsp;</span>
5063
4982
  <span class="cline-any cline-yes">1x</span>
5064
4983
  <span class="cline-any cline-neutral">&nbsp;</span>
5065
4984
  <span class="cline-any cline-yes">1x</span>
@@ -5104,27 +5023,6 @@
5104
5023
  <span class="cline-any cline-neutral">&nbsp;</span>
5105
5024
  <span class="cline-any cline-neutral">&nbsp;</span>
5106
5025
  <span class="cline-any cline-neutral">&nbsp;</span>
5107
- <span class="cline-any cline-no">&nbsp;</span>
5108
- <span class="cline-any cline-neutral">&nbsp;</span>
5109
- <span class="cline-any cline-neutral">&nbsp;</span>
5110
- <span class="cline-any cline-neutral">&nbsp;</span>
5111
- <span class="cline-any cline-neutral">&nbsp;</span>
5112
- <span class="cline-any cline-no">&nbsp;</span>
5113
- <span class="cline-any cline-no">&nbsp;</span>
5114
- <span class="cline-any cline-neutral">&nbsp;</span>
5115
- <span class="cline-any cline-neutral">&nbsp;</span>
5116
- <span class="cline-any cline-yes">1x</span>
5117
- <span class="cline-any cline-neutral">&nbsp;</span>
5118
- <span class="cline-any cline-neutral">&nbsp;</span>
5119
- <span class="cline-any cline-neutral">&nbsp;</span>
5120
- <span class="cline-any cline-neutral">&nbsp;</span>
5121
- <span class="cline-any cline-neutral">&nbsp;</span>
5122
- <span class="cline-any cline-neutral">&nbsp;</span>
5123
- <span class="cline-any cline-neutral">&nbsp;</span>
5124
- <span class="cline-any cline-neutral">&nbsp;</span>
5125
- <span class="cline-any cline-neutral">&nbsp;</span>
5126
- <span class="cline-any cline-neutral">&nbsp;</span>
5127
- <span class="cline-any cline-neutral">&nbsp;</span>
5128
5026
  <span class="cline-any cline-yes">1x</span>
5129
5027
  <span class="cline-any cline-neutral">&nbsp;</span>
5130
5028
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5294,10 +5192,10 @@
5294
5192
  <span class="cline-any cline-neutral">&nbsp;</span>
5295
5193
  <span class="cline-any cline-neutral">&nbsp;</span>
5296
5194
  <span class="cline-any cline-neutral">&nbsp;</span>
5195
+ <span class="cline-any cline-neutral">&nbsp;</span>
5297
5196
  <span class="cline-any cline-no">&nbsp;</span>
5298
5197
  <span class="cline-any cline-no">&nbsp;</span>
5299
5198
  <span class="cline-any cline-neutral">&nbsp;</span>
5300
- <span class="cline-any cline-neutral">&nbsp;</span>
5301
5199
  <span class="cline-any cline-no">&nbsp;</span>
5302
5200
  <span class="cline-any cline-no">&nbsp;</span>
5303
5201
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5305,38 +5203,62 @@
5305
5203
  <span class="cline-any cline-neutral">&nbsp;</span>
5306
5204
  <span class="cline-any cline-no">&nbsp;</span>
5307
5205
  <span class="cline-any cline-no">&nbsp;</span>
5308
- <span class="cline-any cline-no">&nbsp;</span>
5309
5206
  <span class="cline-any cline-neutral">&nbsp;</span>
5310
5207
  <span class="cline-any cline-neutral">&nbsp;</span>
5311
5208
  <span class="cline-any cline-no">&nbsp;</span>
5209
+ <span class="cline-any cline-no">&nbsp;</span>
5210
+ <span class="cline-any cline-no">&nbsp;</span>
5211
+ <span class="cline-any cline-no">&nbsp;</span>
5212
+ <span class="cline-any cline-no">&nbsp;</span>
5213
+ <span class="cline-any cline-no">&nbsp;</span>
5214
+ <span class="cline-any cline-no">&nbsp;</span>
5215
+ <span class="cline-any cline-no">&nbsp;</span>
5216
+ <span class="cline-any cline-neutral">&nbsp;</span>
5217
+ <span class="cline-any cline-no">&nbsp;</span>
5218
+ <span class="cline-any cline-neutral">&nbsp;</span>
5312
5219
  <span class="cline-any cline-neutral">&nbsp;</span>
5313
5220
  <span class="cline-any cline-no">&nbsp;</span>
5314
5221
  <span class="cline-any cline-no">&nbsp;</span>
5315
5222
  <span class="cline-any cline-no">&nbsp;</span>
5223
+ <span class="cline-any cline-no">&nbsp;</span>
5316
5224
  <span class="cline-any cline-neutral">&nbsp;</span>
5317
5225
  <span class="cline-any cline-no">&nbsp;</span>
5318
5226
  <span class="cline-any cline-no">&nbsp;</span>
5319
5227
  <span class="cline-any cline-neutral">&nbsp;</span>
5228
+ <span class="cline-any cline-no">&nbsp;</span>
5320
5229
  <span class="cline-any cline-neutral">&nbsp;</span>
5321
5230
  <span class="cline-any cline-neutral">&nbsp;</span>
5322
5231
  <span class="cline-any cline-no">&nbsp;</span>
5323
5232
  <span class="cline-any cline-no">&nbsp;</span>
5324
5233
  <span class="cline-any cline-no">&nbsp;</span>
5234
+ <span class="cline-any cline-no">&nbsp;</span>
5325
5235
  <span class="cline-any cline-neutral">&nbsp;</span>
5236
+ <span class="cline-any cline-no">&nbsp;</span>
5237
+ <span class="cline-any cline-no">&nbsp;</span>
5326
5238
  <span class="cline-any cline-neutral">&nbsp;</span>
5327
5239
  <span class="cline-any cline-no">&nbsp;</span>
5240
+ <span class="cline-any cline-neutral">&nbsp;</span>
5241
+ <span class="cline-any cline-no">&nbsp;</span>
5242
+ <span class="cline-any cline-no">&nbsp;</span>
5243
+ <span class="cline-any cline-no">&nbsp;</span>
5328
5244
  <span class="cline-any cline-no">&nbsp;</span>
5329
5245
  <span class="cline-any cline-neutral">&nbsp;</span>
5330
5246
  <span class="cline-any cline-no">&nbsp;</span>
5331
5247
  <span class="cline-any cline-no">&nbsp;</span>
5248
+ <span class="cline-any cline-neutral">&nbsp;</span>
5332
5249
  <span class="cline-any cline-no">&nbsp;</span>
5333
5250
  <span class="cline-any cline-neutral">&nbsp;</span>
5334
5251
  <span class="cline-any cline-neutral">&nbsp;</span>
5335
5252
  <span class="cline-any cline-no">&nbsp;</span>
5336
5253
  <span class="cline-any cline-no">&nbsp;</span>
5337
- <span class="cline-any cline-neutral">&nbsp;</span>
5338
5254
  <span class="cline-any cline-no">&nbsp;</span>
5339
5255
  <span class="cline-any cline-no">&nbsp;</span>
5256
+ <span class="cline-any cline-no">&nbsp;</span>
5257
+ <span class="cline-any cline-no">&nbsp;</span>
5258
+ <span class="cline-any cline-no">&nbsp;</span>
5259
+ <span class="cline-any cline-no">&nbsp;</span>
5260
+ <span class="cline-any cline-neutral">&nbsp;</span>
5261
+ <span class="cline-any cline-no">&nbsp;</span>
5340
5262
  <span class="cline-any cline-neutral">&nbsp;</span>
5341
5263
  <span class="cline-any cline-neutral">&nbsp;</span>
5342
5264
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5345,52 +5267,99 @@
5345
5267
  <span class="cline-any cline-no">&nbsp;</span>
5346
5268
  <span class="cline-any cline-no">&nbsp;</span>
5347
5269
  <span class="cline-any cline-neutral">&nbsp;</span>
5270
+ <span class="cline-any cline-no">&nbsp;</span>
5348
5271
  <span class="cline-any cline-neutral">&nbsp;</span>
5349
5272
  <span class="cline-any cline-neutral">&nbsp;</span>
5273
+ <span class="cline-any cline-no">&nbsp;</span>
5274
+ <span class="cline-any cline-no">&nbsp;</span>
5275
+ <span class="cline-any cline-no">&nbsp;</span>
5276
+ <span class="cline-any cline-no">&nbsp;</span>
5277
+ <span class="cline-any cline-no">&nbsp;</span>
5350
5278
  <span class="cline-any cline-neutral">&nbsp;</span>
5279
+ <span class="cline-any cline-no">&nbsp;</span>
5280
+ <span class="cline-any cline-no">&nbsp;</span>
5351
5281
  <span class="cline-any cline-neutral">&nbsp;</span>
5352
5282
  <span class="cline-any cline-neutral">&nbsp;</span>
5283
+ <span class="cline-any cline-no">&nbsp;</span>
5353
5284
  <span class="cline-any cline-neutral">&nbsp;</span>
5354
5285
  <span class="cline-any cline-neutral">&nbsp;</span>
5355
5286
  <span class="cline-any cline-neutral">&nbsp;</span>
5356
5287
  <span class="cline-any cline-neutral">&nbsp;</span>
5288
+ <span class="cline-any cline-no">&nbsp;</span>
5357
5289
  <span class="cline-any cline-neutral">&nbsp;</span>
5290
+ <span class="cline-any cline-no">&nbsp;</span>
5291
+ <span class="cline-any cline-no">&nbsp;</span>
5292
+ <span class="cline-any cline-no">&nbsp;</span>
5358
5293
  <span class="cline-any cline-neutral">&nbsp;</span>
5294
+ <span class="cline-any cline-no">&nbsp;</span>
5295
+ <span class="cline-any cline-no">&nbsp;</span>
5359
5296
  <span class="cline-any cline-neutral">&nbsp;</span>
5297
+ <span class="cline-any cline-no">&nbsp;</span>
5298
+ <span class="cline-any cline-no">&nbsp;</span>
5299
+ <span class="cline-any cline-no">&nbsp;</span>
5300
+ <span class="cline-any cline-no">&nbsp;</span>
5360
5301
  <span class="cline-any cline-neutral">&nbsp;</span>
5361
- <span class="cline-any cline-neutral">&nbsp;</span>
5302
+ <span class="cline-any cline-no">&nbsp;</span>
5303
+ <span class="cline-any cline-no">&nbsp;</span>
5362
5304
  <span class="cline-any cline-neutral">&nbsp;</span>
5363
5305
  <span class="cline-any cline-neutral">&nbsp;</span>
5364
5306
  <span class="cline-any cline-neutral">&nbsp;</span>
5365
5307
  <span class="cline-any cline-neutral">&nbsp;</span>
5366
5308
  <span class="cline-any cline-no">&nbsp;</span>
5309
+ <span class="cline-any cline-no">&nbsp;</span>
5310
+ <span class="cline-any cline-no">&nbsp;</span>
5311
+ <span class="cline-any cline-no">&nbsp;</span>
5367
5312
  <span class="cline-any cline-neutral">&nbsp;</span>
5313
+ <span class="cline-any cline-no">&nbsp;</span>
5314
+ <span class="cline-any cline-no">&nbsp;</span>
5368
5315
  <span class="cline-any cline-neutral">&nbsp;</span>
5369
5316
  <span class="cline-any cline-neutral">&nbsp;</span>
5370
5317
  <span class="cline-any cline-no">&nbsp;</span>
5318
+ <span class="cline-any cline-no">&nbsp;</span>
5319
+ <span class="cline-any cline-no">&nbsp;</span>
5320
+ <span class="cline-any cline-no">&nbsp;</span>
5371
5321
  <span class="cline-any cline-neutral">&nbsp;</span>
5372
5322
  <span class="cline-any cline-no">&nbsp;</span>
5373
5323
  <span class="cline-any cline-no">&nbsp;</span>
5374
5324
  <span class="cline-any cline-neutral">&nbsp;</span>
5325
+ <span class="cline-any cline-neutral">&nbsp;</span>
5375
5326
  <span class="cline-any cline-no">&nbsp;</span>
5376
5327
  <span class="cline-any cline-no">&nbsp;</span>
5377
5328
  <span class="cline-any cline-no">&nbsp;</span>
5378
- <span class="cline-any cline-neutral">&nbsp;</span>
5379
5329
  <span class="cline-any cline-no">&nbsp;</span>
5380
5330
  <span class="cline-any cline-no">&nbsp;</span>
5381
5331
  <span class="cline-any cline-no">&nbsp;</span>
5382
5332
  <span class="cline-any cline-no">&nbsp;</span>
5383
5333
  <span class="cline-any cline-neutral">&nbsp;</span>
5334
+ <span class="cline-any cline-neutral">&nbsp;</span>
5335
+ <span class="cline-any cline-neutral">&nbsp;</span>
5336
+ <span class="cline-any cline-no">&nbsp;</span>
5337
+ <span class="cline-any cline-no">&nbsp;</span>
5338
+ <span class="cline-any cline-no">&nbsp;</span>
5339
+ <span class="cline-any cline-no">&nbsp;</span>
5340
+ <span class="cline-any cline-no">&nbsp;</span>
5384
5341
  <span class="cline-any cline-no">&nbsp;</span>
5385
5342
  <span class="cline-any cline-no">&nbsp;</span>
5386
5343
  <span class="cline-any cline-neutral">&nbsp;</span>
5387
5344
  <span class="cline-any cline-neutral">&nbsp;</span>
5345
+ <span class="cline-any cline-neutral">&nbsp;</span>
5346
+ <span class="cline-any cline-no">&nbsp;</span>
5347
+ <span class="cline-any cline-no">&nbsp;</span>
5348
+ <span class="cline-any cline-no">&nbsp;</span>
5349
+ <span class="cline-any cline-no">&nbsp;</span>
5350
+ <span class="cline-any cline-no">&nbsp;</span>
5388
5351
  <span class="cline-any cline-no">&nbsp;</span>
5389
5352
  <span class="cline-any cline-no">&nbsp;</span>
5390
5353
  <span class="cline-any cline-neutral">&nbsp;</span>
5391
5354
  <span class="cline-any cline-neutral">&nbsp;</span>
5392
5355
  <span class="cline-any cline-neutral">&nbsp;</span>
5393
5356
  <span class="cline-any cline-no">&nbsp;</span>
5357
+ <span class="cline-any cline-no">&nbsp;</span>
5358
+ <span class="cline-any cline-no">&nbsp;</span>
5359
+ <span class="cline-any cline-no">&nbsp;</span>
5360
+ <span class="cline-any cline-no">&nbsp;</span>
5361
+ <span class="cline-any cline-no">&nbsp;</span>
5362
+ <span class="cline-any cline-neutral">&nbsp;</span>
5394
5363
  <span class="cline-any cline-neutral">&nbsp;</span>
5395
5364
  <span class="cline-any cline-neutral">&nbsp;</span>
5396
5365
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5398,7 +5367,7 @@
5398
5367
  <span class="cline-any cline-no">&nbsp;</span>
5399
5368
  <span class="cline-any cline-no">&nbsp;</span>
5400
5369
  <span class="cline-any cline-no">&nbsp;</span>
5401
- <span class="cline-any cline-no">&nbsp;</span>
5370
+ <span class="cline-any cline-neutral">&nbsp;</span>
5402
5371
  <span class="cline-any cline-no">&nbsp;</span>
5403
5372
  <span class="cline-any cline-no">&nbsp;</span>
5404
5373
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5407,13 +5376,14 @@
5407
5376
  <span class="cline-any cline-no">&nbsp;</span>
5408
5377
  <span class="cline-any cline-no">&nbsp;</span>
5409
5378
  <span class="cline-any cline-neutral">&nbsp;</span>
5379
+ <span class="cline-any cline-no">&nbsp;</span>
5380
+ <span class="cline-any cline-no">&nbsp;</span>
5381
+ <span class="cline-any cline-neutral">&nbsp;</span>
5410
5382
  <span class="cline-any cline-neutral">&nbsp;</span>
5411
5383
  <span class="cline-any cline-no">&nbsp;</span>
5412
5384
  <span class="cline-any cline-no">&nbsp;</span>
5413
5385
  <span class="cline-any cline-no">&nbsp;</span>
5414
5386
  <span class="cline-any cline-no">&nbsp;</span>
5415
- <span class="cline-any cline-neutral">&nbsp;</span>
5416
- <span class="cline-any cline-neutral">&nbsp;</span>
5417
5387
  <span class="cline-any cline-no">&nbsp;</span>
5418
5388
  <span class="cline-any cline-no">&nbsp;</span>
5419
5389
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5428,10 +5398,17 @@
5428
5398
  <span class="cline-any cline-no">&nbsp;</span>
5429
5399
  <span class="cline-any cline-no">&nbsp;</span>
5430
5400
  <span class="cline-any cline-no">&nbsp;</span>
5401
+ <span class="cline-any cline-no">&nbsp;</span>
5431
5402
  <span class="cline-any cline-neutral">&nbsp;</span>
5403
+ <span class="cline-any cline-no">&nbsp;</span>
5404
+ <span class="cline-any cline-no">&nbsp;</span>
5432
5405
  <span class="cline-any cline-neutral">&nbsp;</span>
5433
5406
  <span class="cline-any cline-neutral">&nbsp;</span>
5434
5407
  <span class="cline-any cline-neutral">&nbsp;</span>
5408
+ <span class="cline-any cline-neutral">&nbsp;</span>
5409
+ <span class="cline-any cline-no">&nbsp;</span>
5410
+ <span class="cline-any cline-no">&nbsp;</span>
5411
+ <span class="cline-any cline-no">&nbsp;</span>
5435
5412
  <span class="cline-any cline-no">&nbsp;</span>
5436
5413
  <span class="cline-any cline-no">&nbsp;</span>
5437
5414
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5441,10 +5418,22 @@
5441
5418
  <span class="cline-any cline-neutral">&nbsp;</span>
5442
5419
  <span class="cline-any cline-no">&nbsp;</span>
5443
5420
  <span class="cline-any cline-no">&nbsp;</span>
5421
+ <span class="cline-any cline-no">&nbsp;</span>
5422
+ <span class="cline-any cline-no">&nbsp;</span>
5444
5423
  <span class="cline-any cline-neutral">&nbsp;</span>
5445
5424
  <span class="cline-any cline-no">&nbsp;</span>
5425
+ <span class="cline-any cline-no">&nbsp;</span>
5426
+ <span class="cline-any cline-neutral">&nbsp;</span>
5446
5427
  <span class="cline-any cline-neutral">&nbsp;</span>
5447
5428
  <span class="cline-any cline-neutral">&nbsp;</span>
5429
+ <span class="cline-any cline-neutral">&nbsp;</span>
5430
+ <span class="cline-any cline-no">&nbsp;</span>
5431
+ <span class="cline-any cline-no">&nbsp;</span>
5432
+ <span class="cline-any cline-no">&nbsp;</span>
5433
+ <span class="cline-any cline-no">&nbsp;</span>
5434
+ <span class="cline-any cline-no">&nbsp;</span>
5435
+ <span class="cline-any cline-no">&nbsp;</span>
5436
+ <span class="cline-any cline-neutral">&nbsp;</span>
5448
5437
  <span class="cline-any cline-no">&nbsp;</span>
5449
5438
  <span class="cline-any cline-no">&nbsp;</span>
5450
5439
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5452,38 +5441,65 @@
5452
5441
  <span class="cline-any cline-neutral">&nbsp;</span>
5453
5442
  <span class="cline-any cline-neutral">&nbsp;</span>
5454
5443
  <span class="cline-any cline-neutral">&nbsp;</span>
5444
+ <span class="cline-any cline-neutral">&nbsp;</span>
5445
+ <span class="cline-any cline-neutral">&nbsp;</span>
5446
+ <span class="cline-any cline-neutral">&nbsp;</span>
5447
+ <span class="cline-any cline-no">&nbsp;</span>
5448
+ <span class="cline-any cline-no">&nbsp;</span>
5449
+ <span class="cline-any cline-no">&nbsp;</span>
5450
+ <span class="cline-any cline-no">&nbsp;</span>
5451
+ <span class="cline-any cline-no">&nbsp;</span>
5452
+ <span class="cline-any cline-no">&nbsp;</span>
5453
+ <span class="cline-any cline-no">&nbsp;</span>
5455
5454
  <span class="cline-any cline-no">&nbsp;</span>
5456
5455
  <span class="cline-any cline-no">&nbsp;</span>
5457
5456
  <span class="cline-any cline-neutral">&nbsp;</span>
5458
5457
  <span class="cline-any cline-neutral">&nbsp;</span>
5459
- <span class="cline-any cline-no">&nbsp;</span>
5460
5458
  <span class="cline-any cline-neutral">&nbsp;</span>
5461
5459
  <span class="cline-any cline-neutral">&nbsp;</span>
5462
5460
  <span class="cline-any cline-neutral">&nbsp;</span>
5463
5461
  <span class="cline-any cline-neutral">&nbsp;</span>
5464
5462
  <span class="cline-any cline-neutral">&nbsp;</span>
5465
5463
  <span class="cline-any cline-no">&nbsp;</span>
5466
- <span class="cline-any cline-neutral">&nbsp;</span>
5467
5464
  <span class="cline-any cline-no">&nbsp;</span>
5468
5465
  <span class="cline-any cline-no">&nbsp;</span>
5469
5466
  <span class="cline-any cline-neutral">&nbsp;</span>
5470
5467
  <span class="cline-any cline-no">&nbsp;</span>
5471
5468
  <span class="cline-any cline-neutral">&nbsp;</span>
5472
5469
  <span class="cline-any cline-no">&nbsp;</span>
5470
+ <span class="cline-any cline-no">&nbsp;</span>
5471
+ <span class="cline-any cline-no">&nbsp;</span>
5473
5472
  <span class="cline-any cline-neutral">&nbsp;</span>
5474
5473
  <span class="cline-any cline-no">&nbsp;</span>
5475
5474
  <span class="cline-any cline-neutral">&nbsp;</span>
5476
5475
  <span class="cline-any cline-neutral">&nbsp;</span>
5476
+ <span class="cline-any cline-no">&nbsp;</span>
5477
5477
  <span class="cline-any cline-neutral">&nbsp;</span>
5478
5478
  <span class="cline-any cline-neutral">&nbsp;</span>
5479
5479
  <span class="cline-any cline-neutral">&nbsp;</span>
5480
+ <span class="cline-any cline-no">&nbsp;</span>
5481
+ <span class="cline-any cline-no">&nbsp;</span>
5480
5482
  <span class="cline-any cline-neutral">&nbsp;</span>
5483
+ <span class="cline-any cline-no">&nbsp;</span>
5484
+ <span class="cline-any cline-no">&nbsp;</span>
5485
+ <span class="cline-any cline-neutral">&nbsp;</span>
5486
+ <span class="cline-any cline-neutral">&nbsp;</span>
5487
+ <span class="cline-any cline-no">&nbsp;</span>
5488
+ <span class="cline-any cline-no">&nbsp;</span>
5481
5489
  <span class="cline-any cline-neutral">&nbsp;</span>
5482
5490
  <span class="cline-any cline-no">&nbsp;</span>
5491
+ <span class="cline-any cline-neutral">&nbsp;</span>
5492
+ <span class="cline-any cline-neutral">&nbsp;</span>
5493
+ <span class="cline-any cline-neutral">&nbsp;</span>
5494
+ <span class="cline-any cline-neutral">&nbsp;</span>
5483
5495
  <span class="cline-any cline-no">&nbsp;</span>
5484
5496
  <span class="cline-any cline-neutral">&nbsp;</span>
5497
+ <span class="cline-any cline-no">&nbsp;</span>
5498
+ <span class="cline-any cline-no">&nbsp;</span>
5485
5499
  <span class="cline-any cline-neutral">&nbsp;</span>
5500
+ <span class="cline-any cline-no">&nbsp;</span>
5486
5501
  <span class="cline-any cline-neutral">&nbsp;</span>
5502
+ <span class="cline-any cline-no">&nbsp;</span>
5487
5503
  <span class="cline-any cline-neutral">&nbsp;</span>
5488
5504
  <span class="cline-any cline-no">&nbsp;</span>
5489
5505
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5499,7 +5515,15 @@
5499
5515
  <span class="cline-any cline-neutral">&nbsp;</span>
5500
5516
  <span class="cline-any cline-neutral">&nbsp;</span>
5501
5517
  <span class="cline-any cline-neutral">&nbsp;</span>
5518
+ <span class="cline-any cline-no">&nbsp;</span>
5519
+ <span class="cline-any cline-neutral">&nbsp;</span>
5520
+ <span class="cline-any cline-neutral">&nbsp;</span>
5521
+ <span class="cline-any cline-neutral">&nbsp;</span>
5522
+ <span class="cline-any cline-neutral">&nbsp;</span>
5502
5523
  <span class="cline-any cline-neutral">&nbsp;</span>
5524
+ <span class="cline-any cline-neutral">&nbsp;</span>
5525
+ <span class="cline-any cline-neutral">&nbsp;</span>
5526
+ <span class="cline-any cline-no">&nbsp;</span>
5503
5527
  <span class="cline-any cline-no">&nbsp;</span>
5504
5528
  <span class="cline-any cline-neutral">&nbsp;</span>
5505
5529
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5850,26 +5874,23 @@
5850
5874
  <span class="cline-any cline-neutral">&nbsp;</span>
5851
5875
  <span class="cline-any cline-neutral">&nbsp;</span>
5852
5876
  <span class="cline-any cline-neutral">&nbsp;</span>
5853
- <span class="cline-any cline-no">&nbsp;</span>
5854
- <span class="cline-any cline-no">&nbsp;</span>
5855
5877
  <span class="cline-any cline-neutral">&nbsp;</span>
5856
5878
  <span class="cline-any cline-neutral">&nbsp;</span>
5857
- <span class="cline-any cline-no">&nbsp;</span>
5858
5879
  <span class="cline-any cline-neutral">&nbsp;</span>
5859
- <span class="cline-any cline-no">&nbsp;</span>
5880
+ <span class="cline-any cline-neutral">&nbsp;</span>
5881
+ <span class="cline-any cline-yes">1x</span>
5860
5882
  <span class="cline-any cline-neutral">&nbsp;</span>
5861
5883
  <span class="cline-any cline-no">&nbsp;</span>
5862
5884
  <span class="cline-any cline-no">&nbsp;</span>
5863
- <span class="cline-any cline-no">&nbsp;</span>
5864
- <span class="cline-any cline-neutral">&nbsp;</span>
5865
5885
  <span class="cline-any cline-neutral">&nbsp;</span>
5866
5886
  <span class="cline-any cline-no">&nbsp;</span>
5867
5887
  <span class="cline-any cline-neutral">&nbsp;</span>
5868
- <span class="cline-any cline-neutral">&nbsp;</span>
5888
+ <span class="cline-any cline-no">&nbsp;</span>
5869
5889
  <span class="cline-any cline-no">&nbsp;</span>
5870
5890
  <span class="cline-any cline-neutral">&nbsp;</span>
5871
5891
  <span class="cline-any cline-neutral">&nbsp;</span>
5872
5892
  <span class="cline-any cline-no">&nbsp;</span>
5893
+ <span class="cline-any cline-neutral">&nbsp;</span>
5873
5894
  <span class="cline-any cline-no">&nbsp;</span>
5874
5895
  <span class="cline-any cline-no">&nbsp;</span>
5875
5896
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5880,6 +5901,7 @@
5880
5901
  <span class="cline-any cline-neutral">&nbsp;</span>
5881
5902
  <span class="cline-any cline-neutral">&nbsp;</span>
5882
5903
  <span class="cline-any cline-neutral">&nbsp;</span>
5904
+ <span class="cline-any cline-neutral">&nbsp;</span>
5883
5905
  <span class="cline-any cline-no">&nbsp;</span>
5884
5906
  <span class="cline-any cline-no">&nbsp;</span>
5885
5907
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5890,7 +5912,6 @@
5890
5912
  <span class="cline-any cline-neutral">&nbsp;</span>
5891
5913
  <span class="cline-any cline-neutral">&nbsp;</span>
5892
5914
  <span class="cline-any cline-neutral">&nbsp;</span>
5893
- <span class="cline-any cline-neutral">&nbsp;</span>
5894
5915
  <span class="cline-any cline-no">&nbsp;</span>
5895
5916
  <span class="cline-any cline-no">&nbsp;</span>
5896
5917
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5909,27 +5930,16 @@
5909
5930
  <span class="cline-any cline-neutral">&nbsp;</span>
5910
5931
  <span class="cline-any cline-neutral">&nbsp;</span>
5911
5932
  <span class="cline-any cline-no">&nbsp;</span>
5912
- <span class="cline-any cline-no">&nbsp;</span>
5913
- <span class="cline-any cline-neutral">&nbsp;</span>
5914
5933
  <span class="cline-any cline-neutral">&nbsp;</span>
5915
5934
  <span class="cline-any cline-no">&nbsp;</span>
5916
- <span class="cline-any cline-neutral">&nbsp;</span>
5917
- <span class="cline-any cline-neutral">&nbsp;</span>
5918
5935
  <span class="cline-any cline-no">&nbsp;</span>
5919
- <span class="cline-any cline-neutral">&nbsp;</span>
5920
- <span class="cline-any cline-neutral">&nbsp;</span>
5921
- <span class="cline-any cline-neutral">&nbsp;</span>
5922
- <span class="cline-any cline-neutral">&nbsp;</span>
5923
- <span class="cline-any cline-neutral">&nbsp;</span>
5924
5936
  <span class="cline-any cline-no">&nbsp;</span>
5925
- <span class="cline-any cline-neutral">&nbsp;</span>
5926
5937
  <span class="cline-any cline-no">&nbsp;</span>
5927
5938
  <span class="cline-any cline-neutral">&nbsp;</span>
5928
5939
  <span class="cline-any cline-neutral">&nbsp;</span>
5929
5940
  <span class="cline-any cline-no">&nbsp;</span>
5930
5941
  <span class="cline-any cline-neutral">&nbsp;</span>
5931
5942
  <span class="cline-any cline-neutral">&nbsp;</span>
5932
- <span class="cline-any cline-neutral">&nbsp;</span>
5933
5943
  <span class="cline-any cline-no">&nbsp;</span>
5934
5944
  <span class="cline-any cline-no">&nbsp;</span>
5935
5945
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5971,14 +5981,12 @@
5971
5981
  <span class="cline-any cline-neutral">&nbsp;</span>
5972
5982
  <span class="cline-any cline-no">&nbsp;</span>
5973
5983
  <span class="cline-any cline-neutral">&nbsp;</span>
5974
- <span class="cline-any cline-neutral">&nbsp;</span>
5975
5984
  <span class="cline-any cline-no">&nbsp;</span>
5976
5985
  <span class="cline-any cline-neutral">&nbsp;</span>
5977
5986
  <span class="cline-any cline-neutral">&nbsp;</span>
5978
5987
  <span class="cline-any cline-no">&nbsp;</span>
5979
5988
  <span class="cline-any cline-neutral">&nbsp;</span>
5980
5989
  <span class="cline-any cline-neutral">&nbsp;</span>
5981
- <span class="cline-any cline-neutral">&nbsp;</span>
5982
5990
  <span class="cline-any cline-no">&nbsp;</span>
5983
5991
  <span class="cline-any cline-no">&nbsp;</span>
5984
5992
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6034,24 +6042,11 @@
6034
6042
  <span class="cline-any cline-neutral">&nbsp;</span>
6035
6043
  <span class="cline-any cline-no">&nbsp;</span>
6036
6044
  <span class="cline-any cline-neutral">&nbsp;</span>
6037
- <span class="cline-any cline-neutral">&nbsp;</span>
6038
- <span class="cline-any cline-no">&nbsp;</span>
6039
- <span class="cline-any cline-neutral">&nbsp;</span>
6040
- <span class="cline-any cline-no">&nbsp;</span>
6041
- <span class="cline-any cline-neutral">&nbsp;</span>
6042
- <span class="cline-any cline-neutral">&nbsp;</span>
6043
6045
  <span class="cline-any cline-no">&nbsp;</span>
6044
6046
  <span class="cline-any cline-neutral">&nbsp;</span>
6045
6047
  <span class="cline-any cline-no">&nbsp;</span>
6046
6048
  <span class="cline-any cline-neutral">&nbsp;</span>
6047
6049
  <span class="cline-any cline-neutral">&nbsp;</span>
6048
- <span class="cline-any cline-neutral">&nbsp;</span>
6049
- <span class="cline-any cline-neutral">&nbsp;</span>
6050
- <span class="cline-any cline-neutral">&nbsp;</span>
6051
- <span class="cline-any cline-neutral">&nbsp;</span>
6052
- <span class="cline-any cline-neutral">&nbsp;</span>
6053
- <span class="cline-any cline-neutral">&nbsp;</span>
6054
- <span class="cline-any cline-yes">1x</span>
6055
6050
  <span class="cline-any cline-no">&nbsp;</span>
6056
6051
  <span class="cline-any cline-neutral">&nbsp;</span>
6057
6052
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6467,28 +6462,6 @@
6467
6462
  <span class="cline-any cline-neutral">&nbsp;</span>
6468
6463
  <span class="cline-any cline-neutral">&nbsp;</span>
6469
6464
  <span class="cline-any cline-neutral">&nbsp;</span>
6470
- <span class="cline-any cline-neutral">&nbsp;</span>
6471
- <span class="cline-any cline-neutral">&nbsp;</span>
6472
- <span class="cline-any cline-neutral">&nbsp;</span>
6473
- <span class="cline-any cline-neutral">&nbsp;</span>
6474
- <span class="cline-any cline-neutral">&nbsp;</span>
6475
- <span class="cline-any cline-neutral">&nbsp;</span>
6476
- <span class="cline-any cline-neutral">&nbsp;</span>
6477
- <span class="cline-any cline-neutral">&nbsp;</span>
6478
- <span class="cline-any cline-neutral">&nbsp;</span>
6479
- <span class="cline-any cline-neutral">&nbsp;</span>
6480
- <span class="cline-any cline-neutral">&nbsp;</span>
6481
- <span class="cline-any cline-neutral">&nbsp;</span>
6482
- <span class="cline-any cline-neutral">&nbsp;</span>
6483
- <span class="cline-any cline-neutral">&nbsp;</span>
6484
- <span class="cline-any cline-neutral">&nbsp;</span>
6485
- <span class="cline-any cline-neutral">&nbsp;</span>
6486
- <span class="cline-any cline-neutral">&nbsp;</span>
6487
- <span class="cline-any cline-neutral">&nbsp;</span>
6488
- <span class="cline-any cline-neutral">&nbsp;</span>
6489
- <span class="cline-any cline-neutral">&nbsp;</span>
6490
- <span class="cline-any cline-neutral">&nbsp;</span>
6491
- <span class="cline-any cline-neutral">&nbsp;</span>
6492
6465
  <span class="cline-any cline-no">&nbsp;</span>
6493
6466
  <span class="cline-any cline-no">&nbsp;</span>
6494
6467
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6514,10 +6487,7 @@
6514
6487
  <span class="cline-any cline-neutral">&nbsp;</span>
6515
6488
  <span class="cline-any cline-neutral">&nbsp;</span>
6516
6489
  <span class="cline-any cline-no">&nbsp;</span>
6517
- <span class="cline-any cline-neutral">&nbsp;</span>
6518
- <span class="cline-any cline-no">&nbsp;</span>
6519
6490
  <span class="cline-any cline-no">&nbsp;</span>
6520
- <span class="cline-any cline-neutral">&nbsp;</span>
6521
6491
  <span class="cline-any cline-no">&nbsp;</span>
6522
6492
  <span class="cline-any cline-no">&nbsp;</span>
6523
6493
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6626,20 +6596,6 @@
6626
6596
  <span class="cline-any cline-no">&nbsp;</span>
6627
6597
  <span class="cline-any cline-no">&nbsp;</span>
6628
6598
  <span class="cline-any cline-no">&nbsp;</span>
6629
- <span class="cline-any cline-no">&nbsp;</span>
6630
- <span class="cline-any cline-no">&nbsp;</span>
6631
- <span class="cline-any cline-no">&nbsp;</span>
6632
- <span class="cline-any cline-neutral">&nbsp;</span>
6633
- <span class="cline-any cline-neutral">&nbsp;</span>
6634
- <span class="cline-any cline-neutral">&nbsp;</span>
6635
- <span class="cline-any cline-neutral">&nbsp;</span>
6636
- <span class="cline-any cline-no">&nbsp;</span>
6637
- <span class="cline-any cline-neutral">&nbsp;</span>
6638
- <span class="cline-any cline-neutral">&nbsp;</span>
6639
- <span class="cline-any cline-no">&nbsp;</span>
6640
- <span class="cline-any cline-no">&nbsp;</span>
6641
- <span class="cline-any cline-no">&nbsp;</span>
6642
- <span class="cline-any cline-no">&nbsp;</span>
6643
6599
  <span class="cline-any cline-neutral">&nbsp;</span>
6644
6600
  <span class="cline-any cline-neutral">&nbsp;</span>
6645
6601
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6690,7 +6646,6 @@
6690
6646
  <span class="cline-any cline-no">&nbsp;</span>
6691
6647
  <span class="cline-any cline-neutral">&nbsp;</span>
6692
6648
  <span class="cline-any cline-neutral">&nbsp;</span>
6693
- <span class="cline-any cline-neutral">&nbsp;</span>
6694
6649
  <span class="cline-any cline-no">&nbsp;</span>
6695
6650
  <span class="cline-any cline-no">&nbsp;</span>
6696
6651
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6994,23 +6949,6 @@
6994
6949
  <span class="cline-any cline-neutral">&nbsp;</span>
6995
6950
  <span class="cline-any cline-no">&nbsp;</span>
6996
6951
  <span class="cline-any cline-no">&nbsp;</span>
6997
- <span class="cline-any cline-neutral">&nbsp;</span>
6998
- <span class="cline-any cline-no">&nbsp;</span>
6999
- <span class="cline-any cline-no">&nbsp;</span>
7000
- <span class="cline-any cline-neutral">&nbsp;</span>
7001
- <span class="cline-any cline-neutral">&nbsp;</span>
7002
- <span class="cline-any cline-neutral">&nbsp;</span>
7003
- <span class="cline-any cline-neutral">&nbsp;</span>
7004
- <span class="cline-any cline-no">&nbsp;</span>
7005
- <span class="cline-any cline-neutral">&nbsp;</span>
7006
- <span class="cline-any cline-neutral">&nbsp;</span>
7007
- <span class="cline-any cline-no">&nbsp;</span>
7008
- <span class="cline-any cline-no">&nbsp;</span>
7009
- <span class="cline-any cline-neutral">&nbsp;</span>
7010
- <span class="cline-any cline-no">&nbsp;</span>
7011
- <span class="cline-any cline-no">&nbsp;</span>
7012
- <span class="cline-any cline-no">&nbsp;</span>
7013
- <span class="cline-any cline-no">&nbsp;</span>
7014
6952
  <span class="cline-any cline-no">&nbsp;</span>
7015
6953
  <span class="cline-any cline-no">&nbsp;</span>
7016
6954
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7018,65 +6956,21 @@
7018
6956
  <span class="cline-any cline-neutral">&nbsp;</span>
7019
6957
  <span class="cline-any cline-neutral">&nbsp;</span>
7020
6958
  <span class="cline-any cline-no">&nbsp;</span>
7021
- <span class="cline-any cline-no">&nbsp;</span>
7022
- <span class="cline-any cline-neutral">&nbsp;</span>
7023
- <span class="cline-any cline-neutral">&nbsp;</span>
7024
- <span class="cline-any cline-neutral">&nbsp;</span>
7025
- <span class="cline-any cline-neutral">&nbsp;</span>
7026
- <span class="cline-any cline-no">&nbsp;</span>
7027
- <span class="cline-any cline-no">&nbsp;</span>
7028
- <span class="cline-any cline-no">&nbsp;</span>
7029
- <span class="cline-any cline-no">&nbsp;</span>
7030
- <span class="cline-any cline-no">&nbsp;</span>
7031
- <span class="cline-any cline-no">&nbsp;</span>
7032
- <span class="cline-any cline-no">&nbsp;</span>
7033
- <span class="cline-any cline-no">&nbsp;</span>
7034
- <span class="cline-any cline-no">&nbsp;</span>
7035
- <span class="cline-any cline-neutral">&nbsp;</span>
7036
- <span class="cline-any cline-no">&nbsp;</span>
7037
- <span class="cline-any cline-neutral">&nbsp;</span>
7038
- <span class="cline-any cline-no">&nbsp;</span>
7039
- <span class="cline-any cline-no">&nbsp;</span>
7040
- <span class="cline-any cline-no">&nbsp;</span>
7041
- <span class="cline-any cline-no">&nbsp;</span>
7042
- <span class="cline-any cline-neutral">&nbsp;</span>
7043
6959
  <span class="cline-any cline-neutral">&nbsp;</span>
7044
- <span class="cline-any cline-neutral">&nbsp;</span>
7045
- <span class="cline-any cline-neutral">&nbsp;</span>
7046
- <span class="cline-any cline-no">&nbsp;</span>
7047
6960
  <span class="cline-any cline-no">&nbsp;</span>
7048
6961
  <span class="cline-any cline-neutral">&nbsp;</span>
7049
6962
  <span class="cline-any cline-neutral">&nbsp;</span>
7050
6963
  <span class="cline-any cline-neutral">&nbsp;</span>
7051
6964
  <span class="cline-any cline-neutral">&nbsp;</span>
7052
- <span class="cline-any cline-no">&nbsp;</span>
7053
- <span class="cline-any cline-no">&nbsp;</span>
7054
- <span class="cline-any cline-neutral">&nbsp;</span>
7055
- <span class="cline-any cline-neutral">&nbsp;</span>
7056
- <span class="cline-any cline-neutral">&nbsp;</span>
7057
6965
  <span class="cline-any cline-neutral">&nbsp;</span>
7058
- <span class="cline-any cline-no">&nbsp;</span>
7059
- <span class="cline-any cline-no">&nbsp;</span>
7060
6966
  <span class="cline-any cline-neutral">&nbsp;</span>
7061
- <span class="cline-any cline-no">&nbsp;</span>
7062
6967
  <span class="cline-any cline-neutral">&nbsp;</span>
7063
- <span class="cline-any cline-no">&nbsp;</span>
7064
- <span class="cline-any cline-no">&nbsp;</span>
7065
- <span class="cline-any cline-no">&nbsp;</span>
7066
- <span class="cline-any cline-no">&nbsp;</span>
7067
- <span class="cline-any cline-no">&nbsp;</span>
7068
- <span class="cline-any cline-no">&nbsp;</span>
7069
- <span class="cline-any cline-no">&nbsp;</span>
7070
6968
  <span class="cline-any cline-neutral">&nbsp;</span>
7071
6969
  <span class="cline-any cline-neutral">&nbsp;</span>
7072
6970
  <span class="cline-any cline-neutral">&nbsp;</span>
7073
6971
  <span class="cline-any cline-neutral">&nbsp;</span>
7074
6972
  <span class="cline-any cline-no">&nbsp;</span>
7075
6973
  <span class="cline-any cline-neutral">&nbsp;</span>
7076
- <span class="cline-any cline-neutral">&nbsp;</span>
7077
- <span class="cline-any cline-neutral">&nbsp;</span>
7078
- <span class="cline-any cline-no">&nbsp;</span>
7079
- <span class="cline-any cline-no">&nbsp;</span>
7080
6974
  <span class="cline-any cline-no">&nbsp;</span>
7081
6975
  <span class="cline-any cline-no">&nbsp;</span>
7082
6976
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7088,15 +6982,9 @@
7088
6982
  <span class="cline-any cline-neutral">&nbsp;</span>
7089
6983
  <span class="cline-any cline-neutral">&nbsp;</span>
7090
6984
  <span class="cline-any cline-no">&nbsp;</span>
7091
- <span class="cline-any cline-neutral">&nbsp;</span>
7092
- <span class="cline-any cline-neutral">&nbsp;</span>
7093
- <span class="cline-any cline-neutral">&nbsp;</span>
7094
6985
  <span class="cline-any cline-no">&nbsp;</span>
7095
6986
  <span class="cline-any cline-neutral">&nbsp;</span>
7096
6987
  <span class="cline-any cline-neutral">&nbsp;</span>
7097
- <span class="cline-any cline-no">&nbsp;</span>
7098
- <span class="cline-any cline-no">&nbsp;</span>
7099
- <span class="cline-any cline-no">&nbsp;</span>
7100
6988
  <span class="cline-any cline-neutral">&nbsp;</span>
7101
6989
  <span class="cline-any cline-neutral">&nbsp;</span>
7102
6990
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7108,32 +6996,14 @@
7108
6996
  <span class="cline-any cline-no">&nbsp;</span>
7109
6997
  <span class="cline-any cline-no">&nbsp;</span>
7110
6998
  <span class="cline-any cline-no">&nbsp;</span>
7111
- <span class="cline-any cline-no">&nbsp;</span>
7112
- <span class="cline-any cline-no">&nbsp;</span>
7113
6999
  <span class="cline-any cline-neutral">&nbsp;</span>
7114
- <span class="cline-any cline-neutral">&nbsp;</span>
7115
- <span class="cline-any cline-neutral">&nbsp;</span>
7116
- <span class="cline-any cline-no">&nbsp;</span>
7117
7000
  <span class="cline-any cline-no">&nbsp;</span>
7118
7001
  <span class="cline-any cline-neutral">&nbsp;</span>
7119
- <span class="cline-any cline-neutral">&nbsp;</span>
7120
- <span class="cline-any cline-neutral">&nbsp;</span>
7121
- <span class="cline-any cline-no">&nbsp;</span>
7122
7002
  <span class="cline-any cline-no">&nbsp;</span>
7123
7003
  <span class="cline-any cline-no">&nbsp;</span>
7124
7004
  <span class="cline-any cline-no">&nbsp;</span>
7125
7005
  <span class="cline-any cline-no">&nbsp;</span>
7126
- <span class="cline-any cline-no">&nbsp;</span>
7127
- <span class="cline-any cline-no">&nbsp;</span>
7128
- <span class="cline-any cline-neutral">&nbsp;</span>
7129
- <span class="cline-any cline-neutral">&nbsp;</span>
7130
- <span class="cline-any cline-neutral">&nbsp;</span>
7131
- <span class="cline-any cline-neutral">&nbsp;</span>
7132
- <span class="cline-any cline-no">&nbsp;</span>
7133
- <span class="cline-any cline-no">&nbsp;</span>
7134
7006
  <span class="cline-any cline-neutral">&nbsp;</span>
7135
- <span class="cline-any cline-no">&nbsp;</span>
7136
- <span class="cline-any cline-no">&nbsp;</span>
7137
7007
  <span class="cline-any cline-neutral">&nbsp;</span>
7138
7008
  <span class="cline-any cline-neutral">&nbsp;</span>
7139
7009
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7144,48 +7014,28 @@
7144
7014
  <span class="cline-any cline-neutral">&nbsp;</span>
7145
7015
  <span class="cline-any cline-neutral">&nbsp;</span>
7146
7016
  <span class="cline-any cline-no">&nbsp;</span>
7147
- <span class="cline-any cline-neutral">&nbsp;</span>
7148
- <span class="cline-any cline-neutral">&nbsp;</span>
7149
- <span class="cline-any cline-neutral">&nbsp;</span>
7150
- <span class="cline-any cline-no">&nbsp;</span>
7151
- <span class="cline-any cline-no">&nbsp;</span>
7152
- <span class="cline-any cline-no">&nbsp;</span>
7153
- <span class="cline-any cline-no">&nbsp;</span>
7154
- <span class="cline-any cline-no">&nbsp;</span>
7155
- <span class="cline-any cline-no">&nbsp;</span>
7156
- <span class="cline-any cline-no">&nbsp;</span>
7157
- <span class="cline-any cline-no">&nbsp;</span>
7158
- <span class="cline-any cline-neutral">&nbsp;</span>
7159
- <span class="cline-any cline-no">&nbsp;</span>
7160
- <span class="cline-any cline-no">&nbsp;</span>
7161
- <span class="cline-any cline-no">&nbsp;</span>
7162
- <span class="cline-any cline-neutral">&nbsp;</span>
7163
- <span class="cline-any cline-no">&nbsp;</span>
7164
7017
  <span class="cline-any cline-no">&nbsp;</span>
7165
- <span class="cline-any cline-no">&nbsp;</span>
7166
- <span class="cline-any cline-neutral">&nbsp;</span>
7167
7018
  <span class="cline-any cline-neutral">&nbsp;</span>
7168
7019
  <span class="cline-any cline-neutral">&nbsp;</span>
7169
7020
  <span class="cline-any cline-neutral">&nbsp;</span>
7170
7021
  <span class="cline-any cline-neutral">&nbsp;</span>
7171
- <span class="cline-any cline-neutral">&nbsp;</span>
7172
- <span class="cline-any cline-no">&nbsp;</span>
7173
- <span class="cline-any cline-no">&nbsp;</span>
7174
7022
  <span class="cline-any cline-no">&nbsp;</span>
7175
7023
  <span class="cline-any cline-no">&nbsp;</span>
7176
7024
  <span class="cline-any cline-neutral">&nbsp;</span>
7177
7025
  <span class="cline-any cline-no">&nbsp;</span>
7026
+ <span class="cline-any cline-neutral">&nbsp;</span>
7027
+ <span class="cline-any cline-neutral">&nbsp;</span>
7178
7028
  <span class="cline-any cline-no">&nbsp;</span>
7029
+ <span class="cline-any cline-neutral">&nbsp;</span>
7179
7030
  <span class="cline-any cline-no">&nbsp;</span>
7180
7031
  <span class="cline-any cline-no">&nbsp;</span>
7181
7032
  <span class="cline-any cline-no">&nbsp;</span>
7182
- <span class="cline-any cline-no">&nbsp;</span>
7183
- <span class="cline-any cline-neutral">&nbsp;</span>
7184
7033
  <span class="cline-any cline-neutral">&nbsp;</span>
7185
7034
  <span class="cline-any cline-neutral">&nbsp;</span>
7186
7035
  <span class="cline-any cline-no">&nbsp;</span>
7187
7036
  <span class="cline-any cline-neutral">&nbsp;</span>
7188
7037
  <span class="cline-any cline-neutral">&nbsp;</span>
7038
+ <span class="cline-any cline-neutral">&nbsp;</span>
7189
7039
  <span class="cline-any cline-no">&nbsp;</span>
7190
7040
  <span class="cline-any cline-neutral">&nbsp;</span>
7191
7041
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7439,7 +7289,6 @@
7439
7289
  <span class="cline-any cline-neutral">&nbsp;</span>
7440
7290
  <span class="cline-any cline-neutral">&nbsp;</span>
7441
7291
  <span class="cline-any cline-neutral">&nbsp;</span>
7442
- <span class="cline-any cline-neutral">&nbsp;</span>
7443
7292
  <span class="cline-any cline-no">&nbsp;</span>
7444
7293
  <span class="cline-any cline-no">&nbsp;</span>
7445
7294
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7471,6 +7320,7 @@
7471
7320
  <span class="cline-any cline-neutral">&nbsp;</span>
7472
7321
  <span class="cline-any cline-no">&nbsp;</span>
7473
7322
  <span class="cline-any cline-neutral">&nbsp;</span>
7323
+ <span class="cline-any cline-no">&nbsp;</span>
7474
7324
  <span class="cline-any cline-neutral">&nbsp;</span>
7475
7325
  <span class="cline-any cline-neutral">&nbsp;</span>
7476
7326
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7504,6 +7354,10 @@
7504
7354
  <span class="cline-any cline-no">&nbsp;</span>
7505
7355
  <span class="cline-any cline-no">&nbsp;</span>
7506
7356
  <span class="cline-any cline-neutral">&nbsp;</span>
7357
+ <span class="cline-any cline-neutral">&nbsp;</span>
7358
+ <span class="cline-any cline-neutral">&nbsp;</span>
7359
+ <span class="cline-any cline-neutral">&nbsp;</span>
7360
+ <span class="cline-any cline-neutral">&nbsp;</span>
7507
7361
  <span class="cline-any cline-no">&nbsp;</span>
7508
7362
  <span class="cline-any cline-no">&nbsp;</span>
7509
7363
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7514,22 +7368,17 @@
7514
7368
  <span class="cline-any cline-neutral">&nbsp;</span>
7515
7369
  <span class="cline-any cline-neutral">&nbsp;</span>
7516
7370
  <span class="cline-any cline-neutral">&nbsp;</span>
7517
- <span class="cline-any cline-no">&nbsp;</span>
7518
7371
  <span class="cline-any cline-neutral">&nbsp;</span>
7519
7372
  <span class="cline-any cline-neutral">&nbsp;</span>
7520
7373
  <span class="cline-any cline-no">&nbsp;</span>
7521
7374
  <span class="cline-any cline-neutral">&nbsp;</span>
7522
7375
  <span class="cline-any cline-no">&nbsp;</span>
7523
- <span class="cline-any cline-no">&nbsp;</span>
7524
7376
  <span class="cline-any cline-neutral">&nbsp;</span>
7525
7377
  <span class="cline-any cline-neutral">&nbsp;</span>
7526
7378
  <span class="cline-any cline-no">&nbsp;</span>
7527
7379
  <span class="cline-any cline-neutral">&nbsp;</span>
7528
- <span class="cline-any cline-neutral">&nbsp;</span>
7529
7380
  <span class="cline-any cline-no">&nbsp;</span>
7530
7381
  <span class="cline-any cline-no">&nbsp;</span>
7531
- <span class="cline-any cline-neutral">&nbsp;</span>
7532
- <span class="cline-any cline-neutral">&nbsp;</span>
7533
7382
  <span class="cline-any cline-no">&nbsp;</span>
7534
7383
  <span class="cline-any cline-neutral">&nbsp;</span>
7535
7384
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7541,12 +7390,9 @@
7541
7390
  <span class="cline-any cline-neutral">&nbsp;</span>
7542
7391
  <span class="cline-any cline-neutral">&nbsp;</span>
7543
7392
  <span class="cline-any cline-neutral">&nbsp;</span>
7544
- <span class="cline-any cline-neutral">&nbsp;</span>
7545
- <span class="cline-any cline-neutral">&nbsp;</span>
7546
7393
  <span class="cline-any cline-no">&nbsp;</span>
7547
7394
  <span class="cline-any cline-neutral">&nbsp;</span>
7548
7395
  <span class="cline-any cline-no">&nbsp;</span>
7549
- <span class="cline-any cline-neutral">&nbsp;</span>
7550
7396
  <span class="cline-any cline-no">&nbsp;</span>
7551
7397
  <span class="cline-any cline-neutral">&nbsp;</span>
7552
7398
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7605,25 +7451,10 @@
7605
7451
  <span class="cline-any cline-neutral">&nbsp;</span>
7606
7452
  <span class="cline-any cline-neutral">&nbsp;</span>
7607
7453
  <span class="cline-any cline-no">&nbsp;</span>
7608
- <span class="cline-any cline-neutral">&nbsp;</span>
7609
- <span class="cline-any cline-neutral">&nbsp;</span>
7610
- <span class="cline-any cline-no">&nbsp;</span>
7611
7454
  <span class="cline-any cline-no">&nbsp;</span>
7612
7455
  <span class="cline-any cline-no">&nbsp;</span>
7613
7456
  <span class="cline-any cline-neutral">&nbsp;</span>
7614
7457
  <span class="cline-any cline-no">&nbsp;</span>
7615
- <span class="cline-any cline-no">&nbsp;</span>
7616
- <span class="cline-any cline-neutral">&nbsp;</span>
7617
- <span class="cline-any cline-neutral">&nbsp;</span>
7618
- <span class="cline-any cline-neutral">&nbsp;</span>
7619
- <span class="cline-any cline-no">&nbsp;</span>
7620
- <span class="cline-any cline-neutral">&nbsp;</span>
7621
- <span class="cline-any cline-neutral">&nbsp;</span>
7622
- <span class="cline-any cline-neutral">&nbsp;</span>
7623
- <span class="cline-any cline-neutral">&nbsp;</span>
7624
- <span class="cline-any cline-neutral">&nbsp;</span>
7625
- <span class="cline-any cline-neutral">&nbsp;</span>
7626
- <span class="cline-any cline-neutral">&nbsp;</span>
7627
7458
  <span class="cline-any cline-neutral">&nbsp;</span>
7628
7459
  <span class="cline-any cline-no">&nbsp;</span>
7629
7460
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7771,7 +7602,6 @@
7771
7602
  <span class="cline-any cline-neutral">&nbsp;</span>
7772
7603
  <span class="cline-any cline-neutral">&nbsp;</span>
7773
7604
  <span class="cline-any cline-neutral">&nbsp;</span>
7774
- <span class="cline-any cline-neutral">&nbsp;</span>
7775
7605
  <span class="cline-any cline-no">&nbsp;</span>
7776
7606
  <span class="cline-any cline-neutral">&nbsp;</span>
7777
7607
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7926,16 +7756,6 @@
7926
7756
  <span class="cline-any cline-no">&nbsp;</span>
7927
7757
  <span class="cline-any cline-no">&nbsp;</span>
7928
7758
  <span class="cline-any cline-no">&nbsp;</span>
7929
- <span class="cline-any cline-neutral">&nbsp;</span>
7930
- <span class="cline-any cline-neutral">&nbsp;</span>
7931
- <span class="cline-any cline-neutral">&nbsp;</span>
7932
- <span class="cline-any cline-neutral">&nbsp;</span>
7933
- <span class="cline-any cline-neutral">&nbsp;</span>
7934
- <span class="cline-any cline-neutral">&nbsp;</span>
7935
- <span class="cline-any cline-neutral">&nbsp;</span>
7936
- <span class="cline-any cline-neutral">&nbsp;</span>
7937
- <span class="cline-any cline-neutral">&nbsp;</span>
7938
- <span class="cline-any cline-neutral">&nbsp;</span>
7939
7759
  <span class="cline-any cline-no">&nbsp;</span>
7940
7760
  <span class="cline-any cline-no">&nbsp;</span>
7941
7761
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8734,6 +8554,7 @@
8734
8554
  <span class="cline-any cline-neutral">&nbsp;</span>
8735
8555
  <span class="cline-any cline-neutral">&nbsp;</span>
8736
8556
  <span class="cline-any cline-neutral">&nbsp;</span>
8557
+ <span class="cline-any cline-neutral">&nbsp;</span>
8737
8558
  <span class="cline-any cline-no">&nbsp;</span>
8738
8559
  <span class="cline-any cline-neutral">&nbsp;</span>
8739
8560
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -8851,12 +8672,10 @@
8851
8672
  <span class="cline-any cline-neutral">&nbsp;</span>
8852
8673
  <span class="cline-any cline-neutral">&nbsp;</span>
8853
8674
  <span class="cline-any cline-neutral">&nbsp;</span>
8854
- <span class="cline-any cline-no">&nbsp;</span>
8855
- <span class="cline-any cline-no">&nbsp;</span>
8856
8675
  <span class="cline-any cline-neutral">&nbsp;</span>
8857
- <span class="cline-any cline-no">&nbsp;</span>
8858
8676
  <span class="cline-any cline-neutral">&nbsp;</span>
8859
8677
  <span class="cline-any cline-no">&nbsp;</span>
8678
+ <span class="cline-any cline-neutral">&nbsp;</span>
8860
8679
  <span class="cline-any cline-no">&nbsp;</span>
8861
8680
  <span class="cline-any cline-neutral">&nbsp;</span>
8862
8681
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8866,8 +8685,11 @@
8866
8685
  <span class="cline-any cline-neutral">&nbsp;</span>
8867
8686
  <span class="cline-any cline-neutral">&nbsp;</span>
8868
8687
  <span class="cline-any cline-no">&nbsp;</span>
8688
+ <span class="cline-any cline-neutral">&nbsp;</span>
8869
8689
  <span class="cline-any cline-no">&nbsp;</span>
8870
8690
  <span class="cline-any cline-neutral">&nbsp;</span>
8691
+ <span class="cline-any cline-neutral">&nbsp;</span>
8692
+ <span class="cline-any cline-no">&nbsp;</span>
8871
8693
  <span class="cline-any cline-no">&nbsp;</span>
8872
8694
  <span class="cline-any cline-no">&nbsp;</span>
8873
8695
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8927,8 +8749,6 @@
8927
8749
  <span class="cline-any cline-no">&nbsp;</span>
8928
8750
  <span class="cline-any cline-neutral">&nbsp;</span>
8929
8751
  <span class="cline-any cline-neutral">&nbsp;</span>
8930
- <span class="cline-any cline-no">&nbsp;</span>
8931
- <span class="cline-any cline-neutral">&nbsp;</span>
8932
8752
  <span class="cline-any cline-neutral">&nbsp;</span>
8933
8753
  <span class="cline-any cline-neutral">&nbsp;</span>
8934
8754
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8993,8 +8813,13 @@
8993
8813
  <span class="cline-any cline-neutral">&nbsp;</span>
8994
8814
  <span class="cline-any cline-no">&nbsp;</span>
8995
8815
  <span class="cline-any cline-neutral">&nbsp;</span>
8816
+ <span class="cline-any cline-neutral">&nbsp;</span>
8817
+ <span class="cline-any cline-neutral">&nbsp;</span>
8818
+ <span class="cline-any cline-neutral">&nbsp;</span>
8996
8819
  <span class="cline-any cline-no">&nbsp;</span>
8997
8820
  <span class="cline-any cline-no">&nbsp;</span>
8821
+ <span class="cline-any cline-neutral">&nbsp;</span>
8822
+ <span class="cline-any cline-neutral">&nbsp;</span>
8998
8823
  <span class="cline-any cline-no">&nbsp;</span>
8999
8824
  <span class="cline-any cline-no">&nbsp;</span>
9000
8825
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9003,13 +8828,18 @@
9003
8828
  <span class="cline-any cline-no">&nbsp;</span>
9004
8829
  <span class="cline-any cline-neutral">&nbsp;</span>
9005
8830
  <span class="cline-any cline-no">&nbsp;</span>
8831
+ <span class="cline-any cline-neutral">&nbsp;</span>
9006
8832
  <span class="cline-any cline-no">&nbsp;</span>
9007
8833
  <span class="cline-any cline-no">&nbsp;</span>
9008
8834
  <span class="cline-any cline-neutral">&nbsp;</span>
9009
8835
  <span class="cline-any cline-no">&nbsp;</span>
9010
8836
  <span class="cline-any cline-neutral">&nbsp;</span>
9011
8837
  <span class="cline-any cline-neutral">&nbsp;</span>
8838
+ <span class="cline-any cline-neutral">&nbsp;</span>
8839
+ <span class="cline-any cline-neutral">&nbsp;</span>
9012
8840
  <span class="cline-any cline-no">&nbsp;</span>
8841
+ <span class="cline-any cline-neutral">&nbsp;</span>
8842
+ <span class="cline-any cline-neutral">&nbsp;</span>
9013
8843
  <span class="cline-any cline-no">&nbsp;</span>
9014
8844
  <span class="cline-any cline-no">&nbsp;</span>
9015
8845
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9029,7 +8859,11 @@
9029
8859
  <span class="cline-any cline-neutral">&nbsp;</span>
9030
8860
  <span class="cline-any cline-neutral">&nbsp;</span>
9031
8861
  <span class="cline-any cline-neutral">&nbsp;</span>
8862
+ <span class="cline-any cline-neutral">&nbsp;</span>
8863
+ <span class="cline-any cline-neutral">&nbsp;</span>
9032
8864
  <span class="cline-any cline-no">&nbsp;</span>
8865
+ <span class="cline-any cline-neutral">&nbsp;</span>
8866
+ <span class="cline-any cline-neutral">&nbsp;</span>
9033
8867
  <span class="cline-any cline-no">&nbsp;</span>
9034
8868
  <span class="cline-any cline-neutral">&nbsp;</span>
9035
8869
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9062,11 +8896,6 @@
9062
8896
  <span class="cline-any cline-neutral">&nbsp;</span>
9063
8897
  <span class="cline-any cline-neutral">&nbsp;</span>
9064
8898
  <span class="cline-any cline-neutral">&nbsp;</span>
9065
- <span class="cline-any cline-no">&nbsp;</span>
9066
- <span class="cline-any cline-neutral">&nbsp;</span>
9067
- <span class="cline-any cline-neutral">&nbsp;</span>
9068
- <span class="cline-any cline-neutral">&nbsp;</span>
9069
- <span class="cline-any cline-neutral">&nbsp;</span>
9070
8899
  <span class="cline-any cline-neutral">&nbsp;</span>
9071
8900
  <span class="cline-any cline-neutral">&nbsp;</span>
9072
8901
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9107,27 +8936,20 @@
9107
8936
  <span class="cline-any cline-neutral">&nbsp;</span>
9108
8937
  <span class="cline-any cline-neutral">&nbsp;</span>
9109
8938
  <span class="cline-any cline-neutral">&nbsp;</span>
8939
+ <span class="cline-any cline-yes">1x</span>
9110
8940
  <span class="cline-any cline-no">&nbsp;</span>
9111
8941
  <span class="cline-any cline-no">&nbsp;</span>
9112
8942
  <span class="cline-any cline-no">&nbsp;</span>
9113
- <span class="cline-any cline-neutral">&nbsp;</span>
9114
8943
  <span class="cline-any cline-no">&nbsp;</span>
9115
8944
  <span class="cline-any cline-no">&nbsp;</span>
9116
- <span class="cline-any cline-neutral">&nbsp;</span>
9117
8945
  <span class="cline-any cline-no">&nbsp;</span>
9118
8946
  <span class="cline-any cline-no">&nbsp;</span>
9119
- <span class="cline-any cline-neutral">&nbsp;</span>
9120
- <span class="cline-any cline-neutral">&nbsp;</span>
9121
8947
  <span class="cline-any cline-no">&nbsp;</span>
9122
8948
  <span class="cline-any cline-no">&nbsp;</span>
9123
8949
  <span class="cline-any cline-neutral">&nbsp;</span>
9124
8950
  <span class="cline-any cline-no">&nbsp;</span>
9125
- <span class="cline-any cline-no">&nbsp;</span>
9126
8951
  <span class="cline-any cline-neutral">&nbsp;</span>
9127
8952
  <span class="cline-any cline-neutral">&nbsp;</span>
9128
- <span class="cline-any cline-no">&nbsp;</span>
9129
- <span class="cline-any cline-no">&nbsp;</span>
9130
- <span class="cline-any cline-neutral">&nbsp;</span>
9131
8953
  <span class="cline-any cline-neutral">&nbsp;</span>
9132
8954
  <span class="cline-any cline-neutral">&nbsp;</span>
9133
8955
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9250,16 +9072,33 @@
9250
9072
  <span class="cline-any cline-neutral">&nbsp;</span>
9251
9073
  <span class="cline-any cline-no">&nbsp;</span>
9252
9074
  <span class="cline-any cline-no">&nbsp;</span>
9075
+ <span class="cline-any cline-neutral">&nbsp;</span>
9076
+ <span class="cline-any cline-no">&nbsp;</span>
9077
+ <span class="cline-any cline-neutral">&nbsp;</span>
9078
+ <span class="cline-any cline-no">&nbsp;</span>
9079
+ <span class="cline-any cline-no">&nbsp;</span>
9080
+ <span class="cline-any cline-no">&nbsp;</span>
9081
+ <span class="cline-any cline-no">&nbsp;</span>
9082
+ <span class="cline-any cline-no">&nbsp;</span>
9083
+ <span class="cline-any cline-no">&nbsp;</span>
9084
+ <span class="cline-any cline-no">&nbsp;</span>
9253
9085
  <span class="cline-any cline-no">&nbsp;</span>
9254
9086
  <span class="cline-any cline-no">&nbsp;</span>
9255
9087
  <span class="cline-any cline-neutral">&nbsp;</span>
9256
9088
  <span class="cline-any cline-no">&nbsp;</span>
9089
+ <span class="cline-any cline-neutral">&nbsp;</span>
9257
9090
  <span class="cline-any cline-no">&nbsp;</span>
9258
9091
  <span class="cline-any cline-no">&nbsp;</span>
9259
9092
  <span class="cline-any cline-neutral">&nbsp;</span>
9260
9093
  <span class="cline-any cline-neutral">&nbsp;</span>
9261
9094
  <span class="cline-any cline-neutral">&nbsp;</span>
9095
+ <span class="cline-any cline-no">&nbsp;</span>
9096
+ <span class="cline-any cline-no">&nbsp;</span>
9097
+ <span class="cline-any cline-no">&nbsp;</span>
9262
9098
  <span class="cline-any cline-neutral">&nbsp;</span>
9099
+ <span class="cline-any cline-no">&nbsp;</span>
9100
+ <span class="cline-any cline-no">&nbsp;</span>
9101
+ <span class="cline-any cline-no">&nbsp;</span>
9263
9102
  <span class="cline-any cline-neutral">&nbsp;</span>
9264
9103
  <span class="cline-any cline-neutral">&nbsp;</span>
9265
9104
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9291,7 +9130,6 @@
9291
9130
  <span class="cline-any cline-neutral">&nbsp;</span>
9292
9131
  <span class="cline-any cline-neutral">&nbsp;</span>
9293
9132
  <span class="cline-any cline-neutral">&nbsp;</span>
9294
- <span class="cline-any cline-no">&nbsp;</span>
9295
9133
  <span class="cline-any cline-neutral">&nbsp;</span>
9296
9134
  <span class="cline-any cline-neutral">&nbsp;</span>
9297
9135
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9309,7 +9147,6 @@
9309
9147
  <span class="cline-any cline-no">&nbsp;</span>
9310
9148
  <span class="cline-any cline-no">&nbsp;</span>
9311
9149
  <span class="cline-any cline-no">&nbsp;</span>
9312
- <span class="cline-any cline-no">&nbsp;</span>
9313
9150
  <span class="cline-any cline-neutral">&nbsp;</span>
9314
9151
  <span class="cline-any cline-neutral">&nbsp;</span>
9315
9152
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9641,6 +9478,7 @@
9641
9478
  <span class="cline-any cline-no">&nbsp;</span>
9642
9479
  <span class="cline-any cline-no">&nbsp;</span>
9643
9480
  <span class="cline-any cline-no">&nbsp;</span>
9481
+ <span class="cline-any cline-no">&nbsp;</span>
9644
9482
  <span class="cline-any cline-neutral">&nbsp;</span>
9645
9483
  <span class="cline-any cline-no">&nbsp;</span>
9646
9484
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9699,14 +9537,10 @@
9699
9537
  <span class="cline-any cline-no">&nbsp;</span>
9700
9538
  <span class="cline-any cline-neutral">&nbsp;</span>
9701
9539
  <span class="cline-any cline-neutral">&nbsp;</span>
9702
- <span class="cline-any cline-neutral">&nbsp;</span>
9703
9540
  <span class="cline-any cline-no">&nbsp;</span>
9704
9541
  <span class="cline-any cline-no">&nbsp;</span>
9705
9542
  <span class="cline-any cline-neutral">&nbsp;</span>
9706
- <span class="cline-any cline-neutral">&nbsp;</span>
9707
- <span class="cline-any cline-no">&nbsp;</span>
9708
9543
  <span class="cline-any cline-no">&nbsp;</span>
9709
- <span class="cline-any cline-neutral">&nbsp;</span>
9710
9544
  <span class="cline-any cline-no">&nbsp;</span>
9711
9545
  <span class="cline-any cline-no">&nbsp;</span>
9712
9546
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9718,7 +9552,6 @@
9718
9552
  <span class="cline-any cline-no">&nbsp;</span>
9719
9553
  <span class="cline-any cline-neutral">&nbsp;</span>
9720
9554
  <span class="cline-any cline-neutral">&nbsp;</span>
9721
- <span class="cline-any cline-neutral">&nbsp;</span>
9722
9555
  <span class="cline-any cline-no">&nbsp;</span>
9723
9556
  <span class="cline-any cline-neutral">&nbsp;</span>
9724
9557
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9727,7 +9560,6 @@
9727
9560
  <span class="cline-any cline-neutral">&nbsp;</span>
9728
9561
  <span class="cline-any cline-neutral">&nbsp;</span>
9729
9562
  <span class="cline-any cline-no">&nbsp;</span>
9730
- <span class="cline-any cline-neutral">&nbsp;</span>
9731
9563
  <span class="cline-any cline-no">&nbsp;</span>
9732
9564
  <span class="cline-any cline-no">&nbsp;</span>
9733
9565
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9857,14 +9689,13 @@ import {
9857
9689
  AuthLogicForCallInterface,
9858
9690
  Connector,
9859
9691
  AuthInterface,
9692
+ SynatxNode,
9860
9693
  Connection,
9861
9694
  TriggerLauncher,
9862
9695
  CallConnector,
9863
- MetadataType,
9864
- SyntaxNode,
9865
9696
  } from '../concepts';
9866
9697
  &nbsp;
9867
- import { lsp2tspNumber, SourceMap, SourceMapItem, isSameRange, Range } from '../translator';
9698
+ import { lsp2tspNumber, SourceMap, SourceMapItem, isSameRange } from '../translator';
9868
9699
  import axios from '../service/storage';
9869
9700
  import { translateDiagnosticMessage, naslNodeTranslateMessage, MinRange, checkAStructure_ } from './translator';
9870
9701
  import { EventPayload, invokeCommand, registerCommand } from '../common';
@@ -9879,6 +9710,7 @@ import { EventEmitter } from '../common/EventEmitter';
9879
9710
  &nbsp;
9880
9711
  import { traverse } from '../utils';
9881
9712
  import { withQueueExecute } from '../decorators';
9713
+ &nbsp;
9882
9714
  import { getNodeByNodeCallee } from '../automate/engine/utils';
9883
9715
  &nbsp;
9884
9716
  const EmbeddedTSFileLineMap: { [name: string]: number } = {
@@ -9897,7 +9729,11 @@ const SentryMessager = sentryMonitorTSWorkerMessager(Messager);
9897
9729
  &nbsp;
9898
9730
  export interface FileNode extends BaseNode {
9899
9731
  getEmbeddedFilePath(name?: string): string;
9900
- toEmbeddedTSFile(): utils.EmbeddedTSFileGenerator;
9732
+ toEmbeddedTSFile(): {
9733
+ filePath: string;
9734
+ code: string;
9735
+ sourceMap: SourceMap;
9736
+ };
9901
9737
  }
9902
9738
  &nbsp;
9903
9739
  interface RenameMinRange extends MinRange {
@@ -9914,7 +9750,6 @@ interface QuoteNode {
9914
9750
  &nbsp;
9915
9751
  // 批量查找节点位置的节点信息类型
9916
9752
  type QuickInfoNodes = Array&lt;{ filePath: string; node: BaseNode; item: SourceMapItem }&gt;;
9917
- type QuickInfoMap = Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation; option: any }&gt;;
9918
9753
  &nbsp;
9919
9754
  let isChangeInterface = false; // 判断是否导入接口
9920
9755
  type ActionNode = { target: Variable; typeannotation: TypeAnnotation };
@@ -9959,27 +9794,6 @@ export function <span class="fstat-no" title="function not covered" >getDisplayS
9959
9794
  <span class="cstat-no" title="statement not covered" > return typeList;</span>
9960
9795
  }
9961
9796
  &nbsp;
9962
- function <span class="fstat-no" title="function not covered" >isCoreDateTimeType(</span>n : Argument): boolean {
9963
- <span class="cstat-no" title="statement not covered" > return n?.expression?.__TypeAnnotation?.typeName === 'DateTime' &amp;&amp;</span>
9964
- n?.expression?.__TypeAnnotation?.typeNamespace === 'nasl.core';
9965
- }
9966
- &nbsp;
9967
- function <span class="fstat-no" title="function not covered" >isFunctionWithFixedTimeZoneParam(</span>calleeName : string): boolean {
9968
- const fns = <span class="cstat-no" title="statement not covered" >['CurrDateTime', 'CurrDate', 'CurrTime', 'FormatDateTime'];</span>
9969
- <span class="cstat-no" title="statement not covered" > return fns.includes(calleeName);</span>
9970
- }
9971
- &nbsp;
9972
- const timeZoneArgumentIndexMap = new Map&lt;string, number&gt;([
9973
- ['ToString', 1],
9974
- ['CurrDateTime', 0],
9975
- ['CurrDate', 0],
9976
- ['CurrTime', 0],
9977
- ['FormatDateTime', 2],
9978
- ['jsonSerialize', 1],
9979
- ['GetDateCount', 2],
9980
- ['GetSpecificDaysOfWeek', 3]
9981
- ])
9982
- &nbsp;
9983
9797
  @sentryMonitorNaslServer
9984
9798
  class NaslServer {
9985
9799
  /** naslStdlib文件缓存 */
@@ -10053,7 +9867,7 @@ class NaslServer {
10053
9867
  handleMessage: <span class="fstat-no" title="function not covered" >async </span>({ data }: any) =&gt; {
10054
9868
  <span class="cstat-no" title="statement not covered" > if (data &amp;&amp; data.event === 'publishDiagnostics') {</span>
10055
9869
  const records = <span class="cstat-no" title="statement not covered" >await this._resolveDiagnosticRecords(data.records);</span>
10056
- <span class="cstat-no" title="statement not covered" > await this.diagnosticManager.pushAll(records);</span>
9870
+ <span class="cstat-no" title="statement not covered" > this.diagnosticManager.pushAll(records);</span>
10057
9871
  <span class="cstat-no" title="statement not covered" > try {</span>
10058
9872
  // 结束诊断和标注
10059
9873
  <span class="cstat-no" title="statement not covered" > invokeCommand('naslServer:endWork');</span>
@@ -10149,145 +9963,292 @@ class NaslServer {
10149
9963
  <span class="cstat-no" title="statement not covered" > await this.getDiagnosticRecordsAndPushAll();</span>
10150
9964
  }
10151
9965
  &nbsp;
10152
- private <span class="fstat-no" title="function not covered" >*c</span>ontentToFile(module: Module | App | Connector): Generator&lt;any, utils.EmbeddedTSFileResult[], any&gt; {
10153
- <span class="cstat-no" title="statement not covered" > if (!module) {</span>
10154
- <span class="cstat-no" title="statement not covered" > return[];</span>
9966
+ <span class="fstat-no" title="function not covered" > contentToFile(</span>module: Module | App | Connector, results: Array&lt;ReturnType&lt;Structure['toEmbeddedTSFile']&gt;&gt;) {
9967
+ // 禁用的依赖库不生成代码 区分 undefined false
9968
+ <span class="cstat-no" title="statement not covered" > if (module instanceof Module &amp;&amp; module.type === 'extension' &amp;&amp; module.enable === false) {</span>
9969
+ <span class="cstat-no" title="statement not covered" > return;</span>
10155
9970
  }
10156
- &nbsp;
10157
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
10158
- const results: utils.EmbeddedTSFileResult[] = <span class="cstat-no" title="statement not covered" >[];</span>
10159
- const getTsFile = <span class="cstat-no" title="statement not covered" >function* <span class="fstat-no" title="function not covered" >getTsFile(</span>node: FileNode, name: string, pre?: Function) {</span>
10160
- const isContinue = <span class="cstat-no" title="statement not covered" >pre ? <span class="fstat-no" title="function not covered" >(i</span>nput: unknown) =&gt; <span class="cstat-no" title="statement not covered" >input instanceof pre </span>: <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >true;</span></span>
10161
- &nbsp;
9971
+ <span class="cstat-no" title="statement not covered" > module.structures.forEach(<span class="fstat-no" title="function not covered" >(s</span>tructure) =&gt; {</span>
10162
9972
  <span class="cstat-no" title="statement not covered" > try {</span>
10163
- <span class="cstat-no" title="statement not covered" > if (!isContinue(node)) {</span>
10164
- <span class="cstat-no" title="statement not covered" > return;</span>
10165
- }
10166
- &nbsp;
10167
- const result = <span class="cstat-no" title="statement not covered" >yield* node.toEmbeddedTSFile();</span>
10168
- &nbsp;
9973
+ const result = <span class="cstat-no" title="statement not covered" >structure.toEmbeddedTSFile();</span>
10169
9974
  <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10170
- <span class="cstat-no" title="statement not covered" > node.sourceMap = result.sourceMap;</span>
10171
- <span class="cstat-no" title="statement not covered" > self.file2NodeMap.set(result.filePath, node);</span>
10172
- } catch (err) {
10173
- <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
10174
- <span class="cstat-no" title="statement not covered" > console.warn(node.nodePath ? node.nodePath : name, '代码转换失败', err);</span>
9975
+ // sourceMap都存在目录级别内容下,在页面层级下去找
9976
+ <span class="cstat-no" title="statement not covered" > structure.sourceMap = result.sourceMap;</span>
9977
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, structure);</span>
9978
+ } catch (err) {}
9979
+ });
9980
+ <span class="cstat-no" title="statement not covered" > if (module instanceof App) {</span>
9981
+ <span class="cstat-no" title="statement not covered" > module.overriddenLogics?.forEach?.(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
9982
+ <span class="cstat-no" title="statement not covered" > try {</span>
9983
+ <span class="cstat-no" title="statement not covered" > if (!(logic instanceof OverriddenLogic)) <span class="cstat-no" title="statement not covered" >return;</span></span>
9984
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
9985
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
9986
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
9987
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
9988
+ } catch (err) {
9989
+ <span class="cstat-no" title="statement not covered" > console.error('err: ', err);</span>
10175
9990
  }
10176
- }
10177
- };
10178
- const getTsFiles = <span class="cstat-no" title="statement not covered" >function* <span class="fstat-no" title="function not covered" >getTsFiles(</span>nodes: FileNode[], name: string, pre?: Function) {</span>
10179
- <span class="cstat-no" title="statement not covered" > for (const node of nodes ?? []) {</span>
10180
- <span class="cstat-no" title="statement not covered" > yield* getTsFile(node, name, pre);</span>
10181
- }
10182
- };
10183
- const concat = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >&lt;T, K extends keyof T&gt;(a</span>rr: T[], key: K): T[K] =&gt; {</span>
10184
- <span class="cstat-no" title="statement not covered" > return arr.reduce(<span class="fstat-no" title="function not covered" >(a</span>ns, item) =&gt; <span class="cstat-no" title="statement not covered" >ans.concat(item[key]),</span> []) as any;</span>
10185
- };
10186
- const view2TSFile = <span class="cstat-no" title="statement not covered" >function* <span class="fstat-no" title="function not covered" >view2TSFile(</span>views: View[]): Generator&lt;void, void, any&gt; {</span>
10187
- <span class="cstat-no" title="statement not covered" > if (!views || views.length === 0) {</span>
10188
- <span class="cstat-no" title="statement not covered" > return;</span>
10189
- }
10190
- &nbsp;
10191
- <span class="cstat-no" title="statement not covered" > for (const view of views) {</span>
10192
- <span class="cstat-no" title="statement not covered" > yield* getTsFile(view, 'view');</span>
10193
- &nbsp;
10194
- <span class="cstat-no" title="statement not covered" > if (view.children) {</span>
10195
- <span class="cstat-no" title="statement not covered" > yield* view2TSFile(view.children);</span>
9991
+ });
9992
+ <span class="cstat-no" title="statement not covered" > module?.backend?.variables?.forEach(<span class="fstat-no" title="function not covered" >(b</span>ackdndVariable) =&gt; {</span>
9993
+ <span class="cstat-no" title="statement not covered" > try {</span>
9994
+ const result = <span class="cstat-no" title="statement not covered" >backdndVariable.toEmbeddedTSFile();</span>
9995
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
9996
+ // sourceMap都存在目录级别内容下,在页面层级下去找
9997
+ <span class="cstat-no" title="statement not covered" > backdndVariable.sourceMap = result.sourceMap;</span>
9998
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, backdndVariable);</span>
9999
+ } catch (err) {
10000
+ <span class="cstat-no" title="statement not covered" > console.error(err);</span>
10196
10001
  }
10197
- }
10198
- };
10199
- &nbsp;
10200
- // 禁用的依赖库不生成代码 区分 undefined false
10201
- <span class="cstat-no" title="statement not covered" > if (module instanceof Module &amp;&amp; module.type === 'extension' &amp;&amp; module.enable === false) {</span>
10202
- <span class="cstat-no" title="statement not covered" > return [];</span>
10002
+ });
10003
+ <span class="cstat-no" title="statement not covered" > module.frontends?.forEach(<span class="fstat-no" title="function not covered" >(f</span>rontend) =&gt; {</span>
10004
+ <span class="cstat-no" title="statement not covered" > try {</span>
10005
+ const result = <span class="cstat-no" title="statement not covered" >frontend.toEmbeddedTSFile();</span>
10006
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10007
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10008
+ <span class="cstat-no" title="statement not covered" > frontend.sourceMap = result.sourceMap;</span>
10009
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, frontend);</span>
10010
+ } catch (err) {
10011
+ <span class="cstat-no" title="statement not covered" > console.log(err);</span>
10012
+ }
10013
+ <span class="cstat-no" title="statement not covered" > frontend.variables?.forEach(<span class="fstat-no" title="function not covered" >(f</span>rontendVariable) =&gt; {</span>
10014
+ <span class="cstat-no" title="statement not covered" > try {</span>
10015
+ const result = <span class="cstat-no" title="statement not covered" >frontendVariable.toEmbeddedTSFile();</span>
10016
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10017
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10018
+ <span class="cstat-no" title="statement not covered" > frontendVariable.sourceMap = result.sourceMap;</span>
10019
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, frontendVariable);</span>
10020
+ } catch (err) {
10021
+ <span class="cstat-no" title="statement not covered" > console.log(err);</span>
10022
+ }
10023
+ });
10024
+ <span class="cstat-no" title="statement not covered" > frontend.bindEvents?.forEach(<span class="fstat-no" title="function not covered" >(b</span>indEvent) =&gt; {</span>
10025
+ <span class="cstat-no" title="statement not covered" > if (bindEvent?.logics &amp;&amp; bindEvent?.logics?.length &gt; 0) {</span>
10026
+ <span class="cstat-no" title="statement not covered" > bindEvent.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic: Logic) =&gt; {</span>
10027
+ <span class="cstat-no" title="statement not covered" > try {</span>
10028
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10029
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10030
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10031
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10032
+ } catch (err) {
10033
+ <span class="cstat-no" title="statement not covered" > console.error('err: ', err);</span>
10034
+ }
10035
+ });
10036
+ }
10037
+ });
10038
+ // view的生成
10039
+ <span class="cstat-no" title="statement not covered" > if (!config.closeViews) {</span>
10040
+ <span class="cstat-no" title="statement not covered" > this.view2TSFile(frontend.views, results);</span>
10041
+ }
10042
+ <span class="cstat-no" title="statement not covered" > frontend.componentDependencies?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >this.contentToFile(item, results))</span>;</span>
10043
+ });
10044
+ } else {
10045
+ <span class="cstat-no" title="statement not covered" > module.frontends?.forEach(<span class="fstat-no" title="function not covered" >(f</span>rontend) =&gt; {</span>
10046
+ <span class="cstat-no" title="statement not covered" > try {</span>
10047
+ <span class="cstat-no" title="statement not covered" > frontend.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
10048
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10049
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10050
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10051
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10052
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10053
+ });
10054
+ } catch (err) {
10055
+ <span class="cstat-no" title="statement not covered" > console.log(err);</span>
10056
+ }
10057
+ });
10203
10058
  }
10204
10059
  &nbsp;
10205
- const {
10206
- structures = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10207
- metadataTypes = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10208
- frontends = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10209
- interfaces = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10210
- enums = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10211
- logics = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10212
- authLogics = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10213
- authLogicsForCallInterface = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10214
- processes = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10215
- dataSources = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10216
- triggerLaunchers = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10217
- connections = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10218
- roles = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10219
- overriddenLogics = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10220
- backend,
10221
- configuration,
10222
- } = <span class="cstat-no" title="statement not covered" >module as App;</span>
10223
- &nbsp;
10224
- const {
10225
- namespaces = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10226
- } = <span class="cstat-no" title="statement not covered" >module as Connector;</span>
10227
- &nbsp;
10228
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(structures, 'structure');</span>
10229
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(metadataTypes, 'metadataType');</span>
10060
+ (<span class="cstat-no" title="statement not covered" >module as App).dataSources?.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
10061
+ // 本身dataSource也要生成一个文件用于改名
10062
+ <span class="cstat-no" title="statement not covered" > try {</span>
10063
+ const result = <span class="cstat-no" title="statement not covered" >dataSource.toEmbeddedTSFile();</span>
10064
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10065
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10066
+ <span class="cstat-no" title="statement not covered" > dataSource.sourceMap = result.sourceMap;</span>
10067
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, dataSource);</span>
10068
+ } catch (err) {}
10069
+ <span class="cstat-no" title="statement not covered" > dataSource.entities.forEach(<span class="fstat-no" title="function not covered" >(e</span>ntity) =&gt; {</span>
10070
+ <span class="cstat-no" title="statement not covered" > try {</span>
10071
+ const result = <span class="cstat-no" title="statement not covered" >entity.toEmbeddedTSFile();</span>
10072
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10073
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10074
+ <span class="cstat-no" title="statement not covered" > entity.sourceMap = result.sourceMap;</span>
10075
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, entity);</span>
10076
+ } catch (err) {}
10077
+ });
10078
+ });
10079
+ &nbsp;
10080
+ <span class="cstat-no" title="statement not covered" > module?.interfaces?.forEach(<span class="fstat-no" title="function not covered" >(_</span>interface) =&gt; {</span>
10081
+ <span class="cstat-no" title="statement not covered" > try {</span>
10082
+ const result = <span class="cstat-no" title="statement not covered" >_interface.toEmbeddedTSFile();</span>
10083
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10084
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10085
+ <span class="cstat-no" title="statement not covered" > _interface.sourceMap = result.sourceMap;</span>
10086
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, _interface);</span>
10087
+ } catch (err) {}
10088
+ });
10089
+ <span class="cstat-no" title="statement not covered" > module?.enums?.forEach(<span class="fstat-no" title="function not covered" >(_</span>enum) =&gt; {</span>
10090
+ <span class="cstat-no" title="statement not covered" > try {</span>
10091
+ const result = <span class="cstat-no" title="statement not covered" >_enum.toEmbeddedTSFile();</span>
10092
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10093
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10094
+ <span class="cstat-no" title="statement not covered" > _enum.sourceMap = result.sourceMap;</span>
10095
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, _enum);</span>
10096
+ } catch (err) {}
10097
+ });
10098
+ <span class="cstat-no" title="statement not covered" > module?.logics?.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
10099
+ <span class="cstat-no" title="statement not covered" > try {</span>
10100
+ <span class="cstat-no" title="statement not covered" > if (!(logic instanceof Logic)) <span class="cstat-no" title="statement not covered" >return;</span></span>
10101
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10102
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10103
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10104
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10105
+ } catch (err) {}
10106
+ });
10230
10107
  &nbsp;
10231
- <span class="cstat-no" title="statement not covered" > if (module instanceof App) {</span>
10232
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(overriddenLogics, 'overriddenLogic', OverriddenLogic);</span>
10233
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(backend?.variables ?? [], 'backend_variable');</span>
10108
+ (<span class="cstat-no" title="statement not covered" >module as App)?.authLogics?.forEach?.(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
10109
+ <span class="cstat-no" title="statement not covered" > try {</span>
10110
+ <span class="cstat-no" title="statement not covered" > if (!(logic instanceof Logic)) <span class="cstat-no" title="statement not covered" >return;</span></span>
10111
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10112
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10113
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10114
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10115
+ } catch (err) {}
10116
+ });
10234
10117
  &nbsp;
10235
- <span class="cstat-no" title="statement not covered" > for (const frontend of frontends) {</span>
10236
- <span class="cstat-no" title="statement not covered" > yield* getTsFile(frontend, 'frontend');</span>
10237
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(frontend.variables, 'frontend_variable');</span>
10238
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(frontend.bindEvents, 'logics'), 'frontend_bindEvent_logic');</span>
10118
+ (<span class="cstat-no" title="statement not covered" >module as App)?.authLogicsForCallInterface?.forEach?.(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
10119
+ <span class="cstat-no" title="statement not covered" > try {</span>
10120
+ <span class="cstat-no" title="statement not covered" > if (!(logic instanceof Logic)) <span class="cstat-no" title="statement not covered" >return;</span></span>
10121
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10122
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10123
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10124
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10125
+ } catch (err) {}
10126
+ });
10239
10127
  &nbsp;
10240
- <span class="cstat-no" title="statement not covered" > if (!config.closeViews) {</span>
10241
- <span class="cstat-no" title="statement not covered" > yield* view2TSFile(frontend.views);</span>
10242
- }
10128
+ <span class="cstat-no" title="statement not covered" > module.processes?.forEach(<span class="fstat-no" title="function not covered" >(p</span>rocess) =&gt; {</span>
10129
+ <span class="cstat-no" title="statement not covered" > try {</span>
10130
+ const result = <span class="cstat-no" title="statement not covered" >process.toEmbeddedTSFile();</span>
10131
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10132
+ <span class="cstat-no" title="statement not covered" > process.sourceMap = result.sourceMap;</span>
10133
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, process);</span>
10134
+ } catch (err) {}
10135
+ });
10243
10136
  &nbsp;
10244
- <span class="cstat-no" title="statement not covered" > for (const dep of frontend.componentDependencies) {</span>
10245
- <span class="cstat-no" title="statement not covered" > results.push(...(yield* self.contentToFile(dep)));</span>
10246
- }
10137
+ <span class="cstat-no" title="statement not covered" > if (module instanceof Connector) {</span>
10138
+ <span class="cstat-no" title="statement not covered" > try {</span>
10139
+ <span class="cstat-no" title="statement not covered" > module.triggerLaunchers?.forEach(<span class="fstat-no" title="function not covered" >(l</span>auncher) =&gt; {</span>
10140
+ const result = <span class="cstat-no" title="statement not covered" >launcher.toEmbeddedTSFile();</span>
10141
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10142
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10143
+ <span class="cstat-no" title="statement not covered" > launcher.sourceMap = result.sourceMap;</span>
10144
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, launcher);</span>
10145
+ });
10146
+ <span class="cstat-no" title="statement not covered" > module.namespaces?.forEach?.(<span class="fstat-no" title="function not covered" >(n</span>amespace) =&gt; {</span>
10147
+ <span class="cstat-no" title="statement not covered" > namespace.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
10148
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10149
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10150
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10151
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10152
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10153
+ });
10154
+ })
10155
+ <span class="cstat-no" title="statement not covered" > module?.authLogicsForCallInterface?.forEach?.(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
10156
+ <span class="cstat-no" title="statement not covered" > try {</span>
10157
+ <span class="cstat-no" title="statement not covered" > if (!(logic instanceof Logic)) <span class="cstat-no" title="statement not covered" >return;</span></span>
10158
+ const result = <span class="cstat-no" title="statement not covered" >logic.toEmbeddedTSFile();</span>
10159
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10160
+ <span class="cstat-no" title="statement not covered" > logic.sourceMap = result.sourceMap;</span>
10161
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, logic);</span>
10162
+ } catch (err) {}
10163
+ });
10164
+ } catch (error) {
10165
+ <span class="cstat-no" title="statement not covered" > console.error(error);</span>
10247
10166
  }
10248
- } else {
10249
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(frontends, 'logics' as any), 'frontend_logic');</span>
10250
10167
  }
10251
10168
  &nbsp;
10252
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(dataSources, 'dataSource');</span>
10253
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(dataSources, 'entities'), 'dataSource_entity');</span>
10254
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(interfaces, 'interface');</span>
10255
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(enums, 'enum');</span>
10256
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(logics, 'logic');</span>
10257
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(authLogics, 'authLogic', Logic);</span>
10258
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(authLogicsForCallInterface, 'authLogicForCallInterface', Logic);</span>
10259
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(processes, 'process');</span>
10260
- &nbsp;
10261
- <span class="cstat-no" title="statement not covered" > if (module instanceof Connector) {</span>
10262
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(triggerLaunchers, 'triggerLauncher');</span>
10263
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(authLogicsForCallInterface, 'authLogicForCallInterface');</span>
10264
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(namespaces, 'logics'), 'namespaces_logic');</span>
10169
+ <span class="cstat-no" title="statement not covered" > if (module instanceof App) {</span>
10170
+ <span class="cstat-no" title="statement not covered" > module?.roles?.forEach(<span class="fstat-no" title="function not covered" >(r</span>ole) =&gt; {</span>
10171
+ <span class="cstat-no" title="statement not covered" > try {</span>
10172
+ const result = <span class="cstat-no" title="statement not covered" >role.toEmbeddedTSFile();</span>
10173
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10174
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10175
+ <span class="cstat-no" title="statement not covered" > role.sourceMap = result.sourceMap;</span>
10176
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, role);</span>
10177
+ } catch (err) {}
10178
+ });
10265
10179
  }
10266
10180
  &nbsp;
10267
10181
  <span class="cstat-no" title="statement not covered" > if (module instanceof App) {</span>
10268
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(roles, 'role');</span>
10269
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(connections, 'connection');</span>
10270
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(triggerLaunchers, 'triggerLauncher');</span>
10182
+ <span class="cstat-no" title="statement not covered" > module.connections?.forEach?.(<span class="fstat-no" title="function not covered" >(c</span>onnection) =&gt; {</span>
10183
+ <span class="cstat-no" title="statement not covered" > try {</span>
10184
+ const result = <span class="cstat-no" title="statement not covered" >connection.toEmbeddedTSFile();</span>
10185
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10186
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10187
+ <span class="cstat-no" title="statement not covered" > connection.sourceMap = result.sourceMap;</span>
10188
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, connection);</span>
10189
+ } catch (err) {}
10190
+ });
10191
+ <span class="cstat-no" title="statement not covered" > module.triggerLaunchers?.forEach?.(<span class="fstat-no" title="function not covered" >(t</span>riggerLauncher) =&gt; {</span>
10192
+ <span class="cstat-no" title="statement not covered" > try {</span>
10193
+ const result = <span class="cstat-no" title="statement not covered" >triggerLauncher.toEmbeddedTSFile();</span>
10194
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10195
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10196
+ <span class="cstat-no" title="statement not covered" > triggerLauncher.sourceMap = result.sourceMap;</span>
10197
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, triggerLauncher);</span>
10198
+ } catch (err) {}
10199
+ });
10271
10200
  }
10272
10201
  &nbsp;
10273
- <span class="cstat-no" title="statement not covered" > for (const group of configuration?.groups ?? []) {</span>
10274
- <span class="cstat-no" title="statement not covered" > if (group.name === 'custom') {</span>
10275
- <span class="cstat-no" title="statement not covered" > yield* getTsFiles(group?.properties ?? [], 'configuration_group_property');</span>
10202
+ <span class="cstat-no" title="statement not covered" > module.configuration?.groups?.forEach(<span class="fstat-no" title="function not covered" >(_</span>group) =&gt; {</span>
10203
+ <span class="cstat-no" title="statement not covered" > if (_group.name === 'custom') {</span>
10204
+ <span class="cstat-no" title="statement not covered" > _group.properties.forEach(<span class="fstat-no" title="function not covered" >(_</span>property) =&gt; {</span>
10205
+ <span class="cstat-no" title="statement not covered" > try {</span>
10206
+ const result = <span class="cstat-no" title="statement not covered" >_property.toEmbeddedTSFile();</span>
10207
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10208
+ // sourceMap都存在目录级别内容下,在页面层级下去找
10209
+ <span class="cstat-no" title="statement not covered" > _property.sourceMap = result.sourceMap;</span>
10210
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, _property);</span>
10211
+ } catch (err) {}
10212
+ });
10276
10213
  }
10277
- }
10214
+ });
10215
+ }
10278
10216
  &nbsp;
10279
- <span class="cstat-no" title="statement not covered" > return results;</span>
10217
+ <span class="fstat-no" title="function not covered" > view2TSFile(</span>viewsChildren: View[], results: Array&lt;ReturnType&lt;Structure['toEmbeddedTSFile']&gt;&gt;) {
10218
+ // 如果有子页面
10219
+ <span class="cstat-no" title="statement not covered" > if (viewsChildren &amp;&amp; viewsChildren.length) {</span>
10220
+ <span class="cstat-no" title="statement not covered" > viewsChildren.forEach(<span class="fstat-no" title="function not covered" >(v</span>iew) =&gt; {</span>
10221
+ <span class="cstat-no" title="statement not covered" > try {</span>
10222
+ const result = <span class="cstat-no" title="statement not covered" >view.toEmbeddedTSFile();</span>
10223
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10224
+ <span class="cstat-no" title="statement not covered" > view.sourceMap = result.sourceMap;</span>
10225
+ <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, view);</span>
10226
+ <span class="cstat-no" title="statement not covered" > if (view.children.length) {</span>
10227
+ <span class="cstat-no" title="statement not covered" > this.view2TSFile(view.children, results);</span>
10228
+ }
10229
+ } catch (err) {}
10230
+ });
10231
+ }
10280
10232
  }
10281
10233
  &nbsp;
10282
10234
  <span class="fstat-no" title="function not covered" > async </span>openApp(app: App) {
10283
10235
  <span class="cstat-no" title="statement not covered" > console.time('生成 TS 文件');</span>
10284
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
10285
- const results = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(getAllTsFiles());</span>
10236
+ const results: Array&lt;ReturnType&lt;Structure['toEmbeddedTSFile']&gt;&gt; = <span class="cstat-no" title="statement not covered" >[];</span>
10237
+ <span class="cstat-no" title="statement not covered" > try {</span>
10238
+ // app的创建内容
10239
+ <span class="cstat-no" title="statement not covered" > this.contentToFile(app, results);</span>
10240
+ // 其他模块的创建内容
10241
+ <span class="cstat-no" title="statement not covered" > app.integration?.connectors?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >this.contentToFile(item, results))</span>;</span>
10242
+ <span class="cstat-no" title="statement not covered" > app.dependencies.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >this.contentToFile(item, results))</span>;</span>
10243
+ <span class="cstat-no" title="statement not covered" > app.interfaceDependencies.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >this.contentToFile(item, results))</span>;</span>
10244
+ } catch (err) {
10245
+ <span class="cstat-no" title="statement not covered" > console.log(err);</span>
10246
+ }
10247
+ &nbsp;
10286
10248
  const files = <span class="cstat-no" title="statement not covered" >results.map(<span class="fstat-no" title="function not covered" >(r</span>esult) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
10287
10249
  file: result.filePath,
10288
10250
  fileContent: result.code,
10289
10251
  }));
10290
- &nbsp;
10291
10252
  <span class="cstat-no" title="statement not covered" > await this.writeFiles(files);</span>
10292
10253
  <span class="cstat-no" title="statement not covered" > this._debugInFileStorage(app, files);</span>
10293
10254
  // 修改名称回调
@@ -10299,21 +10260,6 @@ class NaslServer {
10299
10260
  <span class="cstat-no" title="statement not covered" > callback();</span>
10300
10261
  });
10301
10262
  <span class="cstat-no" title="statement not covered" > console.timeEnd('生成 TS 文件');</span>
10302
- &nbsp;
10303
- function* <span class="fstat-no" title="function not covered" >getAllTsFiles(</span>) {
10304
- const files = <span class="cstat-no" title="statement not covered" >yield* self.contentToFile(app);</span>
10305
- const otherModules = <span class="cstat-no" title="statement not covered" >[</span>
10306
- ...app.integration?.connectors ?? [],
10307
- ...app.dependencies ?? [],
10308
- ...app.interfaceDependencies ?? [],
10309
- ];
10310
- &nbsp;
10311
- <span class="cstat-no" title="statement not covered" > for (const item of otherModules) {</span>
10312
- <span class="cstat-no" title="statement not covered" > files.push(...yield* self.contentToFile(item));</span>
10313
- }
10314
- &nbsp;
10315
- <span class="cstat-no" title="statement not covered" > return files;</span>
10316
- }
10317
10263
  }
10318
10264
  &nbsp;
10319
10265
  <span class="fstat-no" title="function not covered" > async </span>refreshApp(app: App) {
@@ -10344,19 +10290,13 @@ class NaslServer {
10344
10290
  <span class="cstat-no" title="statement not covered" > __naslStdlibFileCacheMap.set(options.file, options);</span>
10345
10291
  }
10346
10292
  &nbsp;
10347
- /**
10293
+ /** u
10348
10294
  * 只新增文件
10349
10295
  * @param {*} files
10350
10296
  */
10351
10297
  <span class="fstat-no" title="function not covered" > writeFiles(</span>files: Array&lt;tsProtocol.OpenRequestArgs&gt;) {
10352
10298
  <span class="cstat-no" title="statement not covered" > files.forEach(<span class="fstat-no" title="function not covered" >({</span> file, fileContent }) =&gt; <span class="cstat-no" title="statement not covered" >this.tsFiles.set(file, fileContent))</span>;</span>
10353
- const noRepeatFiles = <span class="cstat-no" title="statement not covered" >Array.from(this.tsFiles.entries()).map(<span class="fstat-no" title="function not covered" >([</span>key, value]) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
10354
- file: key,
10355
- fileContent: value,
10356
- }));
10357
- // const newFiles = require('/Users/sufangzhou/dev/neteast/lcap-ide/packages/nasl/tmp/files-original.json');
10358
- // debugger;
10359
- <span class="cstat-no" title="statement not covered" > return this.messager.requestCommand('writeFiles', noRepeatFiles);</span>
10299
+ <span class="cstat-no" title="statement not covered" > return this.messager.requestCommand('writeFiles', files);</span>
10360
10300
  }
10361
10301
  &nbsp;
10362
10302
  /**
@@ -10704,29 +10644,26 @@ class NaslServer {
10704
10644
  <span class="cstat-no" title="statement not covered" > node.tsErrorDetail = tsErrorDetail;</span>
10705
10645
  }
10706
10646
  &nbsp;
10707
- private <span class="fstat-no" title="function not covered" >*_</span>resolveDiagnosticRecordsWithGenerator(records: Array&lt;DiagnosticRecord&gt;) {
10708
- // 热更新类型标注
10709
- <span class="cstat-no" title="statement not covered" > if (records.length) {</span>
10710
- <span class="cstat-no" title="statement not covered" > yield* this._incrementalAnnotationJSONWithGenerator(records);</span>
10711
- }
10712
- &nbsp;
10713
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
10714
- &nbsp;
10715
- <span class="cstat-no" title="statement not covered" > console.time('处理诊断数据');</span>
10716
- &nbsp;
10717
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(records, function* <span class="fstat-no" title="function not covered" >resolveRecord(</span>record) {</span>
10718
- <span class="cstat-no" title="statement not covered" > if (!record || !record.node) {</span>
10719
- <span class="cstat-no" title="statement not covered" > return;</span>
10720
- }
10721
- &nbsp;
10722
- const { node } = <span class="cstat-no" title="statement not covered" >record;</span>
10647
+ /**
10648
+ * 处理诊断结果
10649
+ * @param records 结果
10650
+ * @returns 过滤或者转换后的诊断结果
10651
+ */
10652
+ @withQueueExecute('diagnostic')
10653
+ <span class="fstat-no" title="function not covered" > async </span>_resolveDiagnosticRecords(records: Array&lt;DiagnosticRecord&gt;) {
10654
+ // 热更新类型标注
10655
+ <span class="cstat-no" title="statement not covered" > if (records.length) {</span>
10656
+ <span class="cstat-no" title="statement not covered" > await this.IncrementalAnnotationJSON(records);</span>
10657
+ }
10658
+ <span class="cstat-no" title="statement not covered" > await Promise.all(</span>
10659
+ records.map(<span class="fstat-no" title="function not covered" >async </span>(record) =&gt; {
10660
+ const {node} = <span class="cstat-no" title="statement not covered" >record;</span>
10661
+ <span class="cstat-no" title="statement not covered" > if (!node) <span class="cstat-no" title="statement not covered" >return;</span></span>
10723
10662
  &nbsp;
10724
- // 先获取原来的节点先清除一下之前有异常的节点,下面重新赋值
10725
- const oldRecord = <span class="cstat-no" title="statement not covered" >self.diagnosticManager.getRecord?.(record.id);</span>
10663
+ // 先获取原来的节点先清除一下之前有异常的节点,下面重新赋值
10664
+ const oldRecord = <span class="cstat-no" title="statement not covered" >this.diagnosticManager.getRecord?.(record.id);</span>
10726
10665
  &nbsp;
10727
- // 处理旧数据
10728
- <span class="cstat-no" title="statement not covered" > if (oldRecord) {</span>
10729
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(oldRecord.semanticDiagnostics, <span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; {</span>
10666
+ <span class="cstat-no" title="statement not covered" > oldRecord?.semanticDiagnostics.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; {</span>
10730
10667
  <span class="cstat-no" title="statement not covered" > if (item.node) {</span>
10731
10668
  <span class="cstat-no" title="statement not covered" > delete item.node.tsErrorDetail;</span>
10732
10669
  // 如果logic中有报错就把标识置为true
@@ -10736,7 +10673,8 @@ class NaslServer {
10736
10673
  }
10737
10674
  });
10738
10675
  &nbsp;
10739
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(oldRecord.suggestionDiagnostics, <span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; {</span>
10676
+ // 清空一些状态
10677
+ <span class="cstat-no" title="statement not covered" > oldRecord?.suggestionDiagnostics.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; {</span>
10740
10678
  <span class="cstat-no" title="statement not covered" > if (item.node) {</span>
10741
10679
  <span class="cstat-no" title="statement not covered" > delete item.node.tsErrorDetail;</span>
10742
10680
  <span class="cstat-no" title="statement not covered" > if (item.node &amp;&amp; item.node instanceof Logic) {</span>
@@ -10744,172 +10682,145 @@ class NaslServer {
10744
10682
  }
10745
10683
  }
10746
10684
  });
10747
- }
10748
10685
  &nbsp;
10749
- // 语义诊断
10750
- <span class="cstat-no" title="statement not covered" > if (isChangeInterface) {</span>
10751
- <span class="cstat-no" title="statement not covered" > yield* self.existStructureFix(record.semanticDiagnostics, record.node as FileNode, self);</span>
10752
- }
10686
+ // 语义诊断
10687
+ <span class="cstat-no" title="statement not covered" > if (isChangeInterface) {</span>
10688
+ <span class="cstat-no" title="statement not covered" > this.existStructureFix(record.semanticDiagnostics, record.node as FileNode, this);</span>
10689
+ }
10753
10690
  &nbsp;
10754
- // 单独处理 oql 语义错误提示
10755
- <span class="cstat-no" title="statement not covered" > if (record.node instanceof Logic) {</span>
10756
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(record?.syntaxDiagnostics, function *<span class="fstat-no" title="function not covered" >test(</span>item) {</span>
10757
- const minRange = <span class="cstat-no" title="statement not covered" >yield* self._findMinRangeWithGenerator(item as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode);</span>
10758
- <span class="cstat-no" title="statement not covered" > if (minRange?.node instanceof OqlQueryComponent) {</span>
10759
- <span class="cstat-no" title="statement not covered" > if (item.text === 'Invalid character.') {</span>
10760
- <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.push(item);</span>
10691
+ // 单独处理 oql 语义错误提示
10692
+ <span class="cstat-no" title="statement not covered" > if (record.node instanceof Logic) {</span>
10693
+ <span class="cstat-no" title="statement not covered" > record?.syntaxDiagnostics.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; {</span>
10694
+ const minRange = <span class="cstat-no" title="statement not covered" >this._findMinRange(item as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode);</span>
10695
+ <span class="cstat-no" title="statement not covered" > if (minRange?.node instanceof OqlQueryComponent) {</span>
10696
+ <span class="cstat-no" title="statement not covered" > if (item.text === 'Invalid character.') {</span>
10697
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.push(item);</span>
10698
+ }
10761
10699
  }
10762
- }
10763
- });
10764
- }
10765
- &nbsp;
10766
- // 记录结构体数据
10767
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(record.semanticDiagnostics, <span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; {</span>
10768
- <span class="cstat-no" title="statement not covered" > checkAStructure_(diag.text);</span>
10769
- });
10700
+ });
10701
+ }
10770
10702
  &nbsp;
10771
- <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics = (</span>
10772
- yield*
10773
- utils.wrapMapToGenerator(record.semanticDiagnostics, <span class="fstat-no" title="function not covered" >function*</span> (diag) {
10774
- <span class="cstat-no" title="statement not covered" > return yield* self._resolveDiagnosticWithGenerator(</span>
10775
- diag as unknown as tsProtocol.DiagnosticWithFileName,
10776
- record.node as FileNode,
10777
- record
10778
- );
10779
- })
10780
- ).filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10781
- &nbsp;
10782
- <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.push(...(yield* self._attachDiagnosticsWithGenerator(node)));</span>
10783
- &nbsp;
10784
- // 报错降级逻辑
10785
- <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics = (</span>
10786
- yield*
10787
- utils.wrapMapToGenerator(record.semanticDiagnostics, <span class="fstat-no" title="function not covered" >(d</span>iagnostic) =&gt; {
10788
- // 错误降级如果属于草稿态的就降级
10789
- <span class="cstat-no" title="statement not covered" > if (diagnostic?.node) {</span>
10790
- let currentNode = <span class="cstat-no" title="statement not covered" >diagnostic.node;</span>
10791
- <span class="cstat-no" title="statement not covered" > if (diagnostic.severity === 'warning') {</span>
10792
- <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10793
- <span class="cstat-no" title="statement not covered" > return null;</span>
10794
- } <span class="cstat-no" title="statement not covered" >if (currentNode.concept === 'OqlQueryComponent') {</span>
10795
- // OQL别名错误降级为警告
10796
- <span class="cstat-no" title="statement not covered" > if (diagnostic.originalDiagnostic &amp;&amp; diagnostic.originalDiagnostic?.text.includes('__OQL_ALIAS_WARNING__')) {</span>
10797
- // 重置 图标和错误等级
10798
- <span class="cstat-no" title="statement not covered" > diagnostic.severity = 'warning';</span>
10799
- <span class="cstat-no" title="statement not covered" > if (diagnostic.node?.tsErrorDetail) {</span>
10800
- // 重置组件节点上的错误信息
10801
- <span class="cstat-no" title="statement not covered" > diagnostic.node.tsErrorDetail.severity = 'warning';</span>
10802
- }
10703
+ // 记录结构体数据
10704
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.forEach(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >checkAStructure_(diag.text))</span>;</span>
10705
+ &nbsp;
10706
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics = record.semanticDiagnostics</span>
10707
+ .map(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >this._resolveDiagnostic(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode, record))</span>
10708
+ .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10709
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.push(...(await this._attachDiagnostics(node)));</span>
10710
+ &nbsp;
10711
+ // 报错降级逻辑
10712
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics = record.semanticDiagnostics</span>
10713
+ .map(<span class="fstat-no" title="function not covered" >(d</span>iagnostic) =&gt; {
10714
+ // 错误降级如果属于草稿态的就降级
10715
+ <span class="cstat-no" title="statement not covered" > if (diagnostic?.node) {</span>
10716
+ let currentNode = <span class="cstat-no" title="statement not covered" >diagnostic.node;</span>
10717
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.severity === 'warning') {</span>
10803
10718
  <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10804
10719
  <span class="cstat-no" title="statement not covered" > return null;</span>
10720
+ } <span class="cstat-no" title="statement not covered" >if (currentNode.concept === 'OqlQueryComponent') {</span>
10721
+ // OQL别名错误降级为警告
10722
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.originalDiagnostic &amp;&amp; diagnostic.originalDiagnostic?.text.includes('__OQL_ALIAS_WARNING__')) {</span>
10723
+ // 重置 图标和错误等级
10724
+ <span class="cstat-no" title="statement not covered" > diagnostic.severity = 'warning';</span>
10725
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.node?.tsErrorDetail) {</span>
10726
+ // 重置组件节点上的错误信息
10727
+ <span class="cstat-no" title="statement not covered" > diagnostic.node.tsErrorDetail.severity = 'warning';</span>
10728
+ }
10729
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10730
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10731
+ }
10805
10732
  }
10806
- }
10807
- <span class="cstat-no" title="statement not covered" > while (currentNode &amp;&amp; currentNode?.parentNode?.concept !== 'App') {</span>
10808
- <span class="cstat-no" title="statement not covered" > if (currentNode.parentKey?.toLowerCase()?.includes('playground')) {</span>
10809
- // 草稿区降级
10810
- // 重置 图标和错误等级
10811
- <span class="cstat-no" title="statement not covered" > diagnostic.severity = 'warning';</span>
10812
- <span class="cstat-no" title="statement not covered" > if (diagnostic.node?.tsErrorDetail) {</span>
10813
- // 重置组件节点上的错误信息
10814
- <span class="cstat-no" title="statement not covered" > diagnostic.node.tsErrorDetail.severity = 'warning';</span>
10733
+ <span class="cstat-no" title="statement not covered" > while (currentNode &amp;&amp; currentNode?.parentNode?.concept !== 'App') {</span>
10734
+ <span class="cstat-no" title="statement not covered" > if (currentNode.parentKey?.toLowerCase()?.includes('playground')) {</span>
10735
+ // 草稿区降级
10736
+ // 重置 图标和错误等级
10737
+ <span class="cstat-no" title="statement not covered" > diagnostic.severity = 'warning';</span>
10738
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.node?.tsErrorDetail) {</span>
10739
+ // 重置组件节点上的错误信息
10740
+ <span class="cstat-no" title="statement not covered" > diagnostic.node.tsErrorDetail.severity = 'warning';</span>
10741
+ }
10742
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10743
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10815
10744
  }
10816
- <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10817
- <span class="cstat-no" title="statement not covered" > return null;</span>
10745
+ <span class="cstat-no" title="statement not covered" > currentNode = currentNode.parentNode;</span>
10818
10746
  }
10819
- <span class="cstat-no" title="statement not covered" > currentNode = currentNode.parentNode;</span>
10820
- }
10821
10747
  &nbsp;
10822
- // 没有降级的继续遍历,如果在logic中,logic本身需要有error状态
10823
- // 如果logic中有报错就把标识置为true
10824
- <span class="cstat-no" title="statement not covered" > if ((diagnostic.node as any)?.logic) {</span>
10825
- (<span class="cstat-no" title="statement not covered" >diagnostic.node as any).logic.haveError = true;</span>
10826
- }
10827
- }
10828
- <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10829
- })
10830
- )
10831
- .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10832
- &nbsp;
10833
- // 处理后的警告异常提示信息
10834
- <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics = (</span>
10835
- yield*
10836
- utils.wrapMapToGenerator(record.suggestionDiagnostics, function * <span class="fstat-no" title="function not covered" >resolveSuggestionDiagnostic(</span>diag) {
10837
- // 上面错误降级下来的
10838
- <span class="cstat-no" title="statement not covered" > if (diag?.node) {</span>
10839
- <span class="cstat-no" title="statement not covered" > return diag;</span>
10840
- // 一些已知警告的单独处理
10841
- } <span class="cstat-no" title="statement not covered" >if (</span>
10842
- [
10843
- `'__LogicEmpty' is declared but its value is never read.`,
10844
- `'__destinationEmpty__' is declared but its value is never read.`,
10845
- `'__devConfigValueEmpty' is declared but its value is never read.`,
10846
- `'__onlineConfigValueEmpty' is declared but its value is never read.`,
10847
- `'__UpdateNoProperty__' is declared but its value is never read.`,
10848
- ].includes(diag.text)
10849
- ) {
10850
- <span class="cstat-no" title="statement not covered" > return yield* self._resolveDiagnosticWithGenerator(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode, record);</span>
10851
- } <span class="cstat-no" title="statement not covered" >if (diag.text.includes(` is declared but its value is never read.`)) {</span>
10852
- // 局部变量和输入变量未使用的警告
10853
- const fromModule = <span class="cstat-no" title="statement not covered" >record.node.parentNode.concept === 'Module';</span>
10854
- const fromConnector = <span class="cstat-no" title="statement not covered" >record.node.parentNode.concept === 'Connector';</span>
10855
- <span class="cstat-no" title="statement not covered" > if ((record.node.concept === 'View' || record.node.concept === 'Logic') &amp;&amp; !(fromModule || fromConnector)) {</span>
10856
- /**
10857
- * javalogic不用提示
10858
- */
10859
- <span class="cstat-no" title="statement not covered" > if (record.node.concept === 'Logic' &amp;&amp; self._isJavalogic(record.node as Logic)) {</span>
10860
- <span class="cstat-no" title="statement not covered" > return null;</span>
10748
+ // 没有降级的继续遍历,如果在logic中,logic本身需要有error状态
10749
+ // 如果logic中有报错就把标识置为true
10750
+ <span class="cstat-no" title="statement not covered" > if ((diagnostic.node as any)?.logic) {</span>
10751
+ (<span class="cstat-no" title="statement not covered" >diagnostic.node as any).logic.haveError = true;</span>
10861
10752
  }
10862
- const minRange = <span class="cstat-no" title="statement not covered" >yield* self._findMinRangeWithGenerator(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode);</span>
10863
- <span class="cstat-no" title="statement not covered" > if (minRange) {</span>
10753
+ }
10754
+ <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10755
+ })
10756
+ .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10757
+ &nbsp;
10758
+ // 处理后的警告异常提示信息
10759
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics = record.suggestionDiagnostics</span>
10760
+ .map(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; {
10761
+ // 上面错误降级下来的
10762
+ <span class="cstat-no" title="statement not covered" > if (diag?.node) {</span>
10763
+ <span class="cstat-no" title="statement not covered" > return diag;</span>
10764
+ // 一些已知警告的单独处理
10765
+ } <span class="cstat-no" title="statement not covered" >if (</span>
10766
+ [
10767
+ `'__LogicEmpty' is declared but its value is never read.`,
10768
+ `'__destinationEmpty__' is declared but its value is never read.`,
10769
+ `'__devConfigValueEmpty' is declared but its value is never read.`,
10770
+ `'__onlineConfigValueEmpty' is declared but its value is never read.`,
10771
+ `'__UpdateNoProperty__' is declared but its value is never read.`,
10772
+ ].includes(diag.text)
10773
+ ) {
10774
+ <span class="cstat-no" title="statement not covered" > return this._resolveDiagnostic(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode, record);</span>
10775
+ } <span class="cstat-no" title="statement not covered" >if (diag.text.includes(` is declared but its value is never read.`)) {</span>
10776
+ // 局部变量和输入变量未使用的警告
10777
+ const fromModule = <span class="cstat-no" title="statement not covered" >record.node.parentNode.concept === 'Module';</span>
10778
+ const fromConnector = <span class="cstat-no" title="statement not covered" >record.node.parentNode.concept === 'Connector';</span>
10779
+ <span class="cstat-no" title="statement not covered" > if ((record.node.concept === 'View' || record.node.concept === 'Logic') &amp;&amp; !(fromModule || fromConnector)) {</span>
10864
10780
  /**
10865
- * 如果节点是入参类型
10866
- * 而且不是foreach中
10867
- * 而且不是事件逻辑的入参
10781
+ * javalogic不用提示
10868
10782
  */
10869
- <span class="cstat-no" title="statement not covered" > if (</span>
10870
- minRange.node instanceof Param &amp;&amp;
10871
- minRange.node.parentNode.concept !== 'ForEachStatement' &amp;&amp;
10872
- !minRange.node.getAncestor('BindEvent')
10873
- ) {
10874
- const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
10875
- node: minRange.node,
10876
- severity: 'warning',
10877
- message: `未使用的输入参数${minRange.node.name}`,
10878
- };
10879
- <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10880
- } <span class="cstat-no" title="statement not covered" >if (minRange.node instanceof Variable) {</span>
10881
- const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
10882
- node: minRange.node,
10883
- severity: 'warning',
10884
- message: `未使用的变量${minRange.node.name}`,
10885
- };
10886
- <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10783
+ <span class="cstat-no" title="statement not covered" > if (record.node.concept === 'Logic' &amp;&amp; this._isJavalogic(record.node as Logic)) {</span>
10784
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10785
+ }
10786
+ const minRange = <span class="cstat-no" title="statement not covered" >this._findMinRange(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode);</span>
10787
+ <span class="cstat-no" title="statement not covered" > if (minRange) {</span>
10788
+ /**
10789
+ * 如果节点是入参类型
10790
+ * 而且不是foreach中
10791
+ * 而且不是事件逻辑的入参
10792
+ */
10793
+ <span class="cstat-no" title="statement not covered" > if (</span>
10794
+ minRange.node instanceof Param &amp;&amp;
10795
+ minRange.node.parentNode.concept !== 'ForEachStatement' &amp;&amp;
10796
+ !minRange.node.getAncestor('BindEvent')
10797
+ ) {
10798
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
10799
+ node: minRange.node,
10800
+ severity: 'warning',
10801
+ message: `未使用的输入参数${minRange.node.name}`,
10802
+ };
10803
+ <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10804
+ } <span class="cstat-no" title="statement not covered" >if (minRange.node instanceof Variable) {</span>
10805
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
10806
+ node: minRange.node,
10807
+ severity: 'warning',
10808
+ message: `未使用的变量${minRange.node.name}`,
10809
+ };
10810
+ <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10811
+ }
10887
10812
  }
10888
10813
  }
10889
10814
  }
10890
- }
10891
- <span class="cstat-no" title="statement not covered" > return null;</span>
10892
- })
10893
- )
10894
- .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10895
- &nbsp;
10896
- <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(...yield* self._attachSuggestionDiagnosticsWithGenerator(node));</span>
10897
- });
10898
- &nbsp;
10899
- <span class="cstat-no" title="statement not covered" > console.timeEnd('处理诊断数据');</span>
10815
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10816
+ })
10817
+ .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10900
10818
  &nbsp;
10819
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(...this._attachSuggestionDiagnostics(node));</span>
10820
+ })
10821
+ );
10901
10822
  <span class="cstat-no" title="statement not covered" > return records;</span>
10902
10823
  }
10903
- &nbsp;
10904
- /**
10905
- * 处理诊断结果
10906
- * @param records 结果
10907
- * @returns 过滤或者转换后的诊断结果
10908
- */
10909
- @withQueueExecute('diagnostic')
10910
- private <span class="fstat-no" title="function not covered" >_resolveDiagnosticRecords(</span>records: Array&lt;DiagnosticRecord&gt;) {
10911
- <span class="cstat-no" title="statement not covered" > return utils.timeSlicingWithGenerator(this._resolveDiagnosticRecordsWithGenerator(records));</span>
10912
- }
10913
10824
  &nbsp;
10914
10825
  /**
10915
10826
  * 判断是否是Javalogic
@@ -10928,7 +10839,7 @@ class NaslServer {
10928
10839
  * @param fileNode 文件级别的节点
10929
10840
  * @returns 诊断结果
10930
10841
  */
10931
- private <span class="fstat-no" title="function not covered" >*_</span>attachSuggestionDiagnosticsWithGenerator(fileNode: BaseNode) {
10842
+ <span class="fstat-no" title="function not covered" > _attachSuggestionDiagnostics(</span>fileNode: BaseNode): Diagnostic[] {
10932
10843
  const diagnostics: Diagnostic[] = <span class="cstat-no" title="statement not covered" >[];</span>
10933
10844
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof Logic || fileNode instanceof View) {</span>
10934
10845
  <span class="cstat-no" title="statement not covered" > fileNode?.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(v</span>alue, node) =&gt; {</span>
@@ -11290,53 +11201,31 @@ class NaslServer {
11290
11201
  }
11291
11202
  &nbsp;
11292
11203
  /** 是否被 触发器依赖, 如果存在,返回第一个触发器对应的名称 */
11293
- <span class="fstat-no" title="function not covered" > isRefedByTriggerAndReturnFirstRef(</span>fileNode: BaseNode): Promise&lt;{
11204
+ <span class="fstat-no" title="function not covered" > async </span>isRefedByTriggerAndReturnFirstRef(fileNode: BaseNode): Promise&lt;{
11294
11205
  isRefedByTrigger: boolean;
11295
11206
  fRefName: string;
11296
11207
  }&gt; {
11297
- <span class="cstat-no" title="statement not covered" > return this._isHaveRef(fileNode).then(<span class="fstat-no" title="function not covered" >(r</span>efs) =&gt; {</span>
11298
- const basePath = <span class="cstat-no" title="statement not covered" >TriggerLauncher.getEmbeddedFileBasePath(fileNode.rootNode as App);</span>
11299
- let flag = <span class="cstat-no" title="statement not covered" >false;</span>
11300
- let fRefName = <span class="cstat-no" title="statement not covered" >'';</span>
11301
- <span class="cstat-no" title="statement not covered" > try {</span>
11302
- <span class="cstat-no" title="statement not covered" > for (const ref of refs) {</span>
11303
- const { file } = <span class="cstat-no" title="statement not covered" >ref;</span>
11304
- <span class="cstat-no" title="statement not covered" > if (file.startsWith(basePath)) {</span>
11305
- <span class="cstat-no" title="statement not covered" > flag = true;</span>
11306
- // file: /embedded/tttta/triggerLaunchers/订阅配置_asd.ts
11307
- <span class="cstat-no" title="statement not covered" > fRefName = file.split(basePath)[1].split('.')[0];</span>
11308
- <span class="cstat-no" title="statement not covered" > break;</span>
11309
- }
11208
+ const refs = <span class="cstat-no" title="statement not covered" >await this._isHaveRef(fileNode);</span>
11209
+ const basePath = <span class="cstat-no" title="statement not covered" >TriggerLauncher.getEmbeddedFileBasePath(fileNode.rootNode as App);</span>
11210
+ let flag = <span class="cstat-no" title="statement not covered" >false;</span>
11211
+ let fRefName = <span class="cstat-no" title="statement not covered" >'';</span>
11212
+ <span class="cstat-no" title="statement not covered" > try {</span>
11213
+ <span class="cstat-no" title="statement not covered" > for (const ref of refs) {</span>
11214
+ const { file } = <span class="cstat-no" title="statement not covered" >ref;</span>
11215
+ <span class="cstat-no" title="statement not covered" > if (file.startsWith(basePath)) {</span>
11216
+ <span class="cstat-no" title="statement not covered" > flag = true;</span>
11217
+ // file: /embedded/tttta/triggerLaunchers/订阅配置_asd.ts
11218
+ <span class="cstat-no" title="statement not covered" > fRefName = file.split(basePath)[1].split('.')[0];</span>
11219
+ <span class="cstat-no" title="statement not covered" > break;</span>
11310
11220
  }
11311
- } catch (error) {
11312
- <span class="cstat-no" title="statement not covered" > console.error(error, refs);</span>
11313
11221
  }
11314
- <span class="cstat-no" title="statement not covered" > return {</span>
11315
- isRefedByTrigger: flag,
11316
- fRefName,
11317
- };
11318
- });
11319
- // const refs = await this._isHaveRef(fileNode);
11320
- // const basePath = TriggerLauncher.getEmbeddedFileBasePath(fileNode.rootNode as App);
11321
- // let flag = false;
11322
- // let fRefName = '';
11323
- // try {
11324
- // for (const ref of refs) {
11325
- // const { file } = ref;
11326
- // if (file.startsWith(basePath)) {
11327
- // flag = true;
11328
- // // file: /embedded/tttta/triggerLaunchers/订阅配置_asd.ts
11329
- // fRefName = file.split(basePath)[1].split('.')[0];
11330
- // break;
11331
- // }
11332
- // }
11333
- // } catch (error) {
11334
- // console.error(error, refs);
11335
- // }
11336
- // return {
11337
- // isRefedByTrigger: flag,
11338
- // fRefName,
11339
- // };
11222
+ } catch (error) {
11223
+ <span class="cstat-no" title="statement not covered" > console.error(error, refs);</span>
11224
+ }
11225
+ <span class="cstat-no" title="statement not covered" > return {</span>
11226
+ isRefedByTrigger: flag,
11227
+ fRefName,
11228
+ };
11340
11229
  }
11341
11230
  &nbsp;
11342
11231
  /**
@@ -11367,18 +11256,15 @@ class NaslServer {
11367
11256
  * @param fileNode 文件级别的节点
11368
11257
  * @returns 诊断结果
11369
11258
  */
11370
- private <span class="fstat-no" title="function not covered" >*_</span>attachDiagnosticsWithGenerator(fileNode: BaseNode) {
11259
+ <span class="fstat-no" title="function not covered" > async </span>_attachDiagnostics(fileNode: BaseNode): Promise&lt;Diagnostic[]&gt; {
11371
11260
  // 每次诊断前先清空这个Set
11372
11261
  <span class="cstat-no" title="statement not covered" > this.logicSetWithComponentLogic = new Set&lt;string&gt;();</span>
11373
- &nbsp;
11374
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
11375
11262
  const diagnostics: Diagnostic[] = <span class="cstat-no" title="statement not covered" >[];</span>
11376
- &nbsp;
11377
11263
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof View) {</span>
11378
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(fileNode.sourceMap.entries(), function* <span class="fstat-no" title="function not covered" >attachView(</span>[node, value]) {</span>
11264
+ <span class="cstat-no" title="statement not covered" > fileNode?.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(v</span>alue, node) =&gt; {</span>
11379
11265
  <span class="cstat-no" title="statement not covered" > if (node instanceof ViewElement &amp;&amp; node.view === fileNode) {</span>
11380
11266
  <span class="cstat-no" title="statement not covered" > if (node.tag) {</span>
11381
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(node.bindAttrs, <span class="fstat-no" title="function not covered" >(b</span>indAttr) =&gt; {</span>
11267
+ <span class="cstat-no" title="statement not covered" > node.bindAttrs.forEach(<span class="fstat-no" title="function not covered" >(b</span>indAttr) =&gt; {</span>
11382
11268
  <span class="cstat-no" title="statement not covered" > if ((bindAttr.model || bindAttr.sync) &amp;&amp; bindAttr.expression) {</span>
11383
11269
  const bindExpression = <span class="cstat-no" title="statement not covered" >bindAttr.expression;</span>
11384
11270
  let diagnostic;
@@ -11421,7 +11307,7 @@ class NaslServer {
11421
11307
  <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; !node.__TypeAnnotation) {</span>
11422
11308
  const nodeTypeName = <span class="cstat-no" title="statement not covered" >node.concept === 'Return' ? '输出参数' : '局部变量';</span>
11423
11309
  let msg;
11424
- <span class="cstat-no" title="statement not covered" > yield* fileNode.traverseChildrenGenerator(<span class="fstat-no" title="function not covered" >(n</span>odeIn) =&gt; {</span>
11310
+ <span class="cstat-no" title="statement not covered" > fileNode.traverseChildren(<span class="fstat-no" title="function not covered" >(n</span>odeIn) =&gt; {</span>
11425
11311
  <span class="cstat-no" title="statement not covered" > if (nodeIn &amp;&amp; (nodeIn instanceof BatchAssignment || (nodeIn instanceof Assignment &amp;&amp; nodeIn.left?.name))) {</span>
11426
11312
  // 子页面内部逻辑过滤
11427
11313
  <span class="cstat-no" title="statement not covered" > if (nodeIn.view !== fileNode) <span class="cstat-no" title="statement not covered" >return;</span></span>
@@ -11478,23 +11364,9 @@ class NaslServer {
11478
11364
  <span class="cstat-no" title="statement not covered" > node.tsErrorDetail = diagnostic;</span>
11479
11365
  <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11480
11366
  }
11481
- const fileSourceCode = <span class="cstat-no" title="statement not covered" >self.getNodeCode(fileNode, value);</span>
11482
- <span class="cstat-no" title="statement not covered" > if (fileSourceCode.includes('|') &amp;&amp; fileSourceCode.includes('.metadataTypes.')) {</span>
11483
- const typeAnnotation = <span class="cstat-no" title="statement not covered" >node.typeAnnotation.toJSON()</span>
11484
- <span class="cstat-no" title="statement not covered" > self._treeMetadataType2CoreType(typeAnnotation, (node.rootNode as App))</span>
11485
- const isDuplicate = <span class="cstat-no" title="statement not covered" >self._isDuplicateCoreType(typeAnnotation)</span>
11486
- <span class="cstat-no" title="statement not covered" > if (isDuplicate) {</span>
11487
- const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11488
- node: node,
11489
- severity: 'error',
11490
- message: `变量 ${node.name} 类型定义包含相同的数据类型`,
11491
- };
11492
- <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11493
- }
11494
- }
11495
11367
  } else <span class="cstat-no" title="statement not covered" >if (node instanceof BindAttribute || node instanceof BindDirective || node instanceof BindStyle) {</span>
11496
11368
  <span class="cstat-no" title="statement not covered" > if (Array.isArray(node.bindExpressions)) {</span>
11497
- const exp = <span class="cstat-no" title="statement not covered" >node.bindExpressions.find(<span class="fstat-no" title="function not covered" >(b</span>indExpression) =&gt; <span class="cstat-no" title="statement not covered" >self.hasComponentLogics(bindExpression))</span>;</span>
11369
+ const exp = <span class="cstat-no" title="statement not covered" >node.bindExpressions.find(<span class="fstat-no" title="function not covered" >(b</span>indExpression) =&gt; <span class="cstat-no" title="statement not covered" >this.hasComponentLogics(bindExpression))</span>;</span>
11498
11370
  <span class="cstat-no" title="statement not covered" > if (exp) {</span>
11499
11371
  // const element: any = node.getAncestor('ViewElement');
11500
11372
  // const api = config.allNodesAPI[element?.tag];
@@ -11517,7 +11389,7 @@ class NaslServer {
11517
11389
  }
11518
11390
  }
11519
11391
  } else <span class="cstat-no" title="statement not covered" >if (node instanceof CallInterface) {</span>
11520
- const isAuthInterface = <span class="cstat-no" title="statement not covered" >self.hasAuth(node);</span>
11392
+ const isAuthInterface = <span class="cstat-no" title="statement not covered" >this.hasAuth(node);</span>
11521
11393
  const interfaceName = <span class="cstat-no" title="statement not covered" >node.calleewholeKey.slice(node.calleewholeKey.lastIndexOf('.') + 1);</span>
11522
11394
  <span class="cstat-no" title="statement not covered" > if (isAuthInterface) {</span>
11523
11395
  const errorMsg = <span class="cstat-no" title="statement not covered" >`${interfaceName} 接口有鉴权方式,不支持在前端调用`;</span>
@@ -11543,16 +11415,15 @@ class NaslServer {
11543
11415
  <span class="cstat-no" title="statement not covered" > node.tsErrorDetail = diagnostic;</span>
11544
11416
  }
11545
11417
  } else {
11546
- <span class="cstat-no" title="statement not covered" > self.checkNodeError(node, diagnostics);</span>
11418
+ <span class="cstat-no" title="statement not covered" > this.checkNodeError(node, diagnostics);</span>
11547
11419
  }
11548
11420
  });
11549
- }
11550
- else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof DataSource) {</span>
11421
+ } else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof DataSource) {</span>
11551
11422
  const dataSourceGroup = (<span class="cstat-no" title="statement not covered" >fileNode.rootNode as App).configuration?.getGroup('dataSource');</span>
11552
11423
  <span class="cstat-no" title="statement not covered" > if (dataSourceGroup) {</span>
11553
11424
  const property = <span class="cstat-no" title="statement not covered" >dataSourceGroup.getProperty(fileNode.name);</span>
11554
11425
  <span class="cstat-no" title="statement not covered" > if (property &amp;&amp; property.values) {</span>
11555
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(property.values, <span class="fstat-no" title="function not covered" >(p</span>ropertyValue) =&gt; {</span>
11426
+ <span class="cstat-no" title="statement not covered" > property.values.forEach(<span class="fstat-no" title="function not covered" >(p</span>ropertyValue) =&gt; {</span>
11556
11427
  <span class="cstat-no" title="statement not covered" > if (!propertyValue.value &amp;&amp; fileNode.name !== 'defaultDS') {</span>
11557
11428
  const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11558
11429
  node: fileNode,
@@ -11620,7 +11491,7 @@ class NaslServer {
11620
11491
  const rulesMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
11621
11492
  <span class="cstat-no" title="statement not covered" > if (Array.isArray(rules)) {</span>
11622
11493
  <span class="cstat-no" title="statement not covered" > rules.forEach(<span class="fstat-no" title="function not covered" >(r</span>ule) =&gt; {</span>
11623
- const match = <span class="cstat-no" title="statement not covered" >rule?.match(/^([^()]+)\(([\d\-.]+)\)$/);</span>
11494
+ const match = <span class="cstat-no" title="statement not covered" >rule.match(/^([^()]+)\(([\d\-.]+)\)$/);</span>
11624
11495
  <span class="cstat-no" title="statement not covered" > if (match) {</span>
11625
11496
  const [, key, value] = <span class="cstat-no" title="statement not covered" >match;</span>
11626
11497
  <span class="cstat-no" title="statement not covered" > rulesMap[key] = value;</span>
@@ -11848,9 +11719,8 @@ class NaslServer {
11848
11719
  });
11849
11720
  }
11850
11721
  }
11851
- else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof Logic || fileNode instanceof OverriddenLogic) {</span>
11852
- const { isRefedByTrigger, fRefName } = <span class="cstat-no" title="statement not covered" >yield this.isRefedByTriggerAndReturnFirstRef(fileNode);</span>
11853
- &nbsp;
11722
+ <span class="cstat-no" title="statement not covered" > if (fileNode instanceof Logic || fileNode instanceof OverriddenLogic) {</span>
11723
+ const { isRefedByTrigger, fRefName } = <span class="cstat-no" title="statement not covered" >await this.isRefedByTriggerAndReturnFirstRef(fileNode);</span>
11854
11724
  <span class="cstat-no" title="statement not covered" > if (isRefedByTrigger &amp;&amp; !this.isTriggerRule(fileNode)) {</span>
11855
11725
  const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11856
11726
  node: fileNode,
@@ -11859,8 +11729,18 @@ class NaslServer {
11859
11729
  };
11860
11730
  <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11861
11731
  }
11862
- &nbsp;
11863
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(fileNode.sourceMap.entries(), <span class="fstat-no" title="function not covered" >([</span>node, value]) =&gt; {</span>
11732
+ <span class="cstat-no" title="statement not covered" > fileNode?.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(v</span>alue, node) =&gt; {</span>
11733
+ // OQL支持返回复合类型数据了
11734
+ // SqlQueryComponent内部返回值类型,如果是嵌套的就需要报错
11735
+ // if ((node instanceof OqlQueryComponent || node instanceof SqlQueryComponent) &amp;&amp; (node as SqlQueryComponent).getTypeBanError()) {
11736
+ // const diagnostic = {
11737
+ // node,
11738
+ // severity: 'error',
11739
+ // message: 'SQL查询:返回类型内部,不支持复杂类型。',
11740
+ // };
11741
+ // node.tsErrorDetail = diagnostic;
11742
+ // diagnostics.push(diagnostic);
11743
+ // }
11864
11744
  <span class="cstat-no" title="statement not covered" > if (node instanceof OqlQueryComponent) {</span>
11865
11745
  // 自动推导情况
11866
11746
  const typeAnnotation = <span class="cstat-no" title="statement not covered" >type2TypeAnnotation((node as any).__nodeType);</span>
@@ -11879,9 +11759,9 @@ class NaslServer {
11879
11759
  }
11880
11760
  }
11881
11761
  }
11882
- else <span class="cstat-no" title="statement not covered" >if (node instanceof Return || node instanceof Variable) {</span>
11883
- const nodeTypeName = <span class="cstat-no" title="statement not covered" >node.concept === 'Return' ? '输出参数' : '局部变量';</span>
11762
+ <span class="cstat-no" title="statement not covered" > if (node instanceof Return || node instanceof Variable) {</span>
11884
11763
  <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; !node.__TypeAnnotation) {</span>
11764
+ const nodeTypeName = <span class="cstat-no" title="statement not covered" >node.concept === 'Return' ? '输出参数' : '局部变量';</span>
11885
11765
  let used = <span class="cstat-no" title="statement not covered" >false;</span>
11886
11766
  <span class="cstat-no" title="statement not covered" > fileNode?.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(v</span>alueIn, nodeIn) =&gt; {</span>
11887
11767
  <span class="cstat-no" title="statement not covered" > if (!used &amp;&amp; nodeIn &amp;&amp; (nodeIn instanceof BatchAssignment || (nodeIn instanceof Assignment &amp;&amp; nodeIn.left?.name))) {</span>
@@ -11916,131 +11796,17 @@ class NaslServer {
11916
11796
  } else {
11917
11797
  <span class="cstat-no" title="statement not covered" > delete node.tsErrorDetail;</span>
11918
11798
  }
11919
- const fileSourceCode = <span class="cstat-no" title="statement not covered" >this.getNodeCode(fileNode, value);</span>
11920
- <span class="cstat-no" title="statement not covered" > if (fileSourceCode.includes('|') &amp;&amp; fileSourceCode.includes('.metadataTypes.')) {</span>
11921
- const typeAnnotation = <span class="cstat-no" title="statement not covered" >node.typeAnnotation.toJSON()</span>
11922
- <span class="cstat-no" title="statement not covered" > this._treeMetadataType2CoreType(typeAnnotation, (node.rootNode as App))</span>
11923
- const isDuplicate = <span class="cstat-no" title="statement not covered" >this._isDuplicateCoreType(typeAnnotation)</span>
11924
- <span class="cstat-no" title="statement not covered" > if (isDuplicate) {</span>
11925
- const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11926
- node: node,
11927
- severity: 'error',
11928
- message: `${nodeTypeName} ${node.name} 类型定义包含相同的数据类型`,
11929
- };
11930
- <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11931
- }
11932
- }
11933
- }
11934
- else <span class="cstat-no" title="statement not covered" >if (node instanceof Param) {</span>
11935
- const fileSourceCode = <span class="cstat-no" title="statement not covered" >this.getNodeCode(fileNode, value);</span>
11936
- <span class="cstat-no" title="statement not covered" > if (fileSourceCode.includes('|') &amp;&amp; fileSourceCode.includes('.metadataTypes.')) {</span>
11937
- const typeAnnotation = <span class="cstat-no" title="statement not covered" >node.typeAnnotation.toJSON()</span>
11938
- <span class="cstat-no" title="statement not covered" > this._treeMetadataType2CoreType(typeAnnotation, (node.rootNode as App))</span>
11939
- const isDuplicate = <span class="cstat-no" title="statement not covered" >this._isDuplicateCoreType(typeAnnotation)</span>
11940
- <span class="cstat-no" title="statement not covered" > if (isDuplicate) {</span>
11941
- const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11942
- node: node,
11943
- severity: 'error',
11944
- message: `输入参数 ${node.name} 类型定义包含相同的数据类型`,
11945
- };
11946
- <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11947
- }
11948
- }
11949
11799
  }
11950
11800
  <span class="cstat-no" title="statement not covered" > this.checkNodeError(node, diagnostics);</span>
11951
11801
  });
11952
- }
11953
- else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof Process) {</span>
11954
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(fileNode.sourceMap.entries(), <span class="fstat-no" title="function not covered" >([</span>node, value]) =&gt; {</span>
11802
+ } else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof Process) {</span>
11803
+ <span class="cstat-no" title="statement not covered" > fileNode?.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(v</span>alue, node) =&gt; {</span>
11955
11804
  <span class="cstat-no" title="statement not covered" > this.checkNodeError(node, diagnostics);</span>
11956
11805
  });
11957
11806
  }
11958
- else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof MetadataType) {</span>
11959
- <span class="cstat-no" title="statement not covered" > fileNode?.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(v</span>alue, node) =&gt; {</span>
11960
- const rulesMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
11961
- const { rules, typeAnnotation } = <span class="cstat-no" title="statement not covered" >node as MetadataType;</span>
11962
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(rules)) {</span>
11963
- <span class="cstat-no" title="statement not covered" > rules.forEach(<span class="fstat-no" title="function not covered" >(r</span>ule) =&gt; {</span>
11964
- <span class="cstat-no" title="statement not covered" > if (`${rule?.toUI()}` == 'undefined' || `${rule.toUI()}` == 'null') <span class="cstat-no" title="statement not covered" >return</span></span>
11965
- const match = <span class="cstat-no" title="statement not covered" >rule.toUI?.().match(/^([^()]+)\(([\d\-.]+)\)$/);</span>
11966
- <span class="cstat-no" title="statement not covered" > if (match) {</span>
11967
- const [, key, value] = <span class="cstat-no" title="statement not covered" >match;</span>
11968
- <span class="cstat-no" title="statement not covered" > rulesMap[key] = value;</span>
11969
- }
11970
- });
11971
- }
11972
- const { typeName } = <span class="cstat-no" title="statement not covered" >typeAnnotation || {};</span>
11973
- const typeAnnotationErrorDetail: any = <span class="cstat-no" title="statement not covered" >{</span>
11974
- severity: 'warning',
11975
- errorPos: {},
11976
- };
11977
- const minVal = <span class="cstat-no" title="statement not covered" >rulesMap.min;</span>
11978
- const maxVal = <span class="cstat-no" title="statement not covered" >rulesMap.max;</span>
11979
- <span class="cstat-no" title="statement not covered" > if (['Long', 'Decimal'].includes(typeName) &amp;&amp; !typeAnnotationErrorDetail.errorPos.min) {</span>
11980
- <span class="cstat-no" title="statement not covered" > if (minVal &amp;&amp; maxVal) {</span>
11981
- <span class="cstat-no" title="statement not covered" > if (new Decimal(maxVal).lessThan(minVal)) {</span>
11982
- const errorMsg = <span class="cstat-no" title="statement not covered" >'最小值不得大于最大值';</span>
11983
- const diag: any = <span class="cstat-no" title="statement not covered" >{</span>
11984
- node: node,
11985
- severity: 'warning',
11986
- message: errorMsg,
11987
- };
11988
- <span class="cstat-no" title="statement not covered" > diagnostics.push(diag);</span>
11989
- <span class="cstat-no" title="statement not covered" > typeAnnotationErrorDetail.errorPos.min = errorMsg;</span>
11990
- } else {
11991
- <span class="cstat-no" title="statement not covered" > typeAnnotationErrorDetail.errorPos = {};</span>
11992
- (<span class="cstat-no" title="statement not covered" >node as MetadataType).typeAnnotation.tsErrorDetail = null;</span>
11993
- }
11994
- }
11995
- }
11996
- <span class="cstat-no" title="statement not covered" > if (Object.keys(typeAnnotationErrorDetail.errorPos).length) {</span>
11997
- <span class="cstat-no" title="statement not covered" > typeAnnotation.tsErrorDetail = typeAnnotationErrorDetail;</span>
11998
- }
11999
- })
12000
- }
12001
- &nbsp;
12002
11807
  <span class="cstat-no" title="statement not covered" > return diagnostics;</span>
12003
11808
  }
12004
11809
  &nbsp;
12005
- <span class="fstat-no" title="function not covered" > _treeMetadataType2CoreType(</span>type: TypeAnnotation, app: App) {
12006
- <span class="cstat-no" title="statement not covered" > type.typeArguments?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: TypeAnnotation) =&gt; {</span>
12007
- <span class="cstat-no" title="statement not covered" > if (item.typeNamespace?.endsWith('.metadataTypes')) {</span>
12008
- let originType = <span class="cstat-no" title="statement not covered" >{} as TypeAnnotation</span>
12009
- <span class="cstat-no" title="statement not covered" > if (item.typeNamespace === 'app.metadataTypes') {</span>
12010
- <span class="cstat-no" title="statement not covered" > originType = app.metadataTypes?.find(<span class="fstat-no" title="function not covered" >(m</span>etadataType) =&gt; <span class="cstat-no" title="statement not covered" >metadataType.name === item.typeName)</span>?.typeAnnotation;</span>
12011
- } else <span class="cstat-no" title="statement not covered" >if (item.typeNamespace?.startsWith('extensions.') &amp;&amp; item.typeNamespace?.endsWith('.metadataTypes')) {</span>
12012
- const dependencyName = <span class="cstat-no" title="statement not covered" >item.typeNamespace.replace('extensions.', '').replace('.metadataTypes', '')</span>
12013
- <span class="cstat-no" title="statement not covered" > originType = app.dependencies?.find(<span class="fstat-no" title="function not covered" >(d</span>ependency) =&gt; <span class="cstat-no" title="statement not covered" >dependency.name === dependencyName)</span>?.metadataTypes?.find(<span class="fstat-no" title="function not covered" >(e</span>le) =&gt; <span class="cstat-no" title="statement not covered" >ele.name === item.typeName)</span>?.typeAnnotation ?? {} as TypeAnnotation</span>
12014
- }
12015
- <span class="cstat-no" title="statement not covered" > item.typeKind = 'primitive'</span>
12016
- <span class="cstat-no" title="statement not covered" > item.typeNamespace = 'nasl.core'</span>
12017
- <span class="cstat-no" title="statement not covered" > item.typeName = originType?.typeName</span>
12018
- }
12019
- <span class="cstat-no" title="statement not covered" > if (type.typeArguments?.length &gt; 0) {</span>
12020
- <span class="cstat-no" title="statement not covered" > type.typeArguments.forEach(<span class="fstat-no" title="function not covered" >(e</span>le) =&gt; {</span>
12021
- <span class="cstat-no" title="statement not covered" > this._treeMetadataType2CoreType(ele, app)</span>
12022
- })
12023
- }
12024
- })
12025
- }
12026
- &nbsp;
12027
- <span class="fstat-no" title="function not covered" > _isDuplicateCoreType(</span>type: TypeAnnotation) {
12028
- const argsStringList = <span class="cstat-no" title="statement not covered" >type.typeArguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >JSON.stringify(item))</span> || []</span>
12029
- const setList = <span class="cstat-no" title="statement not covered" >Array.from(new Set(argsStringList))</span>
12030
- <span class="cstat-no" title="statement not covered" > if (argsStringList.length &gt; setList.length) {</span>
12031
- <span class="cstat-no" title="statement not covered" > return true</span>
12032
- }
12033
- let flag = <span class="cstat-no" title="statement not covered" >false</span>
12034
- <span class="cstat-no" title="statement not covered" > if (type.typeArguments?.length &gt; 0) {</span>
12035
- <span class="cstat-no" title="statement not covered" > type.typeArguments.forEach(<span class="fstat-no" title="function not covered" >(e</span>le) =&gt; {</span>
12036
- const subFlag = <span class="cstat-no" title="statement not covered" >this._isDuplicateCoreType(ele)</span>
12037
- <span class="cstat-no" title="statement not covered" > if (subFlag) {</span>
12038
- <span class="cstat-no" title="statement not covered" > flag = true</span>
12039
- }
12040
- })
12041
- }
12042
- <span class="cstat-no" title="statement not covered" > return flag</span>
12043
- }
12044
11810
  <span class="fstat-no" title="function not covered" > checkNodeError(</span>node: BaseNode, diagnostics: Diagnostic[]): any {
12045
11811
  <span class="cstat-no" title="statement not covered" > if (!node) <span class="cstat-no" title="statement not covered" >return;</span></span>
12046
11812
  // 如果节点是match的看看节点里是不是有重复的
@@ -12293,10 +12059,9 @@ class NaslServer {
12293
12059
  }
12294
12060
  &nbsp;
12295
12061
  /* 接口导入查找 */
12296
- private <span class="fstat-no" title="function not covered" >*e</span>xistStructureFix(semanticDiagnostics: Diagnostic[], node: FileNode, that: any) {
12062
+ <span class="fstat-no" title="function not covered" > existStructureFix(</span>semanticDiagnostics: Diagnostic[], node: FileNode, that: any) {
12297
12063
  let module: Module;
12298
- &nbsp;
12299
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(semanticDiagnostics, <span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; {</span>
12064
+ <span class="cstat-no" title="statement not covered" > semanticDiagnostics.map(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; {</span>
12300
12065
  const minRange = <span class="cstat-no" title="statement not covered" >this._findMinRange(diag as unknown as tsProtocol.DiagnosticWithFileName, node);</span>
12301
12066
  <span class="cstat-no" title="statement not covered" > if (diag.text?.includes('has no exported member named')) {</span>
12302
12067
  <span class="cstat-no" title="statement not covered" > if (minRange.node instanceof Logic) {</span>
@@ -12327,8 +12092,9 @@ class NaslServer {
12327
12092
  }
12328
12093
  <span class="cstat-no" title="statement not covered" > return null;</span>
12329
12094
  }
12330
- });
12095
+ <span class="cstat-no" title="statement not covered" > return diag;</span>
12331
12096
  &nbsp;
12097
+ });
12332
12098
  <span class="cstat-no" title="statement not covered" > if (actionArr.length) {</span>
12333
12099
  <span class="cstat-no" title="statement not covered" > if (timer) <span class="cstat-no" title="statement not covered" >return;</span></span>
12334
12100
  <span class="cstat-no" title="statement not covered" > timer = window.setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
@@ -12355,54 +12121,50 @@ class NaslServer {
12355
12121
  * @param fileNode 页面节点
12356
12122
  * @returns 处理后的结果
12357
12123
  */
12358
- private <span class="fstat-no" title="function not covered" >*_</span>resolveDiagnosticWithGenerator(diagnostic: tsProtocol.DiagnosticWithFileName, fileNode: FileNode, record: DiagnosticRecord) {
12124
+ <span class="fstat-no" title="function not covered" > _resolveDiagnostic(</span>diagnostic: tsProtocol.DiagnosticWithFileName, fileNode: FileNode, record: DiagnosticRecord): Diagnostic {
12359
12125
  // 拓展模块中的翻译先过滤掉,因为有错用户也不能修改
12360
12126
  <span class="cstat-no" title="statement not covered" > if (((fileNode as any).module || (fileNode as any).connector) &amp;&amp; !(fileNode instanceof ConfigProperty)) {</span>
12361
12127
  <span class="cstat-no" title="statement not covered" > return;</span>
12362
12128
  }
12129
+ // 过滤掉java依赖库的报错
12130
+ // if ('compilerInfoMap' in fileNode &amp;&amp; (fileNode as any).compilerInfoMap?.java) {
12131
+ // return;
12132
+ // }
12363
12133
  <span class="cstat-no" title="statement not covered" > if (fileNode.concept === 'OverriddenLogic' &amp;&amp; diagnostic.text === `'__LogicEmpty' is declared but its value is never read.`) {</span>
12364
12134
  <span class="cstat-no" title="statement not covered" > return;</span>
12365
12135
  }
12366
- const minRange = <span class="cstat-no" title="statement not covered" >yield* this._findMinRangeWithGenerator(diagnostic, fileNode);</span>
12136
+ const minRange = <span class="cstat-no" title="statement not covered" >this._findMinRange(diagnostic, fileNode);</span>
12367
12137
  const tsErrorDetail = <span class="cstat-no" title="statement not covered" >{</span>
12368
12138
  severity: diagnostic.category === 'error' ? 'error' : 'warning',
12369
12139
  message: translateDiagnosticMessage(diagnostic.text),
12370
12140
  // 保留原来的内容方便查询一些问题
12371
12141
  originalDiagnostic: diagnostic,
12372
12142
  };
12373
- <span class="cstat-no" title="statement not covered" > yield;</span>
12374
12143
  &nbsp;
12375
12144
  let result: Diagnostic;
12376
12145
  <span class="cstat-no" title="statement not covered" > if (minRange) {</span>
12377
12146
  // 节点的error要置为true
12378
12147
  <span class="cstat-no" title="statement not covered" > result = naslNodeTranslateMessage(minRange, tsErrorDetail);</span>
12379
- <span class="cstat-no" title="statement not covered" > yield;</span>
12380
12148
  } else {
12381
12149
  // 没找到节点, 先把问题暴露出来
12382
12150
  <span class="cstat-no" title="statement not covered" > result = tsErrorDetail;</span>
12383
12151
  }
12384
- &nbsp;
12385
- <span class="cstat-no" title="statement not covered" > if (result) {</span>
12152
+ <span class="cstat-no" title="statement not covered" > if (result)</span>
12386
12153
  <span class="cstat-no" title="statement not covered" > result.id = record.filePath + (result ? JSON.stringify({ start: result.originalDiagnostic.start, end: result.originalDiagnostic.end }) : '');</span>
12387
- }
12388
- &nbsp;
12389
12154
  <span class="cstat-no" title="statement not covered" > return result;</span>
12390
12155
  }
12391
12156
  &nbsp;
12392
12157
  /**
12393
- * 查找节点
12394
- *
12395
- * @description 生成器原型函数
12158
+ * 通过节点诊断反过来查找节点
12159
+ * @param diagnostic 诊断信息
12160
+ * @param fileNode 文件级别节点
12161
+ * @returns 找到的节点
12396
12162
  */
12397
- private <span class="fstat-no" title="function not covered" >*_</span>findMinRangeWithGenerator(
12398
- diagnostic: tsProtocol.DiagnosticWithFileName | tsProtocol.ReferencesResponseItem,
12399
- fileNode: FileNode
12400
- ): Generator&lt;void, MinRange&gt; {
12163
+ <span class="fstat-no" title="function not covered" > _findMinRange(</span>diagnostic: tsProtocol.DiagnosticWithFileName | tsProtocol.ReferencesResponseItem, fileNode: FileNode) {
12401
12164
  let minRange: MinRange;
12402
- const { sourceMap } = <span class="cstat-no" title="statement not covered" >fileNode;</span>
12165
+ const {sourceMap} = <span class="cstat-no" title="statement not covered" >fileNode;</span>
12403
12166
  // 是否找到了行内准确的,是的话,就不走多行的
12404
12167
  let haveLineNode = <span class="cstat-no" title="statement not covered" >false;</span>
12405
- &nbsp;
12406
12168
  <span class="cstat-no" title="statement not covered" > for (const [node, item] of sourceMap.entries()) {</span>
12407
12169
  /**
12408
12170
  * 当前内容的开始行 &lt;= 诊断开始的行 &amp;&amp;
@@ -12459,30 +12221,15 @@ class NaslServer {
12459
12221
  }
12460
12222
  }
12461
12223
  }
12462
- &nbsp;
12463
- <span class="cstat-no" title="statement not covered" > yield;</span>
12464
12224
  }
12465
- &nbsp;
12466
12225
  <span class="cstat-no" title="statement not covered" > if (!minRange) {</span>
12467
12226
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof View) {</span>
12468
- <span class="cstat-no" title="statement not covered" > return { node: fileNode, item: sourceMap.get(fileNode) } as MinRange;</span>
12469
- }
12470
- <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
12471
- <span class="cstat-no" title="statement not covered" > console.log(minRange, '需要特殊看下,为什么没找到内容-------------');</span>
12227
+ <span class="cstat-no" title="statement not covered" > return { node: fileNode, item: sourceMap.get(fileNode) };</span>
12472
12228
  }
12229
+ <span class="cstat-no" title="statement not covered" > console.log(minRange, '需要特殊看下,为什么没找到内容-------------');</span>
12473
12230
  }
12474
- &nbsp;
12475
12231
  <span class="cstat-no" title="statement not covered" > return minRange;</span>
12476
12232
  }
12477
- &nbsp;
12478
- /**
12479
- * 查找节点
12480
- *
12481
- * @description 同步模式
12482
- */
12483
- <span class="fstat-no" title="function not covered" > _findMinRange(</span>...args: Parameters&lt;NaslServer['_findMinRangeWithGenerator']&gt;) {
12484
- <span class="cstat-no" title="statement not covered" > return utils.runGeneratorSync(this._findMinRangeWithGenerator(...args));</span>
12485
- }
12486
12233
  &nbsp;
12487
12234
  /**
12488
12235
  * 查看当前节点是不是有引用
@@ -12627,7 +12374,6 @@ class NaslServer {
12627
12374
  line: lsp2tspNumber(currentSource.start.line),
12628
12375
  offset: lsp2tspNumber(currentSource.start.character),
12629
12376
  });
12630
- // console.log(parentRefs.refs)
12631
12377
  <span class="cstat-no" title="statement not covered" > refsList = [...refsList, ...parentRefs.refs];</span>
12632
12378
  }
12633
12379
  &nbsp;
@@ -12782,22 +12528,12 @@ class NaslServer {
12782
12528
  <span class="cstat-no" title="statement not covered" > if (node instanceof Return &amp;&amp; node.parentNode instanceof ProcessElement) {</span>
12783
12529
  const { currentSource, fileNode } = <span class="cstat-no" title="statement not covered" >this.getCurrentSource(node.parentNode);</span>
12784
12530
  <span class="cstat-no" title="statement not covered" > if (currentSource) {</span>
12785
- // 流程任务出参查找引用需要查找到流程任务完成逻辑
12786
- // const parentRefs = await this.references({
12787
- // file: (fileNode as FileNode).getEmbeddedFilePath(),
12788
- // line: lsp2tspNumber(currentSource.start.line),
12789
- // offset: lsp2tspNumber(currentSource.start.character),
12790
- // });
12791
- // refsList = [...refsList, ...parentRefs.refs];
12792
- // console.log(parentRefs.refs)
12793
- &nbsp;
12794
- // 流程任务出参查找引用比较特殊,需要查找到 const process = {...} 的引用
12795
12531
  const code = <span class="cstat-no" title="statement not covered" >this.getNodeCode(fileNode, currentSource);</span>
12796
12532
  const prefix = <span class="cstat-no" title="statement not covered" >'__ProcessIdentification__';</span>
12797
12533
  const positions = <span class="cstat-no" title="statement not covered" >[];</span>
12798
12534
  let pos = <span class="cstat-no" title="statement not covered" >code.indexOf(prefix);</span>
12799
12535
  // 需要再次定位到processelement对象上,避免process上存在同名参数
12800
- <span class="cstat-no" title="statement not covered" > pos = pos === -1 ? pos : code.indexOf(node.parentNode.name, pos + prefix.length);</span>
12536
+ <span class="cstat-no" title="statement not covered" > pos = code.indexOf(node.parentNode.name, pos + prefix.length);</span>
12801
12537
  <span class="cstat-no" title="statement not covered" > pos = pos === -1 ? pos : code.indexOf(node.name, pos + prefix.length);</span>
12802
12538
  // pos === -1:两种情况:
12803
12539
  // 1、找到最后一个节点了,继续找找不下去了。
@@ -13202,7 +12938,7 @@ class NaslServer {
13202
12938
  // 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
13203
12939
  <span class="cstat-no" title="statement not covered" > if (</span>
13204
12940
  (minRange.node instanceof Param || minRange.node instanceof Variable || minRange.node instanceof Return) &amp;&amp;
13205
- (node instanceof Entity || node instanceof Enum || node instanceof Structure || node instanceof MetadataType)
12941
+ (node instanceof Entity || node instanceof Enum || node instanceof Structure)
13206
12942
  ) {
13207
12943
  <span class="cstat-no" title="statement not covered" > return null;</span>
13208
12944
  }
@@ -13527,7 +13263,7 @@ class NaslServer {
13527
13263
  <span class="fstat-no" title="function not covered" > getCurrentSource(</span>node: BaseNode) {
13528
13264
  <span class="cstat-no" title="statement not covered" > if (node instanceof App || node instanceof Theme) <span class="cstat-no" title="statement not covered" >return { fileNode: null };</span></span>
13529
13265
  let {sourceMap} = <span class="cstat-no" title="statement not covered" >node;</span>
13530
- let fileNode = <span class="cstat-no" title="statement not covered" >node as FileNode &amp; SyntaxNode;</span>
13266
+ let fileNode = <span class="cstat-no" title="statement not covered" >node;</span>
13531
13267
  // 如果没有sourceMap,就继续向上找 ,或者到module结束
13532
13268
  // 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
13533
13269
  // 如果当前节点是view就不要向上查找了
@@ -13543,7 +13279,7 @@ class NaslServer {
13543
13279
  !(fileNode instanceof View) &amp;&amp;
13544
13280
  !(fileNode instanceof ConfigProperty)
13545
13281
  ) {
13546
- <span class="cstat-no" title="statement not covered" > fileNode = fileNode.parentNode as FileNode &amp; SyntaxNode;</span>
13282
+ <span class="cstat-no" title="statement not covered" > fileNode = fileNode.parentNode;</span>
13547
13283
  <span class="cstat-no" title="statement not covered" > sourceMap = fileNode?.sourceMap;</span>
13548
13284
  }
13549
13285
  const currentSource = <span class="cstat-no" title="statement not covered" >sourceMap &amp;&amp; sourceMap.get(node);</span>
@@ -13587,6 +13323,7 @@ class NaslServer {
13587
13323
  getFieldKey: fieldKey,
13588
13324
  });
13589
13325
  }
13326
+ &nbsp;
13590
13327
  }
13591
13328
  &nbsp;
13592
13329
  <span class="fstat-no" title="function not covered" > _getFieldKeySelectCompletion(</span>args: any) {
@@ -13696,237 +13433,245 @@ class NaslServer {
13696
13433
  }
13697
13434
  &nbsp;
13698
13435
  /**
13699
- * 获取传入节点的 TypeAnnotation
13700
- *
13701
- * @description 生成器模式原型
13436
+ * 获取传入节点的TypeAnnotation
13437
+ * @param nodes {filePath: string, node: BaseNode, item: SourceMapItem}
13438
+ * @returns Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation, option: any }&gt;
13439
+ * 普通的TypeAnnotation,额外的可能携带 option
13440
+ * 这里会处理callloigc callinterface 和 callfuntion 的 argment的参数一起携带回去,
13441
+ * 也就是说如果 只传入了这个也会一起返回argment的节点,所以返回map最好去get结果
13702
13442
  */
13703
- private <span class="fstat-no" title="function not covered" >*_</span>getQuickInfoNodesTypeMapWithGenerator(nodes: QuickInfoNodes): Generator&lt;any, QuickInfoMap, any&gt; {
13443
+ <span class="fstat-no" title="function not covered" > async </span>getQuickInfoNodesTypeMap(nodes: QuickInfoNodes, lotFlag?: boolean) {
13704
13444
  interface argDetail {
13705
13445
  file: string;
13706
13446
  line: number;
13707
13447
  offset: number;
13708
13448
  }
13709
- &nbsp;
13710
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
13711
13449
  const args: Array&lt;argDetail&gt; = <span class="cstat-no" title="statement not covered" >[];</span>
13712
13450
  // 要通过自己或者依赖关系拿的
13713
- const getFromOthers: QuickInfoMap = <span class="cstat-no" title="statement not covered" >new Map();</span>
13451
+ const getFromOthers: Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation; option: any }&gt; = <span class="cstat-no" title="statement not covered" >new Map();</span>
13714
13452
  // 总共要返回出去的
13715
- const types: QuickInfoMap = <span class="cstat-no" title="statement not covered" >new Map();</span>
13453
+ const types: Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation; option: any }&gt; = <span class="cstat-no" title="statement not covered" >new Map();</span>
13716
13454
  const newQuickInfoNodes: QuickInfoNodes = <span class="cstat-no" title="statement not covered" >[];</span>
13717
13455
  &nbsp;
13718
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(nodes, function* <span class="fstat-no" title="function not covered" >getQuickInfoPosition(</span>itemDetail, index) {</span>
13719
- const { node, filePath, item } = <span class="cstat-no" title="statement not covered" >itemDetail;</span>
13720
- // 先按照顺序占位
13721
- <span class="cstat-no" title="statement not covered" > types.set(node, null);</span>
13722
- &nbsp;
13723
- // 获取已知节点类型的类型
13724
- const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >self.getCurrentNodeKnownTypeAnnotation(node);</span>
13725
- <span class="cstat-no" title="statement not covered" > yield;</span>
13456
+ <span class="cstat-no" title="statement not covered" > await utils.timeSlicing(</span>
13457
+ nodes,
13458
+ <span class="fstat-no" title="function not covered" > (i</span>temDetail) =&gt; {
13459
+ const { node, filePath, item } = <span class="cstat-no" title="statement not covered" >itemDetail;</span>
13460
+ // 先按照顺序占位
13461
+ <span class="cstat-no" title="statement not covered" > types.set(node, null);</span>
13726
13462
  &nbsp;
13727
- <span class="cstat-no" title="statement not covered" > if (nodeTypeAnnotation) {</span>
13728
- <span class="cstat-no" title="statement not covered" > types.set(node, nodeTypeAnnotation);</span>
13729
- <span class="cstat-no" title="statement not covered" > return;</span>
13730
- }
13731
- // 要通过自己或者依赖关系拿的,二次遍历
13732
- <span class="cstat-no" title="statement not covered" > if (['Argument', 'Assignment', 'MatchCase'].includes(node.concept)) {</span>
13733
- <span class="cstat-no" title="statement not covered" > getFromOthers.set(node, null);</span>
13734
- }
13735
- <span class="cstat-no" title="statement not covered" > if (['Return', 'Variable'].includes(node.concept) &amp;&amp; (node as Variable).typeAnnotation) {</span>
13736
- <span class="cstat-no" title="statement not covered" > types.set(node, (node as Variable).typeAnnotation);</span>
13737
- <span class="cstat-no" title="statement not covered" > return;</span>
13738
- }
13739
- // 如果 入参不是虚拟节点的,就不去请求类型
13740
- // 只有虚拟节点的入参,才没有类型
13741
- <span class="cstat-no" title="statement not covered" > if (node.concept === 'Param' &amp;&amp; (node.parentKey !== 'virtualParams' &amp;&amp; node.parentKey !== 'item' &amp;&amp; node.parentNode.concept !== 'AnonymousFunction')) {</span>
13742
- <span class="cstat-no" title="statement not covered" > return;</span>
13743
- }
13744
- <span class="cstat-no" title="statement not covered" > if (</span>
13745
- ![
13746
- 'Identifier',
13747
- 'UnaryExpression',
13748
- 'BinaryExpression',
13749
- 'CallLogic',
13750
- 'CallFunction',
13751
- 'CallInterface',
13752
- 'MemberExpression',
13753
- 'Return',
13754
- 'Variable',
13755
- 'Match',
13756
- 'NewComposite',
13757
- 'NewList',
13758
- 'NewMap',
13759
- 'OqlQueryComponent',
13760
- 'QueryFieldExpression',
13761
- 'QueryGroupByExpression',
13762
- 'Param',
13763
- 'BackendVariable',
13764
- 'CallAuthInterface',
13765
- ].includes(node.concept)
13766
- )
13767
- <span class="cstat-no" title="statement not covered" > return;</span>
13768
- &nbsp;
13769
- // 要去ls那边获取的
13770
- <span class="cstat-no" title="statement not covered" > newQuickInfoNodes.push(itemDetail);</span>
13771
- const fileDetail = <span class="cstat-no" title="statement not covered" >{</span>
13772
- file: filePath,
13773
- line: lsp2tspNumber(item.start.line),
13774
- offset: lsp2tspNumber(item.start.character),
13775
- };
13463
+ // 获取已知节点类型的类型
13464
+ const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >this.getCurrentNodeKnownTypeAnnotation(node);</span>
13465
+ <span class="cstat-no" title="statement not covered" > if (nodeTypeAnnotation) {</span>
13466
+ <span class="cstat-no" title="statement not covered" > types.set(node, nodeTypeAnnotation);</span>
13467
+ <span class="cstat-no" title="statement not covered" > return;</span>
13468
+ }
13469
+ // 要通过自己或者依赖关系拿的,二次遍历
13470
+ <span class="cstat-no" title="statement not covered" > if (['Argument', 'Assignment', 'MatchCase'].includes(node.concept)) {</span>
13471
+ <span class="cstat-no" title="statement not covered" > getFromOthers.set(node, null);</span>
13472
+ }
13473
+ <span class="cstat-no" title="statement not covered" > if (['Return', 'Variable'].includes(node.concept) &amp;&amp; (node as Variable).typeAnnotation) {</span>
13474
+ <span class="cstat-no" title="statement not covered" > types.set(node, (node as Variable).typeAnnotation);</span>
13475
+ <span class="cstat-no" title="statement not covered" > return;</span>
13476
+ }
13477
+ // 如果 入参不是虚拟节点的,就不去请求类型
13478
+ // 只有虚拟节点的入参,才没有类型
13479
+ <span class="cstat-no" title="statement not covered" > if (node.concept === 'Param' &amp;&amp; (node.parentKey !== 'virtualParams' &amp;&amp; node.parentKey !== 'item' &amp;&amp; node.parentNode.concept !== 'AnonymousFunction')) {</span>
13480
+ <span class="cstat-no" title="statement not covered" > return;</span>
13481
+ }
13482
+ <span class="cstat-no" title="statement not covered" > if (</span>
13483
+ ![
13484
+ 'Identifier',
13485
+ 'UnaryExpression',
13486
+ 'BinaryExpression',
13487
+ 'CallLogic',
13488
+ 'CallFunction',
13489
+ 'CallInterface',
13490
+ 'MemberExpression',
13491
+ 'Return',
13492
+ 'Variable',
13493
+ 'Match',
13494
+ 'NewComposite',
13495
+ 'NewList',
13496
+ 'NewMap',
13497
+ 'OqlQueryComponent',
13498
+ 'QueryFieldExpression',
13499
+ 'QueryGroupByExpression',
13500
+ 'Param',
13501
+ 'BackendVariable',
13502
+ 'CallAuthInterface',
13503
+ ].includes(node.concept)
13504
+ )
13505
+ <span class="cstat-no" title="statement not covered" > return;</span>
13776
13506
  &nbsp;
13777
- const getCode = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>ange: SourceMapItem) =&gt; {</span>
13778
- <span class="cstat-no" title="statement not covered" > return self.tsFiles.get(filePath)?.slice(range.start.offset, range.end.offset) ?? '';</span>
13779
- };
13507
+ // 要去ls那边获取的
13508
+ <span class="cstat-no" title="statement not covered" > newQuickInfoNodes.push(itemDetail);</span>
13509
+ const fileDetail = <span class="cstat-no" title="statement not covered" >{</span>
13510
+ file: filePath,
13511
+ line: lsp2tspNumber(item.start.line),
13512
+ offset: lsp2tspNumber(item.start.character),
13513
+ };
13780
13514
  &nbsp;
13781
- // 位置计算偏移
13782
- <span class="cstat-no" title="statement not covered" > if ('getQuickInfoOffset' in node) {</span>
13783
- <span class="cstat-no" title="statement not covered" > Object.assign(fileDetail, (node as any).getQuickInfoOffset(fileDetail, getCode(item)));</span>
13784
- }
13515
+ const getCode = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>ange: SourceMapItem) =&gt; {</span>
13516
+ <span class="cstat-no" title="statement not covered" > return this.tsFiles.get(filePath)?.slice(range.start.offset, range.end.offset) ?? '';</span>
13517
+ };
13785
13518
  &nbsp;
13786
- <span class="cstat-no" title="statement not covered" > yield;</span>
13519
+ // 位置计算偏移
13520
+ <span class="cstat-no" title="statement not covered" > if ('getQuickInfoOffset' in node) {</span>
13521
+ <span class="cstat-no" title="statement not covered" > Object.assign(fileDetail, (node as any).getQuickInfoOffset(fileDetail, getCode(item)));</span>
13522
+ }
13787
13523
  &nbsp;
13788
- // 位置计算偏移2
13789
- // TODO: 之后考虑把这些偏移量计算全都挪到节点内部去
13790
- <span class="cstat-no" title="statement not covered" > if (</span>
13791
- node.concept === 'BinaryExpression' ||
13792
- node.concept === 'CallFunction' ||
13793
- node.concept === 'CallInterface'
13794
- ) {
13795
- const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13796
- // 如果没有括号 ,括号就在外面,就 -1
13797
- // 有括号就找到括号的位置 然后 -1
13798
- let indexOf = <span class="cstat-no" title="statement not covered" >0;</span>
13799
- <span class="cstat-no" title="statement not covered" > if (!code.includes('(')) {</span>
13800
- <span class="cstat-no" title="statement not covered" > indexOf = -1;</span>
13801
- } else {
13802
- // 如果有泛型先往前找一找
13803
- <span class="cstat-no" title="statement not covered" > if (code.includes('&lt;')) {</span>
13804
- <span class="cstat-no" title="statement not covered" > indexOf = Math.min(code.indexOf('&lt;'), code.indexOf('('));</span>
13524
+ // 位置计算偏移2
13525
+ // TODO: 之后考虑把这些偏移量计算全都挪到节点内部去
13526
+ <span class="cstat-no" title="statement not covered" > if (</span>
13527
+ node.concept === 'BinaryExpression' ||
13528
+ node.concept === 'CallFunction' ||
13529
+ node.concept === 'CallInterface'
13530
+ ) {
13531
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13532
+ // 如果没有括号 ,括号就在外面,就 -1
13533
+ // 有括号就找到括号的位置 然后 -1
13534
+ let indexOf = <span class="cstat-no" title="statement not covered" >0;</span>
13535
+ <span class="cstat-no" title="statement not covered" > if (!code.includes('(')) {</span>
13536
+ <span class="cstat-no" title="statement not covered" > indexOf = -1;</span>
13805
13537
  } else {
13806
- <span class="cstat-no" title="statement not covered" > indexOf = code.indexOf('(');</span>
13538
+ // 如果有泛型先往前找一找
13539
+ <span class="cstat-no" title="statement not covered" > if (code.includes('&lt;')) {</span>
13540
+ <span class="cstat-no" title="statement not covered" > indexOf = Math.min(code.indexOf('&lt;'), code.indexOf('('));</span>
13541
+ } else {
13542
+ <span class="cstat-no" title="statement not covered" > indexOf = code.indexOf('(');</span>
13543
+ }
13544
+ const subStr = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13545
+ const codeArr = <span class="cstat-no" title="statement not covered" >subStr?.split('.');</span>
13546
+ const lastLen = <span class="cstat-no" title="statement not covered" >codeArr?.[codeArr.length - 1]?.length;</span>
13547
+ <span class="cstat-no" title="statement not covered" > indexOf = subStr.length - lastLen;</span>
13807
13548
  }
13808
- const subStr = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13809
- const codeArr = <span class="cstat-no" title="statement not covered" >subStr?.split('.');</span>
13810
- const lastLen = <span class="cstat-no" title="statement not covered" >codeArr?.[codeArr.length - 1]?.length;</span>
13811
- <span class="cstat-no" title="statement not covered" > indexOf = subStr.length - lastLen;</span>
13812
- }
13813
- <span class="cstat-no" title="statement not covered" > fileDetail.offset += indexOf;</span>
13814
- } else <span class="cstat-no" title="statement not covered" >if (</span>
13815
- node.concept === 'MemberExpression' ||
13816
- node.concept === 'Identifier' ||
13817
- node.concept === 'QueryFieldExpression' ||
13818
- node.concept === 'QueryGroupByExpression'
13819
- ) {
13820
- const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13821
- <span class="cstat-no" title="statement not covered" > if (code.includes('.')) {</span>
13822
- const codeArr = <span class="cstat-no" title="statement not covered" >code?.split('.');</span>
13823
- const lastLen = <span class="cstat-no" title="statement not covered" >codeArr?.[codeArr.length - 1]?.length;</span>
13824
- // MemberExpression取最后一位当做类型
13825
- const indexOf = <span class="cstat-no" title="statement not covered" >code.length - lastLen;</span>
13826
- <span class="cstat-no" title="statement not covered" > fileDetail.offset = fileDetail.offset + indexOf;</span>
13827
- }
13828
- } else <span class="cstat-no" title="statement not covered" >if (node.concept === 'Match') {</span>
13829
- const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13830
- // 去查return 后面的返回值,变成函数调用
13831
- <span class="cstat-no" title="statement not covered" > if (code?.endsWith(';\n')) {</span>
13832
- <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line - 1;</span>
13833
- } else {
13549
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset += indexOf;</span>
13550
+ } else <span class="cstat-no" title="statement not covered" >if (</span>
13551
+ node.concept === 'MemberExpression' ||
13552
+ node.concept === 'Identifier' ||
13553
+ node.concept === 'QueryFieldExpression' ||
13554
+ node.concept === 'QueryGroupByExpression'
13555
+ ) {
13556
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13557
+ <span class="cstat-no" title="statement not covered" > if (code.includes('.')) {</span>
13558
+ const codeArr = <span class="cstat-no" title="statement not covered" >code?.split('.');</span>
13559
+ const lastLen = <span class="cstat-no" title="statement not covered" >codeArr?.[codeArr.length - 1]?.length;</span>
13560
+ // MemberExpression取最后一位当做类型
13561
+ const indexOf = <span class="cstat-no" title="statement not covered" >code.length - lastLen;</span>
13562
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset = fileDetail.offset + indexOf;</span>
13563
+ }
13564
+ } else <span class="cstat-no" title="statement not covered" >if (node.concept === 'Match') {</span>
13565
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13566
+ // 去查return 后面的返回值,变成函数调用
13567
+ <span class="cstat-no" title="statement not covered" > if (code?.endsWith(';\n')) {</span>
13568
+ <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line - 1;</span>
13569
+ } else {
13570
+ <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line;</span>
13571
+ }
13572
+ const indexOf = <span class="cstat-no" title="statement not covered" >code.indexOf('return __MatchExpressionFuntion');</span>
13573
+ let newCode = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13574
+ <span class="cstat-no" title="statement not covered" > newCode = newCode.substring(newCode.lastIndexOf('\n'), indexOf);</span>
13575
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset = newCode.length + 'return '.length;</span>
13576
+ } else <span class="cstat-no" title="statement not covered" >if (['NewComposite', 'NewList', 'NewMap'].includes(node.concept)) {</span>
13577
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13834
13578
  <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line;</span>
13579
+ const indexOf = <span class="cstat-no" title="statement not covered" >code.indexOf('return __newComposite');</span>
13580
+ let newCode = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13581
+ <span class="cstat-no" title="statement not covered" > newCode = newCode.substring(newCode.lastIndexOf('\n'), indexOf);</span>
13582
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset = newCode.length + 'return '.length;</span>
13583
+ } else <span class="cstat-no" title="statement not covered" >if (['OqlQueryComponent'].includes(node.concept)) {</span>
13584
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset += 10;</span>
13835
13585
  }
13836
- const indexOf = <span class="cstat-no" title="statement not covered" >code.indexOf('return __MatchExpressionFuntion');</span>
13837
- let newCode = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13838
- <span class="cstat-no" title="statement not covered" > newCode = newCode.substring(newCode.lastIndexOf('\n'), indexOf);</span>
13839
- <span class="cstat-no" title="statement not covered" > fileDetail.offset = newCode.length + 'return '.length;</span>
13840
- } else <span class="cstat-no" title="statement not covered" >if (['NewComposite', 'NewList', 'NewMap'].includes(node.concept)) {</span>
13841
- const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13842
- <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line;</span>
13843
- const indexOf = <span class="cstat-no" title="statement not covered" >code.indexOf('return __newComposite');</span>
13844
- let newCode = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13845
- <span class="cstat-no" title="statement not covered" > newCode = newCode.substring(newCode.lastIndexOf('\n'), indexOf);</span>
13846
- <span class="cstat-no" title="statement not covered" > fileDetail.offset = newCode.length + 'return '.length;</span>
13847
- } else <span class="cstat-no" title="statement not covered" >if (['OqlQueryComponent'].includes(node.concept)) {</span>
13848
- <span class="cstat-no" title="statement not covered" > fileDetail.offset += 10;</span>
13849
- }
13850
- <span class="cstat-no" title="statement not covered" > args.push(fileDetail);</span>
13851
- });
13852
- const resultMap: any = <span class="cstat-no" title="statement not covered" >(yield this.getNaslNodeTypeFull(args))?.response;</span>
13853
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(args, <span class="fstat-no" title="function not covered" >({</span> file, line, offset }, index) =&gt; {</span>
13854
- const item = (<span class="cstat-no" title="statement not covered" >resultMap as any)?.[file]?.[line]?.[offset];</span>
13855
- const itemType = <span class="cstat-no" title="statement not covered" >item?.[0]?.nodeType;</span>
13856
- const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >type2TypeAnnotation(itemType);</span>
13857
- const {node} = <span class="cstat-no" title="statement not covered" >newQuickInfoNodes[index];</span>
13858
- &nbsp;
13859
- <span class="cstat-no" title="statement not covered" > types.set(node, Object.freeze(nodeTypeAnnotation) as TypeAnnotation);</span>
13860
- &nbsp;
13861
- const type = <span class="cstat-no" title="statement not covered" >itemType ? (Object.isFrozen(itemType) ? itemType : Object.freeze(itemType)) : null;</span>
13862
- <span class="cstat-no" title="statement not covered" > if (type) {</span>
13863
- (<span class="cstat-no" title="statement not covered" >node as any).__nodeType = type;</span>
13864
- } else {
13865
- <span class="cstat-no" title="statement not covered" > delete (node as any).__nodeType;</span>
13866
- }
13867
- });
13868
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(getFromOthers.entries(), <span class="fstat-no" title="function not covered" >function*</span> ([node]) {</span>
13869
- <span class="cstat-no" title="statement not covered" > if (node instanceof Assignment) {</span>
13870
- <span class="cstat-no" title="statement not covered" > if (!types.get(node.left)) {</span>
13871
- <span class="cstat-no" title="statement not covered" > types.set(node.left, types.get(node.right));</span>
13586
+ <span class="cstat-no" title="statement not covered" > args.push(fileDetail);</span>
13587
+ },
13588
+ { minimum: 1000 },
13589
+ );
13590
+ &nbsp;
13591
+ const resultMap: any = <span class="cstat-no" title="statement not covered" >(await this.getNaslNodeTypeFull(args))?.response;</span>
13592
+ <span class="cstat-no" title="statement not covered" > await utils.timeSlicing(</span>
13593
+ args,
13594
+ <span class="fstat-no" title="function not covered" > ({</span> file, line, offset }, index) =&gt; {
13595
+ const item = (<span class="cstat-no" title="statement not covered" >resultMap as any)?.[file]?.[line]?.[offset];</span>
13596
+ const itemType = <span class="cstat-no" title="statement not covered" >item?.[0]?.nodeType;</span>
13597
+ const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >type2TypeAnnotation(itemType);</span>
13598
+ const {node} = <span class="cstat-no" title="statement not covered" >newQuickInfoNodes[index];</span>
13599
+ &nbsp;
13600
+ <span class="cstat-no" title="statement not covered" > types.set(node, Object.freeze(nodeTypeAnnotation) as TypeAnnotation);</span>
13601
+ &nbsp;
13602
+ const type = <span class="cstat-no" title="statement not covered" >itemType ? (Object.isFrozen(itemType) ? itemType : Object.freeze(itemType)) : null;</span>
13603
+ &nbsp;
13604
+ <span class="cstat-no" title="statement not covered" > if (type) {</span>
13605
+ (<span class="cstat-no" title="statement not covered" >node as any).__nodeType = type;</span>
13606
+ } else {
13607
+ <span class="cstat-no" title="statement not covered" > delete (node as any).__nodeType;</span>
13872
13608
  }
13873
- } else <span class="cstat-no" title="statement not covered" >if (node instanceof Argument) {</span>
13874
- // 如果Argument,但是没可以用的类型,就用原来logic的参数类型
13875
- const argType = <span class="cstat-no" title="statement not covered" >yield* self.getArgumentTypeAnnotationWithGenerator(node, newQuickInfoNodes, types as any);</span>
13876
- <span class="cstat-no" title="statement not covered" > types.set(node, argType);</span>
13877
- } else <span class="cstat-no" title="statement not covered" >if (node instanceof MatchCase) {</span>
13878
- // matchCase的类型
13879
- // 直接从最后一项的返回值取,有就有没有就没有
13880
- <span class="cstat-no" title="statement not covered" > if (node.body?.length) {</span>
13881
- const last = <span class="cstat-no" title="statement not covered" >node.body[node.body.length - 1];</span>
13882
- <span class="cstat-no" title="statement not covered" > if (types.get(last)) {</span>
13883
- <span class="cstat-no" title="statement not covered" > types.set(node, types.get(last));</span>
13609
+ },
13610
+ { minimum: 100 },
13611
+ );
13612
+ <span class="cstat-no" title="statement not covered" > await utils.timeSlicing(</span>
13613
+ Array.from(getFromOthers.entries()),
13614
+ <span class="fstat-no" title="function not covered" > ([</span>node]) =&gt; {
13615
+ <span class="cstat-no" title="statement not covered" > if (node instanceof Assignment) {</span>
13616
+ <span class="cstat-no" title="statement not covered" > if (!types.get(node.left)) {</span>
13617
+ <span class="cstat-no" title="statement not covered" > types.set(node.left, types.get(node.right));</span>
13618
+ }
13619
+ } else <span class="cstat-no" title="statement not covered" >if (node instanceof Argument) {</span>
13620
+ // 如果Argument,但是没可以用的类型,就用原来logic的参数类型
13621
+ const argType = <span class="cstat-no" title="statement not covered" >this.getArgumentTypeAnnotation(node, newQuickInfoNodes, types as any);</span>
13622
+ <span class="cstat-no" title="statement not covered" > types.set(node, argType);</span>
13623
+ } else <span class="cstat-no" title="statement not covered" >if (node instanceof MatchCase) {</span>
13624
+ // matchCase的类型
13625
+ // 直接从最后一项的返回值取,有就有没有就没有
13626
+ <span class="cstat-no" title="statement not covered" > if (node.body?.length) {</span>
13627
+ const last = <span class="cstat-no" title="statement not covered" >node.body[node.body.length - 1];</span>
13628
+ <span class="cstat-no" title="statement not covered" > if (types.get(last)) {</span>
13629
+ <span class="cstat-no" title="statement not covered" > types.set(node, types.get(last));</span>
13630
+ }
13884
13631
  }
13885
13632
  }
13886
- }
13887
- });
13888
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(types.entries(), <span class="fstat-no" title="function not covered" >([</span>node, value]) =&gt; {</span>
13889
- <span class="cstat-no" title="statement not covered" > try {</span>
13890
- // 因为node可能是经过处理的TypeAnnotation
13891
- <span class="cstat-no" title="statement not covered" > node.__isCorrectTypeAnnotation = true;</span>
13892
- <span class="cstat-no" title="statement not covered" > if (value) {</span>
13893
- <span class="cstat-no" title="statement not covered" > if (node instanceof OqlQueryComponent) {</span>
13894
- // 自动推导情况
13895
- const typeAnnotation = <span class="cstat-no" title="statement not covered" >value as TypeAnnotation;</span>
13896
- <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; typeAnnotation) {</span>
13897
- <span class="cstat-no" title="statement not covered" > if (typeAnnotation.typeName === 'List' &amp;&amp; typeAnnotation.typeKind === 'generic') {</span>
13898
- const {typeArguments} = <span class="cstat-no" title="statement not covered" >typeAnnotation;</span>
13899
- <span class="cstat-no" title="statement not covered" > if (typeArguments.length &amp;&amp; typeArguments[0].isComplexType()) {</span>
13900
- <span class="cstat-no" title="statement not covered" > delete node.__TypeAnnotation;</span>
13901
- <span class="cstat-no" title="statement not covered" > return;</span>
13633
+ },
13634
+ { minimum: 100 },
13635
+ );
13636
+ <span class="cstat-no" title="statement not covered" > await utils.timeSlicing(</span>
13637
+ Array.from(types.entries()),
13638
+ <span class="fstat-no" title="function not covered" > ([</span>node, value]) =&gt; {
13639
+ <span class="cstat-no" title="statement not covered" > try {</span>
13640
+ // 因为node可能是经过处理的TypeAnnotation
13641
+ <span class="cstat-no" title="statement not covered" > node.__isCorrectTypeAnnotation = true;</span>
13642
+ <span class="cstat-no" title="statement not covered" > if (value) {</span>
13643
+ <span class="cstat-no" title="statement not covered" > if (node instanceof OqlQueryComponent) {</span>
13644
+ // 自动推导情况
13645
+ const typeAnnotation = <span class="cstat-no" title="statement not covered" >value as TypeAnnotation;</span>
13646
+ <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; typeAnnotation) {</span>
13647
+ <span class="cstat-no" title="statement not covered" > if (typeAnnotation.typeName === 'List' &amp;&amp; typeAnnotation.typeKind === 'generic') {</span>
13648
+ const {typeArguments} = <span class="cstat-no" title="statement not covered" >typeAnnotation;</span>
13649
+ <span class="cstat-no" title="statement not covered" > if (typeArguments.length &amp;&amp; typeArguments[0].isComplexType()) {</span>
13650
+ <span class="cstat-no" title="statement not covered" > delete node.__TypeAnnotation;</span>
13651
+ <span class="cstat-no" title="statement not covered" > return;</span>
13652
+ }
13902
13653
  }
13903
13654
  }
13904
13655
  }
13656
+ <span class="cstat-no" title="statement not covered" > if (value instanceof TypeAnnotation) {</span>
13657
+ <span class="cstat-no" title="statement not covered" > node.__TypeAnnotation = value;</span>
13658
+ } else <span class="cstat-no" title="statement not covered" >if (value.typeAnnotation) {</span>
13659
+ <span class="cstat-no" title="statement not covered" > node.__TypeAnnotation = value.typeAnnotation;</span>
13660
+ }
13661
+ } else {
13662
+ // 清空原来已经赋值上去的类型,可能原来有现在没有了
13663
+ <span class="cstat-no" title="statement not covered" > delete node.__TypeAnnotation;</span>
13905
13664
  }
13906
- <span class="cstat-no" title="statement not covered" > if (value instanceof TypeAnnotation) {</span>
13907
- <span class="cstat-no" title="statement not covered" > node.__TypeAnnotation = value;</span>
13908
- } else <span class="cstat-no" title="statement not covered" >if (value.typeAnnotation) {</span>
13909
- <span class="cstat-no" title="statement not covered" > node.__TypeAnnotation = value.typeAnnotation;</span>
13910
- }
13911
- } else {
13912
- // 清空原来已经赋值上去的类型,可能原来有现在没有了
13913
- <span class="cstat-no" title="statement not covered" > delete node.__TypeAnnotation;</span>
13665
+ } catch (err) {
13666
+ // if (globalThis.window) {
13667
+ // console.log(err);
13668
+ // }
13914
13669
  }
13915
- } catch (err) {
13916
- // if (globalThis.window) {
13917
- // console.log(err);
13918
- // }
13919
- }
13920
- });
13670
+ },
13671
+ { minimum: 100 },
13672
+ );
13921
13673
  <span class="cstat-no" title="statement not covered" > return types;</span>
13922
13674
  }
13923
- &nbsp;
13924
- /**
13925
- * 获取传入节点的 TypeAnnotation
13926
- */
13927
- <span class="fstat-no" title="function not covered" > getQuickInfoNodesTypeMap(</span>nodes: QuickInfoNodes, flag?: boolean) {
13928
- <span class="cstat-no" title="statement not covered" > return utils.runGeneratorAsync(this._getQuickInfoNodesTypeMapWithGenerator(nodes));</span>
13929
- }
13930
13675
  &nbsp;
13931
13676
  // 全量标注并且返回json
13932
13677
  @withQueueExecute('annotation')
@@ -13937,7 +13682,7 @@ class NaslServer {
13937
13682
  const nodes: QuickInfoNodes = <span class="cstat-no" title="statement not covered" >[];</span>
13938
13683
  <span class="cstat-no" title="statement not covered" > this.file2NodeMap.forEach(<span class="fstat-no" title="function not covered" >(f</span>ileNode, filePath) =&gt; {</span>
13939
13684
  // 先不排除view,传递给后端的时候,去除views下的标注
13940
- <span class="cstat-no" title="statement not covered" > if (!['Structure', 'DataSource', 'Entity', 'Enum', 'Role', 'MetadataType'].includes(fileNode.concept)) {</span>
13685
+ <span class="cstat-no" title="statement not covered" > if (!['Structure', 'DataSource', 'Entity', 'Enum', 'Role'].includes(fileNode.concept)) {</span>
13941
13686
  <span class="cstat-no" title="statement not covered" > fileNode.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, node) =&gt; {</span>
13942
13687
  <span class="cstat-no" title="statement not covered" > nodes.push({</span>
13943
13688
  filePath,
@@ -13962,35 +13707,28 @@ class NaslServer {
13962
13707
  }
13963
13708
  &nbsp;
13964
13709
  // 增量标注
13965
- private <span class="fstat-no" title="function not covered" >*_</span>incrementalAnnotationJSONWithGenerator(records: DiagnosticRecord[]) {
13710
+ @withQueueExecute('annotation')
13711
+ <span class="fstat-no" title="function not covered" > async </span>IncrementalAnnotationJSON(records: DiagnosticRecord[]) {
13966
13712
  <span class="cstat-no" title="statement not covered" > console.time('增量标注');</span>
13967
13713
  const nodes: QuickInfoNodes = <span class="cstat-no" title="statement not covered" >[];</span>
13968
- const self = <span class="cstat-no" title="statement not covered" >this;</span>
13969
- &nbsp;
13970
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(records, function *<span class="fstat-no" title="function not covered" >findNodePosition </span>(record) {</span>
13971
- const fileNode = <span class="cstat-no" title="statement not covered" >self.file2NodeMap.get(record.filePath);</span>
13972
- &nbsp;
13973
- <span class="cstat-no" title="statement not covered" > if (!fileNode) {</span>
13974
- <span class="cstat-no" title="statement not covered" > return;</span>
13975
- }
13976
- &nbsp;
13714
+ <span class="cstat-no" title="statement not covered" > records.forEach(<span class="fstat-no" title="function not covered" >(r</span>ecord) =&gt; {</span>
13715
+ const fileNode = <span class="cstat-no" title="statement not covered" >this.file2NodeMap.get(record.filePath);</span>
13716
+ <span class="cstat-no" title="statement not covered" > if (!fileNode) <span class="cstat-no" title="statement not covered" >return;</span></span>
13977
13717
  <span class="cstat-no" title="statement not covered" > record.id = fileNode.id;</span>
13978
13718
  <span class="cstat-no" title="statement not covered" > record.node = fileNode;</span>
13979
- &nbsp;
13980
- <span class="cstat-no" title="statement not covered" > if (['Structure', 'DataSource', 'Entity', 'Enum', 'Role', 'MetadataType'].includes(fileNode.concept) || !fileNode.sourceMap) {</span>
13981
- <span class="cstat-no" title="statement not covered" > return;</span>
13719
+ <span class="cstat-no" title="statement not covered" > if (!['Structure', 'DataSource', 'Entity', 'Enum', 'Role'].includes(fileNode.concept)) {</span>
13720
+ <span class="cstat-no" title="statement not covered" > fileNode.sourceMap &amp;&amp;</span>
13721
+ fileNode.sourceMap.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, nodeItem) =&gt; {
13722
+ <span class="cstat-no" title="statement not covered" > nodes.push({</span>
13723
+ filePath: record.filePath,
13724
+ node: nodeItem,
13725
+ item,
13726
+ });
13727
+ });
13982
13728
  }
13983
- &nbsp;
13984
- <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(fileNode.sourceMap.entries(), <span class="fstat-no" title="function not covered" >([</span>nodeItem, item]) =&gt; {</span>
13985
- <span class="cstat-no" title="statement not covered" > nodes.push({</span>
13986
- filePath: record.filePath,
13987
- node: nodeItem,
13988
- item,
13989
- });
13990
- });
13991
13729
  });
13992
13730
  &nbsp;
13993
- <span class="cstat-no" title="statement not covered" > yield* this._getQuickInfoNodesTypeMapWithGenerator(nodes);</span>
13731
+ <span class="cstat-no" title="statement not covered" > await this.getQuickInfoNodesTypeMap(nodes);</span>
13994
13732
  <span class="cstat-no" title="statement not covered" > console.timeEnd('增量标注');</span>
13995
13733
  }
13996
13734
  &nbsp;
@@ -14105,12 +13843,33 @@ class NaslServer {
14105
13843
  &nbsp;
14106
13844
  // jsonSerializer 是 CallLogic,其余是 CallFunction
14107
13845
  <span class="cstat-no" title="statement not covered" > if (node instanceof CallFunction || node instanceof CallLogic) {</span>
14108
- const tzArgIdx = <span class="cstat-no" title="statement not covered" >timeZoneArgumentIndexMap.get(node.calleeName);</span>
13846
+ const getTimeZoneArgumentIndex = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(c</span>alleeName : string) =&gt; {</span>
13847
+ let tzArgIdx;
13848
+ <span class="cstat-no" title="statement not covered" > switch (calleeName) {</span>
13849
+ // 按意淫的使用频次
13850
+ case 'ToString': <span class="cstat-no" title="statement not covered" >tzArgIdx = 1; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13851
+ case 'CurrDateTime': <span class="cstat-no" title="statement not covered" >tzArgIdx = 0; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13852
+ case 'CurrDate': <span class="cstat-no" title="statement not covered" >tzArgIdx = 0; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13853
+ case 'CurrTime': <span class="cstat-no" title="statement not covered" >tzArgIdx = 0; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13854
+ case 'FormatDateTime': <span class="cstat-no" title="statement not covered" >tzArgIdx = 2; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13855
+ case 'jsonSerialize': <span class="cstat-no" title="statement not covered" >tzArgIdx = 1; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13856
+ case 'GetDateCount': <span class="cstat-no" title="statement not covered" >tzArgIdx = 2; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13857
+ case 'GetSpecificDaysOfWeek': <span class="cstat-no" title="statement not covered" >tzArgIdx = 3; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13858
+ default: <span class="cstat-no" title="statement not covered" >tzArgIdx = -1; <span class="cstat-no" title="statement not covered" ></span>break;</span>
13859
+ }
13860
+ <span class="cstat-no" title="statement not covered" > return tzArgIdx;</span>
13861
+ }
13862
+ const isCoreDateTimeType = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(n</span> : Argument) =&gt; {</span>
13863
+ <span class="cstat-no" title="statement not covered" > return n?.expression?.__TypeAnnotation?.typeName === 'DateTime' &amp;&amp;</span>
13864
+ n?.expression?.__TypeAnnotation?.typeNamespace === 'nasl.core';
13865
+ };
13866
+ &nbsp;
13867
+ const tzArgIdx = <span class="cstat-no" title="statement not covered" >getTimeZoneArgumentIndex(node.calleeName);</span>
14109
13868
  const args = <span class="cstat-no" title="statement not covered" >node.arguments;</span>
14110
13869
  const tzArg = <span class="cstat-no" title="statement not covered" >args ? args[tzArgIdx] : undefined;</span>
14111
13870
  &nbsp;
14112
- <span class="cstat-no" title="statement not covered" > if (tzArgIdx &amp;&amp; tzArg?.keyword === '时区' &amp;&amp; !isCoreDateTimeType(node.arguments[0])) {</span>
14113
- <span class="cstat-no" title="statement not covered" > if (!isFunctionWithFixedTimeZoneParam(node.calleeName)) {</span>
13871
+ <span class="cstat-no" title="statement not covered" > if (tzArgIdx !== -1 &amp;&amp; tzArg?.keyword === '时区') {</span>
13872
+ <span class="cstat-no" title="statement not covered" > if (!isCoreDateTimeType(node.arguments[0])) {</span>
14114
13873
  <span class="cstat-no" title="statement not covered" > node.arguments.pop();</span>
14115
13874
  }
14116
13875
  }
@@ -14123,11 +13882,7 @@ class NaslServer {
14123
13882
  * 如果内部表达式的,就用表达式的,如果没有就试试用默认值的
14124
13883
  * 获取logic的默认值和原来Arg的类型和默认值对应
14125
13884
  */
14126
- <span class="fstat-no" title="function not covered" > *g</span>etArgumentTypeAnnotationWithGenerator(
14127
- node: Argument,
14128
- QuickInfoNodes: QuickInfoNodes,
14129
- types: Map&lt;BaseNode, TypeAnnotation&gt;,
14130
- ): Generator&lt;void, { typeAnnotation: TypeAnnotation; option: object }, void&gt; {
13885
+ <span class="fstat-no" title="function not covered" > getArgumentTypeAnnotation(</span>node: Argument, QuickInfoNodes: QuickInfoNodes, types: Map&lt;BaseNode, TypeAnnotation&gt;) {
14131
13886
  // 直接复用内部expression的type类型
14132
13887
  <span class="cstat-no" title="statement not covered" > if (</span>
14133
13888
  node.parentNode instanceof CallLogic &amp;&amp;
@@ -14147,7 +13902,6 @@ class NaslServer {
14147
13902
  };
14148
13903
  }
14149
13904
  }
14150
- <span class="cstat-no" title="statement not covered" > yield;</span>
14151
13905
  }
14152
13906
  // 获取返回值结果里找到父级的callLogic || CallInterface的类型填充进去Argument
14153
13907
  const App = <span class="cstat-no" title="statement not covered" >node.app;</span>
@@ -14162,8 +13916,7 @@ class NaslServer {
14162
13916
  }
14163
13917
  }
14164
13918
  // 用户自己声明的用用户的
14165
- const callObj = <span class="cstat-no" title="statement not covered" >App.findNodeByCompleteName(`${parent.calleeNamespace}.${parent.calleeName}`);</span>
14166
- <span class="cstat-no" title="statement not covered" > yield;</span>
13919
+ const callObj = <span class="cstat-no" title="statement not covered" >App.findNodeByCompleteName(`${parent.calleeNamespace }.${ parent.calleeName}`);</span>
14167
13920
  const index = <span class="cstat-no" title="statement not covered" >parent.arguments.indexOf(node);</span>
14168
13921
  const param = <span class="cstat-no" title="statement not covered" >callObj?.params?.[index] || {};</span>
14169
13922
  // 取出参数的类型
@@ -14255,7 +14008,7 @@ class NaslServer {
14255
14008
  * @param targetNode 当前操作的节点
14256
14009
  * @param result toTs生成的内容
14257
14010
  */
14258
- <span class="fstat-no" title="function not covered" > async </span>handleDelete(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult) {
14011
+ <span class="fstat-no" title="function not covered" > async </span>handleDelete(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType&lt;Structure['toEmbeddedTSFile']&gt;) {
14259
14012
  const filePath = (<span class="cstat-no" title="statement not covered" >fileNode as FileNode).getEmbeddedFilePath();</span>
14260
14013
  // 如果要删除,而且当前要删Logic就直接删除并且清除错误
14261
14014
  /**
@@ -14295,7 +14048,7 @@ class NaslServer {
14295
14048
  * @param targetNode 触发修改的节点
14296
14049
  * @param result 生成代码的code 和位置信息
14297
14050
  */
14298
- <span class="fstat-no" title="function not covered" > async </span>handleChange(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult, action: string) {
14051
+ <span class="fstat-no" title="function not covered" > async </span>handleChange(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType&lt;Structure['toEmbeddedTSFile']&gt;, action: string) {
14299
14052
  <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, fileNode);</span>
14300
14053
  &nbsp;
14301
14054
  const outputFiles = <span class="cstat-no" title="statement not covered" >[{ file: result.filePath, fileContent: result.code }];</span>
@@ -14340,7 +14093,7 @@ class NaslServer {
14340
14093
  * @param isRename 是不是修改名字
14341
14094
  * @param oldFilePath 如果是改名,文件级别的才会有这个参数,用于文件新增替换
14342
14095
  */
14343
- <span class="fstat-no" title="function not covered" > async </span>handleRename(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult, oldFilePath?: string) {
14096
+ <span class="fstat-no" title="function not covered" > async </span>handleRename(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType&lt;Structure['toEmbeddedTSFile']&gt;, oldFilePath?: string) {
14344
14097
  // rename 场景
14345
14098
  const outputFiles = <span class="cstat-no" title="statement not covered" >[{ file: result.filePath, fileContent: result.code }];</span>
14346
14099
  // 如果是要修改顶级文件名
@@ -14444,7 +14197,7 @@ class NaslServer {
14444
14197
  const fileNodeChildren = <span class="cstat-no" title="statement not covered" >[...fileNode.views, ...fileNode.variables];</span>
14445
14198
  <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; fileNodeChildren.length; i++) {</span>
14446
14199
  const fileNodeItem = <span class="cstat-no" title="statement not covered" >fileNodeChildren[i];</span>
14447
- const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator((fileNodeItem as FileNode).toEmbeddedTSFile());</span>
14200
+ const result = (<span class="cstat-no" title="statement not covered" >fileNodeItem as FileNode).toEmbeddedTSFile();</span>
14448
14201
  <span class="cstat-no" title="statement not covered" > fileNodeItem.sourceMap = result.sourceMap;</span>
14449
14202
  <span class="cstat-no" title="statement not covered" > if (action === 'create') {</span>
14450
14203
  <span class="cstat-no" title="statement not covered" > await this.handleChange(fileNodeItem, fileNodeItem, result, action);</span>
@@ -14467,7 +14220,7 @@ class NaslServer {
14467
14220
  const fileNodeChildren = <span class="cstat-no" title="statement not covered" >fileNode.children;</span>
14468
14221
  <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; fileNodeChildren.length; i++) {</span>
14469
14222
  const fileNodeItem = <span class="cstat-no" title="statement not covered" >fileNodeChildren[i];</span>
14470
- const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator((fileNodeItem as FileNode).toEmbeddedTSFile());</span>
14223
+ const result = (<span class="cstat-no" title="statement not covered" >fileNodeItem as FileNode).toEmbeddedTSFile();</span>
14471
14224
  <span class="cstat-no" title="statement not covered" > fileNodeItem.sourceMap = result.sourceMap;</span>
14472
14225
  <span class="cstat-no" title="statement not covered" > if (action === 'create') {</span>
14473
14226
  <span class="cstat-no" title="statement not covered" > await this.handleChange(fileNodeItem, fileNodeItem, result, action);</span>
@@ -14491,7 +14244,8 @@ class NaslServer {
14491
14244
  <span class="cstat-no" title="statement not covered" > isChangeInterface = true;</span>
14492
14245
  }
14493
14246
  const module: Module = <span class="cstat-no" title="statement not covered" >targetNode as Module;</span>
14494
- const results = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(this.contentToFile(module));</span>
14247
+ const results: Array&lt;ReturnType&lt;Structure['toEmbeddedTSFile']&gt;&gt; = <span class="cstat-no" title="statement not covered" >[];</span>
14248
+ <span class="cstat-no" title="statement not covered" > this.contentToFile(module, results);</span>
14495
14249
  <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; results.length; i++) {</span>
14496
14250
  const result = <span class="cstat-no" title="statement not covered" >results[i];</span>
14497
14251
  const node = <span class="cstat-no" title="statement not covered" >this.file2NodeMap.get(result.filePath);</span>
@@ -14518,7 +14272,7 @@ class NaslServer {
14518
14272
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof DataSource) {</span>
14519
14273
  (<span class="cstat-no" title="statement not covered" >fileNode as DataSource).entities.forEach(<span class="fstat-no" title="function not covered" >async </span>(entity) =&gt; {</span>
14520
14274
  <span class="cstat-no" title="statement not covered" > try {</span>
14521
- const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(entity.toEmbeddedTSFile());</span>
14275
+ const result = <span class="cstat-no" title="statement not covered" >entity.toEmbeddedTSFile();</span>
14522
14276
  const parentPath = <span class="cstat-no" title="statement not covered" >oldpath.replace('.ts', '/');</span>
14523
14277
  const currentOldPath = <span class="cstat-no" title="statement not covered" >`${parentPath }/entities/${ entity.name }.ts`;</span>
14524
14278
  // 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
@@ -14555,25 +14309,20 @@ class NaslServer {
14555
14309
  <span class="cstat-no" title="statement not covered" > return;</span>
14556
14310
  }
14557
14311
  &nbsp;
14558
- // debugger;
14559
14312
  <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
14560
14313
  <span class="cstat-no" title="statement not covered" > console.time('重新生成 TS 文件');</span>
14561
14314
  }
14562
- &nbsp;
14563
- const fileTsPath = <span class="cstat-no" title="statement not covered" >fileNode.getEmbeddedFilePath();</span>
14564
- const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(fileNode.toEmbeddedTSFile());</span>
14565
- &nbsp;
14315
+ const result = (<span class="cstat-no" title="statement not covered" >fileNode as FileNode).toEmbeddedTSFile();</span>
14566
14316
  <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
14567
14317
  <span class="cstat-no" title="statement not covered" > console.timeEnd('重新生成 TS 文件');</span>
14568
- <span class="cstat-no" title="statement not covered" > console.log('重新生成 TS 文件', fileTsPath);</span>
14318
+ <span class="cstat-no" title="statement not covered" > console.log('重新生成 TS 文件', (fileNode as FileNode).getEmbeddedFilePath());</span>
14569
14319
  }
14570
14320
  &nbsp;
14571
14321
  // 当前操作的节点
14572
14322
  // 如果当前没有生成tsFile
14573
- <span class="cstat-no" title="statement not covered" > if (!result.sourceMap) {</span>
14323
+ <span class="cstat-no" title="statement not covered" > if (!result) {</span>
14574
14324
  <span class="cstat-no" title="statement not covered" > return;</span>
14575
14325
  }
14576
- &nbsp;
14577
14326
  // 修改触发修改文件
14578
14327
  <span class="cstat-no" title="statement not covered" > this._debugInFileStorage(targetNode, [</span>
14579
14328
  {
@@ -14583,7 +14332,6 @@ class NaslServer {
14583
14332
  ]);
14584
14333
  &nbsp;
14585
14334
  <span class="cstat-no" title="statement not covered" > fileNode.sourceMap = result.sourceMap;</span>
14586
- &nbsp;
14587
14335
  <span class="cstat-no" title="statement not covered" > if (action === 'update' || action === 'create') {</span>
14588
14336
  <span class="cstat-no" title="statement not covered" > if ($event?.field !== 'name') {</span>
14589
14337
  <span class="cstat-no" title="statement not covered" > await this.handleChange(fileNode, targetNode, result, action);</span>
@@ -14638,7 +14386,7 @@ export { NaslServer };
14638
14386
  <div class='footer quiet pad2 space-top1 center small'>
14639
14387
  Code coverage generated by
14640
14388
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
14641
- at 2023-11-18T16:22:11.588Z
14389
+ at 2023-10-18T11:36:07.885Z
14642
14390
  </div>
14643
14391
  <script src="../../prettify.js"></script>
14644
14392
  <script>