@lcap/nasl 3.6.0-beta.1 → 3.7.0-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 (981) hide show
  1. package/.nyc_output/{d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json → 559608df-ab15-4969-acf0-5239dacd6111.json} +1 -1
  2. package/.nyc_output/processinfo/559608df-ab15-4969-acf0-5239dacd6111.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -1
  4. package/coverage/index.html +153 -138
  5. package/coverage/src/automate/engine/index.html +1 -1
  6. package/coverage/src/automate/engine/utils.js.html +46 -46
  7. package/coverage/src/bak/index.html +15 -15
  8. package/coverage/src/bak/translator.js.html +153 -57
  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 +43 -7
  12. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +59 -8
  13. package/coverage/src/breakpoint/generator/index.html +21 -21
  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 +609 -180
  28. package/coverage/src/common/Command.ts.html +2 -2
  29. package/coverage/src/common/EventEmitter.ts.html +6 -6
  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 +36 -21
  33. package/coverage/src/common/index.ts.html +7 -4
  34. package/coverage/src/common/utils.ts.html +136 -0
  35. package/coverage/src/concepts/Abort__.ts.html +39 -9
  36. package/coverage/src/concepts/AbstractInterface__.ts.html +280 -0
  37. package/coverage/src/concepts/Anchor__.ts.html +86 -29
  38. package/coverage/src/concepts/AnonymousFunction__.ts.html +262 -169
  39. package/coverage/src/concepts/App__.ts.html +1205 -152
  40. package/coverage/src/concepts/Argument__.ts.html +120 -51
  41. package/coverage/src/concepts/Assignee__.ts.html +124 -34
  42. package/coverage/src/concepts/AssignmentLine__.ts.html +48 -15
  43. package/coverage/src/concepts/Assignment__.ts.html +147 -69
  44. package/coverage/src/concepts/Attribute__.ts.html +41 -14
  45. package/coverage/src/concepts/AuthInterface__.ts.html +9 -6
  46. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +108 -144
  47. package/coverage/src/concepts/AuthLogic__.ts.html +18 -6
  48. package/coverage/src/concepts/BackendVariable__.ts.html +135 -51
  49. package/coverage/src/concepts/Backend__.ts.html +106 -28
  50. package/coverage/src/concepts/BatchAssignment__.ts.html +274 -169
  51. package/coverage/src/concepts/BinaryExpression__.ts.html +188 -110
  52. package/coverage/src/concepts/BindAttribute__.ts.html +213 -93
  53. package/coverage/src/concepts/BindDirective__.ts.html +131 -26
  54. package/coverage/src/concepts/BindEvent__.ts.html +167 -71
  55. package/coverage/src/concepts/BindStyle__.ts.html +78 -21
  56. package/coverage/src/concepts/Block__.ts.html +910 -0
  57. package/coverage/src/concepts/BooleanLiteral__.ts.html +47 -20
  58. package/coverage/src/concepts/CallAuthInterface__.ts.html +105 -48
  59. package/coverage/src/concepts/CallConnector__.ts.html +62 -35
  60. package/coverage/src/concepts/CallFunction__.ts.html +328 -160
  61. package/coverage/src/concepts/CallInterface__.ts.html +93 -60
  62. package/coverage/src/concepts/CallLogic__.ts.html +544 -427
  63. package/coverage/src/concepts/CallQueryComponent__.ts.html +126 -93
  64. package/coverage/src/concepts/Comment__.ts.html +43 -10
  65. package/coverage/src/concepts/CompletionProperty__.ts.html +40 -13
  66. package/coverage/src/concepts/ConfigGroup__.ts.html +47 -20
  67. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +22 -19
  68. package/coverage/src/concepts/ConfigProperty__.ts.html +97 -40
  69. package/coverage/src/concepts/Configuration__.ts.html +48 -21
  70. package/coverage/src/concepts/Connection__.ts.html +97 -22
  71. package/coverage/src/concepts/ConnectorTrigger__.ts.html +9 -6
  72. package/coverage/src/concepts/Connector__.ts.html +161 -38
  73. package/coverage/src/concepts/Constant__.ts.html +84 -24
  74. package/coverage/src/concepts/CountersignPolicy__.ts.html +316 -0
  75. package/coverage/src/concepts/DataSource__.ts.html +111 -57
  76. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +9 -6
  77. package/coverage/src/concepts/DefaultValue__.ts.html +1000 -0
  78. package/coverage/src/concepts/Destination__.ts.html +97 -55
  79. package/coverage/src/concepts/End__.ts.html +56 -26
  80. package/coverage/src/concepts/EntityIndex__.ts.html +40 -10
  81. package/coverage/src/concepts/EntityProperty__.ts.html +164 -56
  82. package/coverage/src/concepts/Entity__.ts.html +169 -91
  83. package/coverage/src/concepts/EnumItem__.ts.html +40 -10
  84. package/coverage/src/concepts/Enum__.ts.html +84 -24
  85. package/coverage/src/concepts/Event__.ts.html +41 -14
  86. package/coverage/src/concepts/ExternalDestination__.ts.html +75 -21
  87. package/coverage/src/concepts/ForEachStatement__.ts.html +143 -95
  88. package/coverage/src/concepts/FrontendLibrary__.ts.html +71 -20
  89. package/coverage/src/concepts/FrontendVariable__.ts.html +1 -1
  90. package/coverage/src/concepts/Frontend__.ts.html +213 -57
  91. package/coverage/src/concepts/Function__.ts.html +239 -86
  92. package/coverage/src/concepts/I18nInfo__.ts.html +436 -0
  93. package/coverage/src/concepts/Identifier__.ts.html +103 -73
  94. package/coverage/src/concepts/IfStatement__.ts.html +138 -75
  95. package/coverage/src/concepts/ImportedInterface__.ts.html +268 -0
  96. package/coverage/src/concepts/Integration__.ts.html +70 -19
  97. package/coverage/src/concepts/InterfaceParam__.ts.html +78 -21
  98. package/coverage/src/concepts/Interface__.ts.html +162 -60
  99. package/coverage/src/concepts/JSBlock__.ts.html +39 -9
  100. package/coverage/src/concepts/JavaLogic__.ts.html +42 -9
  101. package/coverage/src/concepts/LogicItem__.ts.html +56 -26
  102. package/coverage/src/concepts/Logic__.ts.html +409 -322
  103. package/coverage/src/concepts/MatchCase__.ts.html +181 -97
  104. package/coverage/src/concepts/Match__.ts.html +135 -63
  105. package/coverage/src/concepts/MemberExpression__.ts.html +185 -128
  106. package/coverage/src/concepts/MetadataType__.ts.html +2053 -0
  107. package/coverage/src/concepts/MicroApp__.ts.html +9 -6
  108. package/coverage/src/concepts/Module__.ts.html +690 -36
  109. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +41 -14
  110. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +41 -14
  111. package/coverage/src/concepts/MultiApprovalPolicy__.ts.html +292 -0
  112. package/coverage/src/concepts/Namespace__.ts.html +359 -92
  113. package/coverage/src/concepts/NewComposite__.ts.html +326 -146
  114. package/coverage/src/concepts/NewList__.ts.html +195 -57
  115. package/coverage/src/concepts/NewMap__.ts.html +168 -63
  116. package/coverage/src/concepts/New__.ts.html +39 -9
  117. package/coverage/src/concepts/NullLiteral__.ts.html +36 -9
  118. package/coverage/src/concepts/NumericLiteral__.ts.html +86 -32
  119. package/coverage/src/concepts/OqlQueryComponent__.ts.html +161 -35
  120. package/coverage/src/concepts/OverriddenLogic__.ts.html +324 -201
  121. package/coverage/src/concepts/Param__.ts.html +155 -80
  122. package/coverage/src/concepts/Point__.ts.html +9 -6
  123. package/coverage/src/concepts/ProcessComponent__.ts.html +72 -21
  124. package/coverage/src/concepts/ProcessElement__.ts.html +524 -116
  125. package/coverage/src/concepts/ProcessOutcome__.ts.html +85 -13
  126. package/coverage/src/concepts/ProcessOutcomes__.ts.html +85 -13
  127. package/coverage/src/concepts/Process__.ts.html +217 -70
  128. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +67 -16
  129. package/coverage/src/concepts/QueryFieldExpression__.ts.html +41 -11
  130. package/coverage/src/concepts/QueryFromExpression__.ts.html +81 -21
  131. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +70 -19
  132. package/coverage/src/concepts/QueryJoinExpression__.ts.html +85 -25
  133. package/coverage/src/concepts/QueryLimitExpression__.ts.html +77 -20
  134. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +80 -20
  135. package/coverage/src/concepts/QuerySelectExpression__.ts.html +42 -15
  136. package/coverage/src/concepts/Rect__.ts.html +9 -6
  137. package/coverage/src/concepts/Return__.ts.html +131 -50
  138. package/coverage/src/concepts/Role__.ts.html +45 -15
  139. package/coverage/src/concepts/SelectMembers__.ts.html +81 -24
  140. package/coverage/src/concepts/SequentialPolicy__.ts.html +259 -0
  141. package/coverage/src/concepts/Slot__.ts.html +40 -13
  142. package/coverage/src/concepts/SqlQueryComponent__.ts.html +84 -24
  143. package/coverage/src/concepts/Start__.ts.html +41 -14
  144. package/coverage/src/concepts/StaticString__.ts.html +403 -0
  145. package/coverage/src/concepts/StringInterpolation__.ts.html +127 -46
  146. package/coverage/src/concepts/StringLiteral__.ts.html +62 -32
  147. package/coverage/src/concepts/StructureProperty__.ts.html +86 -29
  148. package/coverage/src/concepts/Structure__.ts.html +122 -38
  149. package/coverage/src/concepts/SwitchCase__.ts.html +87 -36
  150. package/coverage/src/concepts/SwitchStatement__.ts.html +90 -33
  151. package/coverage/src/concepts/Theme__.ts.html +15 -12
  152. package/coverage/src/concepts/Transactional__.ts.html +9 -6
  153. package/coverage/src/concepts/TriggerEvent__.ts.html +41 -14
  154. package/coverage/src/concepts/TriggerLauncher__.ts.html +46 -13
  155. package/coverage/src/concepts/TypeAnnotation__.ts.html +348 -117
  156. package/coverage/src/concepts/TypeParam__.ts.html +42 -12
  157. package/coverage/src/concepts/UnaryExpression__.ts.html +105 -27
  158. package/coverage/src/concepts/Unparsed__.ts.html +36 -12
  159. package/coverage/src/concepts/UseComponent__.ts.html +9 -6
  160. package/coverage/src/concepts/ValidationRule__.ts.html +87 -48
  161. package/coverage/src/concepts/Variable__.ts.html +127 -46
  162. package/coverage/src/concepts/ViewBlock__.ts.html +9 -6
  163. package/coverage/src/concepts/ViewComponent__.ts.html +99 -24
  164. package/coverage/src/concepts/ViewElement__.ts.html +498 -288
  165. package/coverage/src/concepts/View__.ts.html +482 -170
  166. package/coverage/src/concepts/WhileStatement__.ts.html +118 -55
  167. package/coverage/src/concepts/basics/constants.ts.html +88 -0
  168. package/coverage/src/concepts/basics/index.html +116 -0
  169. package/coverage/src/concepts/basics/stdlib/index.html +1 -1
  170. package/coverage/src/concepts/basics/stdlib/index.ts.html +1 -1
  171. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +1 -1
  172. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +1 -1
  173. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +1 -1
  174. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +1 -1
  175. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +1 -1
  176. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +1 -1
  177. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +1 -1
  178. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +1 -1
  179. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +1 -1
  180. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +1 -1
  181. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +2 -2
  182. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +1 -1
  183. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +4 -4
  184. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1 -1
  185. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +1 -1
  186. package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +1 -1
  187. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +1 -1
  188. package/coverage/src/concepts/basics/types/index.html +1 -1
  189. package/coverage/src/concepts/basics/types/index.ts.html +1 -1
  190. package/coverage/src/concepts/index.html +1023 -963
  191. package/coverage/src/concepts/index.ts.html +1 -1
  192. package/coverage/src/concepts/index__.ts.html +16 -4
  193. package/coverage/src/concepts/utils/asserts.ts.html +27967 -0
  194. package/coverage/src/concepts/utils/index.html +116 -0
  195. package/coverage/src/config.ts.html +1 -1
  196. package/coverage/src/decorators/index.html +5 -5
  197. package/coverage/src/decorators/index.ts.html +32 -32
  198. package/coverage/src/decorators/promise.ts.html +10 -10
  199. package/coverage/src/eventBus.ts.html +1 -1
  200. package/coverage/src/generator/compileComponent.ts.html +1 -1
  201. package/coverage/src/generator/genBundleFiles.ts.html +17 -23
  202. package/coverage/src/generator/genHash.ts.html +1 -1
  203. package/coverage/src/generator/genMetaData.ts.html +103 -16
  204. package/coverage/src/generator/genReleaseBody.ts.html +43 -43
  205. package/coverage/src/generator/icestark.ts.html +10 -4
  206. package/coverage/src/generator/index.html +21 -21
  207. package/coverage/src/generator/index.ts.html +1 -1
  208. package/coverage/src/generator/microApp.ts.html +1 -1
  209. package/coverage/src/generator/permission.ts.html +92 -20
  210. package/coverage/src/generator/qiankun.ts.html +9 -3
  211. package/coverage/src/generator/styleReplacer.ts.html +1 -1
  212. package/coverage/src/index.html +7 -7
  213. package/coverage/src/index.ts.html +4 -4
  214. package/coverage/src/manager/diagnostic.ts.html +11 -14
  215. package/coverage/src/manager/index.html +13 -13
  216. package/coverage/src/manager/stepRecorder.ts.html +1 -1
  217. package/coverage/src/natural/genNaturalTS.ts.html +1 -1
  218. package/coverage/src/natural/index.html +15 -15
  219. package/coverage/src/natural/index.ts.html +1 -1
  220. package/coverage/src/natural/naslStdlibMap.ts.html +1 -1
  221. package/coverage/src/natural/transformTSCode.ts.html +78 -18
  222. package/coverage/src/sentry/index.html +14 -14
  223. package/coverage/src/sentry/index.ts.html +38 -32
  224. package/coverage/src/server/createUiTs.ts.html +15 -6
  225. package/coverage/src/server/entity2LogicNamespace.ts.html +9 -9
  226. package/coverage/src/server/event.js.html +1 -1
  227. package/coverage/src/server/extendBaseNode.ts.html +73 -43
  228. package/coverage/src/server/formatTsUtils.ts.html +31 -28
  229. package/coverage/src/server/getConnector.ts.html +1 -1
  230. package/coverage/src/server/getExtensionModules.ts.html +1 -1
  231. package/coverage/src/server/getFunctions.ts.html +1 -1
  232. package/coverage/src/server/getInterfaces.ts.html +1 -1
  233. package/coverage/src/server/getLogging.ts.html +1 -1
  234. package/coverage/src/server/getLogics.ts.html +20 -8
  235. package/coverage/src/server/getMemberIdentifier.ts.html +231 -120
  236. package/coverage/src/server/getProcessComponents.ts.html +1 -1
  237. package/coverage/src/server/getProcesses.ts.html +163 -13
  238. package/coverage/src/server/getValidates.ts.html +1 -1
  239. package/coverage/src/server/index.html +63 -63
  240. package/coverage/src/server/index.ts.html +6 -3
  241. package/coverage/src/server/naslServer.ts.html +1207 -949
  242. package/coverage/src/server/naslStdlibMap.ts.html +1 -1
  243. package/coverage/src/server/process2LogicNamespace.ts.html +1 -1
  244. package/coverage/src/server/translator.ts.html +59 -14
  245. package/coverage/src/service/creator/add.configs.js.html +27 -9
  246. package/coverage/src/service/creator/errHandles.js.html +28 -37
  247. package/coverage/src/service/creator/index.html +23 -23
  248. package/coverage/src/service/creator/index.js.html +1 -1
  249. package/coverage/src/service/datasource/api.js.html +1 -1
  250. package/coverage/src/service/datasource/index.html +1 -1
  251. package/coverage/src/service/datasource/index.js.html +1 -1
  252. package/coverage/src/service/logic/api.js.html +1 -1
  253. package/coverage/src/service/logic/index.html +1 -1
  254. package/coverage/src/service/logic/index.js.html +1 -1
  255. package/coverage/src/service/storage/api.js.html +1 -1
  256. package/coverage/src/service/storage/index.html +29 -29
  257. package/coverage/src/service/storage/index.ts.html +1 -1
  258. package/coverage/src/service/storage/init.ts.html +1533 -600
  259. package/coverage/src/service/storage/jsoner.ts.html +76 -13
  260. package/coverage/src/service/storage/map.ts.html +3 -3
  261. package/coverage/src/service/storage/service.ts.html +1 -1
  262. package/coverage/src/service/storage/storagePoint.ts.html +1 -1
  263. package/coverage/src/templator/genCallComponentLogic.ts.html +1 -1
  264. package/coverage/src/templator/genCreateBlock.ts.html +37 -58
  265. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +19 -19
  266. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +71 -89
  267. package/coverage/src/templator/genEditTableBlock.ts.html +76 -13
  268. package/coverage/src/templator/genEnumSelectBlock.ts.html +1 -1
  269. package/coverage/src/templator/genGetBlock.ts.html +1 -1
  270. package/coverage/src/templator/genGridViewBlock.ts.html +1 -1
  271. package/coverage/src/templator/genListViewBlock.ts.html +1 -1
  272. package/coverage/src/templator/genQueryComponent.ts.html +1 -1
  273. package/coverage/src/templator/genSelectBlock.ts.html +1 -1
  274. package/coverage/src/templator/genTableBlock.ts.html +66 -3
  275. package/coverage/src/templator/genUpdateBlock.ts.html +35 -32
  276. package/coverage/src/templator/index.html +38 -38
  277. package/coverage/src/templator/index.ts.html +1 -1
  278. package/coverage/src/templator/utils.ts.html +74 -11
  279. package/coverage/src/translator/constant.ts.html +1 -1
  280. package/coverage/src/translator/index.html +21 -21
  281. package/coverage/src/translator/index.ts.html +1 -1
  282. package/coverage/src/translator/utils.ts.html +389 -68
  283. package/coverage/src/utils/cookie.ts.html +4 -4
  284. package/coverage/src/utils/env.ts.html +1 -1
  285. package/coverage/src/utils/i18nInfo.ts.html +166 -0
  286. package/coverage/src/utils/index.html +34 -49
  287. package/coverage/src/utils/index.ts.html +115 -22
  288. package/coverage/src/utils/logger.ts.html +1 -1
  289. package/coverage/src/utils/sortTsString.ts.html +25 -10
  290. package/coverage/src/utils/string.ts.html +110 -8
  291. package/coverage/src/utils/time-slicing/constant.ts.html +196 -0
  292. package/coverage/src/utils/time-slicing/controller.ts.html +1144 -0
  293. package/coverage/src/utils/time-slicing/index.html +236 -0
  294. package/coverage/src/utils/time-slicing/index.ts.html +103 -0
  295. package/coverage/src/utils/time-slicing/page-state.ts.html +121 -0
  296. package/coverage/src/utils/time-slicing/performance.ts.html +253 -0
  297. package/coverage/src/utils/time-slicing/runner.ts.html +241 -0
  298. package/coverage/src/utils/time-slicing/tool.ts.html +220 -0
  299. package/coverage/src/utils/time-slicing/utils.ts.html +355 -0
  300. package/coverage/src/utils/time-slicing/wrapper.ts.html +259 -0
  301. package/coverage/src/utils/time-slicing.ts.html +1 -1
  302. package/coverage/src/utils/traverse.ts.html +1 -1
  303. package/coverage/src/utils/window.ts.html +1 -1
  304. package/out/common/BaseNode.js +10 -1
  305. package/out/common/BaseNode.js.map +1 -1
  306. package/out/concepts/Abort__.d.ts +7 -0
  307. package/out/concepts/Abort__.js +7 -0
  308. package/out/concepts/Abort__.js.map +1 -1
  309. package/out/concepts/AbstractInterface__.d.ts +7 -0
  310. package/out/concepts/AbstractInterface__.js +7 -0
  311. package/out/concepts/AbstractInterface__.js.map +1 -1
  312. package/out/concepts/Anchor__.d.ts +7 -0
  313. package/out/concepts/Anchor__.js +7 -0
  314. package/out/concepts/Anchor__.js.map +1 -1
  315. package/out/concepts/AnonymousFunction__.d.ts +7 -0
  316. package/out/concepts/AnonymousFunction__.js +7 -0
  317. package/out/concepts/AnonymousFunction__.js.map +1 -1
  318. package/out/concepts/App__.d.ts +7 -0
  319. package/out/concepts/App__.js +8 -1
  320. package/out/concepts/App__.js.map +1 -1
  321. package/out/concepts/Argument__.d.ts +7 -0
  322. package/out/concepts/Argument__.js +7 -0
  323. package/out/concepts/Argument__.js.map +1 -1
  324. package/out/concepts/Assignee__.d.ts +7 -0
  325. package/out/concepts/Assignee__.js +7 -0
  326. package/out/concepts/Assignee__.js.map +1 -1
  327. package/out/concepts/AssignmentLine__.d.ts +7 -0
  328. package/out/concepts/AssignmentLine__.js +7 -0
  329. package/out/concepts/AssignmentLine__.js.map +1 -1
  330. package/out/concepts/Assignment__.d.ts +7 -0
  331. package/out/concepts/Assignment__.js +7 -0
  332. package/out/concepts/Assignment__.js.map +1 -1
  333. package/out/concepts/Attribute__.d.ts +11 -13
  334. package/out/concepts/Attribute__.js +11 -14
  335. package/out/concepts/Attribute__.js.map +1 -1
  336. package/out/concepts/AuthInterface__.d.ts +7 -0
  337. package/out/concepts/AuthInterface__.js +7 -0
  338. package/out/concepts/AuthInterface__.js.map +1 -1
  339. package/out/concepts/AuthLogicForCallInterface__.d.ts +7 -0
  340. package/out/concepts/AuthLogicForCallInterface__.js +7 -0
  341. package/out/concepts/AuthLogicForCallInterface__.js.map +1 -1
  342. package/out/concepts/AuthLogic__.d.ts +7 -0
  343. package/out/concepts/AuthLogic__.js +7 -0
  344. package/out/concepts/AuthLogic__.js.map +1 -1
  345. package/out/concepts/BackendVariable__.d.ts +7 -0
  346. package/out/concepts/BackendVariable__.js +7 -0
  347. package/out/concepts/BackendVariable__.js.map +1 -1
  348. package/out/concepts/Backend__.d.ts +7 -0
  349. package/out/concepts/Backend__.js +7 -0
  350. package/out/concepts/Backend__.js.map +1 -1
  351. package/out/concepts/BaseSetter__.d.ts +25 -0
  352. package/out/concepts/BaseSetter__.js +53 -0
  353. package/out/concepts/BaseSetter__.js.map +1 -0
  354. package/out/concepts/BatchAssignment__.d.ts +7 -0
  355. package/out/concepts/BatchAssignment__.js +7 -0
  356. package/out/concepts/BatchAssignment__.js.map +1 -1
  357. package/out/concepts/BinaryExpression__.d.ts +7 -0
  358. package/out/concepts/BinaryExpression__.js +7 -0
  359. package/out/concepts/BinaryExpression__.js.map +1 -1
  360. package/out/concepts/BindAttribute__.d.ts +7 -0
  361. package/out/concepts/BindAttribute__.js +7 -0
  362. package/out/concepts/BindAttribute__.js.map +1 -1
  363. package/out/concepts/BindDirective__.d.ts +7 -0
  364. package/out/concepts/BindDirective__.js +7 -0
  365. package/out/concepts/BindDirective__.js.map +1 -1
  366. package/out/concepts/BindEvent__.d.ts +7 -0
  367. package/out/concepts/BindEvent__.js +7 -0
  368. package/out/concepts/BindEvent__.js.map +1 -1
  369. package/out/concepts/BindStyle__.d.ts +7 -0
  370. package/out/concepts/BindStyle__.js +7 -0
  371. package/out/concepts/BindStyle__.js.map +1 -1
  372. package/out/concepts/Block__.d.ts +7 -0
  373. package/out/concepts/Block__.js +7 -0
  374. package/out/concepts/Block__.js.map +1 -1
  375. package/out/concepts/BooleanLiteral__.d.ts +7 -0
  376. package/out/concepts/BooleanLiteral__.js +7 -0
  377. package/out/concepts/BooleanLiteral__.js.map +1 -1
  378. package/out/concepts/BusinessComponent__.d.ts +7 -0
  379. package/out/concepts/BusinessComponent__.js +8 -1
  380. package/out/concepts/BusinessComponent__.js.map +1 -1
  381. package/out/concepts/BusinessLogic__.d.ts +7 -0
  382. package/out/concepts/BusinessLogic__.js +7 -0
  383. package/out/concepts/BusinessLogic__.js.map +1 -1
  384. package/out/concepts/CallAuthInterface__.d.ts +7 -0
  385. package/out/concepts/CallAuthInterface__.js +7 -0
  386. package/out/concepts/CallAuthInterface__.js.map +1 -1
  387. package/out/concepts/CallConnector__.d.ts +7 -0
  388. package/out/concepts/CallConnector__.js +7 -0
  389. package/out/concepts/CallConnector__.js.map +1 -1
  390. package/out/concepts/CallEvent__.d.ts +7 -0
  391. package/out/concepts/CallEvent__.js +7 -0
  392. package/out/concepts/CallEvent__.js.map +1 -1
  393. package/out/concepts/CallFunction__.d.ts +17 -0
  394. package/out/concepts/CallFunction__.js +73 -2
  395. package/out/concepts/CallFunction__.js.map +1 -1
  396. package/out/concepts/CallInterface__.d.ts +7 -0
  397. package/out/concepts/CallInterface__.js +7 -0
  398. package/out/concepts/CallInterface__.js.map +1 -1
  399. package/out/concepts/CallLogic__.d.ts +7 -0
  400. package/out/concepts/CallLogic__.js +17 -9
  401. package/out/concepts/CallLogic__.js.map +1 -1
  402. package/out/concepts/CallQueryComponent__.d.ts +7 -0
  403. package/out/concepts/CallQueryComponent__.js +7 -0
  404. package/out/concepts/CallQueryComponent__.js.map +1 -1
  405. package/out/concepts/CapsulesSetter__.d.ts +109 -0
  406. package/out/concepts/CapsulesSetter__.js +163 -0
  407. package/out/concepts/CapsulesSetter__.js.map +1 -0
  408. package/out/concepts/Comment__.d.ts +7 -0
  409. package/out/concepts/Comment__.js +7 -0
  410. package/out/concepts/Comment__.js.map +1 -1
  411. package/out/concepts/CompletionProperty__.d.ts +7 -8
  412. package/out/concepts/CompletionProperty__.js +7 -16
  413. package/out/concepts/CompletionProperty__.js.map +1 -1
  414. package/out/concepts/ConfigGroup__.d.ts +7 -0
  415. package/out/concepts/ConfigGroup__.js +7 -0
  416. package/out/concepts/ConfigGroup__.js.map +1 -1
  417. package/out/concepts/ConfigPropertyValue__.d.ts +7 -0
  418. package/out/concepts/ConfigPropertyValue__.js +7 -0
  419. package/out/concepts/ConfigPropertyValue__.js.map +1 -1
  420. package/out/concepts/ConfigProperty__.d.ts +7 -0
  421. package/out/concepts/ConfigProperty__.js +7 -0
  422. package/out/concepts/ConfigProperty__.js.map +1 -1
  423. package/out/concepts/Configuration__.d.ts +7 -0
  424. package/out/concepts/Configuration__.js +7 -0
  425. package/out/concepts/Configuration__.js.map +1 -1
  426. package/out/concepts/Connection__.d.ts +7 -0
  427. package/out/concepts/Connection__.js +7 -0
  428. package/out/concepts/Connection__.js.map +1 -1
  429. package/out/concepts/ConnectorTrigger__.d.ts +7 -0
  430. package/out/concepts/ConnectorTrigger__.js +7 -0
  431. package/out/concepts/ConnectorTrigger__.js.map +1 -1
  432. package/out/concepts/Connector__.d.ts +7 -0
  433. package/out/concepts/Connector__.js +7 -0
  434. package/out/concepts/Connector__.js.map +1 -1
  435. package/out/concepts/Constant__.d.ts +7 -0
  436. package/out/concepts/Constant__.js +7 -0
  437. package/out/concepts/Constant__.js.map +1 -1
  438. package/out/concepts/CountersignPolicy__.d.ts +7 -0
  439. package/out/concepts/CountersignPolicy__.js +7 -0
  440. package/out/concepts/CountersignPolicy__.js.map +1 -1
  441. package/out/concepts/DataSource__.d.ts +7 -0
  442. package/out/concepts/DataSource__.js +7 -0
  443. package/out/concepts/DataSource__.js.map +1 -1
  444. package/out/concepts/DatabaseTypeAnnotation__.d.ts +7 -0
  445. package/out/concepts/DatabaseTypeAnnotation__.js +7 -0
  446. package/out/concepts/DatabaseTypeAnnotation__.js.map +1 -1
  447. package/out/concepts/DefaultValue__.d.ts +7 -0
  448. package/out/concepts/DefaultValue__.js +7 -0
  449. package/out/concepts/DefaultValue__.js.map +1 -1
  450. package/out/concepts/Destination__.d.ts +7 -0
  451. package/out/concepts/Destination__.js +7 -0
  452. package/out/concepts/Destination__.js.map +1 -1
  453. package/out/concepts/End__.d.ts +7 -0
  454. package/out/concepts/End__.js +7 -0
  455. package/out/concepts/End__.js.map +1 -1
  456. package/out/concepts/EntityIndex__.d.ts +7 -0
  457. package/out/concepts/EntityIndex__.js +7 -0
  458. package/out/concepts/EntityIndex__.js.map +1 -1
  459. package/out/concepts/EntityProperty__.d.ts +7 -0
  460. package/out/concepts/EntityProperty__.js +14 -8
  461. package/out/concepts/EntityProperty__.js.map +1 -1
  462. package/out/concepts/Entity__.d.ts +7 -0
  463. package/out/concepts/Entity__.js +7 -0
  464. package/out/concepts/Entity__.js.map +1 -1
  465. package/out/concepts/EnumItem__.d.ts +7 -0
  466. package/out/concepts/EnumItem__.js +7 -0
  467. package/out/concepts/EnumItem__.js.map +1 -1
  468. package/out/concepts/EnumSelectSetter__.d.ts +109 -0
  469. package/out/concepts/EnumSelectSetter__.js +163 -0
  470. package/out/concepts/EnumSelectSetter__.js.map +1 -0
  471. package/out/concepts/Enum__.d.ts +12 -0
  472. package/out/concepts/Enum__.js +33 -4
  473. package/out/concepts/Enum__.js.map +1 -1
  474. package/out/concepts/EventDeclaration__.d.ts +41 -0
  475. package/out/concepts/EventDeclaration__.js +81 -0
  476. package/out/concepts/EventDeclaration__.js.map +1 -0
  477. package/out/concepts/Event__.d.ts +10 -3
  478. package/out/concepts/Event__.js +9 -2
  479. package/out/concepts/Event__.js.map +1 -1
  480. package/out/concepts/ExternalDestination__.d.ts +7 -0
  481. package/out/concepts/ExternalDestination__.js +7 -0
  482. package/out/concepts/ExternalDestination__.js.map +1 -1
  483. package/out/concepts/ForEachStatement__.d.ts +7 -0
  484. package/out/concepts/ForEachStatement__.js +7 -0
  485. package/out/concepts/ForEachStatement__.js.map +1 -1
  486. package/out/concepts/FrontendLibrary__.d.ts +34 -27
  487. package/out/concepts/FrontendLibrary__.js +39 -32
  488. package/out/concepts/FrontendLibrary__.js.map +1 -1
  489. package/out/concepts/FrontendType__.d.ts +7 -0
  490. package/out/concepts/FrontendType__.js +7 -0
  491. package/out/concepts/FrontendType__.js.map +1 -1
  492. package/out/concepts/FrontendVariable__.d.ts +7 -0
  493. package/out/concepts/FrontendVariable__.js +7 -0
  494. package/out/concepts/FrontendVariable__.js.map +1 -1
  495. package/out/concepts/Frontend__.d.ts +7 -0
  496. package/out/concepts/Frontend__.js +7 -0
  497. package/out/concepts/Frontend__.js.map +1 -1
  498. package/out/concepts/Function__.d.ts +7 -0
  499. package/out/concepts/Function__.js +7 -0
  500. package/out/concepts/Function__.js.map +1 -1
  501. package/out/concepts/I18nInfo__.d.ts +7 -0
  502. package/out/concepts/I18nInfo__.js +7 -0
  503. package/out/concepts/I18nInfo__.js.map +1 -1
  504. package/out/concepts/IconSetter__.d.ts +29 -0
  505. package/out/concepts/IconSetter__.js +62 -0
  506. package/out/concepts/IconSetter__.js.map +1 -0
  507. package/out/concepts/Identifier__.d.ts +7 -0
  508. package/out/concepts/Identifier__.js +7 -0
  509. package/out/concepts/Identifier__.js.map +1 -1
  510. package/out/concepts/IfStatement__.d.ts +7 -0
  511. package/out/concepts/IfStatement__.js +7 -0
  512. package/out/concepts/IfStatement__.js.map +1 -1
  513. package/out/concepts/ImageSetter__.d.ts +25 -0
  514. package/out/concepts/ImageSetter__.js +53 -0
  515. package/out/concepts/ImageSetter__.js.map +1 -0
  516. package/out/concepts/ImportedInterface__.d.ts +7 -0
  517. package/out/concepts/ImportedInterface__.js +7 -0
  518. package/out/concepts/ImportedInterface__.js.map +1 -1
  519. package/out/concepts/InputSetter__.d.ts +29 -0
  520. package/out/concepts/InputSetter__.js +62 -0
  521. package/out/concepts/InputSetter__.js.map +1 -0
  522. package/out/concepts/Integration__.d.ts +7 -0
  523. package/out/concepts/Integration__.js +7 -0
  524. package/out/concepts/Integration__.js.map +1 -1
  525. package/out/concepts/InterfaceParam__.d.ts +7 -0
  526. package/out/concepts/InterfaceParam__.js +7 -0
  527. package/out/concepts/InterfaceParam__.js.map +1 -1
  528. package/out/concepts/Interface__.d.ts +7 -0
  529. package/out/concepts/Interface__.js +7 -0
  530. package/out/concepts/Interface__.js.map +1 -1
  531. package/out/concepts/JSBlock__.d.ts +7 -0
  532. package/out/concepts/JSBlock__.js +7 -0
  533. package/out/concepts/JSBlock__.js.map +1 -1
  534. package/out/concepts/JavaLogic__.d.ts +7 -0
  535. package/out/concepts/JavaLogic__.js +7 -0
  536. package/out/concepts/JavaLogic__.js.map +1 -1
  537. package/out/concepts/LogicDeclaration__.d.ts +289 -0
  538. package/out/concepts/LogicDeclaration__.js +352 -0
  539. package/out/concepts/LogicDeclaration__.js.map +1 -0
  540. package/out/concepts/LogicItem__.d.ts +7 -0
  541. package/out/concepts/LogicItem__.js +7 -0
  542. package/out/concepts/LogicItem__.js.map +1 -1
  543. package/out/concepts/Logic__.d.ts +17 -7
  544. package/out/concepts/Logic__.js +89 -8
  545. package/out/concepts/Logic__.js.map +1 -1
  546. package/out/concepts/MatchCase__.d.ts +7 -0
  547. package/out/concepts/MatchCase__.js +7 -0
  548. package/out/concepts/MatchCase__.js.map +1 -1
  549. package/out/concepts/Match__.d.ts +7 -0
  550. package/out/concepts/Match__.js +7 -0
  551. package/out/concepts/Match__.js.map +1 -1
  552. package/out/concepts/MemberExpression__.d.ts +7 -0
  553. package/out/concepts/MemberExpression__.js +7 -0
  554. package/out/concepts/MemberExpression__.js.map +1 -1
  555. package/out/concepts/MetadataType__.d.ts +7 -0
  556. package/out/concepts/MetadataType__.js +7 -0
  557. package/out/concepts/MetadataType__.js.map +1 -1
  558. package/out/concepts/MicroApp__.d.ts +7 -0
  559. package/out/concepts/MicroApp__.js +7 -0
  560. package/out/concepts/MicroApp__.js.map +1 -1
  561. package/out/concepts/Module__.d.ts +7 -0
  562. package/out/concepts/Module__.js +7 -0
  563. package/out/concepts/Module__.js.map +1 -1
  564. package/out/concepts/MsgTriggerEvent__.d.ts +7 -0
  565. package/out/concepts/MsgTriggerEvent__.js +7 -0
  566. package/out/concepts/MsgTriggerEvent__.js.map +1 -1
  567. package/out/concepts/MsgTriggerLauncher__.d.ts +7 -0
  568. package/out/concepts/MsgTriggerLauncher__.js +7 -0
  569. package/out/concepts/MsgTriggerLauncher__.js.map +1 -1
  570. package/out/concepts/MultiApprovalPolicy__.d.ts +7 -0
  571. package/out/concepts/MultiApprovalPolicy__.js +7 -0
  572. package/out/concepts/MultiApprovalPolicy__.js.map +1 -1
  573. package/out/concepts/Namespace__.d.ts +34 -27
  574. package/out/concepts/Namespace__.js +39 -32
  575. package/out/concepts/Namespace__.js.map +1 -1
  576. package/out/concepts/NewComposite__.d.ts +7 -0
  577. package/out/concepts/NewComposite__.js +7 -0
  578. package/out/concepts/NewComposite__.js.map +1 -1
  579. package/out/concepts/NewList__.d.ts +7 -0
  580. package/out/concepts/NewList__.js +7 -0
  581. package/out/concepts/NewList__.js.map +1 -1
  582. package/out/concepts/NewMap__.d.ts +7 -0
  583. package/out/concepts/NewMap__.js +7 -0
  584. package/out/concepts/NewMap__.js.map +1 -1
  585. package/out/concepts/New__.d.ts +7 -0
  586. package/out/concepts/New__.js +7 -0
  587. package/out/concepts/New__.js.map +1 -1
  588. package/out/concepts/NullLiteral__.d.ts +7 -0
  589. package/out/concepts/NullLiteral__.js +7 -0
  590. package/out/concepts/NullLiteral__.js.map +1 -1
  591. package/out/concepts/NumberInputSetter__.d.ts +45 -0
  592. package/out/concepts/NumberInputSetter__.js +98 -0
  593. package/out/concepts/NumberInputSetter__.js.map +1 -0
  594. package/out/concepts/NumericLiteral__.d.ts +7 -0
  595. package/out/concepts/NumericLiteral__.js +7 -0
  596. package/out/concepts/NumericLiteral__.js.map +1 -1
  597. package/out/concepts/OqlQueryComponent__.d.ts +7 -0
  598. package/out/concepts/OqlQueryComponent__.js +7 -0
  599. package/out/concepts/OqlQueryComponent__.js.map +1 -1
  600. package/out/concepts/OverriddenLogic__.d.ts +7 -0
  601. package/out/concepts/OverriddenLogic__.js +7 -0
  602. package/out/concepts/OverriddenLogic__.js.map +1 -1
  603. package/out/concepts/Paginate__.d.ts +7 -0
  604. package/out/concepts/Paginate__.js +7 -0
  605. package/out/concepts/Paginate__.js.map +1 -1
  606. package/out/concepts/ParamWithGroup__.d.ts +7 -0
  607. package/out/concepts/ParamWithGroup__.js +7 -0
  608. package/out/concepts/ParamWithGroup__.js.map +1 -1
  609. package/out/concepts/Param__.d.ts +9 -9
  610. package/out/concepts/Param__.js +17 -19
  611. package/out/concepts/Param__.js.map +1 -1
  612. package/out/concepts/Point__.d.ts +7 -0
  613. package/out/concepts/Point__.js +7 -0
  614. package/out/concepts/Point__.js.map +1 -1
  615. package/out/concepts/ProcessComponent__.d.ts +7 -0
  616. package/out/concepts/ProcessComponent__.js +7 -0
  617. package/out/concepts/ProcessComponent__.js.map +1 -1
  618. package/out/concepts/ProcessElement__.d.ts +7 -0
  619. package/out/concepts/ProcessElement__.js +7 -0
  620. package/out/concepts/ProcessElement__.js.map +1 -1
  621. package/out/concepts/ProcessOutcome__.d.ts +7 -0
  622. package/out/concepts/ProcessOutcome__.js +7 -0
  623. package/out/concepts/ProcessOutcome__.js.map +1 -1
  624. package/out/concepts/ProcessOutcomes__.d.ts +7 -0
  625. package/out/concepts/ProcessOutcomes__.js +7 -0
  626. package/out/concepts/ProcessOutcomes__.js.map +1 -1
  627. package/out/concepts/Process__.d.ts +7 -0
  628. package/out/concepts/Process__.js +7 -0
  629. package/out/concepts/Process__.js.map +1 -1
  630. package/out/concepts/PropDeclaration__.d.ts +99 -0
  631. package/out/concepts/PropDeclaration__.js +183 -0
  632. package/out/concepts/PropDeclaration__.js.map +1 -0
  633. package/out/concepts/PropertySelectSetter__.d.ts +25 -0
  634. package/out/concepts/PropertySelectSetter__.js +53 -0
  635. package/out/concepts/PropertySelectSetter__.js.map +1 -0
  636. package/out/concepts/QueryAggregateExpression__.d.ts +7 -0
  637. package/out/concepts/QueryAggregateExpression__.js +7 -0
  638. package/out/concepts/QueryAggregateExpression__.js.map +1 -1
  639. package/out/concepts/QueryFieldExpression__.d.ts +7 -0
  640. package/out/concepts/QueryFieldExpression__.js +7 -0
  641. package/out/concepts/QueryFieldExpression__.js.map +1 -1
  642. package/out/concepts/QueryFromExpression__.d.ts +7 -0
  643. package/out/concepts/QueryFromExpression__.js +7 -0
  644. package/out/concepts/QueryFromExpression__.js.map +1 -1
  645. package/out/concepts/QueryGroupByExpression__.d.ts +7 -0
  646. package/out/concepts/QueryGroupByExpression__.js +7 -0
  647. package/out/concepts/QueryGroupByExpression__.js.map +1 -1
  648. package/out/concepts/QueryJoinExpression__.d.ts +7 -0
  649. package/out/concepts/QueryJoinExpression__.js +7 -0
  650. package/out/concepts/QueryJoinExpression__.js.map +1 -1
  651. package/out/concepts/QueryLimitExpression__.d.ts +7 -0
  652. package/out/concepts/QueryLimitExpression__.js +7 -0
  653. package/out/concepts/QueryLimitExpression__.js.map +1 -1
  654. package/out/concepts/QueryOrderByExpression__.d.ts +7 -0
  655. package/out/concepts/QueryOrderByExpression__.js +7 -0
  656. package/out/concepts/QueryOrderByExpression__.js.map +1 -1
  657. package/out/concepts/QuerySelectExpression__.d.ts +7 -0
  658. package/out/concepts/QuerySelectExpression__.js +7 -0
  659. package/out/concepts/QuerySelectExpression__.js.map +1 -1
  660. package/out/concepts/Rect__.d.ts +7 -0
  661. package/out/concepts/Rect__.js +7 -0
  662. package/out/concepts/Rect__.js.map +1 -1
  663. package/out/concepts/Return__.d.ts +8 -1
  664. package/out/concepts/Return__.js +11 -0
  665. package/out/concepts/Return__.js.map +1 -1
  666. package/out/concepts/Role__.d.ts +7 -0
  667. package/out/concepts/Role__.js +7 -0
  668. package/out/concepts/Role__.js.map +1 -1
  669. package/out/concepts/SelectMembers__.d.ts +7 -0
  670. package/out/concepts/SelectMembers__.js +7 -0
  671. package/out/concepts/SelectMembers__.js.map +1 -1
  672. package/out/concepts/SequentialPolicy__.d.ts +7 -0
  673. package/out/concepts/SequentialPolicy__.js +7 -0
  674. package/out/concepts/SequentialPolicy__.js.map +1 -1
  675. package/out/concepts/SetterOption__.d.ts +49 -0
  676. package/out/concepts/SetterOption__.js +99 -0
  677. package/out/concepts/SetterOption__.js.map +1 -0
  678. package/out/concepts/SlotDeclaration__.d.ts +213 -0
  679. package/out/concepts/SlotDeclaration__.js +287 -0
  680. package/out/concepts/SlotDeclaration__.js.map +1 -0
  681. package/out/concepts/Slot__.d.ts +2 -2
  682. package/out/concepts/Slot__.js +1 -1
  683. package/out/concepts/Slot__.js.map +1 -1
  684. package/out/concepts/SqlQueryComponent__.d.ts +7 -0
  685. package/out/concepts/SqlQueryComponent__.js +7 -0
  686. package/out/concepts/SqlQueryComponent__.js.map +1 -1
  687. package/out/concepts/Start__.d.ts +7 -0
  688. package/out/concepts/Start__.js +7 -0
  689. package/out/concepts/Start__.js.map +1 -1
  690. package/out/concepts/StaticString__.d.ts +7 -0
  691. package/out/concepts/StaticString__.js +7 -0
  692. package/out/concepts/StaticString__.js.map +1 -1
  693. package/out/concepts/StringInterpolation__.d.ts +7 -0
  694. package/out/concepts/StringInterpolation__.js +8 -1
  695. package/out/concepts/StringInterpolation__.js.map +1 -1
  696. package/out/concepts/StringLiteral__.d.ts +7 -0
  697. package/out/concepts/StringLiteral__.js +7 -0
  698. package/out/concepts/StringLiteral__.js.map +1 -1
  699. package/out/concepts/StructureProperty__.d.ts +7 -8
  700. package/out/concepts/StructureProperty__.js +7 -16
  701. package/out/concepts/StructureProperty__.js.map +1 -1
  702. package/out/concepts/Structure__.d.ts +7 -0
  703. package/out/concepts/Structure__.js +7 -0
  704. package/out/concepts/Structure__.js.map +1 -1
  705. package/out/concepts/SwitchCase__.d.ts +7 -0
  706. package/out/concepts/SwitchCase__.js +7 -0
  707. package/out/concepts/SwitchCase__.js.map +1 -1
  708. package/out/concepts/SwitchSetter__.d.ts +25 -0
  709. package/out/concepts/SwitchSetter__.js +53 -0
  710. package/out/concepts/SwitchSetter__.js.map +1 -0
  711. package/out/concepts/SwitchStatement__.d.ts +7 -0
  712. package/out/concepts/SwitchStatement__.js +7 -0
  713. package/out/concepts/SwitchStatement__.js.map +1 -1
  714. package/out/concepts/ThemeVariable__.d.ts +29 -0
  715. package/out/concepts/ThemeVariable__.js +58 -0
  716. package/out/concepts/ThemeVariable__.js.map +1 -0
  717. package/out/concepts/Theme__.d.ts +7 -0
  718. package/out/concepts/Theme__.js +7 -0
  719. package/out/concepts/Theme__.js.map +1 -1
  720. package/out/concepts/Transactional__.d.ts +7 -0
  721. package/out/concepts/Transactional__.js +7 -0
  722. package/out/concepts/Transactional__.js.map +1 -1
  723. package/out/concepts/TriggerEvent__.d.ts +9 -81
  724. package/out/concepts/TriggerEvent__.js +10 -107
  725. package/out/concepts/TriggerEvent__.js.map +1 -1
  726. package/out/concepts/TriggerLauncher__.d.ts +7 -0
  727. package/out/concepts/TriggerLauncher__.js +7 -0
  728. package/out/concepts/TriggerLauncher__.js.map +1 -1
  729. package/out/concepts/TypeAnnotation__.d.ts +7 -0
  730. package/out/concepts/TypeAnnotation__.js +27 -11
  731. package/out/concepts/TypeAnnotation__.js.map +1 -1
  732. package/out/concepts/TypeParam__.d.ts +7 -0
  733. package/out/concepts/TypeParam__.js +7 -0
  734. package/out/concepts/TypeParam__.js.map +1 -1
  735. package/out/concepts/UnaryExpression__.d.ts +7 -0
  736. package/out/concepts/UnaryExpression__.js +7 -0
  737. package/out/concepts/UnaryExpression__.js.map +1 -1
  738. package/out/concepts/Unparsed__.d.ts +7 -0
  739. package/out/concepts/Unparsed__.js +7 -0
  740. package/out/concepts/Unparsed__.js.map +1 -1
  741. package/out/concepts/UseComponent__.d.ts +7 -0
  742. package/out/concepts/UseComponent__.js +7 -0
  743. package/out/concepts/UseComponent__.js.map +1 -1
  744. package/out/concepts/ValidationRule__.d.ts +7 -0
  745. package/out/concepts/ValidationRule__.js +8 -1
  746. package/out/concepts/ValidationRule__.js.map +1 -1
  747. package/out/concepts/Variable__.d.ts +8 -1
  748. package/out/concepts/Variable__.js +11 -0
  749. package/out/concepts/Variable__.js.map +1 -1
  750. package/out/concepts/ViewBlockWithImage__.d.ts +33 -0
  751. package/out/concepts/ViewBlockWithImage__.js +63 -0
  752. package/out/concepts/ViewBlockWithImage__.js.map +1 -0
  753. package/out/concepts/ViewBlock__.d.ts +12 -5
  754. package/out/concepts/ViewBlock__.js +16 -5
  755. package/out/concepts/ViewBlock__.js.map +1 -1
  756. package/out/concepts/ViewComponentDeclaration__.d.ts +721 -0
  757. package/out/concepts/ViewComponentDeclaration__.js +808 -0
  758. package/out/concepts/ViewComponentDeclaration__.js.map +1 -0
  759. package/out/concepts/ViewElement__.d.ts +7 -0
  760. package/out/concepts/ViewElement__.js +8 -6
  761. package/out/concepts/ViewElement__.js.map +1 -1
  762. package/out/concepts/View__.d.ts +9 -1
  763. package/out/concepts/View__.js +66 -5
  764. package/out/concepts/View__.js.map +1 -1
  765. package/out/concepts/WhileStatement__.d.ts +7 -0
  766. package/out/concepts/WhileStatement__.js +7 -0
  767. package/out/concepts/WhileStatement__.js.map +1 -1
  768. package/out/concepts/basics/stdlib/nasl.process.js +101 -3
  769. package/out/concepts/basics/stdlib/nasl.process.js.map +1 -1
  770. package/out/concepts/basics/stdlib/nasl.util.js +1 -1
  771. package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
  772. package/out/concepts/index__.d.ts +17 -2
  773. package/out/concepts/index__.js +17 -2
  774. package/out/concepts/index__.js.map +1 -1
  775. package/out/concepts/utils/asserts.d.ts +781 -41
  776. package/out/concepts/utils/asserts.js +1117 -133
  777. package/out/concepts/utils/asserts.js.map +1 -1
  778. package/out/concepts/utils/types.d.ts +56 -7
  779. package/out/generator/genMetaData.js +6 -0
  780. package/out/generator/genMetaData.js.map +1 -1
  781. package/out/index.d.ts +1 -0
  782. package/out/index.js +3 -1
  783. package/out/index.js.map +1 -1
  784. package/out/server/createUiTs.js +0 -1
  785. package/out/server/createUiTs.js.map +1 -1
  786. package/out/server/entity2LogicNamespace.js +1 -15
  787. package/out/server/entity2LogicNamespace.js.map +1 -1
  788. package/out/server/getConnector.d.ts +1 -0
  789. package/out/server/getConnector.js +35 -32
  790. package/out/server/getConnector.js.map +1 -1
  791. package/out/server/getLogics.js +1 -1
  792. package/out/server/getLogics.js.map +1 -1
  793. package/out/server/getMemberIdentifier.js +3 -3
  794. package/out/server/getMemberIdentifier.js.map +1 -1
  795. package/out/templator/genEditTableBlock.js +1 -1
  796. package/out/templator/genEditTableBlock.js.map +1 -1
  797. package/out/templator/genGridViewBlock.js +1 -1
  798. package/out/templator/genGridViewBlock.js.map +1 -1
  799. package/out/templator/genTableBlock.js +2 -2
  800. package/out/templator/genTableBlock.js.map +1 -1
  801. package/package.json +1 -1
  802. package/sandbox/stdlib/nasl.collection.ts +5 -3
  803. package/sandbox/stdlib/nasl.core.ts +2 -1
  804. package/sandbox/stdlib/nasl.process.ts +18 -0
  805. package/sandbox/stdlib/nasl.util.ts +5 -3
  806. package/src/common/BaseNode.ts +10 -1
  807. package/src/concepts/Abort__.ts +7 -0
  808. package/src/concepts/AbstractInterface__.ts +7 -0
  809. package/src/concepts/Anchor__.ts +7 -0
  810. package/src/concepts/AnonymousFunction__.ts +7 -0
  811. package/src/concepts/App__.ts +8 -1
  812. package/src/concepts/Argument__.ts +7 -0
  813. package/src/concepts/Assignee__.ts +7 -0
  814. package/src/concepts/AssignmentLine__.ts +7 -0
  815. package/src/concepts/Assignment__.ts +7 -0
  816. package/src/concepts/Attribute__.ts +12 -22
  817. package/src/concepts/AuthInterface__.ts +7 -0
  818. package/src/concepts/AuthLogicForCallInterface__.ts +7 -0
  819. package/src/concepts/AuthLogic__.ts +7 -0
  820. package/src/concepts/BackendVariable__.ts +7 -0
  821. package/src/concepts/Backend__.ts +7 -0
  822. package/src/concepts/BaseSetter__.ts +72 -0
  823. package/src/concepts/BatchAssignment__.ts +7 -0
  824. package/src/concepts/BinaryExpression__.ts +7 -0
  825. package/src/concepts/BindAttribute__.ts +8 -1
  826. package/src/concepts/BindDirective__.ts +7 -0
  827. package/src/concepts/BindEvent__.ts +7 -0
  828. package/src/concepts/BindStyle__.ts +7 -0
  829. package/src/concepts/Block__.ts +7 -0
  830. package/src/concepts/BooleanLiteral__.ts +7 -0
  831. package/src/concepts/BusinessComponent__.ts +20 -10
  832. package/src/concepts/BusinessLogic__.ts +7 -0
  833. package/src/concepts/CallAuthInterface__.ts +7 -0
  834. package/src/concepts/CallConnector__.ts +7 -0
  835. package/src/concepts/CallEvent__.ts +7 -0
  836. package/src/concepts/CallFunction__.ts +84 -2
  837. package/src/concepts/CallInterface__.ts +7 -0
  838. package/src/concepts/CallLogic__.ts +25 -16
  839. package/src/concepts/CallQueryComponent__.ts +16 -9
  840. package/src/concepts/CapsulesSetter__.ts +254 -0
  841. package/src/concepts/Comment__.ts +7 -0
  842. package/src/concepts/CompletionProperty__.ts +7 -20
  843. package/src/concepts/ConfigGroup__.ts +7 -0
  844. package/src/concepts/ConfigPropertyValue__.ts +7 -0
  845. package/src/concepts/ConfigProperty__.ts +7 -0
  846. package/src/concepts/Configuration__.ts +7 -0
  847. package/src/concepts/Connection__.ts +7 -0
  848. package/src/concepts/ConnectorTrigger__.ts +7 -0
  849. package/src/concepts/Connector__.ts +7 -0
  850. package/src/concepts/Constant__.ts +7 -0
  851. package/src/concepts/CountersignPolicy__.ts +7 -0
  852. package/src/concepts/DataSource__.ts +7 -0
  853. package/src/concepts/DatabaseTypeAnnotation__.ts +7 -0
  854. package/src/concepts/DefaultValue__.ts +7 -0
  855. package/src/concepts/Destination__.ts +7 -0
  856. package/src/concepts/End__.ts +7 -0
  857. package/src/concepts/EntityIndex__.ts +7 -0
  858. package/src/concepts/EntityProperty__.ts +14 -8
  859. package/src/concepts/Entity__.ts +7 -0
  860. package/src/concepts/EnumItem__.ts +7 -0
  861. package/src/concepts/EnumSelectSetter__.ts +254 -0
  862. package/src/concepts/Enum__.ts +38 -5
  863. package/src/concepts/EventDeclaration__.ts +95 -0
  864. package/src/concepts/Event__.ts +10 -3
  865. package/src/concepts/ExternalDestination__.ts +7 -0
  866. package/src/concepts/ForEachStatement__.ts +7 -0
  867. package/src/concepts/FrontendLibrary__.ts +93 -62
  868. package/src/concepts/FrontendType__.ts +7 -0
  869. package/src/concepts/FrontendVariable__.ts +7 -0
  870. package/src/concepts/Frontend__.ts +7 -0
  871. package/src/concepts/Function__.ts +7 -0
  872. package/src/concepts/I18nInfo__.ts +7 -0
  873. package/src/concepts/IconSetter__.ts +72 -0
  874. package/src/concepts/Identifier__.ts +7 -0
  875. package/src/concepts/IfStatement__.ts +7 -0
  876. package/src/concepts/ImageSetter__.ts +65 -0
  877. package/src/concepts/ImportedInterface__.ts +7 -0
  878. package/src/concepts/InputSetter__.ts +72 -0
  879. package/src/concepts/Integration__.ts +7 -0
  880. package/src/concepts/InterfaceParam__.ts +7 -0
  881. package/src/concepts/Interface__.ts +7 -0
  882. package/src/concepts/JSBlock__.ts +7 -0
  883. package/src/concepts/JavaLogic__.ts +7 -0
  884. package/src/concepts/LogicDeclaration__.ts +657 -0
  885. package/src/concepts/LogicItem__.ts +7 -0
  886. package/src/concepts/Logic__.ts +122 -34
  887. package/src/concepts/MatchCase__.ts +10 -3
  888. package/src/concepts/Match__.ts +9 -2
  889. package/src/concepts/MemberExpression__.ts +7 -0
  890. package/src/concepts/MetadataType__.ts +7 -0
  891. package/src/concepts/MicroApp__.ts +7 -0
  892. package/src/concepts/Module__.ts +7 -0
  893. package/src/concepts/MsgTriggerEvent__.ts +7 -0
  894. package/src/concepts/MsgTriggerLauncher__.ts +7 -0
  895. package/src/concepts/MultiApprovalPolicy__.ts +7 -0
  896. package/src/concepts/Namespace__.ts +91 -60
  897. package/src/concepts/NewComposite__.ts +7 -0
  898. package/src/concepts/NewList__.ts +7 -0
  899. package/src/concepts/NewMap__.ts +7 -0
  900. package/src/concepts/New__.ts +7 -0
  901. package/src/concepts/NullLiteral__.ts +7 -0
  902. package/src/concepts/NumberInputSetter__.ts +104 -0
  903. package/src/concepts/NumericLiteral__.ts +7 -0
  904. package/src/concepts/OqlQueryComponent__.ts +7 -0
  905. package/src/concepts/OverriddenLogic__.ts +7 -0
  906. package/src/concepts/Paginate__.ts +7 -0
  907. package/src/concepts/ParamWithGroup__.ts +7 -0
  908. package/src/concepts/Param__.ts +14 -24
  909. package/src/concepts/Point__.ts +7 -0
  910. package/src/concepts/ProcessComponent__.ts +7 -0
  911. package/src/concepts/ProcessElement__.ts +7 -0
  912. package/src/concepts/ProcessOutcome__.ts +7 -0
  913. package/src/concepts/ProcessOutcomes__.ts +7 -0
  914. package/src/concepts/Process__.ts +7 -0
  915. package/src/concepts/PropDeclaration__.ts +209 -0
  916. package/src/concepts/PropertySelectSetter__.ts +65 -0
  917. package/src/concepts/QueryAggregateExpression__.ts +7 -0
  918. package/src/concepts/QueryFieldExpression__.ts +7 -0
  919. package/src/concepts/QueryFromExpression__.ts +7 -0
  920. package/src/concepts/QueryGroupByExpression__.ts +7 -0
  921. package/src/concepts/QueryJoinExpression__.ts +7 -0
  922. package/src/concepts/QueryLimitExpression__.ts +7 -0
  923. package/src/concepts/QueryOrderByExpression__.ts +7 -0
  924. package/src/concepts/QuerySelectExpression__.ts +7 -0
  925. package/src/concepts/Rect__.ts +7 -0
  926. package/src/concepts/Return__.ts +8 -1
  927. package/src/concepts/Role__.ts +7 -0
  928. package/src/concepts/SelectMembers__.ts +7 -0
  929. package/src/concepts/SequentialPolicy__.ts +7 -0
  930. package/src/concepts/SetterOption__.ts +111 -0
  931. package/src/concepts/SlotDeclaration__.ts +488 -0
  932. package/src/concepts/Slot__.ts +2 -2
  933. package/src/concepts/SqlQueryComponent__.ts +7 -0
  934. package/src/concepts/Start__.ts +7 -0
  935. package/src/concepts/StaticString__.ts +7 -0
  936. package/src/concepts/StringInterpolation__.ts +8 -1
  937. package/src/concepts/StringLiteral__.ts +7 -0
  938. package/src/concepts/StructureProperty__.ts +7 -20
  939. package/src/concepts/Structure__.ts +7 -0
  940. package/src/concepts/SwitchCase__.ts +7 -0
  941. package/src/concepts/SwitchSetter__.ts +65 -0
  942. package/src/concepts/SwitchStatement__.ts +7 -0
  943. package/src/concepts/ThemeVariable__.ts +71 -0
  944. package/src/concepts/Theme__.ts +7 -0
  945. package/src/concepts/Transactional__.ts +7 -0
  946. package/src/concepts/TriggerEvent__.ts +12 -185
  947. package/src/concepts/TriggerLauncher__.ts +7 -0
  948. package/src/concepts/TypeAnnotation__.ts +29 -12
  949. package/src/concepts/TypeParam__.ts +7 -0
  950. package/src/concepts/UnaryExpression__.ts +7 -0
  951. package/src/concepts/Unparsed__.ts +7 -0
  952. package/src/concepts/UseComponent__.ts +7 -0
  953. package/src/concepts/ValidationRule__.ts +8 -1
  954. package/src/concepts/Variable__.ts +8 -1
  955. package/src/concepts/ViewBlockWithImage__.ts +80 -0
  956. package/src/concepts/ViewBlock__.ts +16 -9
  957. package/src/concepts/ViewComponentDeclaration__.ts +1670 -0
  958. package/src/concepts/ViewElement__.ts +9 -7
  959. package/src/concepts/View__.ts +91 -25
  960. package/src/concepts/WhileStatement__.ts +7 -0
  961. package/src/concepts/basics/stdlib/nasl.process.ts +103 -7
  962. package/src/concepts/basics/stdlib/nasl.util.ts +1 -1
  963. package/src/concepts/index__.ts +17 -2
  964. package/src/concepts/utils/asserts.ts +1223 -166
  965. package/src/concepts/utils/types.ts +85 -8
  966. package/src/generator/genMetaData.ts +7 -1
  967. package/src/index.ts +1 -0
  968. package/src/server/createUiTs.ts +0 -1
  969. package/src/server/entity2LogicNamespace.ts +1 -16
  970. package/src/server/getConnector.ts +40 -32
  971. package/src/server/getLogics.ts +1 -1
  972. package/src/server/getMemberIdentifier.ts +3 -3
  973. package/src/templator/genEditTableBlock.ts +1 -1
  974. package/src/templator/genGridViewBlock.ts +1 -1
  975. package/src/templator/genTableBlock.ts +2 -2
  976. package/test/concepts/entity/__snapshots__/toEmbeddedTS.spec.ts.snap +2 -2
  977. package/.nyc_output/processinfo/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +0 -1
  978. package/out/concepts/ViewComponent__.d.ts +0 -549
  979. package/out/concepts/ViewComponent__.js +0 -620
  980. package/out/concepts/ViewComponent__.js.map +0 -1
  981. package/src/concepts/ViewComponent__.ts +0 -1245
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">1.72% </span>
26
+ <span class="strong">1.75% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>38/2199</span>
28
+ <span class='fraction'>38/2171</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/1682</span>
35
+ <span class='fraction'>0/1772</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/259</span>
42
+ <span class='fraction'>0/250</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">1.76% </span>
47
+ <span class="strong">1.77% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>37/2102</span>
49
+ <span class='fraction'>37/2086</span>
50
50
  </div>
51
51
 
52
52
 
@@ -4835,7 +4835,93 @@
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
4923
+ <a name='L4858'></a><a href='#L4858'>4858</a>
4924
+ <a name='L4859'></a><a href='#L4859'>4859</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
4839
4925
  <span class="cline-any cline-yes">1x</span>
4840
4926
  <span class="cline-any cline-yes">1x</span>
4841
4927
  <span class="cline-any cline-yes">1x</span>
@@ -4923,6 +5009,7 @@
4923
5009
  <span class="cline-any cline-neutral">&nbsp;</span>
4924
5010
  <span class="cline-any cline-neutral">&nbsp;</span>
4925
5011
  <span class="cline-any cline-neutral">&nbsp;</span>
5012
+ <span class="cline-any cline-neutral">&nbsp;</span>
4926
5013
  <span class="cline-any cline-yes">1x</span>
4927
5014
  <span class="cline-any cline-yes">1x</span>
4928
5015
  <span class="cline-any cline-yes">1x</span>
@@ -4938,7 +5025,6 @@
4938
5025
  <span class="cline-any cline-neutral">&nbsp;</span>
4939
5026
  <span class="cline-any cline-yes">1x</span>
4940
5027
  <span class="cline-any cline-yes">1x</span>
4941
- <span class="cline-any cline-neutral">&nbsp;</span>
4942
5028
  <span class="cline-any cline-yes">1x</span>
4943
5029
  <span class="cline-any cline-neutral">&nbsp;</span>
4944
5030
  <span class="cline-any cline-yes">1x</span>
@@ -4976,9 +5062,6 @@
4976
5062
  <span class="cline-any cline-neutral">&nbsp;</span>
4977
5063
  <span class="cline-any cline-neutral">&nbsp;</span>
4978
5064
  <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>
4982
5065
  <span class="cline-any cline-yes">1x</span>
4983
5066
  <span class="cline-any cline-neutral">&nbsp;</span>
4984
5067
  <span class="cline-any cline-yes">1x</span>
@@ -5023,6 +5106,27 @@
5023
5106
  <span class="cline-any cline-neutral">&nbsp;</span>
5024
5107
  <span class="cline-any cline-neutral">&nbsp;</span>
5025
5108
  <span class="cline-any cline-neutral">&nbsp;</span>
5109
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
5113
+ <span class="cline-any cline-neutral">&nbsp;</span>
5114
+ <span class="cline-any cline-no">&nbsp;</span>
5115
+ <span class="cline-any cline-no">&nbsp;</span>
5116
+ <span class="cline-any cline-neutral">&nbsp;</span>
5117
+ <span class="cline-any cline-neutral">&nbsp;</span>
5118
+ <span class="cline-any cline-yes">1x</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
+ <span class="cline-any cline-neutral">&nbsp;</span>
5129
+ <span class="cline-any cline-neutral">&nbsp;</span>
5026
5130
  <span class="cline-any cline-yes">1x</span>
5027
5131
  <span class="cline-any cline-neutral">&nbsp;</span>
5028
5132
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5192,15 +5296,6 @@
5192
5296
  <span class="cline-any cline-neutral">&nbsp;</span>
5193
5297
  <span class="cline-any cline-neutral">&nbsp;</span>
5194
5298
  <span class="cline-any cline-neutral">&nbsp;</span>
5195
- <span class="cline-any cline-neutral">&nbsp;</span>
5196
- <span class="cline-any cline-no">&nbsp;</span>
5197
- <span class="cline-any cline-no">&nbsp;</span>
5198
- <span class="cline-any cline-neutral">&nbsp;</span>
5199
- <span class="cline-any cline-no">&nbsp;</span>
5200
- <span class="cline-any cline-no">&nbsp;</span>
5201
- <span class="cline-any cline-no">&nbsp;</span>
5202
- <span class="cline-any cline-no">&nbsp;</span>
5203
- <span class="cline-any cline-neutral">&nbsp;</span>
5204
5299
  <span class="cline-any cline-no">&nbsp;</span>
5205
5300
  <span class="cline-any cline-no">&nbsp;</span>
5206
5301
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5209,15 +5304,14 @@
5209
5304
  <span class="cline-any cline-no">&nbsp;</span>
5210
5305
  <span class="cline-any cline-no">&nbsp;</span>
5211
5306
  <span class="cline-any cline-no">&nbsp;</span>
5307
+ <span class="cline-any cline-neutral">&nbsp;</span>
5212
5308
  <span class="cline-any cline-no">&nbsp;</span>
5213
5309
  <span class="cline-any cline-no">&nbsp;</span>
5214
5310
  <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
5311
  <span class="cline-any cline-neutral">&nbsp;</span>
5219
5312
  <span class="cline-any cline-neutral">&nbsp;</span>
5220
5313
  <span class="cline-any cline-no">&nbsp;</span>
5314
+ <span class="cline-any cline-neutral">&nbsp;</span>
5221
5315
  <span class="cline-any cline-no">&nbsp;</span>
5222
5316
  <span class="cline-any cline-no">&nbsp;</span>
5223
5317
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5225,40 +5319,26 @@
5225
5319
  <span class="cline-any cline-no">&nbsp;</span>
5226
5320
  <span class="cline-any cline-no">&nbsp;</span>
5227
5321
  <span class="cline-any cline-neutral">&nbsp;</span>
5228
- <span class="cline-any cline-no">&nbsp;</span>
5229
5322
  <span class="cline-any cline-neutral">&nbsp;</span>
5230
5323
  <span class="cline-any cline-neutral">&nbsp;</span>
5231
5324
  <span class="cline-any cline-no">&nbsp;</span>
5232
5325
  <span class="cline-any cline-no">&nbsp;</span>
5233
5326
  <span class="cline-any cline-no">&nbsp;</span>
5234
- <span class="cline-any cline-no">&nbsp;</span>
5235
5327
  <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>
5238
- <span class="cline-any cline-neutral">&nbsp;</span>
5239
- <span class="cline-any cline-no">&nbsp;</span>
5240
5328
  <span class="cline-any cline-neutral">&nbsp;</span>
5241
5329
  <span class="cline-any cline-no">&nbsp;</span>
5242
5330
  <span class="cline-any cline-no">&nbsp;</span>
5243
- <span class="cline-any cline-no">&nbsp;</span>
5244
- <span class="cline-any cline-no">&nbsp;</span>
5245
5331
  <span class="cline-any cline-neutral">&nbsp;</span>
5246
5332
  <span class="cline-any cline-no">&nbsp;</span>
5247
5333
  <span class="cline-any cline-no">&nbsp;</span>
5248
- <span class="cline-any cline-neutral">&nbsp;</span>
5249
5334
  <span class="cline-any cline-no">&nbsp;</span>
5250
5335
  <span class="cline-any cline-neutral">&nbsp;</span>
5251
5336
  <span class="cline-any cline-neutral">&nbsp;</span>
5252
5337
  <span class="cline-any cline-no">&nbsp;</span>
5253
5338
  <span class="cline-any cline-no">&nbsp;</span>
5254
- <span class="cline-any cline-no">&nbsp;</span>
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
5339
  <span class="cline-any cline-neutral">&nbsp;</span>
5261
5340
  <span class="cline-any cline-no">&nbsp;</span>
5341
+ <span class="cline-any cline-no">&nbsp;</span>
5262
5342
  <span class="cline-any cline-neutral">&nbsp;</span>
5263
5343
  <span class="cline-any cline-neutral">&nbsp;</span>
5264
5344
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5267,99 +5347,52 @@
5267
5347
  <span class="cline-any cline-no">&nbsp;</span>
5268
5348
  <span class="cline-any cline-no">&nbsp;</span>
5269
5349
  <span class="cline-any cline-neutral">&nbsp;</span>
5270
- <span class="cline-any cline-no">&nbsp;</span>
5271
5350
  <span class="cline-any cline-neutral">&nbsp;</span>
5272
5351
  <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>
5278
5352
  <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>
5281
5353
  <span class="cline-any cline-neutral">&nbsp;</span>
5282
5354
  <span class="cline-any cline-neutral">&nbsp;</span>
5283
- <span class="cline-any cline-no">&nbsp;</span>
5284
5355
  <span class="cline-any cline-neutral">&nbsp;</span>
5285
5356
  <span class="cline-any cline-neutral">&nbsp;</span>
5286
5357
  <span class="cline-any cline-neutral">&nbsp;</span>
5287
5358
  <span class="cline-any cline-neutral">&nbsp;</span>
5288
- <span class="cline-any cline-no">&nbsp;</span>
5289
5359
  <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>
5293
5360
  <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>
5296
5361
  <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>
5301
5362
  <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>
5304
5363
  <span class="cline-any cline-neutral">&nbsp;</span>
5305
5364
  <span class="cline-any cline-neutral">&nbsp;</span>
5306
5365
  <span class="cline-any cline-neutral">&nbsp;</span>
5307
5366
  <span class="cline-any cline-neutral">&nbsp;</span>
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>
5312
5367
  <span class="cline-any cline-neutral">&nbsp;</span>
5313
5368
  <span class="cline-any cline-no">&nbsp;</span>
5314
- <span class="cline-any cline-no">&nbsp;</span>
5315
5369
  <span class="cline-any cline-neutral">&nbsp;</span>
5316
5370
  <span class="cline-any cline-neutral">&nbsp;</span>
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>
5321
5371
  <span class="cline-any cline-neutral">&nbsp;</span>
5322
5372
  <span class="cline-any cline-no">&nbsp;</span>
5323
- <span class="cline-any cline-no">&nbsp;</span>
5324
- <span class="cline-any cline-neutral">&nbsp;</span>
5325
5373
  <span class="cline-any cline-neutral">&nbsp;</span>
5326
5374
  <span class="cline-any cline-no">&nbsp;</span>
5327
5375
  <span class="cline-any cline-no">&nbsp;</span>
5328
- <span class="cline-any cline-no">&nbsp;</span>
5329
- <span class="cline-any cline-no">&nbsp;</span>
5376
+ <span class="cline-any cline-neutral">&nbsp;</span>
5330
5377
  <span class="cline-any cline-no">&nbsp;</span>
5331
5378
  <span class="cline-any cline-no">&nbsp;</span>
5332
5379
  <span class="cline-any cline-no">&nbsp;</span>
5333
5380
  <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
5381
  <span class="cline-any cline-no">&nbsp;</span>
5338
5382
  <span class="cline-any cline-no">&nbsp;</span>
5339
5383
  <span class="cline-any cline-no">&nbsp;</span>
5340
5384
  <span class="cline-any cline-no">&nbsp;</span>
5385
+ <span class="cline-any cline-neutral">&nbsp;</span>
5341
5386
  <span class="cline-any cline-no">&nbsp;</span>
5342
5387
  <span class="cline-any cline-no">&nbsp;</span>
5343
5388
  <span class="cline-any cline-neutral">&nbsp;</span>
5344
5389
  <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>
5351
5390
  <span class="cline-any cline-no">&nbsp;</span>
5352
5391
  <span class="cline-any cline-no">&nbsp;</span>
5353
5392
  <span class="cline-any cline-neutral">&nbsp;</span>
5354
5393
  <span class="cline-any cline-neutral">&nbsp;</span>
5355
5394
  <span class="cline-any cline-neutral">&nbsp;</span>
5356
5395
  <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>
5363
5396
  <span class="cline-any cline-neutral">&nbsp;</span>
5364
5397
  <span class="cline-any cline-neutral">&nbsp;</span>
5365
5398
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5367,15 +5400,12 @@
5367
5400
  <span class="cline-any cline-no">&nbsp;</span>
5368
5401
  <span class="cline-any cline-no">&nbsp;</span>
5369
5402
  <span class="cline-any cline-no">&nbsp;</span>
5370
- <span class="cline-any cline-neutral">&nbsp;</span>
5371
5403
  <span class="cline-any cline-no">&nbsp;</span>
5372
5404
  <span class="cline-any cline-no">&nbsp;</span>
5373
- <span class="cline-any cline-neutral">&nbsp;</span>
5374
- <span class="cline-any cline-no">&nbsp;</span>
5375
5405
  <span class="cline-any cline-no">&nbsp;</span>
5406
+ <span class="cline-any cline-neutral">&nbsp;</span>
5376
5407
  <span class="cline-any cline-no">&nbsp;</span>
5377
5408
  <span class="cline-any cline-no">&nbsp;</span>
5378
- <span class="cline-any cline-neutral">&nbsp;</span>
5379
5409
  <span class="cline-any cline-no">&nbsp;</span>
5380
5410
  <span class="cline-any cline-no">&nbsp;</span>
5381
5411
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5384,6 +5414,8 @@
5384
5414
  <span class="cline-any cline-no">&nbsp;</span>
5385
5415
  <span class="cline-any cline-no">&nbsp;</span>
5386
5416
  <span class="cline-any cline-no">&nbsp;</span>
5417
+ <span class="cline-any cline-neutral">&nbsp;</span>
5418
+ <span class="cline-any cline-neutral">&nbsp;</span>
5387
5419
  <span class="cline-any cline-no">&nbsp;</span>
5388
5420
  <span class="cline-any cline-no">&nbsp;</span>
5389
5421
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5398,19 +5430,12 @@
5398
5430
  <span class="cline-any cline-no">&nbsp;</span>
5399
5431
  <span class="cline-any cline-no">&nbsp;</span>
5400
5432
  <span class="cline-any cline-no">&nbsp;</span>
5401
- <span class="cline-any cline-no">&nbsp;</span>
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>
5405
5433
  <span class="cline-any cline-neutral">&nbsp;</span>
5406
5434
  <span class="cline-any cline-neutral">&nbsp;</span>
5407
5435
  <span class="cline-any cline-neutral">&nbsp;</span>
5408
5436
  <span class="cline-any cline-neutral">&nbsp;</span>
5409
5437
  <span class="cline-any cline-no">&nbsp;</span>
5410
5438
  <span class="cline-any cline-no">&nbsp;</span>
5411
- <span class="cline-any cline-no">&nbsp;</span>
5412
- <span class="cline-any cline-no">&nbsp;</span>
5413
- <span class="cline-any cline-no">&nbsp;</span>
5414
5439
  <span class="cline-any cline-neutral">&nbsp;</span>
5415
5440
  <span class="cline-any cline-no">&nbsp;</span>
5416
5441
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5418,27 +5443,12 @@
5418
5443
  <span class="cline-any cline-neutral">&nbsp;</span>
5419
5444
  <span class="cline-any cline-no">&nbsp;</span>
5420
5445
  <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>
5423
5446
  <span class="cline-any cline-neutral">&nbsp;</span>
5424
5447
  <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>
5427
5448
  <span class="cline-any cline-neutral">&nbsp;</span>
5428
5449
  <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
5450
  <span class="cline-any cline-no">&nbsp;</span>
5433
5451
  <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>
5437
- <span class="cline-any cline-no">&nbsp;</span>
5438
- <span class="cline-any cline-no">&nbsp;</span>
5439
- <span class="cline-any cline-neutral">&nbsp;</span>
5440
- <span class="cline-any cline-neutral">&nbsp;</span>
5441
- <span class="cline-any cline-neutral">&nbsp;</span>
5442
5452
  <span class="cline-any cline-neutral">&nbsp;</span>
5443
5453
  <span class="cline-any cline-neutral">&nbsp;</span>
5444
5454
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5446,84 +5456,52 @@
5446
5456
  <span class="cline-any cline-neutral">&nbsp;</span>
5447
5457
  <span class="cline-any cline-no">&nbsp;</span>
5448
5458
  <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>
5454
- <span class="cline-any cline-no">&nbsp;</span>
5455
- <span class="cline-any cline-no">&nbsp;</span>
5456
- <span class="cline-any cline-neutral">&nbsp;</span>
5457
- <span class="cline-any cline-neutral">&nbsp;</span>
5458
- <span class="cline-any cline-neutral">&nbsp;</span>
5459
- <span class="cline-any cline-neutral">&nbsp;</span>
5460
- <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-no">&nbsp;</span>
5464
- <span class="cline-any cline-no">&nbsp;</span>
5465
- <span class="cline-any cline-no">&nbsp;</span>
5466
5462
  <span class="cline-any cline-neutral">&nbsp;</span>
5467
- <span class="cline-any cline-no">&nbsp;</span>
5468
5463
  <span class="cline-any cline-neutral">&nbsp;</span>
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>
5472
5464
  <span class="cline-any cline-neutral">&nbsp;</span>
5473
- <span class="cline-any cline-no">&nbsp;</span>
5474
5465
  <span class="cline-any cline-neutral">&nbsp;</span>
5475
5466
  <span class="cline-any cline-neutral">&nbsp;</span>
5476
5467
  <span class="cline-any cline-no">&nbsp;</span>
5477
5468
  <span class="cline-any cline-neutral">&nbsp;</span>
5478
- <span class="cline-any cline-neutral">&nbsp;</span>
5479
- <span class="cline-any cline-neutral">&nbsp;</span>
5480
5469
  <span class="cline-any cline-no">&nbsp;</span>
5481
5470
  <span class="cline-any cline-no">&nbsp;</span>
5482
5471
  <span class="cline-any cline-neutral">&nbsp;</span>
5483
5472
  <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
5473
  <span class="cline-any cline-neutral">&nbsp;</span>
5487
5474
  <span class="cline-any cline-no">&nbsp;</span>
5488
- <span class="cline-any cline-no">&nbsp;</span>
5489
5475
  <span class="cline-any cline-neutral">&nbsp;</span>
5490
5476
  <span class="cline-any cline-no">&nbsp;</span>
5491
5477
  <span class="cline-any cline-neutral">&nbsp;</span>
5492
5478
  <span class="cline-any cline-neutral">&nbsp;</span>
5493
5479
  <span class="cline-any cline-neutral">&nbsp;</span>
5494
5480
  <span class="cline-any cline-neutral">&nbsp;</span>
5495
- <span class="cline-any cline-no">&nbsp;</span>
5496
5481
  <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>
5499
5482
  <span class="cline-any cline-neutral">&nbsp;</span>
5500
- <span class="cline-any cline-no">&nbsp;</span>
5501
5483
  <span class="cline-any cline-neutral">&nbsp;</span>
5502
5484
  <span class="cline-any cline-no">&nbsp;</span>
5503
- <span class="cline-any cline-neutral">&nbsp;</span>
5504
5485
  <span class="cline-any cline-no">&nbsp;</span>
5505
5486
  <span class="cline-any cline-neutral">&nbsp;</span>
5506
5487
  <span class="cline-any cline-neutral">&nbsp;</span>
5507
5488
  <span class="cline-any cline-neutral">&nbsp;</span>
5508
5489
  <span class="cline-any cline-neutral">&nbsp;</span>
5490
+ <span class="cline-any cline-no">&nbsp;</span>
5509
5491
  <span class="cline-any cline-neutral">&nbsp;</span>
5510
5492
  <span class="cline-any cline-neutral">&nbsp;</span>
5511
5493
  <span class="cline-any cline-neutral">&nbsp;</span>
5512
- <span class="cline-any cline-no">&nbsp;</span>
5513
- <span class="cline-any cline-no">&nbsp;</span>
5514
5494
  <span class="cline-any cline-neutral">&nbsp;</span>
5515
5495
  <span class="cline-any cline-neutral">&nbsp;</span>
5516
5496
  <span class="cline-any cline-neutral">&nbsp;</span>
5517
5497
  <span class="cline-any cline-neutral">&nbsp;</span>
5518
5498
  <span class="cline-any cline-no">&nbsp;</span>
5499
+ <span class="cline-any cline-no">&nbsp;</span>
5519
5500
  <span class="cline-any cline-neutral">&nbsp;</span>
5520
5501
  <span class="cline-any cline-neutral">&nbsp;</span>
5521
5502
  <span class="cline-any cline-neutral">&nbsp;</span>
5522
5503
  <span class="cline-any cline-neutral">&nbsp;</span>
5523
5504
  <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>
5527
5505
  <span class="cline-any cline-no">&nbsp;</span>
5528
5506
  <span class="cline-any cline-neutral">&nbsp;</span>
5529
5507
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5874,23 +5852,26 @@
5874
5852
  <span class="cline-any cline-neutral">&nbsp;</span>
5875
5853
  <span class="cline-any cline-neutral">&nbsp;</span>
5876
5854
  <span class="cline-any cline-neutral">&nbsp;</span>
5855
+ <span class="cline-any cline-no">&nbsp;</span>
5856
+ <span class="cline-any cline-no">&nbsp;</span>
5877
5857
  <span class="cline-any cline-neutral">&nbsp;</span>
5878
5858
  <span class="cline-any cline-neutral">&nbsp;</span>
5859
+ <span class="cline-any cline-no">&nbsp;</span>
5879
5860
  <span class="cline-any cline-neutral">&nbsp;</span>
5880
- <span class="cline-any cline-neutral">&nbsp;</span>
5881
- <span class="cline-any cline-yes">1x</span>
5861
+ <span class="cline-any cline-no">&nbsp;</span>
5882
5862
  <span class="cline-any cline-neutral">&nbsp;</span>
5883
5863
  <span class="cline-any cline-no">&nbsp;</span>
5884
5864
  <span class="cline-any cline-no">&nbsp;</span>
5885
- <span class="cline-any cline-neutral">&nbsp;</span>
5886
5865
  <span class="cline-any cline-no">&nbsp;</span>
5887
5866
  <span class="cline-any cline-neutral">&nbsp;</span>
5888
- <span class="cline-any cline-no">&nbsp;</span>
5867
+ <span class="cline-any cline-neutral">&nbsp;</span>
5889
5868
  <span class="cline-any cline-no">&nbsp;</span>
5890
5869
  <span class="cline-any cline-neutral">&nbsp;</span>
5891
5870
  <span class="cline-any cline-neutral">&nbsp;</span>
5892
5871
  <span class="cline-any cline-no">&nbsp;</span>
5893
5872
  <span class="cline-any cline-neutral">&nbsp;</span>
5873
+ <span class="cline-any cline-neutral">&nbsp;</span>
5874
+ <span class="cline-any cline-no">&nbsp;</span>
5894
5875
  <span class="cline-any cline-no">&nbsp;</span>
5895
5876
  <span class="cline-any cline-no">&nbsp;</span>
5896
5877
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5901,7 +5882,6 @@
5901
5882
  <span class="cline-any cline-neutral">&nbsp;</span>
5902
5883
  <span class="cline-any cline-neutral">&nbsp;</span>
5903
5884
  <span class="cline-any cline-neutral">&nbsp;</span>
5904
- <span class="cline-any cline-neutral">&nbsp;</span>
5905
5885
  <span class="cline-any cline-no">&nbsp;</span>
5906
5886
  <span class="cline-any cline-no">&nbsp;</span>
5907
5887
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5912,6 +5892,7 @@
5912
5892
  <span class="cline-any cline-neutral">&nbsp;</span>
5913
5893
  <span class="cline-any cline-neutral">&nbsp;</span>
5914
5894
  <span class="cline-any cline-neutral">&nbsp;</span>
5895
+ <span class="cline-any cline-neutral">&nbsp;</span>
5915
5896
  <span class="cline-any cline-no">&nbsp;</span>
5916
5897
  <span class="cline-any cline-no">&nbsp;</span>
5917
5898
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -5930,16 +5911,27 @@
5930
5911
  <span class="cline-any cline-neutral">&nbsp;</span>
5931
5912
  <span class="cline-any cline-neutral">&nbsp;</span>
5932
5913
  <span class="cline-any cline-no">&nbsp;</span>
5914
+ <span class="cline-any cline-no">&nbsp;</span>
5915
+ <span class="cline-any cline-neutral">&nbsp;</span>
5933
5916
  <span class="cline-any cline-neutral">&nbsp;</span>
5934
5917
  <span class="cline-any cline-no">&nbsp;</span>
5918
+ <span class="cline-any cline-neutral">&nbsp;</span>
5919
+ <span class="cline-any cline-neutral">&nbsp;</span>
5935
5920
  <span class="cline-any cline-no">&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
+ <span class="cline-any cline-neutral">&nbsp;</span>
5925
+ <span class="cline-any cline-neutral">&nbsp;</span>
5936
5926
  <span class="cline-any cline-no">&nbsp;</span>
5927
+ <span class="cline-any cline-neutral">&nbsp;</span>
5937
5928
  <span class="cline-any cline-no">&nbsp;</span>
5938
5929
  <span class="cline-any cline-neutral">&nbsp;</span>
5939
5930
  <span class="cline-any cline-neutral">&nbsp;</span>
5940
5931
  <span class="cline-any cline-no">&nbsp;</span>
5941
5932
  <span class="cline-any cline-neutral">&nbsp;</span>
5942
5933
  <span class="cline-any cline-neutral">&nbsp;</span>
5934
+ <span class="cline-any cline-neutral">&nbsp;</span>
5943
5935
  <span class="cline-any cline-no">&nbsp;</span>
5944
5936
  <span class="cline-any cline-no">&nbsp;</span>
5945
5937
  <span class="cline-any cline-no">&nbsp;</span>
@@ -5981,12 +5973,14 @@
5981
5973
  <span class="cline-any cline-neutral">&nbsp;</span>
5982
5974
  <span class="cline-any cline-no">&nbsp;</span>
5983
5975
  <span class="cline-any cline-neutral">&nbsp;</span>
5976
+ <span class="cline-any cline-neutral">&nbsp;</span>
5984
5977
  <span class="cline-any cline-no">&nbsp;</span>
5985
5978
  <span class="cline-any cline-neutral">&nbsp;</span>
5986
5979
  <span class="cline-any cline-neutral">&nbsp;</span>
5987
5980
  <span class="cline-any cline-no">&nbsp;</span>
5988
5981
  <span class="cline-any cline-neutral">&nbsp;</span>
5989
5982
  <span class="cline-any cline-neutral">&nbsp;</span>
5983
+ <span class="cline-any cline-neutral">&nbsp;</span>
5990
5984
  <span class="cline-any cline-no">&nbsp;</span>
5991
5985
  <span class="cline-any cline-no">&nbsp;</span>
5992
5986
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6042,6 +6036,7 @@
6042
6036
  <span class="cline-any cline-neutral">&nbsp;</span>
6043
6037
  <span class="cline-any cline-no">&nbsp;</span>
6044
6038
  <span class="cline-any cline-neutral">&nbsp;</span>
6039
+ <span class="cline-any cline-neutral">&nbsp;</span>
6045
6040
  <span class="cline-any cline-no">&nbsp;</span>
6046
6041
  <span class="cline-any cline-neutral">&nbsp;</span>
6047
6042
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6049,6 +6044,18 @@
6049
6044
  <span class="cline-any cline-neutral">&nbsp;</span>
6050
6045
  <span class="cline-any cline-no">&nbsp;</span>
6051
6046
  <span class="cline-any cline-neutral">&nbsp;</span>
6047
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
6055
+ <span class="cline-any cline-neutral">&nbsp;</span>
6056
+ <span class="cline-any cline-yes">1x</span>
6057
+ <span class="cline-any cline-no">&nbsp;</span>
6058
+ <span class="cline-any cline-neutral">&nbsp;</span>
6052
6059
  <span class="cline-any cline-neutral">&nbsp;</span>
6053
6060
  <span class="cline-any cline-neutral">&nbsp;</span>
6054
6061
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6462,6 +6469,28 @@
6462
6469
  <span class="cline-any cline-neutral">&nbsp;</span>
6463
6470
  <span class="cline-any cline-neutral">&nbsp;</span>
6464
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
+ <span class="cline-any cline-neutral">&nbsp;</span>
6493
+ <span class="cline-any cline-neutral">&nbsp;</span>
6465
6494
  <span class="cline-any cline-no">&nbsp;</span>
6466
6495
  <span class="cline-any cline-no">&nbsp;</span>
6467
6496
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6487,7 +6516,10 @@
6487
6516
  <span class="cline-any cline-neutral">&nbsp;</span>
6488
6517
  <span class="cline-any cline-neutral">&nbsp;</span>
6489
6518
  <span class="cline-any cline-no">&nbsp;</span>
6519
+ <span class="cline-any cline-neutral">&nbsp;</span>
6520
+ <span class="cline-any cline-no">&nbsp;</span>
6490
6521
  <span class="cline-any cline-no">&nbsp;</span>
6522
+ <span class="cline-any cline-neutral">&nbsp;</span>
6491
6523
  <span class="cline-any cline-no">&nbsp;</span>
6492
6524
  <span class="cline-any cline-no">&nbsp;</span>
6493
6525
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6596,6 +6628,20 @@
6596
6628
  <span class="cline-any cline-no">&nbsp;</span>
6597
6629
  <span class="cline-any cline-no">&nbsp;</span>
6598
6630
  <span class="cline-any cline-no">&nbsp;</span>
6631
+ <span class="cline-any cline-no">&nbsp;</span>
6632
+ <span class="cline-any cline-no">&nbsp;</span>
6633
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
6637
+ <span class="cline-any cline-neutral">&nbsp;</span>
6638
+ <span class="cline-any cline-no">&nbsp;</span>
6639
+ <span class="cline-any cline-neutral">&nbsp;</span>
6640
+ <span class="cline-any cline-neutral">&nbsp;</span>
6641
+ <span class="cline-any cline-no">&nbsp;</span>
6642
+ <span class="cline-any cline-no">&nbsp;</span>
6643
+ <span class="cline-any cline-no">&nbsp;</span>
6644
+ <span class="cline-any cline-no">&nbsp;</span>
6599
6645
  <span class="cline-any cline-neutral">&nbsp;</span>
6600
6646
  <span class="cline-any cline-neutral">&nbsp;</span>
6601
6647
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6646,6 +6692,7 @@
6646
6692
  <span class="cline-any cline-no">&nbsp;</span>
6647
6693
  <span class="cline-any cline-neutral">&nbsp;</span>
6648
6694
  <span class="cline-any cline-neutral">&nbsp;</span>
6695
+ <span class="cline-any cline-neutral">&nbsp;</span>
6649
6696
  <span class="cline-any cline-no">&nbsp;</span>
6650
6697
  <span class="cline-any cline-no">&nbsp;</span>
6651
6698
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6949,6 +6996,29 @@
6949
6996
  <span class="cline-any cline-neutral">&nbsp;</span>
6950
6997
  <span class="cline-any cline-no">&nbsp;</span>
6951
6998
  <span class="cline-any cline-no">&nbsp;</span>
6999
+ <span class="cline-any cline-neutral">&nbsp;</span>
7000
+ <span class="cline-any cline-no">&nbsp;</span>
7001
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
7005
+ <span class="cline-any cline-neutral">&nbsp;</span>
7006
+ <span class="cline-any cline-no">&nbsp;</span>
7007
+ <span class="cline-any cline-neutral">&nbsp;</span>
7008
+ <span class="cline-any cline-neutral">&nbsp;</span>
7009
+ <span class="cline-any cline-no">&nbsp;</span>
7010
+ <span class="cline-any cline-no">&nbsp;</span>
7011
+ <span class="cline-any cline-neutral">&nbsp;</span>
7012
+ <span class="cline-any cline-no">&nbsp;</span>
7013
+ <span class="cline-any cline-no">&nbsp;</span>
7014
+ <span class="cline-any cline-no">&nbsp;</span>
7015
+ <span class="cline-any cline-no">&nbsp;</span>
7016
+ <span class="cline-any cline-no">&nbsp;</span>
7017
+ <span class="cline-any cline-no">&nbsp;</span>
7018
+ <span class="cline-any cline-neutral">&nbsp;</span>
7019
+ <span class="cline-any cline-neutral">&nbsp;</span>
7020
+ <span class="cline-any cline-neutral">&nbsp;</span>
7021
+ <span class="cline-any cline-neutral">&nbsp;</span>
6952
7022
  <span class="cline-any cline-no">&nbsp;</span>
6953
7023
  <span class="cline-any cline-no">&nbsp;</span>
6954
7024
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -6956,36 +7026,99 @@
6956
7026
  <span class="cline-any cline-neutral">&nbsp;</span>
6957
7027
  <span class="cline-any cline-neutral">&nbsp;</span>
6958
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-no">&nbsp;</span>
7036
+ <span class="cline-any cline-no">&nbsp;</span>
6959
7037
  <span class="cline-any cline-neutral">&nbsp;</span>
6960
7038
  <span class="cline-any cline-no">&nbsp;</span>
6961
7039
  <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
7043
+ <span class="cline-any cline-no">&nbsp;</span>
6962
7044
  <span class="cline-any cline-neutral">&nbsp;</span>
6963
7045
  <span class="cline-any cline-neutral">&nbsp;</span>
6964
7046
  <span class="cline-any cline-neutral">&nbsp;</span>
6965
7047
  <span class="cline-any cline-neutral">&nbsp;</span>
7048
+ <span class="cline-any cline-no">&nbsp;</span>
7049
+ <span class="cline-any cline-no">&nbsp;</span>
6966
7050
  <span class="cline-any cline-neutral">&nbsp;</span>
6967
7051
  <span class="cline-any cline-neutral">&nbsp;</span>
6968
7052
  <span class="cline-any cline-neutral">&nbsp;</span>
6969
7053
  <span class="cline-any cline-neutral">&nbsp;</span>
7054
+ <span class="cline-any cline-no">&nbsp;</span>
7055
+ <span class="cline-any cline-no">&nbsp;</span>
7056
+ <span class="cline-any cline-neutral">&nbsp;</span>
7057
+ <span class="cline-any cline-neutral">&nbsp;</span>
6970
7058
  <span class="cline-any cline-neutral">&nbsp;</span>
6971
7059
  <span class="cline-any cline-neutral">&nbsp;</span>
6972
7060
  <span class="cline-any cline-no">&nbsp;</span>
7061
+ <span class="cline-any cline-no">&nbsp;</span>
6973
7062
  <span class="cline-any cline-neutral">&nbsp;</span>
6974
7063
  <span class="cline-any cline-no">&nbsp;</span>
7064
+ <span class="cline-any cline-neutral">&nbsp;</span>
6975
7065
  <span class="cline-any cline-no">&nbsp;</span>
6976
7066
  <span class="cline-any cline-no">&nbsp;</span>
6977
7067
  <span class="cline-any cline-no">&nbsp;</span>
6978
7068
  <span class="cline-any cline-no">&nbsp;</span>
6979
7069
  <span class="cline-any cline-no">&nbsp;</span>
7070
+ <span class="cline-any cline-no">&nbsp;</span>
7071
+ <span class="cline-any cline-no">&nbsp;</span>
7072
+ <span class="cline-any cline-neutral">&nbsp;</span>
7073
+ <span class="cline-any cline-neutral">&nbsp;</span>
7074
+ <span class="cline-any cline-neutral">&nbsp;</span>
7075
+ <span class="cline-any cline-neutral">&nbsp;</span>
7076
+ <span class="cline-any cline-no">&nbsp;</span>
7077
+ <span class="cline-any cline-neutral">&nbsp;</span>
7078
+ <span class="cline-any cline-neutral">&nbsp;</span>
7079
+ <span class="cline-any cline-neutral">&nbsp;</span>
7080
+ <span class="cline-any cline-no">&nbsp;</span>
7081
+ <span class="cline-any cline-no">&nbsp;</span>
7082
+ <span class="cline-any cline-no">&nbsp;</span>
7083
+ <span class="cline-any cline-no">&nbsp;</span>
7084
+ <span class="cline-any cline-no">&nbsp;</span>
7085
+ <span class="cline-any cline-no">&nbsp;</span>
7086
+ <span class="cline-any cline-no">&nbsp;</span>
7087
+ <span class="cline-any cline-no">&nbsp;</span>
7088
+ <span class="cline-any cline-neutral">&nbsp;</span>
7089
+ <span class="cline-any cline-neutral">&nbsp;</span>
7090
+ <span class="cline-any cline-neutral">&nbsp;</span>
7091
+ <span class="cline-any cline-neutral">&nbsp;</span>
7092
+ <span class="cline-any cline-no">&nbsp;</span>
7093
+ <span class="cline-any cline-neutral">&nbsp;</span>
7094
+ <span class="cline-any cline-neutral">&nbsp;</span>
7095
+ <span class="cline-any cline-neutral">&nbsp;</span>
7096
+ <span class="cline-any cline-no">&nbsp;</span>
6980
7097
  <span class="cline-any cline-neutral">&nbsp;</span>
6981
7098
  <span class="cline-any cline-neutral">&nbsp;</span>
7099
+ <span class="cline-any cline-no">&nbsp;</span>
7100
+ <span class="cline-any cline-no">&nbsp;</span>
7101
+ <span class="cline-any cline-no">&nbsp;</span>
6982
7102
  <span class="cline-any cline-neutral">&nbsp;</span>
6983
7103
  <span class="cline-any cline-neutral">&nbsp;</span>
6984
7104
  <span class="cline-any cline-no">&nbsp;</span>
6985
7105
  <span class="cline-any cline-no">&nbsp;</span>
7106
+ <span class="cline-any cline-no">&nbsp;</span>
7107
+ <span class="cline-any cline-no">&nbsp;</span>
7108
+ <span class="cline-any cline-no">&nbsp;</span>
7109
+ <span class="cline-any cline-no">&nbsp;</span>
7110
+ <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
+ <span class="cline-any cline-no">&nbsp;</span>
7114
+ <span class="cline-any cline-no">&nbsp;</span>
6986
7115
  <span class="cline-any cline-neutral">&nbsp;</span>
6987
7116
  <span class="cline-any cline-neutral">&nbsp;</span>
6988
7117
  <span class="cline-any cline-neutral">&nbsp;</span>
7118
+ <span class="cline-any cline-no">&nbsp;</span>
7119
+ <span class="cline-any cline-no">&nbsp;</span>
7120
+ <span class="cline-any cline-neutral">&nbsp;</span>
7121
+ <span class="cline-any cline-neutral">&nbsp;</span>
6989
7122
  <span class="cline-any cline-neutral">&nbsp;</span>
6990
7123
  <span class="cline-any cline-no">&nbsp;</span>
6991
7124
  <span class="cline-any cline-no">&nbsp;</span>
@@ -6994,23 +7127,42 @@
6994
7127
  <span class="cline-any cline-no">&nbsp;</span>
6995
7128
  <span class="cline-any cline-no">&nbsp;</span>
6996
7129
  <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
7133
+ <span class="cline-any cline-neutral">&nbsp;</span>
7134
+ <span class="cline-any cline-no">&nbsp;</span>
7135
+ <span class="cline-any cline-no">&nbsp;</span>
7136
+ <span class="cline-any cline-neutral">&nbsp;</span>
7137
+ <span class="cline-any cline-no">&nbsp;</span>
7138
+ <span class="cline-any cline-no">&nbsp;</span>
7139
+ <span class="cline-any cline-neutral">&nbsp;</span>
7140
+ <span class="cline-any cline-neutral">&nbsp;</span>
7141
+ <span class="cline-any cline-neutral">&nbsp;</span>
7142
+ <span class="cline-any cline-no">&nbsp;</span>
6997
7143
  <span class="cline-any cline-no">&nbsp;</span>
7144
+ <span class="cline-any cline-neutral">&nbsp;</span>
7145
+ <span class="cline-any cline-neutral">&nbsp;</span>
7146
+ <span class="cline-any cline-neutral">&nbsp;</span>
7147
+ <span class="cline-any cline-neutral">&nbsp;</span>
6998
7148
  <span class="cline-any cline-no">&nbsp;</span>
6999
7149
  <span class="cline-any cline-neutral">&nbsp;</span>
7150
+ <span class="cline-any cline-neutral">&nbsp;</span>
7151
+ <span class="cline-any cline-neutral">&nbsp;</span>
7152
+ <span class="cline-any cline-no">&nbsp;</span>
7153
+ <span class="cline-any cline-neutral">&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>
7000
7157
  <span class="cline-any cline-no">&nbsp;</span>
7001
- <span class="cline-any cline-neutral">&nbsp;</span>
7002
7158
  <span class="cline-any cline-no">&nbsp;</span>
7003
7159
  <span class="cline-any cline-no">&nbsp;</span>
7004
7160
  <span class="cline-any cline-no">&nbsp;</span>
7005
7161
  <span class="cline-any cline-no">&nbsp;</span>
7006
7162
  <span class="cline-any cline-neutral">&nbsp;</span>
7007
- <span class="cline-any cline-neutral">&nbsp;</span>
7008
- <span class="cline-any cline-neutral">&nbsp;</span>
7009
- <span class="cline-any cline-neutral">&nbsp;</span>
7010
7163
  <span class="cline-any cline-no">&nbsp;</span>
7011
7164
  <span class="cline-any cline-no">&nbsp;</span>
7012
- <span class="cline-any cline-neutral">&nbsp;</span>
7013
- <span class="cline-any cline-neutral">&nbsp;</span>
7165
+ <span class="cline-any cline-no">&nbsp;</span>
7014
7166
  <span class="cline-any cline-neutral">&nbsp;</span>
7015
7167
  <span class="cline-any cline-neutral">&nbsp;</span>
7016
7168
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7019,9 +7171,10 @@
7019
7171
  <span class="cline-any cline-neutral">&nbsp;</span>
7020
7172
  <span class="cline-any cline-neutral">&nbsp;</span>
7021
7173
  <span class="cline-any cline-neutral">&nbsp;</span>
7174
+ <span class="cline-any cline-neutral">&nbsp;</span>
7175
+ <span class="cline-any cline-no">&nbsp;</span>
7022
7176
  <span class="cline-any cline-no">&nbsp;</span>
7023
7177
  <span class="cline-any cline-no">&nbsp;</span>
7024
- <span class="cline-any cline-neutral">&nbsp;</span>
7025
7178
  <span class="cline-any cline-no">&nbsp;</span>
7026
7179
  <span class="cline-any cline-neutral">&nbsp;</span>
7027
7180
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7030,10 +7183,11 @@
7030
7183
  <span class="cline-any cline-no">&nbsp;</span>
7031
7184
  <span class="cline-any cline-no">&nbsp;</span>
7032
7185
  <span class="cline-any cline-no">&nbsp;</span>
7186
+ <span class="cline-any cline-no">&nbsp;</span>
7033
7187
  <span class="cline-any cline-neutral">&nbsp;</span>
7034
7188
  <span class="cline-any cline-neutral">&nbsp;</span>
7035
- <span class="cline-any cline-no">&nbsp;</span>
7036
7189
  <span class="cline-any cline-neutral">&nbsp;</span>
7190
+ <span class="cline-any cline-no">&nbsp;</span>
7037
7191
  <span class="cline-any cline-neutral">&nbsp;</span>
7038
7192
  <span class="cline-any cline-neutral">&nbsp;</span>
7039
7193
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7289,6 +7443,7 @@
7289
7443
  <span class="cline-any cline-neutral">&nbsp;</span>
7290
7444
  <span class="cline-any cline-neutral">&nbsp;</span>
7291
7445
  <span class="cline-any cline-neutral">&nbsp;</span>
7446
+ <span class="cline-any cline-neutral">&nbsp;</span>
7292
7447
  <span class="cline-any cline-no">&nbsp;</span>
7293
7448
  <span class="cline-any cline-no">&nbsp;</span>
7294
7449
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7320,7 +7475,6 @@
7320
7475
  <span class="cline-any cline-neutral">&nbsp;</span>
7321
7476
  <span class="cline-any cline-no">&nbsp;</span>
7322
7477
  <span class="cline-any cline-neutral">&nbsp;</span>
7323
- <span class="cline-any cline-no">&nbsp;</span>
7324
7478
  <span class="cline-any cline-neutral">&nbsp;</span>
7325
7479
  <span class="cline-any cline-neutral">&nbsp;</span>
7326
7480
  <span class="cline-any cline-no">&nbsp;</span>
@@ -7354,10 +7508,6 @@
7354
7508
  <span class="cline-any cline-no">&nbsp;</span>
7355
7509
  <span class="cline-any cline-no">&nbsp;</span>
7356
7510
  <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>
7361
7511
  <span class="cline-any cline-no">&nbsp;</span>
7362
7512
  <span class="cline-any cline-no">&nbsp;</span>
7363
7513
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7368,17 +7518,22 @@
7368
7518
  <span class="cline-any cline-neutral">&nbsp;</span>
7369
7519
  <span class="cline-any cline-neutral">&nbsp;</span>
7370
7520
  <span class="cline-any cline-neutral">&nbsp;</span>
7521
+ <span class="cline-any cline-no">&nbsp;</span>
7371
7522
  <span class="cline-any cline-neutral">&nbsp;</span>
7372
7523
  <span class="cline-any cline-neutral">&nbsp;</span>
7373
7524
  <span class="cline-any cline-no">&nbsp;</span>
7374
7525
  <span class="cline-any cline-neutral">&nbsp;</span>
7375
7526
  <span class="cline-any cline-no">&nbsp;</span>
7527
+ <span class="cline-any cline-no">&nbsp;</span>
7376
7528
  <span class="cline-any cline-neutral">&nbsp;</span>
7377
7529
  <span class="cline-any cline-neutral">&nbsp;</span>
7378
7530
  <span class="cline-any cline-no">&nbsp;</span>
7379
7531
  <span class="cline-any cline-neutral">&nbsp;</span>
7532
+ <span class="cline-any cline-neutral">&nbsp;</span>
7380
7533
  <span class="cline-any cline-no">&nbsp;</span>
7381
7534
  <span class="cline-any cline-no">&nbsp;</span>
7535
+ <span class="cline-any cline-neutral">&nbsp;</span>
7536
+ <span class="cline-any cline-neutral">&nbsp;</span>
7382
7537
  <span class="cline-any cline-no">&nbsp;</span>
7383
7538
  <span class="cline-any cline-neutral">&nbsp;</span>
7384
7539
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7390,9 +7545,12 @@
7390
7545
  <span class="cline-any cline-neutral">&nbsp;</span>
7391
7546
  <span class="cline-any cline-neutral">&nbsp;</span>
7392
7547
  <span class="cline-any cline-neutral">&nbsp;</span>
7548
+ <span class="cline-any cline-neutral">&nbsp;</span>
7549
+ <span class="cline-any cline-neutral">&nbsp;</span>
7393
7550
  <span class="cline-any cline-no">&nbsp;</span>
7394
7551
  <span class="cline-any cline-neutral">&nbsp;</span>
7395
7552
  <span class="cline-any cline-no">&nbsp;</span>
7553
+ <span class="cline-any cline-neutral">&nbsp;</span>
7396
7554
  <span class="cline-any cline-no">&nbsp;</span>
7397
7555
  <span class="cline-any cline-neutral">&nbsp;</span>
7398
7556
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7451,11 +7609,26 @@
7451
7609
  <span class="cline-any cline-neutral">&nbsp;</span>
7452
7610
  <span class="cline-any cline-neutral">&nbsp;</span>
7453
7611
  <span class="cline-any cline-no">&nbsp;</span>
7612
+ <span class="cline-any cline-neutral">&nbsp;</span>
7613
+ <span class="cline-any cline-neutral">&nbsp;</span>
7614
+ <span class="cline-any cline-no">&nbsp;</span>
7615
+ <span class="cline-any cline-no">&nbsp;</span>
7616
+ <span class="cline-any cline-no">&nbsp;</span>
7617
+ <span class="cline-any cline-neutral">&nbsp;</span>
7454
7618
  <span class="cline-any cline-no">&nbsp;</span>
7455
7619
  <span class="cline-any cline-no">&nbsp;</span>
7456
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>
7457
7623
  <span class="cline-any cline-no">&nbsp;</span>
7458
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
+ <span class="cline-any cline-neutral">&nbsp;</span>
7628
+ <span class="cline-any cline-neutral">&nbsp;</span>
7629
+ <span class="cline-any cline-neutral">&nbsp;</span>
7630
+ <span class="cline-any cline-neutral">&nbsp;</span>
7631
+ <span class="cline-any cline-neutral">&nbsp;</span>
7459
7632
  <span class="cline-any cline-no">&nbsp;</span>
7460
7633
  <span class="cline-any cline-neutral">&nbsp;</span>
7461
7634
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7602,6 +7775,7 @@
7602
7775
  <span class="cline-any cline-neutral">&nbsp;</span>
7603
7776
  <span class="cline-any cline-neutral">&nbsp;</span>
7604
7777
  <span class="cline-any cline-neutral">&nbsp;</span>
7778
+ <span class="cline-any cline-neutral">&nbsp;</span>
7605
7779
  <span class="cline-any cline-no">&nbsp;</span>
7606
7780
  <span class="cline-any cline-neutral">&nbsp;</span>
7607
7781
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -7756,6 +7930,16 @@
7756
7930
  <span class="cline-any cline-no">&nbsp;</span>
7757
7931
  <span class="cline-any cline-no">&nbsp;</span>
7758
7932
  <span class="cline-any cline-no">&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
+ <span class="cline-any cline-neutral">&nbsp;</span>
7940
+ <span class="cline-any cline-neutral">&nbsp;</span>
7941
+ <span class="cline-any cline-neutral">&nbsp;</span>
7942
+ <span class="cline-any cline-neutral">&nbsp;</span>
7759
7943
  <span class="cline-any cline-no">&nbsp;</span>
7760
7944
  <span class="cline-any cline-no">&nbsp;</span>
7761
7945
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8554,7 +8738,6 @@
8554
8738
  <span class="cline-any cline-neutral">&nbsp;</span>
8555
8739
  <span class="cline-any cline-neutral">&nbsp;</span>
8556
8740
  <span class="cline-any cline-neutral">&nbsp;</span>
8557
- <span class="cline-any cline-neutral">&nbsp;</span>
8558
8741
  <span class="cline-any cline-no">&nbsp;</span>
8559
8742
  <span class="cline-any cline-neutral">&nbsp;</span>
8560
8743
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -8672,8 +8855,7 @@
8672
8855
  <span class="cline-any cline-neutral">&nbsp;</span>
8673
8856
  <span class="cline-any cline-neutral">&nbsp;</span>
8674
8857
  <span class="cline-any cline-neutral">&nbsp;</span>
8675
- <span class="cline-any cline-neutral">&nbsp;</span>
8676
- <span class="cline-any cline-neutral">&nbsp;</span>
8858
+ <span class="cline-any cline-no">&nbsp;</span>
8677
8859
  <span class="cline-any cline-no">&nbsp;</span>
8678
8860
  <span class="cline-any cline-neutral">&nbsp;</span>
8679
8861
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8682,8 +8864,6 @@
8682
8864
  <span class="cline-any cline-no">&nbsp;</span>
8683
8865
  <span class="cline-any cline-neutral">&nbsp;</span>
8684
8866
  <span class="cline-any cline-no">&nbsp;</span>
8685
- <span class="cline-any cline-neutral">&nbsp;</span>
8686
- <span class="cline-any cline-neutral">&nbsp;</span>
8687
8867
  <span class="cline-any cline-no">&nbsp;</span>
8688
8868
  <span class="cline-any cline-neutral">&nbsp;</span>
8689
8869
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8691,6 +8871,8 @@
8691
8871
  <span class="cline-any cline-neutral">&nbsp;</span>
8692
8872
  <span class="cline-any cline-no">&nbsp;</span>
8693
8873
  <span class="cline-any cline-no">&nbsp;</span>
8874
+ <span class="cline-any cline-neutral">&nbsp;</span>
8875
+ <span class="cline-any cline-no">&nbsp;</span>
8694
8876
  <span class="cline-any cline-no">&nbsp;</span>
8695
8877
  <span class="cline-any cline-no">&nbsp;</span>
8696
8878
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -8749,6 +8931,8 @@
8749
8931
  <span class="cline-any cline-no">&nbsp;</span>
8750
8932
  <span class="cline-any cline-neutral">&nbsp;</span>
8751
8933
  <span class="cline-any cline-neutral">&nbsp;</span>
8934
+ <span class="cline-any cline-no">&nbsp;</span>
8935
+ <span class="cline-any cline-neutral">&nbsp;</span>
8752
8936
  <span class="cline-any cline-neutral">&nbsp;</span>
8753
8937
  <span class="cline-any cline-neutral">&nbsp;</span>
8754
8938
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8813,13 +8997,8 @@
8813
8997
  <span class="cline-any cline-neutral">&nbsp;</span>
8814
8998
  <span class="cline-any cline-no">&nbsp;</span>
8815
8999
  <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>
8819
9000
  <span class="cline-any cline-no">&nbsp;</span>
8820
9001
  <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>
8823
9002
  <span class="cline-any cline-no">&nbsp;</span>
8824
9003
  <span class="cline-any cline-no">&nbsp;</span>
8825
9004
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8828,18 +9007,13 @@
8828
9007
  <span class="cline-any cline-no">&nbsp;</span>
8829
9008
  <span class="cline-any cline-neutral">&nbsp;</span>
8830
9009
  <span class="cline-any cline-no">&nbsp;</span>
8831
- <span class="cline-any cline-neutral">&nbsp;</span>
8832
9010
  <span class="cline-any cline-no">&nbsp;</span>
8833
9011
  <span class="cline-any cline-no">&nbsp;</span>
8834
9012
  <span class="cline-any cline-neutral">&nbsp;</span>
8835
9013
  <span class="cline-any cline-no">&nbsp;</span>
8836
9014
  <span class="cline-any cline-neutral">&nbsp;</span>
8837
9015
  <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>
8840
9016
  <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>
8843
9017
  <span class="cline-any cline-no">&nbsp;</span>
8844
9018
  <span class="cline-any cline-no">&nbsp;</span>
8845
9019
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8859,11 +9033,7 @@
8859
9033
  <span class="cline-any cline-neutral">&nbsp;</span>
8860
9034
  <span class="cline-any cline-neutral">&nbsp;</span>
8861
9035
  <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>
8864
9036
  <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>
8867
9037
  <span class="cline-any cline-no">&nbsp;</span>
8868
9038
  <span class="cline-any cline-neutral">&nbsp;</span>
8869
9039
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8896,6 +9066,11 @@
8896
9066
  <span class="cline-any cline-neutral">&nbsp;</span>
8897
9067
  <span class="cline-any cline-neutral">&nbsp;</span>
8898
9068
  <span class="cline-any cline-neutral">&nbsp;</span>
9069
+ <span class="cline-any cline-no">&nbsp;</span>
9070
+ <span class="cline-any cline-neutral">&nbsp;</span>
9071
+ <span class="cline-any cline-neutral">&nbsp;</span>
9072
+ <span class="cline-any cline-neutral">&nbsp;</span>
9073
+ <span class="cline-any cline-neutral">&nbsp;</span>
8899
9074
  <span class="cline-any cline-neutral">&nbsp;</span>
8900
9075
  <span class="cline-any cline-neutral">&nbsp;</span>
8901
9076
  <span class="cline-any cline-no">&nbsp;</span>
@@ -8936,20 +9111,27 @@
8936
9111
  <span class="cline-any cline-neutral">&nbsp;</span>
8937
9112
  <span class="cline-any cline-neutral">&nbsp;</span>
8938
9113
  <span class="cline-any cline-neutral">&nbsp;</span>
8939
- <span class="cline-any cline-yes">1x</span>
8940
9114
  <span class="cline-any cline-no">&nbsp;</span>
8941
9115
  <span class="cline-any cline-no">&nbsp;</span>
8942
9116
  <span class="cline-any cline-no">&nbsp;</span>
9117
+ <span class="cline-any cline-neutral">&nbsp;</span>
8943
9118
  <span class="cline-any cline-no">&nbsp;</span>
8944
9119
  <span class="cline-any cline-no">&nbsp;</span>
9120
+ <span class="cline-any cline-neutral">&nbsp;</span>
8945
9121
  <span class="cline-any cline-no">&nbsp;</span>
8946
9122
  <span class="cline-any cline-no">&nbsp;</span>
9123
+ <span class="cline-any cline-neutral">&nbsp;</span>
9124
+ <span class="cline-any cline-neutral">&nbsp;</span>
8947
9125
  <span class="cline-any cline-no">&nbsp;</span>
8948
9126
  <span class="cline-any cline-no">&nbsp;</span>
8949
9127
  <span class="cline-any cline-neutral">&nbsp;</span>
8950
9128
  <span class="cline-any cline-no">&nbsp;</span>
9129
+ <span class="cline-any cline-no">&nbsp;</span>
8951
9130
  <span class="cline-any cline-neutral">&nbsp;</span>
8952
9131
  <span class="cline-any cline-neutral">&nbsp;</span>
9132
+ <span class="cline-any cline-no">&nbsp;</span>
9133
+ <span class="cline-any cline-no">&nbsp;</span>
9134
+ <span class="cline-any cline-neutral">&nbsp;</span>
8953
9135
  <span class="cline-any cline-neutral">&nbsp;</span>
8954
9136
  <span class="cline-any cline-neutral">&nbsp;</span>
8955
9137
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9072,33 +9254,16 @@
9072
9254
  <span class="cline-any cline-neutral">&nbsp;</span>
9073
9255
  <span class="cline-any cline-no">&nbsp;</span>
9074
9256
  <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>
9085
9257
  <span class="cline-any cline-no">&nbsp;</span>
9086
9258
  <span class="cline-any cline-no">&nbsp;</span>
9087
9259
  <span class="cline-any cline-neutral">&nbsp;</span>
9088
9260
  <span class="cline-any cline-no">&nbsp;</span>
9089
- <span class="cline-any cline-neutral">&nbsp;</span>
9090
9261
  <span class="cline-any cline-no">&nbsp;</span>
9091
9262
  <span class="cline-any cline-no">&nbsp;</span>
9092
9263
  <span class="cline-any cline-neutral">&nbsp;</span>
9093
9264
  <span class="cline-any cline-neutral">&nbsp;</span>
9094
9265
  <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>
9098
9266
  <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>
9102
9267
  <span class="cline-any cline-neutral">&nbsp;</span>
9103
9268
  <span class="cline-any cline-neutral">&nbsp;</span>
9104
9269
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9130,6 +9295,7 @@
9130
9295
  <span class="cline-any cline-neutral">&nbsp;</span>
9131
9296
  <span class="cline-any cline-neutral">&nbsp;</span>
9132
9297
  <span class="cline-any cline-neutral">&nbsp;</span>
9298
+ <span class="cline-any cline-no">&nbsp;</span>
9133
9299
  <span class="cline-any cline-neutral">&nbsp;</span>
9134
9300
  <span class="cline-any cline-neutral">&nbsp;</span>
9135
9301
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9147,6 +9313,7 @@
9147
9313
  <span class="cline-any cline-no">&nbsp;</span>
9148
9314
  <span class="cline-any cline-no">&nbsp;</span>
9149
9315
  <span class="cline-any cline-no">&nbsp;</span>
9316
+ <span class="cline-any cline-no">&nbsp;</span>
9150
9317
  <span class="cline-any cline-neutral">&nbsp;</span>
9151
9318
  <span class="cline-any cline-neutral">&nbsp;</span>
9152
9319
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9478,7 +9645,6 @@
9478
9645
  <span class="cline-any cline-no">&nbsp;</span>
9479
9646
  <span class="cline-any cline-no">&nbsp;</span>
9480
9647
  <span class="cline-any cline-no">&nbsp;</span>
9481
- <span class="cline-any cline-no">&nbsp;</span>
9482
9648
  <span class="cline-any cline-neutral">&nbsp;</span>
9483
9649
  <span class="cline-any cline-no">&nbsp;</span>
9484
9650
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9537,10 +9703,14 @@
9537
9703
  <span class="cline-any cline-no">&nbsp;</span>
9538
9704
  <span class="cline-any cline-neutral">&nbsp;</span>
9539
9705
  <span class="cline-any cline-neutral">&nbsp;</span>
9706
+ <span class="cline-any cline-neutral">&nbsp;</span>
9540
9707
  <span class="cline-any cline-no">&nbsp;</span>
9541
9708
  <span class="cline-any cline-no">&nbsp;</span>
9542
9709
  <span class="cline-any cline-neutral">&nbsp;</span>
9710
+ <span class="cline-any cline-neutral">&nbsp;</span>
9711
+ <span class="cline-any cline-no">&nbsp;</span>
9543
9712
  <span class="cline-any cline-no">&nbsp;</span>
9713
+ <span class="cline-any cline-neutral">&nbsp;</span>
9544
9714
  <span class="cline-any cline-no">&nbsp;</span>
9545
9715
  <span class="cline-any cline-no">&nbsp;</span>
9546
9716
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9552,6 +9722,7 @@
9552
9722
  <span class="cline-any cline-no">&nbsp;</span>
9553
9723
  <span class="cline-any cline-neutral">&nbsp;</span>
9554
9724
  <span class="cline-any cline-neutral">&nbsp;</span>
9725
+ <span class="cline-any cline-neutral">&nbsp;</span>
9555
9726
  <span class="cline-any cline-no">&nbsp;</span>
9556
9727
  <span class="cline-any cline-neutral">&nbsp;</span>
9557
9728
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -9560,6 +9731,7 @@
9560
9731
  <span class="cline-any cline-neutral">&nbsp;</span>
9561
9732
  <span class="cline-any cline-neutral">&nbsp;</span>
9562
9733
  <span class="cline-any cline-no">&nbsp;</span>
9734
+ <span class="cline-any cline-neutral">&nbsp;</span>
9563
9735
  <span class="cline-any cline-no">&nbsp;</span>
9564
9736
  <span class="cline-any cline-no">&nbsp;</span>
9565
9737
  <span class="cline-any cline-no">&nbsp;</span>
@@ -9689,13 +9861,14 @@ import {
9689
9861
  AuthLogicForCallInterface,
9690
9862
  Connector,
9691
9863
  AuthInterface,
9692
- SynatxNode,
9693
9864
  Connection,
9694
9865
  TriggerLauncher,
9695
9866
  CallConnector,
9867
+ MetadataType,
9868
+ SyntaxNode,
9696
9869
  } from '../concepts';
9697
9870
  &nbsp;
9698
- import { lsp2tspNumber, SourceMap, SourceMapItem, isSameRange } from '../translator';
9871
+ import { lsp2tspNumber, SourceMap, SourceMapItem, isSameRange, Range } from '../translator';
9699
9872
  import axios from '../service/storage';
9700
9873
  import { translateDiagnosticMessage, naslNodeTranslateMessage, MinRange, checkAStructure_ } from './translator';
9701
9874
  import { EventPayload, invokeCommand, registerCommand } from '../common';
@@ -9710,7 +9883,6 @@ import { EventEmitter } from '../common/EventEmitter';
9710
9883
  &nbsp;
9711
9884
  import { traverse } from '../utils';
9712
9885
  import { withQueueExecute } from '../decorators';
9713
- &nbsp;
9714
9886
  import { getNodeByNodeCallee } from '../automate/engine/utils';
9715
9887
  &nbsp;
9716
9888
  const EmbeddedTSFileLineMap: { [name: string]: number } = {
@@ -9729,11 +9901,7 @@ const SentryMessager = sentryMonitorTSWorkerMessager(Messager);
9729
9901
  &nbsp;
9730
9902
  export interface FileNode extends BaseNode {
9731
9903
  getEmbeddedFilePath(name?: string): string;
9732
- toEmbeddedTSFile(): {
9733
- filePath: string;
9734
- code: string;
9735
- sourceMap: SourceMap;
9736
- };
9904
+ toEmbeddedTSFile(): utils.EmbeddedTSFileGenerator;
9737
9905
  }
9738
9906
  &nbsp;
9739
9907
  interface RenameMinRange extends MinRange {
@@ -9750,6 +9918,7 @@ interface QuoteNode {
9750
9918
  &nbsp;
9751
9919
  // 批量查找节点位置的节点信息类型
9752
9920
  type QuickInfoNodes = Array&lt;{ filePath: string; node: BaseNode; item: SourceMapItem }&gt;;
9921
+ type QuickInfoMap = Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation; option: any }&gt;;
9753
9922
  &nbsp;
9754
9923
  let isChangeInterface = false; // 判断是否导入接口
9755
9924
  type ActionNode = { target: Variable; typeannotation: TypeAnnotation };
@@ -9794,6 +9963,27 @@ export function <span class="fstat-no" title="function not covered" >getDisplayS
9794
9963
  <span class="cstat-no" title="statement not covered" > return typeList;</span>
9795
9964
  }
9796
9965
  &nbsp;
9966
+ function <span class="fstat-no" title="function not covered" >isCoreDateTimeType(</span>n : Argument): boolean {
9967
+ <span class="cstat-no" title="statement not covered" > return n?.expression?.__TypeAnnotation?.typeName === 'DateTime' &amp;&amp;</span>
9968
+ n?.expression?.__TypeAnnotation?.typeNamespace === 'nasl.core';
9969
+ }
9970
+ &nbsp;
9971
+ function <span class="fstat-no" title="function not covered" >isFunctionWithFixedTimeZoneParam(</span>calleeName : string): boolean {
9972
+ const fns = <span class="cstat-no" title="statement not covered" >['CurrDateTime', 'CurrDate', 'CurrTime', 'FormatDateTime'];</span>
9973
+ <span class="cstat-no" title="statement not covered" > return fns.includes(calleeName);</span>
9974
+ }
9975
+ &nbsp;
9976
+ const timeZoneArgumentIndexMap = new Map&lt;string, number&gt;([
9977
+ ['ToString', 1],
9978
+ ['CurrDateTime', 0],
9979
+ ['CurrDate', 0],
9980
+ ['CurrTime', 0],
9981
+ ['FormatDateTime', 2],
9982
+ ['jsonSerialize', 1],
9983
+ ['GetDateCount', 2],
9984
+ ['GetSpecificDaysOfWeek', 3]
9985
+ ])
9986
+ &nbsp;
9797
9987
  @sentryMonitorNaslServer
9798
9988
  class NaslServer {
9799
9989
  /** naslStdlib文件缓存 */
@@ -9867,7 +10057,7 @@ class NaslServer {
9867
10057
  handleMessage: <span class="fstat-no" title="function not covered" >async </span>({ data }: any) =&gt; {
9868
10058
  <span class="cstat-no" title="statement not covered" > if (data &amp;&amp; data.event === 'publishDiagnostics') {</span>
9869
10059
  const records = <span class="cstat-no" title="statement not covered" >await this._resolveDiagnosticRecords(data.records);</span>
9870
- <span class="cstat-no" title="statement not covered" > this.diagnosticManager.pushAll(records);</span>
10060
+ <span class="cstat-no" title="statement not covered" > await this.diagnosticManager.pushAll(records);</span>
9871
10061
  <span class="cstat-no" title="statement not covered" > try {</span>
9872
10062
  // 结束诊断和标注
9873
10063
  <span class="cstat-no" title="statement not covered" > invokeCommand('naslServer:endWork');</span>
@@ -9963,303 +10153,171 @@ class NaslServer {
9963
10153
  <span class="cstat-no" title="statement not covered" > await this.getDiagnosticRecordsAndPushAll();</span>
9964
10154
  }
9965
10155
  &nbsp;
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>
10156
+ private <span class="fstat-no" title="function not covered" >*c</span>ontentToFile(module: Module | App | Connector): Generator&lt;any, utils.EmbeddedTSFileResult[], any&gt; {
10157
+ <span class="cstat-no" title="statement not covered" > if (!module) {</span>
10158
+ <span class="cstat-no" title="statement not covered" > return[];</span>
9970
10159
  }
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>
10160
+ &nbsp;
10161
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
10162
+ const results: utils.EmbeddedTSFileResult[] = <span class="cstat-no" title="statement not covered" >[];</span>
10163
+ 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>
10164
+ 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>
10165
+ &nbsp;
9972
10166
  <span class="cstat-no" title="statement not covered" > try {</span>
9973
- const result = <span class="cstat-no" title="statement not covered" >structure.toEmbeddedTSFile();</span>
9974
- <span class="cstat-no" title="statement not covered" > results.push(result);</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>
9990
- }
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>
10001
- }
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>
10167
+ <span class="cstat-no" title="statement not covered" > if (!isContinue(node)) {</span>
10168
+ <span class="cstat-no" title="statement not covered" > return;</span>
10012
10169
  }
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>
10170
+ &nbsp;
10171
+ const result = <span class="cstat-no" title="statement not covered" >yield* node.toEmbeddedTSFile();</span>
10172
+ &nbsp;
10173
+ <span class="cstat-no" title="statement not covered" > results.push(result);</span>
10174
+ <span class="cstat-no" title="statement not covered" > node.sourceMap = result.sourceMap;</span>
10175
+ <span class="cstat-no" title="statement not covered" > self.file2NodeMap.set(result.filePath, node);</span>
10176
+ } catch (err) {
10177
+ <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
10178
+ <span class="cstat-no" title="statement not covered" > console.warn(node.nodePath ? node.nodePath : name, '代码转换失败', err);</span>
10041
10179
  }
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>
10180
+ }
10181
+ };
10182
+ 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>
10183
+ <span class="cstat-no" title="statement not covered" > for (const node of nodes ?? []) {</span>
10184
+ <span class="cstat-no" title="statement not covered" > yield* getTsFile(node, name, pre);</span>
10185
+ }
10186
+ };
10187
+ 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>
10188
+ <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>
10189
+ };
10190
+ 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>
10191
+ <span class="cstat-no" title="statement not covered" > if (!views || views.length === 0) {</span>
10192
+ <span class="cstat-no" title="statement not covered" > return;</span>
10193
+ }
10194
+ &nbsp;
10195
+ <span class="cstat-no" title="statement not covered" > for (const view of views) {</span>
10196
+ <span class="cstat-no" title="statement not covered" > yield* getTsFile(view, 'view');</span>
10197
+ &nbsp;
10198
+ <span class="cstat-no" title="statement not covered" > if (view.children) {</span>
10199
+ <span class="cstat-no" title="statement not covered" > yield* view2TSFile(view.children);</span>
10056
10200
  }
10057
- });
10058
- }
10201
+ }
10202
+ };
10059
10203
  &nbsp;
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
- });
10204
+ // 禁用的依赖库不生成代码 区分 undefined false
10205
+ <span class="cstat-no" title="statement not covered" > if (module instanceof Module &amp;&amp; module.type === 'extension' &amp;&amp; module.enable === false) {</span>
10206
+ <span class="cstat-no" title="statement not covered" > return [];</span>
10207
+ }
10079
10208
  &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
- });
10209
+ const {
10210
+ structures = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10211
+ metadataTypes = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10212
+ frontends = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10213
+ interfaces = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10214
+ enums = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10215
+ logics = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10216
+ authLogics = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10217
+ authLogicsForCallInterface = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10218
+ processes = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10219
+ dataSources = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10220
+ triggerLaunchers = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10221
+ connections = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10222
+ roles = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10223
+ overriddenLogics = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10224
+ backend,
10225
+ configuration,
10226
+ } = <span class="cstat-no" title="statement not covered" >module as App;</span>
10227
+ &nbsp;
10228
+ const {
10229
+ namespaces = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
10230
+ } = <span class="cstat-no" title="statement not covered" >module as Connector;</span>
10231
+ &nbsp;
10232
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(structures, 'structure');</span>
10233
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(metadataTypes, 'metadataType');</span>
10107
10234
  &nbsp;
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
- });
10235
+ <span class="cstat-no" title="statement not covered" > if (module instanceof App) {</span>
10236
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(overriddenLogics, 'overriddenLogic', OverriddenLogic);</span>
10237
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(backend?.variables ?? [], 'backend_variable');</span>
10117
10238
  &nbsp;
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
+ <span class="cstat-no" title="statement not covered" > for (const frontend of frontends) {</span>
10240
+ <span class="cstat-no" title="statement not covered" > yield* getTsFile(frontend, 'frontend');</span>
10241
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(frontend.variables, 'frontend_variable');</span>
10242
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(frontend.bindEvents, 'logics'), 'frontend_bindEvent_logic');</span>
10127
10243
  &nbsp;
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
- });
10244
+ <span class="cstat-no" title="statement not covered" > if (!config.closeViews) {</span>
10245
+ <span class="cstat-no" title="statement not covered" > yield* view2TSFile(frontend.views);</span>
10246
+ }
10136
10247
  &nbsp;
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>
10248
+ <span class="cstat-no" title="statement not covered" > for (const dep of frontend.componentDependencies) {</span>
10249
+ <span class="cstat-no" title="statement not covered" > results.push(...(yield* self.contentToFile(dep)));</span>
10250
+ }
10166
10251
  }
10252
+ } else {
10253
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(frontends, 'logics' as any), 'frontend_logic');</span>
10167
10254
  }
10168
10255
  &nbsp;
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
- });
10256
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(dataSources, 'dataSource');</span>
10257
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(dataSources, 'entities'), 'dataSource_entity');</span>
10258
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(interfaces, 'interface');</span>
10259
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(enums, 'enum');</span>
10260
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(logics, 'logic');</span>
10261
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(authLogics, 'authLogic', Logic);</span>
10262
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(authLogicsForCallInterface, 'authLogicForCallInterface', Logic);</span>
10263
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(processes, 'process');</span>
10264
+ &nbsp;
10265
+ <span class="cstat-no" title="statement not covered" > if (module instanceof Connector) {</span>
10266
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(triggerLaunchers, 'triggerLauncher');</span>
10267
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(authLogicsForCallInterface, 'authLogicForCallInterface');</span>
10268
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(concat(namespaces, 'logics'), 'namespaces_logic');</span>
10179
10269
  }
10180
10270
  &nbsp;
10181
10271
  <span class="cstat-no" title="statement not covered" > if (module instanceof App) {</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
- });
10272
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(roles, 'role');</span>
10273
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(connections, 'connection');</span>
10274
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(triggerLaunchers, 'triggerLauncher');</span>
10200
10275
  }
10201
10276
  &nbsp;
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
- });
10277
+ <span class="cstat-no" title="statement not covered" > for (const group of configuration?.groups ?? []) {</span>
10278
+ <span class="cstat-no" title="statement not covered" > if (group.name === 'custom') {</span>
10279
+ <span class="cstat-no" title="statement not covered" > yield* getTsFiles(group?.properties ?? [], 'configuration_group_property');</span>
10213
10280
  }
10214
- });
10215
- }
10216
- &nbsp;
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
10281
  }
10282
+ &nbsp;
10283
+ <span class="cstat-no" title="statement not covered" > return results;</span>
10232
10284
  }
10233
10285
  &nbsp;
10234
10286
  <span class="fstat-no" title="function not covered" > async </span>openApp(app: App) {
10235
10287
  <span class="cstat-no" title="statement not covered" > console.time('生成 TS 文件');</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;
10288
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
10289
+ const results = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(getAllTsFiles());</span>
10248
10290
  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>
10249
10291
  file: result.filePath,
10250
10292
  fileContent: result.code,
10251
10293
  }));
10294
+ &nbsp;
10252
10295
  <span class="cstat-no" title="statement not covered" > await this.writeFiles(files);</span>
10253
10296
  <span class="cstat-no" title="statement not covered" > this._debugInFileStorage(app, files);</span>
10254
10297
  // 修改名称回调
10255
- <span class="cstat-no" title="statement not covered" > registerCommand('tsRename.change', <span class="fstat-no" title="function not covered" >(v</span>alue: boolean, callback: Function) =&gt; {</span>
10256
- <span class="cstat-no" title="statement not covered" > callback(value);</span>
10298
+ <span class="cstat-no" title="statement not covered" > registerCommand('tsRename.change', <span class="fstat-no" title="function not covered" >(v</span>alue: boolean, callback: Function, toast?: Function) =&gt; {</span>
10299
+ <span class="cstat-no" title="statement not covered" > callback(value, toast);</span>
10257
10300
  });
10258
10301
  // 删除回调
10259
10302
  <span class="cstat-no" title="statement not covered" > registerCommand('tsDelete.change', <span class="fstat-no" title="function not covered" >(c</span>allback: Function) =&gt; {</span>
10260
10303
  <span class="cstat-no" title="statement not covered" > callback();</span>
10261
10304
  });
10262
10305
  <span class="cstat-no" title="statement not covered" > console.timeEnd('生成 TS 文件');</span>
10306
+ &nbsp;
10307
+ function* <span class="fstat-no" title="function not covered" >getAllTsFiles(</span>) {
10308
+ const files = <span class="cstat-no" title="statement not covered" >yield* self.contentToFile(app);</span>
10309
+ const otherModules = <span class="cstat-no" title="statement not covered" >[</span>
10310
+ ...app.integration?.connectors ?? [],
10311
+ ...app.dependencies ?? [],
10312
+ ...app.interfaceDependencies ?? [],
10313
+ ];
10314
+ &nbsp;
10315
+ <span class="cstat-no" title="statement not covered" > for (const item of otherModules) {</span>
10316
+ <span class="cstat-no" title="statement not covered" > files.push(...yield* self.contentToFile(item));</span>
10317
+ }
10318
+ &nbsp;
10319
+ <span class="cstat-no" title="statement not covered" > return files;</span>
10320
+ }
10263
10321
  }
10264
10322
  &nbsp;
10265
10323
  <span class="fstat-no" title="function not covered" > async </span>refreshApp(app: App) {
@@ -10290,13 +10348,19 @@ class NaslServer {
10290
10348
  <span class="cstat-no" title="statement not covered" > __naslStdlibFileCacheMap.set(options.file, options);</span>
10291
10349
  }
10292
10350
  &nbsp;
10293
- /** u
10351
+ /**
10294
10352
  * 只新增文件
10295
10353
  * @param {*} files
10296
10354
  */
10297
10355
  <span class="fstat-no" title="function not covered" > writeFiles(</span>files: Array&lt;tsProtocol.OpenRequestArgs&gt;) {
10298
10356
  <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>
10299
- <span class="cstat-no" title="statement not covered" > return this.messager.requestCommand('writeFiles', files);</span>
10357
+ 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>
10358
+ file: key,
10359
+ fileContent: value,
10360
+ }));
10361
+ // const newFiles = require('/Users/sufangzhou/dev/neteast/lcap-ide/packages/nasl/tmp/files-original.json');
10362
+ // debugger;
10363
+ <span class="cstat-no" title="statement not covered" > return this.messager.requestCommand('writeFiles', noRepeatFiles);</span>
10300
10364
  }
10301
10365
  &nbsp;
10302
10366
  /**
@@ -10644,26 +10708,29 @@ class NaslServer {
10644
10708
  <span class="cstat-no" title="statement not covered" > node.tsErrorDetail = tsErrorDetail;</span>
10645
10709
  }
10646
10710
  &nbsp;
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;) {
10711
+ private <span class="fstat-no" title="function not covered" >*_</span>resolveDiagnosticRecordsWithGenerator(records: Array&lt;DiagnosticRecord&gt;) {
10654
10712
  // 热更新类型标注
10655
10713
  <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>
10714
+ <span class="cstat-no" title="statement not covered" > yield* this._incrementalAnnotationJSONWithGenerator(records);</span>
10657
10715
  }
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>
10662
10716
  &nbsp;
10663
- // 先获取原来的节点先清除一下之前有异常的节点,下面重新赋值
10664
- const oldRecord = <span class="cstat-no" title="statement not covered" >this.diagnosticManager.getRecord?.(record.id);</span>
10717
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
10718
+ &nbsp;
10719
+ <span class="cstat-no" title="statement not covered" > console.time('处理诊断数据');</span>
10720
+ &nbsp;
10721
+ <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>
10722
+ <span class="cstat-no" title="statement not covered" > if (!record || !record.node) {</span>
10723
+ <span class="cstat-no" title="statement not covered" > return;</span>
10724
+ }
10725
+ &nbsp;
10726
+ const { node } = <span class="cstat-no" title="statement not covered" >record;</span>
10727
+ &nbsp;
10728
+ // 先获取原来的节点先清除一下之前有异常的节点,下面重新赋值
10729
+ const oldRecord = <span class="cstat-no" title="statement not covered" >self.diagnosticManager.getRecord?.(record.id);</span>
10665
10730
  &nbsp;
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>
10731
+ // 处理旧数据
10732
+ <span class="cstat-no" title="statement not covered" > if (oldRecord) {</span>
10733
+ <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>
10667
10734
  <span class="cstat-no" title="statement not covered" > if (item.node) {</span>
10668
10735
  <span class="cstat-no" title="statement not covered" > delete item.node.tsErrorDetail;</span>
10669
10736
  // 如果logic中有报错就把标识置为true
@@ -10673,8 +10740,7 @@ class NaslServer {
10673
10740
  }
10674
10741
  });
10675
10742
  &nbsp;
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>
10743
+ <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>
10678
10744
  <span class="cstat-no" title="statement not covered" > if (item.node) {</span>
10679
10745
  <span class="cstat-no" title="statement not covered" > delete item.node.tsErrorDetail;</span>
10680
10746
  <span class="cstat-no" title="statement not covered" > if (item.node &amp;&amp; item.node instanceof Logic) {</span>
@@ -10682,145 +10748,172 @@ class NaslServer {
10682
10748
  }
10683
10749
  }
10684
10750
  });
10751
+ }
10685
10752
  &nbsp;
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
+ // 语义诊断
10754
+ <span class="cstat-no" title="statement not covered" > if (isChangeInterface) {</span>
10755
+ <span class="cstat-no" title="statement not covered" > yield* self.existStructureFix(record.semanticDiagnostics, record.node as FileNode, self);</span>
10756
+ }
10690
10757
  &nbsp;
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
- }
10758
+ // 单独处理 oql 语义错误提示
10759
+ <span class="cstat-no" title="statement not covered" > if (record.node instanceof Logic) {</span>
10760
+ <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>
10761
+ const minRange = <span class="cstat-no" title="statement not covered" >yield* self._findMinRangeWithGenerator(item as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode);</span>
10762
+ <span class="cstat-no" title="statement not covered" > if (minRange?.node instanceof OqlQueryComponent) {</span>
10763
+ <span class="cstat-no" title="statement not covered" > if (item.text === 'Invalid character.') {</span>
10764
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.push(item);</span>
10699
10765
  }
10700
- });
10701
- }
10766
+ }
10767
+ });
10768
+ }
10769
+ &nbsp;
10770
+ // 记录结构体数据
10771
+ <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>
10772
+ <span class="cstat-no" title="statement not covered" > checkAStructure_(diag.text);</span>
10773
+ });
10702
10774
  &nbsp;
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>
10775
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics = (</span>
10776
+ yield*
10777
+ utils.wrapMapToGenerator(record.semanticDiagnostics, <span class="fstat-no" title="function not covered" >function*</span> (diag) {
10778
+ <span class="cstat-no" title="statement not covered" > return yield* self._resolveDiagnosticWithGenerator(</span>
10779
+ diag as unknown as tsProtocol.DiagnosticWithFileName,
10780
+ record.node as FileNode,
10781
+ record
10782
+ );
10783
+ })
10784
+ ).filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10785
+ &nbsp;
10786
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics.push(...(yield* self._attachDiagnosticsWithGenerator(node)));</span>
10787
+ &nbsp;
10788
+ // 报错降级逻辑
10789
+ <span class="cstat-no" title="statement not covered" > record.semanticDiagnostics = (</span>
10790
+ yield*
10791
+ utils.wrapMapToGenerator(record.semanticDiagnostics, <span class="fstat-no" title="function not covered" >(d</span>iagnostic) =&gt; {
10792
+ // 错误降级如果属于草稿态的就降级
10793
+ <span class="cstat-no" title="statement not covered" > if (diagnostic?.node) {</span>
10794
+ let currentNode = <span class="cstat-no" title="statement not covered" >diagnostic.node;</span>
10795
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.severity === 'warning') {</span>
10796
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10797
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10798
+ } <span class="cstat-no" title="statement not covered" >if (currentNode.concept === 'OqlQueryComponent') {</span>
10799
+ // OQL别名错误降级为警告
10800
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.originalDiagnostic &amp;&amp; diagnostic.originalDiagnostic?.text.includes('__OQL_ALIAS_WARNING__')) {</span>
10801
+ // 重置 图标和错误等级
10802
+ <span class="cstat-no" title="statement not covered" > diagnostic.severity = 'warning';</span>
10803
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.node?.tsErrorDetail) {</span>
10804
+ // 重置组件节点上的错误信息
10805
+ <span class="cstat-no" title="statement not covered" > diagnostic.node.tsErrorDetail.severity = 'warning';</span>
10806
+ }
10718
10807
  <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10719
10808
  <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
- }
10732
10809
  }
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>
10810
+ }
10811
+ <span class="cstat-no" title="statement not covered" > while (currentNode &amp;&amp; currentNode?.parentNode?.concept !== 'App') {</span>
10812
+ <span class="cstat-no" title="statement not covered" > if (currentNode.parentKey?.toLowerCase()?.includes('playground')) {</span>
10813
+ // 草稿区降级
10814
+ // 重置 图标和错误等级
10815
+ <span class="cstat-no" title="statement not covered" > diagnostic.severity = 'warning';</span>
10816
+ <span class="cstat-no" title="statement not covered" > if (diagnostic.node?.tsErrorDetail) {</span>
10817
+ // 重置组件节点上的错误信息
10818
+ <span class="cstat-no" title="statement not covered" > diagnostic.node.tsErrorDetail.severity = 'warning';</span>
10744
10819
  }
10745
- <span class="cstat-no" title="statement not covered" > currentNode = currentNode.parentNode;</span>
10820
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(diagnostic);</span>
10821
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10746
10822
  }
10823
+ <span class="cstat-no" title="statement not covered" > currentNode = currentNode.parentNode;</span>
10824
+ }
10747
10825
  &nbsp;
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>
10752
- }
10826
+ // 没有降级的继续遍历,如果在logic中,logic本身需要有error状态
10827
+ // 如果logic中有报错就把标识置为true
10828
+ <span class="cstat-no" title="statement not covered" > if ((diagnostic.node as any)?.logic) {</span>
10829
+ (<span class="cstat-no" title="statement not covered" >diagnostic.node as any).logic.haveError = true;</span>
10753
10830
  }
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>
10831
+ }
10832
+ <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10833
+ })
10834
+ )
10835
+ .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10836
+ &nbsp;
10837
+ // 处理后的警告异常提示信息
10838
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics = (</span>
10839
+ yield*
10840
+ utils.wrapMapToGenerator(record.suggestionDiagnostics, function * <span class="fstat-no" title="function not covered" >resolveSuggestionDiagnostic(</span>diag) {
10841
+ // 上面错误降级下来的
10842
+ <span class="cstat-no" title="statement not covered" > if (diag?.node) {</span>
10843
+ <span class="cstat-no" title="statement not covered" > return diag;</span>
10844
+ // 一些已知警告的单独处理
10845
+ } <span class="cstat-no" title="statement not covered" >if (</span>
10846
+ [
10847
+ `'__LogicEmpty' is declared but its value is never read.`,
10848
+ `'__destinationEmpty__' is declared but its value is never read.`,
10849
+ `'__devConfigValueEmpty' is declared but its value is never read.`,
10850
+ `'__onlineConfigValueEmpty' is declared but its value is never read.`,
10851
+ `'__UpdateNoProperty__' is declared but its value is never read.`,
10852
+ ].includes(diag.text)
10853
+ ) {
10854
+ <span class="cstat-no" title="statement not covered" > return yield* self._resolveDiagnosticWithGenerator(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode, record);</span>
10855
+ } <span class="cstat-no" title="statement not covered" >if (diag.text.includes(` is declared but its value is never read.`)) {</span>
10856
+ // 局部变量和输入变量未使用的警告
10857
+ const fromModule = <span class="cstat-no" title="statement not covered" >record.node.parentNode.concept === 'Module';</span>
10858
+ const fromConnector = <span class="cstat-no" title="statement not covered" >record.node.parentNode.concept === 'Connector';</span>
10859
+ <span class="cstat-no" title="statement not covered" > if ((record.node.concept === 'View' || record.node.concept === 'Logic') &amp;&amp; !(fromModule || fromConnector)) {</span>
10860
+ /**
10861
+ * javalogic不用提示
10862
+ */
10863
+ <span class="cstat-no" title="statement not covered" > if (record.node.concept === 'Logic' &amp;&amp; self._isJavalogic(record.node as Logic)) {</span>
10864
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10865
+ }
10866
+ const minRange = <span class="cstat-no" title="statement not covered" >yield* self._findMinRangeWithGenerator(diag as unknown as tsProtocol.DiagnosticWithFileName, record.node as FileNode);</span>
10867
+ <span class="cstat-no" title="statement not covered" > if (minRange) {</span>
10780
10868
  /**
10781
- * javalogic不用提示
10869
+ * 如果节点是入参类型
10870
+ * 而且不是foreach中
10871
+ * 而且不是事件逻辑的入参
10782
10872
  */
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
- }
10873
+ <span class="cstat-no" title="statement not covered" > if (</span>
10874
+ minRange.node instanceof Param &amp;&amp;
10875
+ minRange.node.parentNode.concept !== 'ForEachStatement' &amp;&amp;
10876
+ !minRange.node.getAncestor('BindEvent')
10877
+ ) {
10878
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
10879
+ node: minRange.node,
10880
+ severity: 'warning',
10881
+ message: `未使用的输入参数${minRange.node.name}`,
10882
+ };
10883
+ <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10884
+ } <span class="cstat-no" title="statement not covered" >if (minRange.node instanceof Variable) {</span>
10885
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
10886
+ node: minRange.node,
10887
+ severity: 'warning',
10888
+ message: `未使用的变量${minRange.node.name}`,
10889
+ };
10890
+ <span class="cstat-no" title="statement not covered" > return diagnostic;</span>
10812
10891
  }
10813
10892
  }
10814
10893
  }
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>;
10894
+ }
10895
+ <span class="cstat-no" title="statement not covered" > return null;</span>
10896
+ })
10897
+ )
10898
+ .filter(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; <span class="cstat-no" title="statement not covered" >!!diag)</span>;
10899
+ &nbsp;
10900
+ <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(...yield* self._attachSuggestionDiagnosticsWithGenerator(node));</span>
10901
+ });
10902
+ &nbsp;
10903
+ <span class="cstat-no" title="statement not covered" > console.timeEnd('处理诊断数据');</span>
10818
10904
  &nbsp;
10819
- <span class="cstat-no" title="statement not covered" > record.suggestionDiagnostics.push(...this._attachSuggestionDiagnostics(node));</span>
10820
- })
10821
- );
10822
10905
  <span class="cstat-no" title="statement not covered" > return records;</span>
10823
10906
  }
10907
+ &nbsp;
10908
+ /**
10909
+ * 处理诊断结果
10910
+ * @param records 结果
10911
+ * @returns 过滤或者转换后的诊断结果
10912
+ */
10913
+ @withQueueExecute('diagnostic')
10914
+ private <span class="fstat-no" title="function not covered" >_resolveDiagnosticRecords(</span>records: Array&lt;DiagnosticRecord&gt;) {
10915
+ <span class="cstat-no" title="statement not covered" > return utils.timeSlicingWithGenerator(this._resolveDiagnosticRecordsWithGenerator(records));</span>
10916
+ }
10824
10917
  &nbsp;
10825
10918
  /**
10826
10919
  * 判断是否是Javalogic
@@ -10839,7 +10932,7 @@ class NaslServer {
10839
10932
  * @param fileNode 文件级别的节点
10840
10933
  * @returns 诊断结果
10841
10934
  */
10842
- <span class="fstat-no" title="function not covered" > _attachSuggestionDiagnostics(</span>fileNode: BaseNode): Diagnostic[] {
10935
+ private <span class="fstat-no" title="function not covered" >*_</span>attachSuggestionDiagnosticsWithGenerator(fileNode: BaseNode) {
10843
10936
  const diagnostics: Diagnostic[] = <span class="cstat-no" title="statement not covered" >[];</span>
10844
10937
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof Logic || fileNode instanceof View) {</span>
10845
10938
  <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>
@@ -11201,31 +11294,53 @@ class NaslServer {
11201
11294
  }
11202
11295
  &nbsp;
11203
11296
  /** 是否被 触发器依赖, 如果存在,返回第一个触发器对应的名称 */
11204
- <span class="fstat-no" title="function not covered" > async </span>isRefedByTriggerAndReturnFirstRef(fileNode: BaseNode): Promise&lt;{
11297
+ <span class="fstat-no" title="function not covered" > isRefedByTriggerAndReturnFirstRef(</span>fileNode: BaseNode): Promise&lt;{
11205
11298
  isRefedByTrigger: boolean;
11206
11299
  fRefName: string;
11207
11300
  }&gt; {
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>
11301
+ <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>
11302
+ const basePath = <span class="cstat-no" title="statement not covered" >TriggerLauncher.getEmbeddedFileBasePath(fileNode.rootNode as App);</span>
11303
+ let flag = <span class="cstat-no" title="statement not covered" >false;</span>
11304
+ let fRefName = <span class="cstat-no" title="statement not covered" >'';</span>
11305
+ <span class="cstat-no" title="statement not covered" > try {</span>
11306
+ <span class="cstat-no" title="statement not covered" > for (const ref of refs) {</span>
11307
+ const { file } = <span class="cstat-no" title="statement not covered" >ref;</span>
11308
+ <span class="cstat-no" title="statement not covered" > if (file.startsWith(basePath)) {</span>
11309
+ <span class="cstat-no" title="statement not covered" > flag = true;</span>
11310
+ // file: /embedded/tttta/triggerLaunchers/订阅配置_asd.ts
11311
+ <span class="cstat-no" title="statement not covered" > fRefName = file.split(basePath)[1].split('.')[0];</span>
11312
+ <span class="cstat-no" title="statement not covered" > break;</span>
11313
+ }
11220
11314
  }
11315
+ } catch (error) {
11316
+ <span class="cstat-no" title="statement not covered" > console.error(error, refs);</span>
11221
11317
  }
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
- };
11318
+ <span class="cstat-no" title="statement not covered" > return {</span>
11319
+ isRefedByTrigger: flag,
11320
+ fRefName,
11321
+ };
11322
+ });
11323
+ // const refs = await this._isHaveRef(fileNode);
11324
+ // const basePath = TriggerLauncher.getEmbeddedFileBasePath(fileNode.rootNode as App);
11325
+ // let flag = false;
11326
+ // let fRefName = '';
11327
+ // try {
11328
+ // for (const ref of refs) {
11329
+ // const { file } = ref;
11330
+ // if (file.startsWith(basePath)) {
11331
+ // flag = true;
11332
+ // // file: /embedded/tttta/triggerLaunchers/订阅配置_asd.ts
11333
+ // fRefName = file.split(basePath)[1].split('.')[0];
11334
+ // break;
11335
+ // }
11336
+ // }
11337
+ // } catch (error) {
11338
+ // console.error(error, refs);
11339
+ // }
11340
+ // return {
11341
+ // isRefedByTrigger: flag,
11342
+ // fRefName,
11343
+ // };
11229
11344
  }
11230
11345
  &nbsp;
11231
11346
  /**
@@ -11256,15 +11371,18 @@ class NaslServer {
11256
11371
  * @param fileNode 文件级别的节点
11257
11372
  * @returns 诊断结果
11258
11373
  */
11259
- <span class="fstat-no" title="function not covered" > async </span>_attachDiagnostics(fileNode: BaseNode): Promise&lt;Diagnostic[]&gt; {
11374
+ private <span class="fstat-no" title="function not covered" >*_</span>attachDiagnosticsWithGenerator(fileNode: BaseNode) {
11260
11375
  // 每次诊断前先清空这个Set
11261
11376
  <span class="cstat-no" title="statement not covered" > this.logicSetWithComponentLogic = new Set&lt;string&gt;();</span>
11377
+ &nbsp;
11378
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
11262
11379
  const diagnostics: Diagnostic[] = <span class="cstat-no" title="statement not covered" >[];</span>
11380
+ &nbsp;
11263
11381
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof View) {</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>
11382
+ <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>
11265
11383
  <span class="cstat-no" title="statement not covered" > if (node instanceof ViewElement &amp;&amp; node.view === fileNode) {</span>
11266
11384
  <span class="cstat-no" title="statement not covered" > if (node.tag) {</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>
11385
+ <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>
11268
11386
  <span class="cstat-no" title="statement not covered" > if ((bindAttr.model || bindAttr.sync) &amp;&amp; bindAttr.expression) {</span>
11269
11387
  const bindExpression = <span class="cstat-no" title="statement not covered" >bindAttr.expression;</span>
11270
11388
  let diagnostic;
@@ -11307,7 +11425,7 @@ class NaslServer {
11307
11425
  <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; !node.__TypeAnnotation) {</span>
11308
11426
  const nodeTypeName = <span class="cstat-no" title="statement not covered" >node.concept === 'Return' ? '输出参数' : '局部变量';</span>
11309
11427
  let msg;
11310
- <span class="cstat-no" title="statement not covered" > fileNode.traverseChildren(<span class="fstat-no" title="function not covered" >(n</span>odeIn) =&gt; {</span>
11428
+ <span class="cstat-no" title="statement not covered" > yield* fileNode.traverseChildrenGenerator(<span class="fstat-no" title="function not covered" >(n</span>odeIn) =&gt; {</span>
11311
11429
  <span class="cstat-no" title="statement not covered" > if (nodeIn &amp;&amp; (nodeIn instanceof BatchAssignment || (nodeIn instanceof Assignment &amp;&amp; nodeIn.left?.name))) {</span>
11312
11430
  // 子页面内部逻辑过滤
11313
11431
  <span class="cstat-no" title="statement not covered" > if (nodeIn.view !== fileNode) <span class="cstat-no" title="statement not covered" >return;</span></span>
@@ -11364,9 +11482,23 @@ class NaslServer {
11364
11482
  <span class="cstat-no" title="statement not covered" > node.tsErrorDetail = diagnostic;</span>
11365
11483
  <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11366
11484
  }
11485
+ const fileSourceCode = <span class="cstat-no" title="statement not covered" >self.getNodeCode(fileNode, value);</span>
11486
+ <span class="cstat-no" title="statement not covered" > if (fileSourceCode.includes('|') &amp;&amp; fileSourceCode.includes('.metadataTypes.')) {</span>
11487
+ const typeAnnotation = <span class="cstat-no" title="statement not covered" >node.typeAnnotation.toJSON()</span>
11488
+ <span class="cstat-no" title="statement not covered" > yield* self._treeMetadataType2CoreType(typeAnnotation, (node.rootNode as App))</span>
11489
+ const isDuplicate = <span class="cstat-no" title="statement not covered" >yield* self._isDuplicateCoreType(typeAnnotation)</span>
11490
+ <span class="cstat-no" title="statement not covered" > if (isDuplicate) {</span>
11491
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11492
+ node: node,
11493
+ severity: 'error',
11494
+ message: `变量 ${node.name} 类型定义包含相同的数据类型`,
11495
+ };
11496
+ <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11497
+ }
11498
+ }
11367
11499
  } else <span class="cstat-no" title="statement not covered" >if (node instanceof BindAttribute || node instanceof BindDirective || node instanceof BindStyle) {</span>
11368
11500
  <span class="cstat-no" title="statement not covered" > if (Array.isArray(node.bindExpressions)) {</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>
11501
+ 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>
11370
11502
  <span class="cstat-no" title="statement not covered" > if (exp) {</span>
11371
11503
  // const element: any = node.getAncestor('ViewElement');
11372
11504
  // const api = config.allNodesAPI[element?.tag];
@@ -11389,7 +11521,7 @@ class NaslServer {
11389
11521
  }
11390
11522
  }
11391
11523
  } else <span class="cstat-no" title="statement not covered" >if (node instanceof CallInterface) {</span>
11392
- const isAuthInterface = <span class="cstat-no" title="statement not covered" >this.hasAuth(node);</span>
11524
+ const isAuthInterface = <span class="cstat-no" title="statement not covered" >self.hasAuth(node);</span>
11393
11525
  const interfaceName = <span class="cstat-no" title="statement not covered" >node.calleewholeKey.slice(node.calleewholeKey.lastIndexOf('.') + 1);</span>
11394
11526
  <span class="cstat-no" title="statement not covered" > if (isAuthInterface) {</span>
11395
11527
  const errorMsg = <span class="cstat-no" title="statement not covered" >`${interfaceName} 接口有鉴权方式,不支持在前端调用`;</span>
@@ -11415,15 +11547,16 @@ class NaslServer {
11415
11547
  <span class="cstat-no" title="statement not covered" > node.tsErrorDetail = diagnostic;</span>
11416
11548
  }
11417
11549
  } else {
11418
- <span class="cstat-no" title="statement not covered" > this.checkNodeError(node, diagnostics);</span>
11550
+ <span class="cstat-no" title="statement not covered" > self.checkNodeError(node, diagnostics);</span>
11419
11551
  }
11420
11552
  });
11421
- } else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof DataSource) {</span>
11553
+ }
11554
+ else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof DataSource) {</span>
11422
11555
  const dataSourceGroup = (<span class="cstat-no" title="statement not covered" >fileNode.rootNode as App).configuration?.getGroup('dataSource');</span>
11423
11556
  <span class="cstat-no" title="statement not covered" > if (dataSourceGroup) {</span>
11424
11557
  const property = <span class="cstat-no" title="statement not covered" >dataSourceGroup.getProperty(fileNode.name);</span>
11425
11558
  <span class="cstat-no" title="statement not covered" > if (property &amp;&amp; property.values) {</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>
11559
+ <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>
11427
11560
  <span class="cstat-no" title="statement not covered" > if (!propertyValue.value &amp;&amp; fileNode.name !== 'defaultDS') {</span>
11428
11561
  const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11429
11562
  node: fileNode,
@@ -11491,7 +11624,7 @@ class NaslServer {
11491
11624
  const rulesMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
11492
11625
  <span class="cstat-no" title="statement not covered" > if (Array.isArray(rules)) {</span>
11493
11626
  <span class="cstat-no" title="statement not covered" > rules.forEach(<span class="fstat-no" title="function not covered" >(r</span>ule) =&gt; {</span>
11494
- const match = <span class="cstat-no" title="statement not covered" >rule.match(/^([^()]+)\(([\d\-.]+)\)$/);</span>
11627
+ const match = <span class="cstat-no" title="statement not covered" >rule?.match(/^([^()]+)\(([\d\-.]+)\)$/);</span>
11495
11628
  <span class="cstat-no" title="statement not covered" > if (match) {</span>
11496
11629
  const [, key, value] = <span class="cstat-no" title="statement not covered" >match;</span>
11497
11630
  <span class="cstat-no" title="statement not covered" > rulesMap[key] = value;</span>
@@ -11719,8 +11852,9 @@ class NaslServer {
11719
11852
  });
11720
11853
  }
11721
11854
  }
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>
11855
+ else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof Logic || fileNode instanceof OverriddenLogic) {</span>
11856
+ const { isRefedByTrigger, fRefName } = <span class="cstat-no" title="statement not covered" >yield this.isRefedByTriggerAndReturnFirstRef(fileNode);</span>
11857
+ &nbsp;
11724
11858
  <span class="cstat-no" title="statement not covered" > if (isRefedByTrigger &amp;&amp; !this.isTriggerRule(fileNode)) {</span>
11725
11859
  const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11726
11860
  node: fileNode,
@@ -11729,21 +11863,11 @@ class NaslServer {
11729
11863
  };
11730
11864
  <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11731
11865
  }
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
- // }
11866
+ &nbsp;
11867
+ <span class="cstat-no" title="statement not covered" > yield* utils.wrapIteratorToGenerator(fileNode.sourceMap.entries(), function* <span class="fstat-no" title="function not covered" >wrapIterator(</span>[node, value]) {</span>
11744
11868
  <span class="cstat-no" title="statement not covered" > if (node instanceof OqlQueryComponent) {</span>
11745
11869
  // 自动推导情况
11746
- const typeAnnotation = <span class="cstat-no" title="statement not covered" >type2TypeAnnotation((node as any).__nodeType);</span>
11870
+ const typeAnnotation = <span class="cstat-no" title="statement not covered" >yield* type2TypeAnnotation((node as any).__nodeType);</span>
11747
11871
  <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; typeAnnotation) {</span>
11748
11872
  <span class="cstat-no" title="statement not covered" > if (typeAnnotation.typeName === 'List' &amp;&amp; typeAnnotation.typeKind === 'generic') {</span>
11749
11873
  const {typeArguments} = <span class="cstat-no" title="statement not covered" >typeAnnotation;</span>
@@ -11759,9 +11883,9 @@ class NaslServer {
11759
11883
  }
11760
11884
  }
11761
11885
  }
11762
- <span class="cstat-no" title="statement not covered" > if (node instanceof Return || node instanceof Variable) {</span>
11886
+ else <span class="cstat-no" title="statement not covered" >if (node instanceof Return || node instanceof Variable) {</span>
11887
+ const nodeTypeName = <span class="cstat-no" title="statement not covered" >node.concept === 'Return' ? '输出参数' : '局部变量';</span>
11763
11888
  <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>
11765
11889
  let used = <span class="cstat-no" title="statement not covered" >false;</span>
11766
11890
  <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>
11767
11891
  <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>
@@ -11796,17 +11920,133 @@ class NaslServer {
11796
11920
  } else {
11797
11921
  <span class="cstat-no" title="statement not covered" > delete node.tsErrorDetail;</span>
11798
11922
  }
11923
+ const fileSourceCode = <span class="cstat-no" title="statement not covered" >self.getNodeCode(fileNode, value);</span>
11924
+ <span class="cstat-no" title="statement not covered" > if (fileSourceCode.includes('|') &amp;&amp; fileSourceCode.includes('.metadataTypes.')) {</span>
11925
+ const typeAnnotation = <span class="cstat-no" title="statement not covered" >node.typeAnnotation.toJSON()</span>
11926
+ <span class="cstat-no" title="statement not covered" > yield* self._treeMetadataType2CoreType(typeAnnotation, (node.rootNode as App))</span>
11927
+ const isDuplicate = <span class="cstat-no" title="statement not covered" >yield* self._isDuplicateCoreType(typeAnnotation)</span>
11928
+ <span class="cstat-no" title="statement not covered" > if (isDuplicate) {</span>
11929
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11930
+ node: node,
11931
+ severity: 'error',
11932
+ message: `${nodeTypeName} ${node.name} 类型定义包含相同的数据类型`,
11933
+ };
11934
+ <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11935
+ }
11936
+ }
11799
11937
  }
11800
- <span class="cstat-no" title="statement not covered" > this.checkNodeError(node, diagnostics);</span>
11938
+ else <span class="cstat-no" title="statement not covered" >if (node instanceof Param) {</span>
11939
+ const fileSourceCode = <span class="cstat-no" title="statement not covered" >self.getNodeCode(fileNode, value);</span>
11940
+ <span class="cstat-no" title="statement not covered" > if (fileSourceCode.includes('|') &amp;&amp; fileSourceCode.includes('.metadataTypes.')) {</span>
11941
+ const typeAnnotation = <span class="cstat-no" title="statement not covered" >node.typeAnnotation.toJSON()</span>
11942
+ <span class="cstat-no" title="statement not covered" > yield* self._treeMetadataType2CoreType(typeAnnotation, (node.rootNode as App))</span>
11943
+ const isDuplicate = <span class="cstat-no" title="statement not covered" >yield* self._isDuplicateCoreType(typeAnnotation)</span>
11944
+ <span class="cstat-no" title="statement not covered" > if (isDuplicate) {</span>
11945
+ const diagnostic = <span class="cstat-no" title="statement not covered" >{</span>
11946
+ node: node,
11947
+ severity: 'error',
11948
+ message: `输入参数 ${node.name} 类型定义包含相同的数据类型`,
11949
+ };
11950
+ <span class="cstat-no" title="statement not covered" > diagnostics.push(diagnostic);</span>
11951
+ }
11952
+ }
11953
+ }
11954
+ <span class="cstat-no" title="statement not covered" > self.checkNodeError(node, diagnostics);</span>
11801
11955
  });
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>
11956
+ }
11957
+ else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof Process) {</span>
11958
+ <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>
11804
11959
  <span class="cstat-no" title="statement not covered" > this.checkNodeError(node, diagnostics);</span>
11805
11960
  });
11806
11961
  }
11962
+ else <span class="cstat-no" title="statement not covered" >if (fileNode instanceof MetadataType) {</span>
11963
+ <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>
11964
+ const rulesMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
11965
+ const { rules, typeAnnotation } = <span class="cstat-no" title="statement not covered" >node as MetadataType;</span>
11966
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(rules)) {</span>
11967
+ <span class="cstat-no" title="statement not covered" > rules.forEach(<span class="fstat-no" title="function not covered" >(r</span>ule) =&gt; {</span>
11968
+ <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>
11969
+ const match = <span class="cstat-no" title="statement not covered" >rule.toUI?.().match(/^([^()]+)\(([\d\-.]+)\)$/);</span>
11970
+ <span class="cstat-no" title="statement not covered" > if (match) {</span>
11971
+ const [, key, value] = <span class="cstat-no" title="statement not covered" >match;</span>
11972
+ <span class="cstat-no" title="statement not covered" > rulesMap[key] = value;</span>
11973
+ }
11974
+ });
11975
+ }
11976
+ const { typeName } = <span class="cstat-no" title="statement not covered" >typeAnnotation || {};</span>
11977
+ const typeAnnotationErrorDetail: any = <span class="cstat-no" title="statement not covered" >{</span>
11978
+ severity: 'warning',
11979
+ errorPos: {},
11980
+ };
11981
+ const minVal = <span class="cstat-no" title="statement not covered" >rulesMap.min;</span>
11982
+ const maxVal = <span class="cstat-no" title="statement not covered" >rulesMap.max;</span>
11983
+ <span class="cstat-no" title="statement not covered" > if (['Long', 'Decimal'].includes(typeName) &amp;&amp; !typeAnnotationErrorDetail.errorPos.min) {</span>
11984
+ <span class="cstat-no" title="statement not covered" > if (minVal &amp;&amp; maxVal) {</span>
11985
+ <span class="cstat-no" title="statement not covered" > if (new Decimal(maxVal).lessThan(minVal)) {</span>
11986
+ const errorMsg = <span class="cstat-no" title="statement not covered" >'最小值不得大于最大值';</span>
11987
+ const diag: any = <span class="cstat-no" title="statement not covered" >{</span>
11988
+ node: node,
11989
+ severity: 'warning',
11990
+ message: errorMsg,
11991
+ };
11992
+ <span class="cstat-no" title="statement not covered" > diagnostics.push(diag);</span>
11993
+ <span class="cstat-no" title="statement not covered" > typeAnnotationErrorDetail.errorPos.min = errorMsg;</span>
11994
+ } else {
11995
+ <span class="cstat-no" title="statement not covered" > typeAnnotationErrorDetail.errorPos = {};</span>
11996
+ (<span class="cstat-no" title="statement not covered" >node as MetadataType).typeAnnotation.tsErrorDetail = null;</span>
11997
+ }
11998
+ }
11999
+ }
12000
+ <span class="cstat-no" title="statement not covered" > if (Object.keys(typeAnnotationErrorDetail.errorPos).length) {</span>
12001
+ <span class="cstat-no" title="statement not covered" > typeAnnotation.tsErrorDetail = typeAnnotationErrorDetail;</span>
12002
+ }
12003
+ })
12004
+ }
12005
+ &nbsp;
11807
12006
  <span class="cstat-no" title="statement not covered" > return diagnostics;</span>
11808
12007
  }
11809
12008
  &nbsp;
12009
+ <span class="fstat-no" title="function not covered" > *_</span>treeMetadataType2CoreType(type: TypeAnnotation, app: App): Generator&lt;any, void, any&gt; {
12010
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
12011
+ &nbsp;
12012
+ <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(type.typeArguments ?? [], function* <span class="fstat-no" title="function not covered" >wrapForEach(</span>item) {</span>
12013
+ <span class="cstat-no" title="statement not covered" > if (item.typeNamespace?.endsWith('.metadataTypes')) {</span>
12014
+ let originType = <span class="cstat-no" title="statement not covered" >{} as TypeAnnotation</span>
12015
+ <span class="cstat-no" title="statement not covered" > if (item.typeNamespace === 'app.metadataTypes') {</span>
12016
+ <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>
12017
+ } else <span class="cstat-no" title="statement not covered" >if (item.typeNamespace?.startsWith('extensions.') &amp;&amp; item.typeNamespace?.endsWith('.metadataTypes')) {</span>
12018
+ const dependencyName = <span class="cstat-no" title="statement not covered" >item.typeNamespace.replace('extensions.', '').replace('.metadataTypes', '')</span>
12019
+ <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>
12020
+ }
12021
+ <span class="cstat-no" title="statement not covered" > item.typeKind = 'primitive'</span>
12022
+ <span class="cstat-no" title="statement not covered" > item.typeNamespace = 'nasl.core'</span>
12023
+ <span class="cstat-no" title="statement not covered" > item.typeName = originType?.typeName</span>
12024
+ }
12025
+ &nbsp;
12026
+ <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(type.typeArguments ?? [], function* <span class="fstat-no" title="function not covered" >wrapForEach2(</span>ele) {</span>
12027
+ <span class="cstat-no" title="statement not covered" > yield* self._treeMetadataType2CoreType(ele, app)</span>
12028
+ });
12029
+ });
12030
+ }
12031
+ &nbsp;
12032
+ <span class="fstat-no" title="function not covered" > *_</span>isDuplicateCoreType(type: TypeAnnotation): Generator&lt;any, boolean, any&gt; {
12033
+ 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>
12034
+ const setList = <span class="cstat-no" title="statement not covered" >Array.from(new Set(argsStringList))</span>
12035
+ <span class="cstat-no" title="statement not covered" > if (argsStringList.length &gt; setList.length) {</span>
12036
+ <span class="cstat-no" title="statement not covered" > return true</span>
12037
+ }
12038
+ &nbsp;
12039
+ let flag = <span class="cstat-no" title="statement not covered" >false</span>
12040
+ &nbsp;
12041
+ <span class="cstat-no" title="statement not covered" > for (const ele of type.typeArguments ?? []) {</span>
12042
+ const subFlag = <span class="cstat-no" title="statement not covered" >yield* this._isDuplicateCoreType(ele)</span>
12043
+ <span class="cstat-no" title="statement not covered" > if (subFlag) {</span>
12044
+ <span class="cstat-no" title="statement not covered" > flag = true</span>
12045
+ }
12046
+ }
12047
+ &nbsp;
12048
+ <span class="cstat-no" title="statement not covered" > return flag</span>
12049
+ }
11810
12050
  <span class="fstat-no" title="function not covered" > checkNodeError(</span>node: BaseNode, diagnostics: Diagnostic[]): any {
11811
12051
  <span class="cstat-no" title="statement not covered" > if (!node) <span class="cstat-no" title="statement not covered" >return;</span></span>
11812
12052
  // 如果节点是match的看看节点里是不是有重复的
@@ -12059,9 +12299,10 @@ class NaslServer {
12059
12299
  }
12060
12300
  &nbsp;
12061
12301
  /* 接口导入查找 */
12062
- <span class="fstat-no" title="function not covered" > existStructureFix(</span>semanticDiagnostics: Diagnostic[], node: FileNode, that: any) {
12302
+ private <span class="fstat-no" title="function not covered" >*e</span>xistStructureFix(semanticDiagnostics: Diagnostic[], node: FileNode, that: any) {
12063
12303
  let module: Module;
12064
- <span class="cstat-no" title="statement not covered" > semanticDiagnostics.map(<span class="fstat-no" title="function not covered" >(d</span>iag) =&gt; {</span>
12304
+ &nbsp;
12305
+ <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>
12065
12306
  const minRange = <span class="cstat-no" title="statement not covered" >this._findMinRange(diag as unknown as tsProtocol.DiagnosticWithFileName, node);</span>
12066
12307
  <span class="cstat-no" title="statement not covered" > if (diag.text?.includes('has no exported member named')) {</span>
12067
12308
  <span class="cstat-no" title="statement not covered" > if (minRange.node instanceof Logic) {</span>
@@ -12092,9 +12333,8 @@ class NaslServer {
12092
12333
  }
12093
12334
  <span class="cstat-no" title="statement not covered" > return null;</span>
12094
12335
  }
12095
- <span class="cstat-no" title="statement not covered" > return diag;</span>
12096
- &nbsp;
12097
12336
  });
12337
+ &nbsp;
12098
12338
  <span class="cstat-no" title="statement not covered" > if (actionArr.length) {</span>
12099
12339
  <span class="cstat-no" title="statement not covered" > if (timer) <span class="cstat-no" title="statement not covered" >return;</span></span>
12100
12340
  <span class="cstat-no" title="statement not covered" > timer = window.setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
@@ -12121,50 +12361,54 @@ class NaslServer {
12121
12361
  * @param fileNode 页面节点
12122
12362
  * @returns 处理后的结果
12123
12363
  */
12124
- <span class="fstat-no" title="function not covered" > _resolveDiagnostic(</span>diagnostic: tsProtocol.DiagnosticWithFileName, fileNode: FileNode, record: DiagnosticRecord): Diagnostic {
12364
+ private <span class="fstat-no" title="function not covered" >*_</span>resolveDiagnosticWithGenerator(diagnostic: tsProtocol.DiagnosticWithFileName, fileNode: FileNode, record: DiagnosticRecord) {
12125
12365
  // 拓展模块中的翻译先过滤掉,因为有错用户也不能修改
12126
12366
  <span class="cstat-no" title="statement not covered" > if (((fileNode as any).module || (fileNode as any).connector) &amp;&amp; !(fileNode instanceof ConfigProperty)) {</span>
12127
12367
  <span class="cstat-no" title="statement not covered" > return;</span>
12128
12368
  }
12129
- // 过滤掉java依赖库的报错
12130
- // if ('compilerInfoMap' in fileNode &amp;&amp; (fileNode as any).compilerInfoMap?.java) {
12131
- // return;
12132
- // }
12133
12369
  <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>
12134
12370
  <span class="cstat-no" title="statement not covered" > return;</span>
12135
12371
  }
12136
- const minRange = <span class="cstat-no" title="statement not covered" >this._findMinRange(diagnostic, fileNode);</span>
12372
+ const minRange = <span class="cstat-no" title="statement not covered" >yield* this._findMinRangeWithGenerator(diagnostic, fileNode);</span>
12137
12373
  const tsErrorDetail = <span class="cstat-no" title="statement not covered" >{</span>
12138
12374
  severity: diagnostic.category === 'error' ? 'error' : 'warning',
12139
12375
  message: translateDiagnosticMessage(diagnostic.text),
12140
12376
  // 保留原来的内容方便查询一些问题
12141
12377
  originalDiagnostic: diagnostic,
12142
12378
  };
12379
+ <span class="cstat-no" title="statement not covered" > yield;</span>
12143
12380
  &nbsp;
12144
12381
  let result: Diagnostic;
12145
12382
  <span class="cstat-no" title="statement not covered" > if (minRange) {</span>
12146
12383
  // 节点的error要置为true
12147
12384
  <span class="cstat-no" title="statement not covered" > result = naslNodeTranslateMessage(minRange, tsErrorDetail);</span>
12385
+ <span class="cstat-no" title="statement not covered" > yield;</span>
12148
12386
  } else {
12149
12387
  // 没找到节点, 先把问题暴露出来
12150
12388
  <span class="cstat-no" title="statement not covered" > result = tsErrorDetail;</span>
12151
12389
  }
12152
- <span class="cstat-no" title="statement not covered" > if (result)</span>
12390
+ &nbsp;
12391
+ <span class="cstat-no" title="statement not covered" > if (result) {</span>
12153
12392
  <span class="cstat-no" title="statement not covered" > result.id = record.filePath + (result ? JSON.stringify({ start: result.originalDiagnostic.start, end: result.originalDiagnostic.end }) : '');</span>
12393
+ }
12394
+ &nbsp;
12154
12395
  <span class="cstat-no" title="statement not covered" > return result;</span>
12155
12396
  }
12156
12397
  &nbsp;
12157
12398
  /**
12158
- * 通过节点诊断反过来查找节点
12159
- * @param diagnostic 诊断信息
12160
- * @param fileNode 文件级别节点
12161
- * @returns 找到的节点
12399
+ * 查找节点
12400
+ *
12401
+ * @description 生成器原型函数
12162
12402
  */
12163
- <span class="fstat-no" title="function not covered" > _findMinRange(</span>diagnostic: tsProtocol.DiagnosticWithFileName | tsProtocol.ReferencesResponseItem, fileNode: FileNode) {
12403
+ private <span class="fstat-no" title="function not covered" >*_</span>findMinRangeWithGenerator(
12404
+ diagnostic: tsProtocol.DiagnosticWithFileName | tsProtocol.ReferencesResponseItem,
12405
+ fileNode: FileNode
12406
+ ): Generator&lt;void, MinRange&gt; {
12164
12407
  let minRange: MinRange;
12165
- const {sourceMap} = <span class="cstat-no" title="statement not covered" >fileNode;</span>
12408
+ const { sourceMap } = <span class="cstat-no" title="statement not covered" >fileNode;</span>
12166
12409
  // 是否找到了行内准确的,是的话,就不走多行的
12167
12410
  let haveLineNode = <span class="cstat-no" title="statement not covered" >false;</span>
12411
+ &nbsp;
12168
12412
  <span class="cstat-no" title="statement not covered" > for (const [node, item] of sourceMap.entries()) {</span>
12169
12413
  /**
12170
12414
  * 当前内容的开始行 &lt;= 诊断开始的行 &amp;&amp;
@@ -12221,15 +12465,30 @@ class NaslServer {
12221
12465
  }
12222
12466
  }
12223
12467
  }
12468
+ &nbsp;
12469
+ <span class="cstat-no" title="statement not covered" > yield;</span>
12224
12470
  }
12471
+ &nbsp;
12225
12472
  <span class="cstat-no" title="statement not covered" > if (!minRange) {</span>
12226
12473
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof View) {</span>
12227
- <span class="cstat-no" title="statement not covered" > return { node: fileNode, item: sourceMap.get(fileNode) };</span>
12474
+ <span class="cstat-no" title="statement not covered" > return { node: fileNode, item: sourceMap.get(fileNode) } as MinRange;</span>
12475
+ }
12476
+ <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
12477
+ <span class="cstat-no" title="statement not covered" > console.log(minRange, '需要特殊看下,为什么没找到内容-------------');</span>
12228
12478
  }
12229
- <span class="cstat-no" title="statement not covered" > console.log(minRange, '需要特殊看下,为什么没找到内容-------------');</span>
12230
12479
  }
12480
+ &nbsp;
12231
12481
  <span class="cstat-no" title="statement not covered" > return minRange;</span>
12232
12482
  }
12483
+ &nbsp;
12484
+ /**
12485
+ * 查找节点
12486
+ *
12487
+ * @description 同步模式
12488
+ */
12489
+ <span class="fstat-no" title="function not covered" > _findMinRange(</span>...args: Parameters&lt;NaslServer['_findMinRangeWithGenerator']&gt;) {
12490
+ <span class="cstat-no" title="statement not covered" > return utils.runGeneratorSync(this._findMinRangeWithGenerator(...args));</span>
12491
+ }
12233
12492
  &nbsp;
12234
12493
  /**
12235
12494
  * 查看当前节点是不是有引用
@@ -12374,6 +12633,7 @@ class NaslServer {
12374
12633
  line: lsp2tspNumber(currentSource.start.line),
12375
12634
  offset: lsp2tspNumber(currentSource.start.character),
12376
12635
  });
12636
+ // console.log(parentRefs.refs)
12377
12637
  <span class="cstat-no" title="statement not covered" > refsList = [...refsList, ...parentRefs.refs];</span>
12378
12638
  }
12379
12639
  &nbsp;
@@ -12528,12 +12788,22 @@ class NaslServer {
12528
12788
  <span class="cstat-no" title="statement not covered" > if (node instanceof Return &amp;&amp; node.parentNode instanceof ProcessElement) {</span>
12529
12789
  const { currentSource, fileNode } = <span class="cstat-no" title="statement not covered" >this.getCurrentSource(node.parentNode);</span>
12530
12790
  <span class="cstat-no" title="statement not covered" > if (currentSource) {</span>
12791
+ // 流程任务出参查找引用需要查找到流程任务完成逻辑
12792
+ // const parentRefs = await this.references({
12793
+ // file: (fileNode as FileNode).getEmbeddedFilePath(),
12794
+ // line: lsp2tspNumber(currentSource.start.line),
12795
+ // offset: lsp2tspNumber(currentSource.start.character),
12796
+ // });
12797
+ // refsList = [...refsList, ...parentRefs.refs];
12798
+ // console.log(parentRefs.refs)
12799
+ &nbsp;
12800
+ // 流程任务出参查找引用比较特殊,需要查找到 const process = {...} 的引用
12531
12801
  const code = <span class="cstat-no" title="statement not covered" >this.getNodeCode(fileNode, currentSource);</span>
12532
12802
  const prefix = <span class="cstat-no" title="statement not covered" >'__ProcessIdentification__';</span>
12533
12803
  const positions = <span class="cstat-no" title="statement not covered" >[];</span>
12534
12804
  let pos = <span class="cstat-no" title="statement not covered" >code.indexOf(prefix);</span>
12535
12805
  // 需要再次定位到processelement对象上,避免process上存在同名参数
12536
- <span class="cstat-no" title="statement not covered" > pos = code.indexOf(node.parentNode.name, pos + prefix.length);</span>
12806
+ <span class="cstat-no" title="statement not covered" > pos = pos === -1 ? pos : code.indexOf(node.parentNode.name, pos + prefix.length);</span>
12537
12807
  <span class="cstat-no" title="statement not covered" > pos = pos === -1 ? pos : code.indexOf(node.name, pos + prefix.length);</span>
12538
12808
  // pos === -1:两种情况:
12539
12809
  // 1、找到最后一个节点了,继续找找不下去了。
@@ -12938,7 +13208,7 @@ class NaslServer {
12938
13208
  // 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
12939
13209
  <span class="cstat-no" title="statement not covered" > if (</span>
12940
13210
  (minRange.node instanceof Param || minRange.node instanceof Variable || minRange.node instanceof Return) &amp;&amp;
12941
- (node instanceof Entity || node instanceof Enum || node instanceof Structure)
13211
+ (node instanceof Entity || node instanceof Enum || node instanceof Structure || node instanceof MetadataType)
12942
13212
  ) {
12943
13213
  <span class="cstat-no" title="statement not covered" > return null;</span>
12944
13214
  }
@@ -13263,7 +13533,7 @@ class NaslServer {
13263
13533
  <span class="fstat-no" title="function not covered" > getCurrentSource(</span>node: BaseNode) {
13264
13534
  <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>
13265
13535
  let {sourceMap} = <span class="cstat-no" title="statement not covered" >node;</span>
13266
- let fileNode = <span class="cstat-no" title="statement not covered" >node;</span>
13536
+ let fileNode = <span class="cstat-no" title="statement not covered" >node as FileNode &amp; SyntaxNode;</span>
13267
13537
  // 如果没有sourceMap,就继续向上找 ,或者到module结束
13268
13538
  // 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
13269
13539
  // 如果当前节点是view就不要向上查找了
@@ -13279,7 +13549,7 @@ class NaslServer {
13279
13549
  !(fileNode instanceof View) &amp;&amp;
13280
13550
  !(fileNode instanceof ConfigProperty)
13281
13551
  ) {
13282
- <span class="cstat-no" title="statement not covered" > fileNode = fileNode.parentNode;</span>
13552
+ <span class="cstat-no" title="statement not covered" > fileNode = fileNode.parentNode as FileNode &amp; SyntaxNode;</span>
13283
13553
  <span class="cstat-no" title="statement not covered" > sourceMap = fileNode?.sourceMap;</span>
13284
13554
  }
13285
13555
  const currentSource = <span class="cstat-no" title="statement not covered" >sourceMap &amp;&amp; sourceMap.get(node);</span>
@@ -13323,7 +13593,6 @@ class NaslServer {
13323
13593
  getFieldKey: fieldKey,
13324
13594
  });
13325
13595
  }
13326
- &nbsp;
13327
13596
  }
13328
13597
  &nbsp;
13329
13598
  <span class="fstat-no" title="function not covered" > _getFieldKeySelectCompletion(</span>args: any) {
@@ -13433,245 +13702,237 @@ class NaslServer {
13433
13702
  }
13434
13703
  &nbsp;
13435
13704
  /**
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结果
13705
+ * 获取传入节点的 TypeAnnotation
13706
+ *
13707
+ * @description 生成器模式原型
13442
13708
  */
13443
- <span class="fstat-no" title="function not covered" > async </span>getQuickInfoNodesTypeMap(nodes: QuickInfoNodes, lotFlag?: boolean) {
13709
+ private <span class="fstat-no" title="function not covered" >*_</span>getQuickInfoNodesTypeMapWithGenerator(nodes: QuickInfoNodes): Generator&lt;any, QuickInfoMap, any&gt; {
13444
13710
  interface argDetail {
13445
13711
  file: string;
13446
13712
  line: number;
13447
13713
  offset: number;
13448
13714
  }
13715
+ &nbsp;
13716
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
13449
13717
  const args: Array&lt;argDetail&gt; = <span class="cstat-no" title="statement not covered" >[];</span>
13450
13718
  // 要通过自己或者依赖关系拿的
13451
- const getFromOthers: Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation; option: any }&gt; = <span class="cstat-no" title="statement not covered" >new Map();</span>
13719
+ const getFromOthers: QuickInfoMap = <span class="cstat-no" title="statement not covered" >new Map();</span>
13452
13720
  // 总共要返回出去的
13453
- const types: Map&lt;BaseNode, TypeAnnotation | { typeAnnotation: TypeAnnotation; option: any }&gt; = <span class="cstat-no" title="statement not covered" >new Map();</span>
13721
+ const types: QuickInfoMap = <span class="cstat-no" title="statement not covered" >new Map();</span>
13454
13722
  const newQuickInfoNodes: QuickInfoNodes = <span class="cstat-no" title="statement not covered" >[];</span>
13455
13723
  &nbsp;
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>
13724
+ <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>
13725
+ const { node, filePath, item } = <span class="cstat-no" title="statement not covered" >itemDetail;</span>
13726
+ // 先按照顺序占位
13727
+ <span class="cstat-no" title="statement not covered" > types.set(node, null);</span>
13462
13728
  &nbsp;
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>
13729
+ // 获取已知节点类型的类型
13730
+ const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >self.getCurrentNodeKnownTypeAnnotation(node);</span>
13731
+ <span class="cstat-no" title="statement not covered" > yield;</span>
13506
13732
  &nbsp;
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
- };
13733
+ <span class="cstat-no" title="statement not covered" > if (nodeTypeAnnotation) {</span>
13734
+ <span class="cstat-no" title="statement not covered" > types.set(node, nodeTypeAnnotation);</span>
13735
+ <span class="cstat-no" title="statement not covered" > return;</span>
13736
+ }
13737
+ // 要通过自己或者依赖关系拿的,二次遍历
13738
+ <span class="cstat-no" title="statement not covered" > if (['Argument', 'Assignment', 'MatchCase'].includes(node.concept)) {</span>
13739
+ <span class="cstat-no" title="statement not covered" > getFromOthers.set(node, null);</span>
13740
+ }
13741
+ <span class="cstat-no" title="statement not covered" > if (['Return', 'Variable'].includes(node.concept) &amp;&amp; (node as Variable).typeAnnotation) {</span>
13742
+ <span class="cstat-no" title="statement not covered" > types.set(node, (node as Variable).typeAnnotation);</span>
13743
+ <span class="cstat-no" title="statement not covered" > return;</span>
13744
+ }
13745
+ // 如果 入参不是虚拟节点的,就不去请求类型
13746
+ // 只有虚拟节点的入参,才没有类型
13747
+ <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>
13748
+ <span class="cstat-no" title="statement not covered" > return;</span>
13749
+ }
13750
+ <span class="cstat-no" title="statement not covered" > if (</span>
13751
+ ![
13752
+ 'Identifier',
13753
+ 'UnaryExpression',
13754
+ 'BinaryExpression',
13755
+ 'CallLogic',
13756
+ 'CallFunction',
13757
+ 'CallInterface',
13758
+ 'MemberExpression',
13759
+ 'Return',
13760
+ 'Variable',
13761
+ 'Match',
13762
+ 'NewComposite',
13763
+ 'NewList',
13764
+ 'NewMap',
13765
+ 'OqlQueryComponent',
13766
+ 'QueryFieldExpression',
13767
+ 'QueryGroupByExpression',
13768
+ 'Param',
13769
+ 'BackendVariable',
13770
+ 'CallAuthInterface',
13771
+ ].includes(node.concept)
13772
+ )
13773
+ <span class="cstat-no" title="statement not covered" > return;</span>
13774
+ &nbsp;
13775
+ // 要去ls那边获取的
13776
+ <span class="cstat-no" title="statement not covered" > newQuickInfoNodes.push(itemDetail);</span>
13777
+ const fileDetail = <span class="cstat-no" title="statement not covered" >{</span>
13778
+ file: filePath,
13779
+ line: lsp2tspNumber(item.start.line),
13780
+ offset: lsp2tspNumber(item.start.character),
13781
+ };
13514
13782
  &nbsp;
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
- };
13783
+ const getCode = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>ange: SourceMapItem) =&gt; {</span>
13784
+ <span class="cstat-no" title="statement not covered" > return self.tsFiles.get(filePath)?.slice(range.start.offset, range.end.offset) ?? '';</span>
13785
+ };
13518
13786
  &nbsp;
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
+ // 位置计算偏移
13788
+ <span class="cstat-no" title="statement not covered" > if ('getQuickInfoOffset' in node) {</span>
13789
+ <span class="cstat-no" title="statement not covered" > Object.assign(fileDetail, (node as any).getQuickInfoOffset(fileDetail, getCode(item)));</span>
13790
+ }
13523
13791
  &nbsp;
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>
13537
- } else {
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>
13548
- }
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>
13792
+ <span class="cstat-no" title="statement not covered" > yield;</span>
13793
+ &nbsp;
13794
+ // 位置计算偏移2
13795
+ // TODO: 之后考虑把这些偏移量计算全都挪到节点内部去
13796
+ <span class="cstat-no" title="statement not covered" > if (</span>
13797
+ node.concept === 'BinaryExpression' ||
13798
+ node.concept === 'CallFunction' ||
13799
+ node.concept === 'CallInterface'
13800
+ ) {
13801
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13802
+ // 如果没有括号 ,括号就在外面,就 -1
13803
+ // 有括号就找到括号的位置 然后 -1
13804
+ let indexOf = <span class="cstat-no" title="statement not covered" >0;</span>
13805
+ <span class="cstat-no" title="statement not covered" > if (!code.includes('(')) {</span>
13806
+ <span class="cstat-no" title="statement not covered" > indexOf = -1;</span>
13807
+ } else {
13808
+ // 如果有泛型先往前找一找
13809
+ <span class="cstat-no" title="statement not covered" > if (code.includes('&lt;')) {</span>
13810
+ <span class="cstat-no" title="statement not covered" > indexOf = Math.min(code.indexOf('&lt;'), code.indexOf('('));</span>
13569
13811
  } else {
13570
- <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line;</span>
13812
+ <span class="cstat-no" title="statement not covered" > indexOf = code.indexOf('(');</span>
13571
13813
  }
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>
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>
13814
+ const subStr = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13815
+ const codeArr = <span class="cstat-no" title="statement not covered" >subStr?.split('.');</span>
13816
+ const lastLen = <span class="cstat-no" title="statement not covered" >codeArr?.[codeArr.length - 1]?.length;</span>
13817
+ <span class="cstat-no" title="statement not covered" > indexOf = subStr.length - lastLen;</span>
13585
13818
  }
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>
13819
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset += indexOf;</span>
13820
+ } else <span class="cstat-no" title="statement not covered" >if (</span>
13821
+ node.concept === 'MemberExpression' ||
13822
+ node.concept === 'Identifier' ||
13823
+ node.concept === 'QueryFieldExpression' ||
13824
+ node.concept === 'QueryGroupByExpression'
13825
+ ) {
13826
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13827
+ <span class="cstat-no" title="statement not covered" > if (code.includes('.')) {</span>
13828
+ const codeArr = <span class="cstat-no" title="statement not covered" >code?.split('.');</span>
13829
+ const lastLen = <span class="cstat-no" title="statement not covered" >codeArr?.[codeArr.length - 1]?.length;</span>
13830
+ // MemberExpression取最后一位当做类型
13831
+ const indexOf = <span class="cstat-no" title="statement not covered" >code.length - lastLen;</span>
13832
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset = fileDetail.offset + indexOf;</span>
13833
+ }
13834
+ } else <span class="cstat-no" title="statement not covered" >if (node.concept === 'Match') {</span>
13835
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13836
+ // 去查return 后面的返回值,变成函数调用
13837
+ <span class="cstat-no" title="statement not covered" > if (code?.endsWith(';\n')) {</span>
13838
+ <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line - 1;</span>
13606
13839
  } else {
13607
- <span class="cstat-no" title="statement not covered" > delete (node as any).__nodeType;</span>
13840
+ <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line;</span>
13608
13841
  }
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
- }
13842
+ const indexOf = <span class="cstat-no" title="statement not covered" >code.indexOf('return __MatchExpressionFuntion');</span>
13843
+ let newCode = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13844
+ <span class="cstat-no" title="statement not covered" > newCode = newCode.substring(newCode.lastIndexOf('\n'), indexOf);</span>
13845
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset = newCode.length + 'return '.length;</span>
13846
+ } else <span class="cstat-no" title="statement not covered" >if (['NewComposite', 'NewList', 'NewMap'].includes(node.concept)) {</span>
13847
+ const code = <span class="cstat-no" title="statement not covered" >getCode(item);</span>
13848
+ <span class="cstat-no" title="statement not covered" > fileDetail.line = item.end.line;</span>
13849
+ const indexOf = <span class="cstat-no" title="statement not covered" >code.lastIndexOf('return __newComposite');</span>
13850
+ let newCode = <span class="cstat-no" title="statement not covered" >code.substring(0, indexOf);</span>
13851
+ <span class="cstat-no" title="statement not covered" > newCode = newCode.substring(newCode.lastIndexOf('\n'), indexOf);</span>
13852
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset = newCode.length + 'return '.length;</span>
13853
+ } else <span class="cstat-no" title="statement not covered" >if (['OqlQueryComponent'].includes(node.concept)) {</span>
13854
+ <span class="cstat-no" title="statement not covered" > fileDetail.offset += 10;</span>
13855
+ }
13856
+ <span class="cstat-no" title="statement not covered" > args.push(fileDetail);</span>
13857
+ });
13858
+ const resultMap: any = <span class="cstat-no" title="statement not covered" >(yield this.getNaslNodeTypeFull(args))?.response;</span>
13859
+ <span class="cstat-no" title="statement not covered" > yield* utils.wrapForEachToGenerator(args, function* <span class="fstat-no" title="function not covered" >wrapForEach(</span>{ file, line, offset }, index) {</span>
13860
+ const item = (<span class="cstat-no" title="statement not covered" >resultMap as any)?.[file]?.[line]?.[offset];</span>
13861
+ const itemType = <span class="cstat-no" title="statement not covered" >item?.[0]?.nodeType;</span>
13862
+ const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >yield* type2TypeAnnotation(itemType);</span>
13863
+ const {node} = <span class="cstat-no" title="statement not covered" >newQuickInfoNodes[index];</span>
13864
+ &nbsp;
13865
+ <span class="cstat-no" title="statement not covered" > types.set(node, Object.freeze(nodeTypeAnnotation) as TypeAnnotation);</span>
13866
+ &nbsp;
13867
+ const type = <span class="cstat-no" title="statement not covered" >itemType ? (Object.isFrozen(itemType) ? itemType : Object.freeze(itemType)) : null;</span>
13868
+ <span class="cstat-no" title="statement not covered" > if (type) {</span>
13869
+ (<span class="cstat-no" title="statement not covered" >node as any).__nodeType = type;</span>
13870
+ } else {
13871
+ <span class="cstat-no" title="statement not covered" > delete (node as any).__nodeType;</span>
13872
+ }
13873
+ });
13874
+ <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>
13875
+ <span class="cstat-no" title="statement not covered" > if (node instanceof Assignment) {</span>
13876
+ <span class="cstat-no" title="statement not covered" > if (!types.get(node.left)) {</span>
13877
+ <span class="cstat-no" title="statement not covered" > types.set(node.left, types.get(node.right));</span>
13878
+ }
13879
+ } else <span class="cstat-no" title="statement not covered" >if (node instanceof Argument) {</span>
13880
+ // 如果Argument,但是没可以用的类型,就用原来logic的参数类型
13881
+ const argType = <span class="cstat-no" title="statement not covered" >yield* self.getArgumentTypeAnnotationWithGenerator(node, newQuickInfoNodes, types as any);</span>
13882
+ <span class="cstat-no" title="statement not covered" > types.set(node, argType);</span>
13883
+ } else <span class="cstat-no" title="statement not covered" >if (node instanceof MatchCase) {</span>
13884
+ // matchCase的类型
13885
+ // 直接从最后一项的返回值取,有就有没有就没有
13886
+ <span class="cstat-no" title="statement not covered" > if (node.body?.length) {</span>
13887
+ const last = <span class="cstat-no" title="statement not covered" >node.body[node.body.length - 1];</span>
13888
+ <span class="cstat-no" title="statement not covered" > if (types.get(last)) {</span>
13889
+ <span class="cstat-no" title="statement not covered" > types.set(node, types.get(last));</span>
13631
13890
  }
13632
13891
  }
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
- }
13892
+ }
13893
+ });
13894
+ <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>
13895
+ <span class="cstat-no" title="statement not covered" > try {</span>
13896
+ // 因为node可能是经过处理的TypeAnnotation
13897
+ <span class="cstat-no" title="statement not covered" > node.__isCorrectTypeAnnotation = true;</span>
13898
+ <span class="cstat-no" title="statement not covered" > if (value) {</span>
13899
+ <span class="cstat-no" title="statement not covered" > if (node instanceof OqlQueryComponent) {</span>
13900
+ // 自动推导情况
13901
+ const typeAnnotation = <span class="cstat-no" title="statement not covered" >value as TypeAnnotation;</span>
13902
+ <span class="cstat-no" title="statement not covered" > if (!node.typeAnnotation &amp;&amp; typeAnnotation) {</span>
13903
+ <span class="cstat-no" title="statement not covered" > if (typeAnnotation.typeName === 'List' &amp;&amp; typeAnnotation.typeKind === 'generic') {</span>
13904
+ const {typeArguments} = <span class="cstat-no" title="statement not covered" >typeAnnotation;</span>
13905
+ <span class="cstat-no" title="statement not covered" > if (typeArguments.length &amp;&amp; typeArguments[0].isComplexType()) {</span>
13906
+ <span class="cstat-no" title="statement not covered" > delete node.__TypeAnnotation;</span>
13907
+ <span class="cstat-no" title="statement not covered" > return;</span>
13653
13908
  }
13654
13909
  }
13655
13910
  }
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>
13664
13911
  }
13665
- } catch (err) {
13666
- // if (globalThis.window) {
13667
- // console.log(err);
13668
- // }
13912
+ <span class="cstat-no" title="statement not covered" > if (value instanceof TypeAnnotation) {</span>
13913
+ <span class="cstat-no" title="statement not covered" > node.__TypeAnnotation = value;</span>
13914
+ } else <span class="cstat-no" title="statement not covered" >if (value.typeAnnotation) {</span>
13915
+ <span class="cstat-no" title="statement not covered" > node.__TypeAnnotation = value.typeAnnotation;</span>
13916
+ }
13917
+ } else {
13918
+ // 清空原来已经赋值上去的类型,可能原来有现在没有了
13919
+ <span class="cstat-no" title="statement not covered" > delete node.__TypeAnnotation;</span>
13669
13920
  }
13670
- },
13671
- { minimum: 100 },
13672
- );
13921
+ } catch (err) {
13922
+ // if (globalThis.window) {
13923
+ // console.log(err);
13924
+ // }
13925
+ }
13926
+ });
13673
13927
  <span class="cstat-no" title="statement not covered" > return types;</span>
13674
13928
  }
13929
+ &nbsp;
13930
+ /**
13931
+ * 获取传入节点的 TypeAnnotation
13932
+ */
13933
+ <span class="fstat-no" title="function not covered" > getQuickInfoNodesTypeMap(</span>nodes: QuickInfoNodes, flag?: boolean) {
13934
+ <span class="cstat-no" title="statement not covered" > return utils.runGeneratorAsync(this._getQuickInfoNodesTypeMapWithGenerator(nodes));</span>
13935
+ }
13675
13936
  &nbsp;
13676
13937
  // 全量标注并且返回json
13677
13938
  @withQueueExecute('annotation')
@@ -13682,7 +13943,7 @@ class NaslServer {
13682
13943
  const nodes: QuickInfoNodes = <span class="cstat-no" title="statement not covered" >[];</span>
13683
13944
  <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>
13684
13945
  // 先不排除view,传递给后端的时候,去除views下的标注
13685
- <span class="cstat-no" title="statement not covered" > if (!['Structure', 'DataSource', 'Entity', 'Enum', 'Role'].includes(fileNode.concept)) {</span>
13946
+ <span class="cstat-no" title="statement not covered" > if (!['Structure', 'DataSource', 'Entity', 'Enum', 'Role', 'MetadataType'].includes(fileNode.concept)) {</span>
13686
13947
  <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>
13687
13948
  <span class="cstat-no" title="statement not covered" > nodes.push({</span>
13688
13949
  filePath,
@@ -13707,28 +13968,35 @@ class NaslServer {
13707
13968
  }
13708
13969
  &nbsp;
13709
13970
  // 增量标注
13710
- @withQueueExecute('annotation')
13711
- <span class="fstat-no" title="function not covered" > async </span>IncrementalAnnotationJSON(records: DiagnosticRecord[]) {
13971
+ private <span class="fstat-no" title="function not covered" >*_</span>incrementalAnnotationJSONWithGenerator(records: DiagnosticRecord[]) {
13712
13972
  <span class="cstat-no" title="statement not covered" > console.time('增量标注');</span>
13713
13973
  const nodes: QuickInfoNodes = <span class="cstat-no" title="statement not covered" >[];</span>
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>
13974
+ const self = <span class="cstat-no" title="statement not covered" >this;</span>
13975
+ &nbsp;
13976
+ <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>
13977
+ const fileNode = <span class="cstat-no" title="statement not covered" >self.file2NodeMap.get(record.filePath);</span>
13978
+ &nbsp;
13979
+ <span class="cstat-no" title="statement not covered" > if (!fileNode) {</span>
13980
+ <span class="cstat-no" title="statement not covered" > return;</span>
13981
+ }
13982
+ &nbsp;
13717
13983
  <span class="cstat-no" title="statement not covered" > record.id = fileNode.id;</span>
13718
13984
  <span class="cstat-no" title="statement not covered" > record.node = fileNode;</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
- });
13985
+ &nbsp;
13986
+ <span class="cstat-no" title="statement not covered" > if (['Structure', 'DataSource', 'Entity', 'Enum', 'Role', 'MetadataType'].includes(fileNode.concept) || !fileNode.sourceMap) {</span>
13987
+ <span class="cstat-no" title="statement not covered" > return;</span>
13728
13988
  }
13989
+ &nbsp;
13990
+ <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>
13991
+ <span class="cstat-no" title="statement not covered" > nodes.push({</span>
13992
+ filePath: record.filePath,
13993
+ node: nodeItem,
13994
+ item,
13995
+ });
13996
+ });
13729
13997
  });
13730
13998
  &nbsp;
13731
- <span class="cstat-no" title="statement not covered" > await this.getQuickInfoNodesTypeMap(nodes);</span>
13999
+ <span class="cstat-no" title="statement not covered" > yield* this._getQuickInfoNodesTypeMapWithGenerator(nodes);</span>
13732
14000
  <span class="cstat-no" title="statement not covered" > console.timeEnd('增量标注');</span>
13733
14001
  }
13734
14002
  &nbsp;
@@ -13843,33 +14111,12 @@ class NaslServer {
13843
14111
  &nbsp;
13844
14112
  // jsonSerializer 是 CallLogic,其余是 CallFunction
13845
14113
  <span class="cstat-no" title="statement not covered" > if (node instanceof CallFunction || node instanceof CallLogic) {</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>
14114
+ const tzArgIdx = <span class="cstat-no" title="statement not covered" >timeZoneArgumentIndexMap.get(node.calleeName);</span>
13868
14115
  const args = <span class="cstat-no" title="statement not covered" >node.arguments;</span>
13869
14116
  const tzArg = <span class="cstat-no" title="statement not covered" >args ? args[tzArgIdx] : undefined;</span>
13870
14117
  &nbsp;
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>
14118
+ <span class="cstat-no" title="statement not covered" > if (tzArgIdx &amp;&amp; tzArg?.keyword === '时区' &amp;&amp; !isCoreDateTimeType(node.arguments[0])) {</span>
14119
+ <span class="cstat-no" title="statement not covered" > if (!isFunctionWithFixedTimeZoneParam(node.calleeName)) {</span>
13873
14120
  <span class="cstat-no" title="statement not covered" > node.arguments.pop();</span>
13874
14121
  }
13875
14122
  }
@@ -13882,7 +14129,11 @@ class NaslServer {
13882
14129
  * 如果内部表达式的,就用表达式的,如果没有就试试用默认值的
13883
14130
  * 获取logic的默认值和原来Arg的类型和默认值对应
13884
14131
  */
13885
- <span class="fstat-no" title="function not covered" > getArgumentTypeAnnotation(</span>node: Argument, QuickInfoNodes: QuickInfoNodes, types: Map&lt;BaseNode, TypeAnnotation&gt;) {
14132
+ <span class="fstat-no" title="function not covered" > *g</span>etArgumentTypeAnnotationWithGenerator(
14133
+ node: Argument,
14134
+ QuickInfoNodes: QuickInfoNodes,
14135
+ types: Map&lt;BaseNode, TypeAnnotation&gt;,
14136
+ ): Generator&lt;void, { typeAnnotation: TypeAnnotation; option: object }, void&gt; {
13886
14137
  // 直接复用内部expression的type类型
13887
14138
  <span class="cstat-no" title="statement not covered" > if (</span>
13888
14139
  node.parentNode instanceof CallLogic &amp;&amp;
@@ -13894,7 +14145,7 @@ class NaslServer {
13894
14145
  <span class="cstat-no" title="statement not covered" > if (nodeType &amp;&amp; Array.isArray(nodeType.fnParams)) {</span>
13895
14146
  const index = <span class="cstat-no" title="statement not covered" >node.parentNode.arguments.indexOf(node);</span>
13896
14147
  const type = <span class="cstat-no" title="statement not covered" >nodeType.fnParams[index]?.typeInfo;</span>
13897
- const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >type2TypeAnnotation(type);</span>
14148
+ const nodeTypeAnnotation = <span class="cstat-no" title="statement not covered" >yield* type2TypeAnnotation(type);</span>
13898
14149
  <span class="cstat-no" title="statement not covered" > if (nodeTypeAnnotation) {</span>
13899
14150
  <span class="cstat-no" title="statement not covered" > return {</span>
13900
14151
  typeAnnotation: nodeTypeAnnotation,
@@ -13902,6 +14153,7 @@ class NaslServer {
13902
14153
  };
13903
14154
  }
13904
14155
  }
14156
+ <span class="cstat-no" title="statement not covered" > yield;</span>
13905
14157
  }
13906
14158
  // 获取返回值结果里找到父级的callLogic || CallInterface的类型填充进去Argument
13907
14159
  const App = <span class="cstat-no" title="statement not covered" >node.app;</span>
@@ -13916,7 +14168,8 @@ class NaslServer {
13916
14168
  }
13917
14169
  }
13918
14170
  // 用户自己声明的用用户的
13919
- const callObj = <span class="cstat-no" title="statement not covered" >App.findNodeByCompleteName(`${parent.calleeNamespace }.${ parent.calleeName}`);</span>
14171
+ const callObj = <span class="cstat-no" title="statement not covered" >App.findNodeByCompleteName(`${parent.calleeNamespace}.${parent.calleeName}`);</span>
14172
+ <span class="cstat-no" title="statement not covered" > yield;</span>
13920
14173
  const index = <span class="cstat-no" title="statement not covered" >parent.arguments.indexOf(node);</span>
13921
14174
  const param = <span class="cstat-no" title="statement not covered" >callObj?.params?.[index] || {};</span>
13922
14175
  // 取出参数的类型
@@ -14008,7 +14261,7 @@ class NaslServer {
14008
14261
  * @param targetNode 当前操作的节点
14009
14262
  * @param result toTs生成的内容
14010
14263
  */
14011
- <span class="fstat-no" title="function not covered" > async </span>handleDelete(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType&lt;Structure['toEmbeddedTSFile']&gt;) {
14264
+ <span class="fstat-no" title="function not covered" > async </span>handleDelete(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult) {
14012
14265
  const filePath = (<span class="cstat-no" title="statement not covered" >fileNode as FileNode).getEmbeddedFilePath();</span>
14013
14266
  // 如果要删除,而且当前要删Logic就直接删除并且清除错误
14014
14267
  /**
@@ -14048,7 +14301,7 @@ class NaslServer {
14048
14301
  * @param targetNode 触发修改的节点
14049
14302
  * @param result 生成代码的code 和位置信息
14050
14303
  */
14051
- <span class="fstat-no" title="function not covered" > async </span>handleChange(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType&lt;Structure['toEmbeddedTSFile']&gt;, action: string) {
14304
+ <span class="fstat-no" title="function not covered" > async </span>handleChange(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult, action: string) {
14052
14305
  <span class="cstat-no" title="statement not covered" > this.file2NodeMap.set(result.filePath, fileNode);</span>
14053
14306
  &nbsp;
14054
14307
  const outputFiles = <span class="cstat-no" title="statement not covered" >[{ file: result.filePath, fileContent: result.code }];</span>
@@ -14093,7 +14346,7 @@ class NaslServer {
14093
14346
  * @param isRename 是不是修改名字
14094
14347
  * @param oldFilePath 如果是改名,文件级别的才会有这个参数,用于文件新增替换
14095
14348
  */
14096
- <span class="fstat-no" title="function not covered" > async </span>handleRename(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType&lt;Structure['toEmbeddedTSFile']&gt;, oldFilePath?: string) {
14349
+ <span class="fstat-no" title="function not covered" > async </span>handleRename(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult, oldFilePath?: string) {
14097
14350
  // rename 场景
14098
14351
  const outputFiles = <span class="cstat-no" title="statement not covered" >[{ file: result.filePath, fileContent: result.code }];</span>
14099
14352
  // 如果是要修改顶级文件名
@@ -14197,7 +14450,7 @@ class NaslServer {
14197
14450
  const fileNodeChildren = <span class="cstat-no" title="statement not covered" >[...fileNode.views, ...fileNode.variables];</span>
14198
14451
  <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>
14199
14452
  const fileNodeItem = <span class="cstat-no" title="statement not covered" >fileNodeChildren[i];</span>
14200
- const result = (<span class="cstat-no" title="statement not covered" >fileNodeItem as FileNode).toEmbeddedTSFile();</span>
14453
+ const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator((fileNodeItem as FileNode).toEmbeddedTSFile());</span>
14201
14454
  <span class="cstat-no" title="statement not covered" > fileNodeItem.sourceMap = result.sourceMap;</span>
14202
14455
  <span class="cstat-no" title="statement not covered" > if (action === 'create') {</span>
14203
14456
  <span class="cstat-no" title="statement not covered" > await this.handleChange(fileNodeItem, fileNodeItem, result, action);</span>
@@ -14220,7 +14473,7 @@ class NaslServer {
14220
14473
  const fileNodeChildren = <span class="cstat-no" title="statement not covered" >fileNode.children;</span>
14221
14474
  <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>
14222
14475
  const fileNodeItem = <span class="cstat-no" title="statement not covered" >fileNodeChildren[i];</span>
14223
- const result = (<span class="cstat-no" title="statement not covered" >fileNodeItem as FileNode).toEmbeddedTSFile();</span>
14476
+ const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator((fileNodeItem as FileNode).toEmbeddedTSFile());</span>
14224
14477
  <span class="cstat-no" title="statement not covered" > fileNodeItem.sourceMap = result.sourceMap;</span>
14225
14478
  <span class="cstat-no" title="statement not covered" > if (action === 'create') {</span>
14226
14479
  <span class="cstat-no" title="statement not covered" > await this.handleChange(fileNodeItem, fileNodeItem, result, action);</span>
@@ -14244,8 +14497,7 @@ class NaslServer {
14244
14497
  <span class="cstat-no" title="statement not covered" > isChangeInterface = true;</span>
14245
14498
  }
14246
14499
  const module: Module = <span class="cstat-no" title="statement not covered" >targetNode as 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>
14500
+ const results = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(this.contentToFile(module));</span>
14249
14501
  <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>
14250
14502
  const result = <span class="cstat-no" title="statement not covered" >results[i];</span>
14251
14503
  const node = <span class="cstat-no" title="statement not covered" >this.file2NodeMap.get(result.filePath);</span>
@@ -14272,7 +14524,7 @@ class NaslServer {
14272
14524
  <span class="cstat-no" title="statement not covered" > if (fileNode instanceof DataSource) {</span>
14273
14525
  (<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>
14274
14526
  <span class="cstat-no" title="statement not covered" > try {</span>
14275
- const result = <span class="cstat-no" title="statement not covered" >entity.toEmbeddedTSFile();</span>
14527
+ const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(entity.toEmbeddedTSFile());</span>
14276
14528
  const parentPath = <span class="cstat-no" title="statement not covered" >oldpath.replace('.ts', '/');</span>
14277
14529
  const currentOldPath = <span class="cstat-no" title="statement not covered" >`${parentPath }/entities/${ entity.name }.ts`;</span>
14278
14530
  // 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
@@ -14309,20 +14561,25 @@ class NaslServer {
14309
14561
  <span class="cstat-no" title="statement not covered" > return;</span>
14310
14562
  }
14311
14563
  &nbsp;
14564
+ // debugger;
14312
14565
  <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
14313
14566
  <span class="cstat-no" title="statement not covered" > console.time('重新生成 TS 文件');</span>
14314
14567
  }
14315
- const result = (<span class="cstat-no" title="statement not covered" >fileNode as FileNode).toEmbeddedTSFile();</span>
14568
+ &nbsp;
14569
+ const fileTsPath = <span class="cstat-no" title="statement not covered" >fileNode.getEmbeddedFilePath();</span>
14570
+ const result = <span class="cstat-no" title="statement not covered" >await utils.timeSlicingWithGenerator(fileNode.toEmbeddedTSFile());</span>
14571
+ &nbsp;
14316
14572
  <span class="cstat-no" title="statement not covered" > if (process.env.NODE_ENV === 'development') {</span>
14317
14573
  <span class="cstat-no" title="statement not covered" > console.timeEnd('重新生成 TS 文件');</span>
14318
- <span class="cstat-no" title="statement not covered" > console.log('重新生成 TS 文件', (fileNode as FileNode).getEmbeddedFilePath());</span>
14574
+ <span class="cstat-no" title="statement not covered" > console.log('重新生成 TS 文件', fileTsPath);</span>
14319
14575
  }
14320
14576
  &nbsp;
14321
14577
  // 当前操作的节点
14322
14578
  // 如果当前没有生成tsFile
14323
- <span class="cstat-no" title="statement not covered" > if (!result) {</span>
14579
+ <span class="cstat-no" title="statement not covered" > if (!result.sourceMap) {</span>
14324
14580
  <span class="cstat-no" title="statement not covered" > return;</span>
14325
14581
  }
14582
+ &nbsp;
14326
14583
  // 修改触发修改文件
14327
14584
  <span class="cstat-no" title="statement not covered" > this._debugInFileStorage(targetNode, [</span>
14328
14585
  {
@@ -14332,6 +14589,7 @@ class NaslServer {
14332
14589
  ]);
14333
14590
  &nbsp;
14334
14591
  <span class="cstat-no" title="statement not covered" > fileNode.sourceMap = result.sourceMap;</span>
14592
+ &nbsp;
14335
14593
  <span class="cstat-no" title="statement not covered" > if (action === 'update' || action === 'create') {</span>
14336
14594
  <span class="cstat-no" title="statement not covered" > if ($event?.field !== 'name') {</span>
14337
14595
  <span class="cstat-no" title="statement not covered" > await this.handleChange(fileNode, targetNode, result, action);</span>
@@ -14386,7 +14644,7 @@ export { NaslServer };
14386
14644
  <div class='footer quiet pad2 space-top1 center small'>
14387
14645
  Code coverage generated by
14388
14646
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
14389
- at 2023-10-18T11:36:07.885Z
14647
+ at 2023-12-14T04:42:19.254Z
14390
14648
  </div>
14391
14649
  <script src="../../prettify.js"></script>
14392
14650
  <script>