@lcap/nasl 3.4.0-beta.9 → 3.4.1-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 (349) hide show
  1. package/.nyc_output/{559608df-ab15-4969-acf0-5239dacd6111.json → d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json} +1 -1
  2. package/.nyc_output/processinfo/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -1
  4. package/coverage/index.html +138 -153
  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 +57 -153
  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 +7 -43
  12. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +8 -59
  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 +180 -609
  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 +21 -36
  33. package/coverage/src/common/index.ts.html +4 -7
  34. package/coverage/src/concepts/Abort__.ts.html +9 -39
  35. package/coverage/src/concepts/Anchor__.ts.html +29 -86
  36. package/coverage/src/concepts/AnonymousFunction__.ts.html +169 -262
  37. package/coverage/src/concepts/App__.ts.html +152 -1205
  38. package/coverage/src/concepts/Argument__.ts.html +51 -120
  39. package/coverage/src/concepts/Assignee__.ts.html +34 -124
  40. package/coverage/src/concepts/AssignmentLine__.ts.html +15 -48
  41. package/coverage/src/concepts/Assignment__.ts.html +69 -147
  42. package/coverage/src/concepts/Attribute__.ts.html +14 -41
  43. package/coverage/src/concepts/AuthInterface__.ts.html +6 -9
  44. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +144 -108
  45. package/coverage/src/concepts/AuthLogic__.ts.html +6 -18
  46. package/coverage/src/concepts/BackendVariable__.ts.html +51 -135
  47. package/coverage/src/concepts/Backend__.ts.html +28 -106
  48. package/coverage/src/concepts/BatchAssignment__.ts.html +169 -274
  49. package/coverage/src/concepts/BinaryExpression__.ts.html +110 -188
  50. package/coverage/src/concepts/BindAttribute__.ts.html +93 -213
  51. package/coverage/src/concepts/BindDirective__.ts.html +26 -131
  52. package/coverage/src/concepts/BindEvent__.ts.html +71 -167
  53. package/coverage/src/concepts/BindStyle__.ts.html +21 -78
  54. package/coverage/src/concepts/BooleanLiteral__.ts.html +20 -47
  55. package/coverage/src/concepts/CallAuthInterface__.ts.html +48 -105
  56. package/coverage/src/concepts/CallConnector__.ts.html +35 -62
  57. package/coverage/src/concepts/CallFunction__.ts.html +160 -328
  58. package/coverage/src/concepts/CallInterface__.ts.html +60 -93
  59. package/coverage/src/concepts/CallLogic__.ts.html +427 -544
  60. package/coverage/src/concepts/CallQueryComponent__.ts.html +93 -126
  61. package/coverage/src/concepts/Comment__.ts.html +10 -43
  62. package/coverage/src/concepts/CompletionProperty__.ts.html +13 -40
  63. package/coverage/src/concepts/ConfigGroup__.ts.html +20 -47
  64. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +19 -22
  65. package/coverage/src/concepts/ConfigProperty__.ts.html +40 -97
  66. package/coverage/src/concepts/Configuration__.ts.html +21 -48
  67. package/coverage/src/concepts/Connection__.ts.html +22 -97
  68. package/coverage/src/concepts/ConnectorTrigger__.ts.html +6 -9
  69. package/coverage/src/concepts/Connector__.ts.html +38 -161
  70. package/coverage/src/concepts/Constant__.ts.html +24 -84
  71. package/coverage/src/concepts/DataSource__.ts.html +57 -111
  72. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +6 -9
  73. package/coverage/src/concepts/Destination__.ts.html +55 -97
  74. package/coverage/src/concepts/End__.ts.html +26 -56
  75. package/coverage/src/concepts/EntityIndex__.ts.html +10 -40
  76. package/coverage/src/concepts/EntityProperty__.ts.html +56 -164
  77. package/coverage/src/concepts/Entity__.ts.html +91 -169
  78. package/coverage/src/concepts/EnumItem__.ts.html +10 -40
  79. package/coverage/src/concepts/Enum__.ts.html +24 -84
  80. package/coverage/src/concepts/Event__.ts.html +14 -41
  81. package/coverage/src/concepts/ExternalDestination__.ts.html +21 -75
  82. package/coverage/src/concepts/ForEachStatement__.ts.html +95 -143
  83. package/coverage/src/concepts/FrontendLibrary__.ts.html +20 -71
  84. package/coverage/src/concepts/FrontendVariable__.ts.html +1 -1
  85. package/coverage/src/concepts/Frontend__.ts.html +57 -213
  86. package/coverage/src/concepts/Function__.ts.html +86 -239
  87. package/coverage/src/concepts/Identifier__.ts.html +73 -103
  88. package/coverage/src/concepts/IfStatement__.ts.html +75 -138
  89. package/coverage/src/concepts/Integration__.ts.html +19 -70
  90. package/coverage/src/concepts/InterfaceParam__.ts.html +21 -78
  91. package/coverage/src/concepts/Interface__.ts.html +60 -162
  92. package/coverage/src/concepts/JSBlock__.ts.html +9 -39
  93. package/coverage/src/concepts/JavaLogic__.ts.html +9 -42
  94. package/coverage/src/concepts/LogicItem__.ts.html +26 -56
  95. package/coverage/src/concepts/Logic__.ts.html +322 -409
  96. package/coverage/src/concepts/MatchCase__.ts.html +97 -181
  97. package/coverage/src/concepts/Match__.ts.html +63 -135
  98. package/coverage/src/concepts/MemberExpression__.ts.html +128 -185
  99. package/coverage/src/concepts/MicroApp__.ts.html +6 -9
  100. package/coverage/src/concepts/Module__.ts.html +36 -690
  101. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +14 -41
  102. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +14 -41
  103. package/coverage/src/concepts/Namespace__.ts.html +92 -359
  104. package/coverage/src/concepts/NewComposite__.ts.html +146 -326
  105. package/coverage/src/concepts/NewList__.ts.html +57 -195
  106. package/coverage/src/concepts/NewMap__.ts.html +63 -168
  107. package/coverage/src/concepts/New__.ts.html +9 -39
  108. package/coverage/src/concepts/NullLiteral__.ts.html +9 -36
  109. package/coverage/src/concepts/NumericLiteral__.ts.html +32 -86
  110. package/coverage/src/concepts/OqlQueryComponent__.ts.html +35 -161
  111. package/coverage/src/concepts/OverriddenLogic__.ts.html +201 -324
  112. package/coverage/src/concepts/Param__.ts.html +80 -155
  113. package/coverage/src/concepts/Point__.ts.html +6 -9
  114. package/coverage/src/concepts/ProcessComponent__.ts.html +21 -72
  115. package/coverage/src/concepts/ProcessElement__.ts.html +116 -524
  116. package/coverage/src/concepts/ProcessOutcome__.ts.html +13 -85
  117. package/coverage/src/concepts/ProcessOutcomes__.ts.html +13 -85
  118. package/coverage/src/concepts/Process__.ts.html +70 -217
  119. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +16 -67
  120. package/coverage/src/concepts/QueryFieldExpression__.ts.html +11 -41
  121. package/coverage/src/concepts/QueryFromExpression__.ts.html +21 -81
  122. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +19 -70
  123. package/coverage/src/concepts/QueryJoinExpression__.ts.html +25 -85
  124. package/coverage/src/concepts/QueryLimitExpression__.ts.html +20 -77
  125. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +20 -80
  126. package/coverage/src/concepts/QuerySelectExpression__.ts.html +15 -42
  127. package/coverage/src/concepts/Rect__.ts.html +6 -9
  128. package/coverage/src/concepts/Return__.ts.html +50 -131
  129. package/coverage/src/concepts/Role__.ts.html +15 -45
  130. package/coverage/src/concepts/SelectMembers__.ts.html +24 -81
  131. package/coverage/src/concepts/Slot__.ts.html +13 -40
  132. package/coverage/src/concepts/SqlQueryComponent__.ts.html +24 -84
  133. package/coverage/src/concepts/Start__.ts.html +14 -41
  134. package/coverage/src/concepts/StringInterpolation__.ts.html +46 -127
  135. package/coverage/src/concepts/StringLiteral__.ts.html +32 -62
  136. package/coverage/src/concepts/StructureProperty__.ts.html +29 -86
  137. package/coverage/src/concepts/Structure__.ts.html +38 -122
  138. package/coverage/src/concepts/SwitchCase__.ts.html +36 -87
  139. package/coverage/src/concepts/SwitchStatement__.ts.html +33 -90
  140. package/coverage/src/concepts/Theme__.ts.html +12 -15
  141. package/coverage/src/concepts/Transactional__.ts.html +6 -9
  142. package/coverage/src/concepts/TriggerEvent__.ts.html +14 -41
  143. package/coverage/src/concepts/TriggerLauncher__.ts.html +13 -46
  144. package/coverage/src/concepts/TypeAnnotation__.ts.html +117 -348
  145. package/coverage/src/concepts/TypeParam__.ts.html +12 -42
  146. package/coverage/src/concepts/UnaryExpression__.ts.html +27 -105
  147. package/coverage/src/concepts/Unparsed__.ts.html +12 -36
  148. package/coverage/src/concepts/UseComponent__.ts.html +6 -9
  149. package/coverage/src/concepts/ValidationRule__.ts.html +48 -87
  150. package/coverage/src/concepts/Variable__.ts.html +46 -127
  151. package/coverage/src/concepts/ViewBlock__.ts.html +6 -9
  152. package/coverage/src/concepts/ViewComponent__.ts.html +24 -99
  153. package/coverage/src/concepts/ViewElement__.ts.html +288 -498
  154. package/coverage/src/concepts/View__.ts.html +170 -482
  155. package/coverage/src/concepts/WhileStatement__.ts.html +55 -118
  156. package/coverage/src/concepts/basics/stdlib/index.html +1 -1
  157. package/coverage/src/concepts/basics/stdlib/index.ts.html +1 -1
  158. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +1 -1
  159. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +1 -1
  160. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +1 -1
  161. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +1 -1
  162. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +1 -1
  163. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +1 -1
  164. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +1 -1
  165. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +1 -1
  166. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +1 -1
  167. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +1 -1
  168. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +2 -2
  169. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +1 -1
  170. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +3 -3
  171. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1 -1
  172. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +1 -1
  173. package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +1 -1
  174. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +1 -1
  175. package/coverage/src/concepts/basics/types/index.html +1 -1
  176. package/coverage/src/concepts/basics/types/index.ts.html +1 -1
  177. package/coverage/src/concepts/index.html +964 -1024
  178. package/coverage/src/concepts/index.ts.html +1 -1
  179. package/coverage/src/concepts/index__.ts.html +4 -16
  180. package/coverage/src/config.ts.html +1 -1
  181. package/coverage/src/decorators/index.html +5 -5
  182. package/coverage/src/decorators/index.ts.html +32 -32
  183. package/coverage/src/decorators/promise.ts.html +10 -10
  184. package/coverage/src/eventBus.ts.html +1 -1
  185. package/coverage/src/generator/compileComponent.ts.html +1 -1
  186. package/coverage/src/generator/genBundleFiles.ts.html +23 -17
  187. package/coverage/src/generator/genHash.ts.html +1 -1
  188. package/coverage/src/generator/genMetaData.ts.html +16 -103
  189. package/coverage/src/generator/genReleaseBody.ts.html +43 -43
  190. package/coverage/src/generator/icestark.ts.html +4 -10
  191. package/coverage/src/generator/index.html +21 -21
  192. package/coverage/src/generator/index.ts.html +1 -1
  193. package/coverage/src/generator/microApp.ts.html +1 -1
  194. package/coverage/src/generator/permission.ts.html +20 -92
  195. package/coverage/src/generator/qiankun.ts.html +3 -9
  196. package/coverage/src/generator/styleReplacer.ts.html +1 -1
  197. package/coverage/src/index.html +7 -7
  198. package/coverage/src/index.ts.html +4 -4
  199. package/coverage/src/manager/diagnostic.ts.html +14 -11
  200. package/coverage/src/manager/index.html +13 -13
  201. package/coverage/src/manager/stepRecorder.ts.html +1 -1
  202. package/coverage/src/natural/genNaturalTS.ts.html +1 -1
  203. package/coverage/src/natural/index.html +15 -15
  204. package/coverage/src/natural/index.ts.html +1 -1
  205. package/coverage/src/natural/naslStdlibMap.ts.html +1 -1
  206. package/coverage/src/natural/transformTSCode.ts.html +18 -78
  207. package/coverage/src/sentry/index.html +14 -14
  208. package/coverage/src/sentry/index.ts.html +32 -38
  209. package/coverage/src/server/createUiTs.ts.html +6 -15
  210. package/coverage/src/server/entity2LogicNamespace.ts.html +9 -9
  211. package/coverage/src/server/event.js.html +1 -1
  212. package/coverage/src/server/extendBaseNode.ts.html +43 -73
  213. package/coverage/src/server/formatTsUtils.ts.html +28 -31
  214. package/coverage/src/server/getConnector.ts.html +1 -1
  215. package/coverage/src/server/getExtensionModules.ts.html +1 -1
  216. package/coverage/src/server/getFunctions.ts.html +1 -1
  217. package/coverage/src/server/getInterfaces.ts.html +1 -1
  218. package/coverage/src/server/getLogging.ts.html +1 -1
  219. package/coverage/src/server/getLogics.ts.html +8 -20
  220. package/coverage/src/server/getMemberIdentifier.ts.html +120 -231
  221. package/coverage/src/server/getProcessComponents.ts.html +1 -1
  222. package/coverage/src/server/getProcesses.ts.html +13 -163
  223. package/coverage/src/server/getValidates.ts.html +1 -1
  224. package/coverage/src/server/index.html +63 -63
  225. package/coverage/src/server/index.ts.html +3 -6
  226. package/coverage/src/server/naslServer.ts.html +949 -1207
  227. package/coverage/src/server/naslStdlibMap.ts.html +1 -1
  228. package/coverage/src/server/process2LogicNamespace.ts.html +1 -1
  229. package/coverage/src/server/translator.ts.html +14 -59
  230. package/coverage/src/service/creator/add.configs.js.html +9 -27
  231. package/coverage/src/service/creator/errHandles.js.html +37 -28
  232. package/coverage/src/service/creator/index.html +23 -23
  233. package/coverage/src/service/creator/index.js.html +1 -1
  234. package/coverage/src/service/datasource/api.js.html +1 -1
  235. package/coverage/src/service/datasource/index.html +1 -1
  236. package/coverage/src/service/datasource/index.js.html +1 -1
  237. package/coverage/src/service/logic/api.js.html +1 -1
  238. package/coverage/src/service/logic/index.html +1 -1
  239. package/coverage/src/service/logic/index.js.html +1 -1
  240. package/coverage/src/service/storage/api.js.html +1 -1
  241. package/coverage/src/service/storage/index.html +29 -29
  242. package/coverage/src/service/storage/index.ts.html +1 -1
  243. package/coverage/src/service/storage/init.ts.html +600 -1533
  244. package/coverage/src/service/storage/jsoner.ts.html +13 -76
  245. package/coverage/src/service/storage/map.ts.html +3 -3
  246. package/coverage/src/service/storage/service.ts.html +1 -1
  247. package/coverage/src/service/storage/storagePoint.ts.html +1 -1
  248. package/coverage/src/templator/genCallComponentLogic.ts.html +1 -1
  249. package/coverage/src/templator/genCreateBlock.ts.html +58 -37
  250. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +19 -19
  251. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +89 -71
  252. package/coverage/src/templator/genEditTableBlock.ts.html +13 -76
  253. package/coverage/src/templator/genEnumSelectBlock.ts.html +1 -1
  254. package/coverage/src/templator/genGetBlock.ts.html +1 -1
  255. package/coverage/src/templator/genGridViewBlock.ts.html +1 -1
  256. package/coverage/src/templator/genListViewBlock.ts.html +1 -1
  257. package/coverage/src/templator/genQueryComponent.ts.html +1 -1
  258. package/coverage/src/templator/genSelectBlock.ts.html +1 -1
  259. package/coverage/src/templator/genTableBlock.ts.html +3 -66
  260. package/coverage/src/templator/genUpdateBlock.ts.html +32 -35
  261. package/coverage/src/templator/index.html +38 -38
  262. package/coverage/src/templator/index.ts.html +1 -1
  263. package/coverage/src/templator/utils.ts.html +11 -74
  264. package/coverage/src/translator/constant.ts.html +1 -1
  265. package/coverage/src/translator/index.html +21 -21
  266. package/coverage/src/translator/index.ts.html +1 -1
  267. package/coverage/src/translator/utils.ts.html +68 -389
  268. package/coverage/src/utils/cookie.ts.html +4 -4
  269. package/coverage/src/utils/env.ts.html +1 -1
  270. package/coverage/src/utils/index.html +49 -34
  271. package/coverage/src/utils/index.ts.html +22 -115
  272. package/coverage/src/utils/logger.ts.html +1 -1
  273. package/coverage/src/utils/sortTsString.ts.html +10 -25
  274. package/coverage/src/utils/string.ts.html +8 -110
  275. package/coverage/src/utils/time-slicing.ts.html +1 -1
  276. package/coverage/src/utils/traverse.ts.html +1 -1
  277. package/coverage/src/utils/window.ts.html +1 -1
  278. package/out/automate/engine/utils.d.ts +1 -1
  279. package/out/automate/engine/utils.js +1 -5
  280. package/out/automate/engine/utils.js.map +1 -1
  281. package/out/common/BaseNode.d.ts +2 -0
  282. package/out/common/BaseNode.js +24 -1
  283. package/out/common/BaseNode.js.map +1 -1
  284. package/out/concepts/BindAttribute__.js +3 -0
  285. package/out/concepts/BindAttribute__.js.map +1 -1
  286. package/out/concepts/CallLogic__.js +18 -22
  287. package/out/concepts/CallLogic__.js.map +1 -1
  288. package/out/concepts/Destination__.d.ts +1 -1
  289. package/out/concepts/Destination__.js +2 -2
  290. package/out/concepts/Destination__.js.map +1 -1
  291. package/out/concepts/Logic__.js +22 -5
  292. package/out/concepts/Logic__.js.map +1 -1
  293. package/out/concepts/ProcessElement__.js +9 -1
  294. package/out/concepts/ProcessElement__.js.map +1 -1
  295. package/out/concepts/ViewElement__.d.ts +1 -0
  296. package/out/concepts/ViewElement__.js +8 -1
  297. package/out/concepts/ViewElement__.js.map +1 -1
  298. package/out/concepts/View__.js +1 -1
  299. package/out/concepts/View__.js.map +1 -1
  300. package/out/generator/genBundleFiles.d.ts +1 -0
  301. package/out/generator/genBundleFiles.js +4 -1
  302. package/out/generator/genBundleFiles.js.map +1 -1
  303. package/out/server/getProcesses.js +3 -3
  304. package/out/server/getProcesses.js.map +1 -1
  305. package/out/server/naslServer.js +9 -2
  306. package/out/server/naslServer.js.map +1 -1
  307. package/out/utils/i18nInfo.js +7 -2
  308. package/out/utils/i18nInfo.js.map +1 -1
  309. package/package.json +1 -1
  310. package/src/automate/engine/utils.js +1 -5
  311. package/src/common/BaseNode.ts +23 -2
  312. package/src/concepts/BindAttribute__.ts +2 -0
  313. package/src/concepts/CallLogic__.ts +21 -22
  314. package/src/concepts/Destination__.ts +2 -2
  315. package/src/concepts/Logic__.ts +36 -22
  316. package/src/concepts/ProcessElement__.ts +8 -1
  317. package/src/concepts/ViewElement__.ts +11 -2
  318. package/src/concepts/View__.ts +1 -1
  319. package/src/generator/genBundleFiles.ts +8 -3
  320. package/src/server/getProcesses.ts +3 -3
  321. package/src/server/naslServer.ts +9 -2
  322. package/src/utils/i18nInfo.ts +7 -2
  323. package/.nyc_output/processinfo/559608df-ab15-4969-acf0-5239dacd6111.json +0 -1
  324. package/coverage/src/common/utils.ts.html +0 -136
  325. package/coverage/src/concepts/AbstractInterface__.ts.html +0 -280
  326. package/coverage/src/concepts/Block__.ts.html +0 -910
  327. package/coverage/src/concepts/CountersignPolicy__.ts.html +0 -316
  328. package/coverage/src/concepts/DefaultValue__.ts.html +0 -1000
  329. package/coverage/src/concepts/I18nInfo__.ts.html +0 -436
  330. package/coverage/src/concepts/ImportedInterface__.ts.html +0 -268
  331. package/coverage/src/concepts/MetadataType__.ts.html +0 -2053
  332. package/coverage/src/concepts/MultiApprovalPolicy__.ts.html +0 -292
  333. package/coverage/src/concepts/SequentialPolicy__.ts.html +0 -259
  334. package/coverage/src/concepts/StaticString__.ts.html +0 -403
  335. package/coverage/src/concepts/basics/constants.ts.html +0 -88
  336. package/coverage/src/concepts/basics/index.html +0 -116
  337. package/coverage/src/concepts/utils/asserts.ts.html +0 -27967
  338. package/coverage/src/concepts/utils/index.html +0 -116
  339. package/coverage/src/utils/i18nInfo.ts.html +0 -166
  340. package/coverage/src/utils/time-slicing/constant.ts.html +0 -196
  341. package/coverage/src/utils/time-slicing/controller.ts.html +0 -1144
  342. package/coverage/src/utils/time-slicing/index.html +0 -236
  343. package/coverage/src/utils/time-slicing/index.ts.html +0 -103
  344. package/coverage/src/utils/time-slicing/page-state.ts.html +0 -121
  345. package/coverage/src/utils/time-slicing/performance.ts.html +0 -253
  346. package/coverage/src/utils/time-slicing/runner.ts.html +0 -241
  347. package/coverage/src/utils/time-slicing/tool.ts.html +0 -220
  348. package/coverage/src/utils/time-slicing/utils.ts.html +0 -355
  349. package/coverage/src/utils/time-slicing/wrapper.ts.html +0 -259
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">5.48% </span>
26
+ <span class="strong">6.39% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>35/638</span>
28
+ <span class='fraction'>30/469</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0.52% </span>
33
+ <span class="strong">0.66% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/384</span>
35
+ <span class='fraction'>2/300</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">1.07% </span>
40
+ <span class="strong">1.49% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/93</span>
42
+ <span class='fraction'>1/67</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">5.67% </span>
47
+ <span class="strong">6.69% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>35/617</span>
49
+ <span class='fraction'>30/448</span>
50
50
  </div>
51
51
 
52
52
 
@@ -955,578 +955,26 @@
955
955
  <a name='L890'></a><a href='#L890'>890</a>
956
956
  <a name='L891'></a><a href='#L891'>891</a>
957
957
  <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
1136
- <a name='L1071'></a><a href='#L1071'>1071</a>
1137
- <a name='L1072'></a><a href='#L1072'>1072</a>
1138
- <a name='L1073'></a><a href='#L1073'>1073</a>
1139
- <a name='L1074'></a><a href='#L1074'>1074</a>
1140
- <a name='L1075'></a><a href='#L1075'>1075</a>
1141
- <a name='L1076'></a><a href='#L1076'>1076</a>
1142
- <a name='L1077'></a><a href='#L1077'>1077</a>
1143
- <a name='L1078'></a><a href='#L1078'>1078</a>
1144
- <a name='L1079'></a><a href='#L1079'>1079</a>
1145
- <a name='L1080'></a><a href='#L1080'>1080</a>
1146
- <a name='L1081'></a><a href='#L1081'>1081</a>
1147
- <a name='L1082'></a><a href='#L1082'>1082</a>
1148
- <a name='L1083'></a><a href='#L1083'>1083</a>
1149
- <a name='L1084'></a><a href='#L1084'>1084</a>
1150
- <a name='L1085'></a><a href='#L1085'>1085</a>
1151
- <a name='L1086'></a><a href='#L1086'>1086</a>
1152
- <a name='L1087'></a><a href='#L1087'>1087</a>
1153
- <a name='L1088'></a><a href='#L1088'>1088</a>
1154
- <a name='L1089'></a><a href='#L1089'>1089</a>
1155
- <a name='L1090'></a><a href='#L1090'>1090</a>
1156
- <a name='L1091'></a><a href='#L1091'>1091</a>
1157
- <a name='L1092'></a><a href='#L1092'>1092</a>
1158
- <a name='L1093'></a><a href='#L1093'>1093</a>
1159
- <a name='L1094'></a><a href='#L1094'>1094</a>
1160
- <a name='L1095'></a><a href='#L1095'>1095</a>
1161
- <a name='L1096'></a><a href='#L1096'>1096</a>
1162
- <a name='L1097'></a><a href='#L1097'>1097</a>
1163
- <a name='L1098'></a><a href='#L1098'>1098</a>
1164
- <a name='L1099'></a><a href='#L1099'>1099</a>
1165
- <a name='L1100'></a><a href='#L1100'>1100</a>
1166
- <a name='L1101'></a><a href='#L1101'>1101</a>
1167
- <a name='L1102'></a><a href='#L1102'>1102</a>
1168
- <a name='L1103'></a><a href='#L1103'>1103</a>
1169
- <a name='L1104'></a><a href='#L1104'>1104</a>
1170
- <a name='L1105'></a><a href='#L1105'>1105</a>
1171
- <a name='L1106'></a><a href='#L1106'>1106</a>
1172
- <a name='L1107'></a><a href='#L1107'>1107</a>
1173
- <a name='L1108'></a><a href='#L1108'>1108</a>
1174
- <a name='L1109'></a><a href='#L1109'>1109</a>
1175
- <a name='L1110'></a><a href='#L1110'>1110</a>
1176
- <a name='L1111'></a><a href='#L1111'>1111</a>
1177
- <a name='L1112'></a><a href='#L1112'>1112</a>
1178
- <a name='L1113'></a><a href='#L1113'>1113</a>
1179
- <a name='L1114'></a><a href='#L1114'>1114</a>
1180
- <a name='L1115'></a><a href='#L1115'>1115</a>
1181
- <a name='L1116'></a><a href='#L1116'>1116</a>
1182
- <a name='L1117'></a><a href='#L1117'>1117</a>
1183
- <a name='L1118'></a><a href='#L1118'>1118</a>
1184
- <a name='L1119'></a><a href='#L1119'>1119</a>
1185
- <a name='L1120'></a><a href='#L1120'>1120</a>
1186
- <a name='L1121'></a><a href='#L1121'>1121</a>
1187
- <a name='L1122'></a><a href='#L1122'>1122</a>
1188
- <a name='L1123'></a><a href='#L1123'>1123</a>
1189
- <a name='L1124'></a><a href='#L1124'>1124</a>
1190
- <a name='L1125'></a><a href='#L1125'>1125</a>
1191
- <a name='L1126'></a><a href='#L1126'>1126</a>
1192
- <a name='L1127'></a><a href='#L1127'>1127</a>
1193
- <a name='L1128'></a><a href='#L1128'>1128</a>
1194
- <a name='L1129'></a><a href='#L1129'>1129</a>
1195
- <a name='L1130'></a><a href='#L1130'>1130</a>
1196
- <a name='L1131'></a><a href='#L1131'>1131</a>
1197
- <a name='L1132'></a><a href='#L1132'>1132</a>
1198
- <a name='L1133'></a><a href='#L1133'>1133</a>
1199
- <a name='L1134'></a><a href='#L1134'>1134</a>
1200
- <a name='L1135'></a><a href='#L1135'>1135</a>
1201
- <a name='L1136'></a><a href='#L1136'>1136</a>
1202
- <a name='L1137'></a><a href='#L1137'>1137</a>
1203
- <a name='L1138'></a><a href='#L1138'>1138</a>
1204
- <a name='L1139'></a><a href='#L1139'>1139</a>
1205
- <a name='L1140'></a><a href='#L1140'>1140</a>
1206
- <a name='L1141'></a><a href='#L1141'>1141</a>
1207
- <a name='L1142'></a><a href='#L1142'>1142</a>
1208
- <a name='L1143'></a><a href='#L1143'>1143</a>
1209
- <a name='L1144'></a><a href='#L1144'>1144</a>
1210
- <a name='L1145'></a><a href='#L1145'>1145</a>
1211
- <a name='L1146'></a><a href='#L1146'>1146</a>
1212
- <a name='L1147'></a><a href='#L1147'>1147</a>
1213
- <a name='L1148'></a><a href='#L1148'>1148</a>
1214
- <a name='L1149'></a><a href='#L1149'>1149</a>
1215
- <a name='L1150'></a><a href='#L1150'>1150</a>
1216
- <a name='L1151'></a><a href='#L1151'>1151</a>
1217
- <a name='L1152'></a><a href='#L1152'>1152</a>
1218
- <a name='L1153'></a><a href='#L1153'>1153</a>
1219
- <a name='L1154'></a><a href='#L1154'>1154</a>
1220
- <a name='L1155'></a><a href='#L1155'>1155</a>
1221
- <a name='L1156'></a><a href='#L1156'>1156</a>
1222
- <a name='L1157'></a><a href='#L1157'>1157</a>
1223
- <a name='L1158'></a><a href='#L1158'>1158</a>
1224
- <a name='L1159'></a><a href='#L1159'>1159</a>
1225
- <a name='L1160'></a><a href='#L1160'>1160</a>
1226
- <a name='L1161'></a><a href='#L1161'>1161</a>
1227
- <a name='L1162'></a><a href='#L1162'>1162</a>
1228
- <a name='L1163'></a><a href='#L1163'>1163</a>
1229
- <a name='L1164'></a><a href='#L1164'>1164</a>
1230
- <a name='L1165'></a><a href='#L1165'>1165</a>
1231
- <a name='L1166'></a><a href='#L1166'>1166</a>
1232
- <a name='L1167'></a><a href='#L1167'>1167</a>
1233
- <a name='L1168'></a><a href='#L1168'>1168</a>
1234
- <a name='L1169'></a><a href='#L1169'>1169</a>
1235
- <a name='L1170'></a><a href='#L1170'>1170</a>
1236
- <a name='L1171'></a><a href='#L1171'>1171</a>
1237
- <a name='L1172'></a><a href='#L1172'>1172</a>
1238
- <a name='L1173'></a><a href='#L1173'>1173</a>
1239
- <a name='L1174'></a><a href='#L1174'>1174</a>
1240
- <a name='L1175'></a><a href='#L1175'>1175</a>
1241
- <a name='L1176'></a><a href='#L1176'>1176</a>
1242
- <a name='L1177'></a><a href='#L1177'>1177</a>
1243
- <a name='L1178'></a><a href='#L1178'>1178</a>
1244
- <a name='L1179'></a><a href='#L1179'>1179</a>
1245
- <a name='L1180'></a><a href='#L1180'>1180</a>
1246
- <a name='L1181'></a><a href='#L1181'>1181</a>
1247
- <a name='L1182'></a><a href='#L1182'>1182</a>
1248
- <a name='L1183'></a><a href='#L1183'>1183</a>
1249
- <a name='L1184'></a><a href='#L1184'>1184</a>
1250
- <a name='L1185'></a><a href='#L1185'>1185</a>
1251
- <a name='L1186'></a><a href='#L1186'>1186</a>
1252
- <a name='L1187'></a><a href='#L1187'>1187</a>
1253
- <a name='L1188'></a><a href='#L1188'>1188</a>
1254
- <a name='L1189'></a><a href='#L1189'>1189</a>
1255
- <a name='L1190'></a><a href='#L1190'>1190</a>
1256
- <a name='L1191'></a><a href='#L1191'>1191</a>
1257
- <a name='L1192'></a><a href='#L1192'>1192</a>
1258
- <a name='L1193'></a><a href='#L1193'>1193</a>
1259
- <a name='L1194'></a><a href='#L1194'>1194</a>
1260
- <a name='L1195'></a><a href='#L1195'>1195</a>
1261
- <a name='L1196'></a><a href='#L1196'>1196</a>
1262
- <a name='L1197'></a><a href='#L1197'>1197</a>
1263
- <a name='L1198'></a><a href='#L1198'>1198</a>
1264
- <a name='L1199'></a><a href='#L1199'>1199</a>
1265
- <a name='L1200'></a><a href='#L1200'>1200</a>
1266
- <a name='L1201'></a><a href='#L1201'>1201</a>
1267
- <a name='L1202'></a><a href='#L1202'>1202</a>
1268
- <a name='L1203'></a><a href='#L1203'>1203</a>
1269
- <a name='L1204'></a><a href='#L1204'>1204</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
958
+ <a name='L893'></a><a href='#L893'>893</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
1270
959
  <span class="cline-any cline-yes">1x</span>
1271
960
  <span class="cline-any cline-yes">1x</span>
1272
961
  <span class="cline-any cline-yes">1x</span>
1273
962
  <span class="cline-any cline-yes">1x</span>
1274
963
  <span class="cline-any cline-yes">1x</span>
1275
964
  <span class="cline-any cline-yes">1x</span>
1276
- <span class="cline-any cline-yes">1x</span>
1277
- <span class="cline-any cline-yes">1x</span>
1278
- <span class="cline-any cline-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-yes">1x</span>
1280
- <span class="cline-any cline-neutral">&nbsp;</span>
1281
965
  <span class="cline-any cline-neutral">&nbsp;</span>
1282
- <span class="cline-any cline-neutral">&nbsp;</span>
1283
- <span class="cline-any cline-neutral">&nbsp;</span>
1284
- <span class="cline-any cline-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-yes">1x</span>
1286
- <span class="cline-any cline-yes">1x</span>
1287
966
  <span class="cline-any cline-yes">1x</span>
1288
967
  <span class="cline-any cline-yes">1x</span>
1289
968
  <span class="cline-any cline-neutral">&nbsp;</span>
1290
969
  <span class="cline-any cline-neutral">&nbsp;</span>
1291
- <span class="cline-any cline-yes">1x</span>
1292
970
  <span class="cline-any cline-neutral">&nbsp;</span>
1293
971
  <span class="cline-any cline-yes">1x</span>
1294
- <span class="cline-any cline-neutral">&nbsp;</span>
1295
- <span class="cline-any cline-neutral">&nbsp;</span>
1296
972
  <span class="cline-any cline-yes">1x</span>
1297
- <span class="cline-any cline-no">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-no">&nbsp;</span>
1300
- <span class="cline-any cline-no">&nbsp;</span>
1301
- <span class="cline-any cline-no">&nbsp;</span>
1302
- <span class="cline-any cline-no">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-neutral">&nbsp;</span>
1305
- <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-no">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-no">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-neutral">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-no">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-neutral">&nbsp;</span>
1324
- <span class="cline-any cline-no">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</span>
1327
- <span class="cline-any cline-neutral">&nbsp;</span>
1328
- <span class="cline-any cline-no">&nbsp;</span>
1329
- <span class="cline-any cline-no">&nbsp;</span>
1330
- <span class="cline-any cline-neutral">&nbsp;</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-neutral">&nbsp;</span>
1344
- <span class="cline-any cline-neutral">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-no">&nbsp;</span>
1347
- <span class="cline-any cline-no">&nbsp;</span>
1348
- <span class="cline-any cline-no">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-neutral">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-neutral">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-neutral">&nbsp;</span>
1362
- <span class="cline-any cline-no">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-neutral">&nbsp;</span>
1366
- <span class="cline-any cline-no">&nbsp;</span>
1367
- <span class="cline-any cline-no">&nbsp;</span>
1368
- <span class="cline-any cline-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-neutral">&nbsp;</span>
1370
- <span class="cline-any cline-neutral">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-neutral">&nbsp;</span>
1375
- <span class="cline-any cline-neutral">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
973
  <span class="cline-any cline-yes">1x</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-no">&nbsp;</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-no">&nbsp;</span>
1398
- <span class="cline-any cline-neutral">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-neutral">&nbsp;</span>
1401
- <span class="cline-any cline-no">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-neutral">&nbsp;</span>
1404
- <span class="cline-any cline-neutral">&nbsp;</span>
1405
- <span class="cline-any cline-neutral">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-neutral">&nbsp;</span>
1409
- <span class="cline-any cline-neutral">&nbsp;</span>
1410
- <span class="cline-any cline-neutral">&nbsp;</span>
1411
- <span class="cline-any cline-neutral">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-no">&nbsp;</span>
1414
- <span class="cline-any cline-neutral">&nbsp;</span>
1415
- <span class="cline-any cline-neutral">&nbsp;</span>
1416
- <span class="cline-any cline-neutral">&nbsp;</span>
1417
- <span class="cline-any cline-neutral">&nbsp;</span>
1418
- <span class="cline-any cline-neutral">&nbsp;</span>
1419
- <span class="cline-any cline-neutral">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-no">&nbsp;</span>
1426
- <span class="cline-any cline-neutral">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-neutral">&nbsp;</span>
1429
- <span class="cline-any cline-neutral">&nbsp;</span>
1430
- <span class="cline-any cline-no">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-no">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-neutral">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-neutral">&nbsp;</span>
1439
- <span class="cline-any cline-neutral">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-neutral">&nbsp;</span>
1445
- <span class="cline-any cline-neutral">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
974
  <span class="cline-any cline-yes">1x</span>
1449
- <span class="cline-any cline-no">&nbsp;</span>
1450
- <span class="cline-any cline-no">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
975
  <span class="cline-any cline-neutral">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-neutral">&nbsp;</span>
1460
- <span class="cline-any cline-no">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-neutral">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-neutral">&nbsp;</span>
1466
- <span class="cline-any cline-no">&nbsp;</span>
1467
- <span class="cline-any cline-no">&nbsp;</span>
1468
- <span class="cline-any cline-no">&nbsp;</span>
1469
- <span class="cline-any cline-neutral">&nbsp;</span>
1470
- <span class="cline-any cline-neutral">&nbsp;</span>
1471
- <span class="cline-any cline-no">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-no">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-neutral">&nbsp;</span>
1478
- <span class="cline-any cline-neutral">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-no">&nbsp;</span>
1482
- <span class="cline-any cline-no">&nbsp;</span>
1483
- <span class="cline-any cline-no">&nbsp;</span>
1484
- <span class="cline-any cline-no">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-neutral">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-no">&nbsp;</span>
1491
- <span class="cline-any cline-no">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-neutral">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-neutral">&nbsp;</span>
1497
- <span class="cline-any cline-no">&nbsp;</span>
1498
- <span class="cline-any cline-no">&nbsp;</span>
1499
- <span class="cline-any cline-neutral">&nbsp;</span>
1500
- <span class="cline-any cline-no">&nbsp;</span>
1501
- <span class="cline-any cline-no">&nbsp;</span>
1502
- <span class="cline-any cline-no">&nbsp;</span>
1503
- <span class="cline-any cline-no">&nbsp;</span>
1504
- <span class="cline-any cline-neutral">&nbsp;</span>
1505
- <span class="cline-any cline-neutral">&nbsp;</span>
1506
- <span class="cline-any cline-no">&nbsp;</span>
1507
- <span class="cline-any cline-neutral">&nbsp;</span>
1508
- <span class="cline-any cline-no">&nbsp;</span>
1509
- <span class="cline-any cline-neutral">&nbsp;</span>
1510
- <span class="cline-any cline-no">&nbsp;</span>
1511
- <span class="cline-any cline-no">&nbsp;</span>
1512
- <span class="cline-any cline-neutral">&nbsp;</span>
1513
- <span class="cline-any cline-no">&nbsp;</span>
1514
- <span class="cline-any cline-neutral">&nbsp;</span>
1515
- <span class="cline-any cline-no">&nbsp;</span>
1516
- <span class="cline-any cline-neutral">&nbsp;</span>
1517
- <span class="cline-any cline-no">&nbsp;</span>
1518
- <span class="cline-any cline-no">&nbsp;</span>
1519
- <span class="cline-any cline-no">&nbsp;</span>
1520
- <span class="cline-any cline-neutral">&nbsp;</span>
1521
- <span class="cline-any cline-neutral">&nbsp;</span>
1522
- <span class="cline-any cline-no">&nbsp;</span>
1523
- <span class="cline-any cline-neutral">&nbsp;</span>
1524
- <span class="cline-any cline-neutral">&nbsp;</span>
1525
- <span class="cline-any cline-neutral">&nbsp;</span>
1526
- <span class="cline-any cline-no">&nbsp;</span>
1527
- <span class="cline-any cline-no">&nbsp;</span>
1528
- <span class="cline-any cline-no">&nbsp;</span>
1529
976
  <span class="cline-any cline-neutral">&nbsp;</span>
977
+ <span class="cline-any cline-yes">1x</span>
1530
978
  <span class="cline-any cline-neutral">&nbsp;</span>
1531
979
  <span class="cline-any cline-neutral">&nbsp;</span>
1532
980
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1556,7 +1004,6 @@
1556
1004
  <span class="cline-any cline-neutral">&nbsp;</span>
1557
1005
  <span class="cline-any cline-neutral">&nbsp;</span>
1558
1006
  <span class="cline-any cline-neutral">&nbsp;</span>
1559
- <span class="cline-any cline-neutral">&nbsp;</span>
1560
1007
  <span class="cline-any cline-no">&nbsp;</span>
1561
1008
  <span class="cline-any cline-no">&nbsp;</span>
1562
1009
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1661,11 +1108,6 @@
1661
1108
  <span class="cline-any cline-no">&nbsp;</span>
1662
1109
  <span class="cline-any cline-no">&nbsp;</span>
1663
1110
  <span class="cline-any cline-no">&nbsp;</span>
1664
- <span class="cline-any cline-neutral">&nbsp;</span>
1665
- <span class="cline-any cline-no">&nbsp;</span>
1666
- <span class="cline-any cline-no">&nbsp;</span>
1667
- <span class="cline-any cline-no">&nbsp;</span>
1668
- <span class="cline-any cline-no">&nbsp;</span>
1669
1111
  <span class="cline-any cline-no">&nbsp;</span>
1670
1112
  <span class="cline-any cline-no">&nbsp;</span>
1671
1113
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1774,8 +1216,6 @@
1774
1216
  <span class="cline-any cline-no">&nbsp;</span>
1775
1217
  <span class="cline-any cline-no">&nbsp;</span>
1776
1218
  <span class="cline-any cline-neutral">&nbsp;</span>
1777
- <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-no">&nbsp;</span>
1779
1219
  <span class="cline-any cline-no">&nbsp;</span>
1780
1220
  <span class="cline-any cline-no">&nbsp;</span>
1781
1221
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1803,9 +1243,6 @@
1803
1243
  <span class="cline-any cline-no">&nbsp;</span>
1804
1244
  <span class="cline-any cline-no">&nbsp;</span>
1805
1245
  <span class="cline-any cline-no">&nbsp;</span>
1806
- <span class="cline-any cline-neutral">&nbsp;</span>
1807
- <span class="cline-any cline-no">&nbsp;</span>
1808
- <span class="cline-any cline-no">&nbsp;</span>
1809
1246
  <span class="cline-any cline-no">&nbsp;</span>
1810
1247
  <span class="cline-any cline-neutral">&nbsp;</span>
1811
1248
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1885,29 +1322,10 @@
1885
1322
  <span class="cline-any cline-neutral">&nbsp;</span>
1886
1323
  <span class="cline-any cline-neutral">&nbsp;</span>
1887
1324
  <span class="cline-any cline-neutral">&nbsp;</span>
1888
- <span class="cline-any cline-no">&nbsp;</span>
1889
- <span class="cline-any cline-neutral">&nbsp;</span>
1890
- <span class="cline-any cline-neutral">&nbsp;</span>
1891
- <span class="cline-any cline-no">&nbsp;</span>
1892
- <span class="cline-any cline-no">&nbsp;</span>
1893
- <span class="cline-any cline-neutral">&nbsp;</span>
1894
- <span class="cline-any cline-neutral">&nbsp;</span>
1895
- <span class="cline-any cline-neutral">&nbsp;</span>
1896
- <span class="cline-any cline-no">&nbsp;</span>
1897
- <span class="cline-any cline-neutral">&nbsp;</span>
1898
- <span class="cline-any cline-neutral">&nbsp;</span>
1899
- <span class="cline-any cline-neutral">&nbsp;</span>
1900
- <span class="cline-any cline-neutral">&nbsp;</span>
1901
- <span class="cline-any cline-neutral">&nbsp;</span>
1902
- <span class="cline-any cline-no">&nbsp;</span>
1903
- <span class="cline-any cline-no">&nbsp;</span>
1904
- <span class="cline-any cline-neutral">&nbsp;</span>
1905
- <span class="cline-any cline-neutral">&nbsp;</span>
1906
- <span class="cline-any cline-neutral">&nbsp;</span>
1907
- <span class="cline-any cline-neutral">&nbsp;</span>
1908
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-no">&nbsp;</span>
1909
1326
  <span class="cline-any cline-neutral">&nbsp;</span>
1910
1327
  <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-no">&nbsp;</span>
1911
1329
  <span class="cline-any cline-neutral">&nbsp;</span>
1912
1330
  <span class="cline-any cline-neutral">&nbsp;</span>
1913
1331
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1916,7 +1334,6 @@
1916
1334
  <span class="cline-any cline-no">&nbsp;</span>
1917
1335
  <span class="cline-any cline-no">&nbsp;</span>
1918
1336
  <span class="cline-any cline-no">&nbsp;</span>
1919
- <span class="cline-any cline-no">&nbsp;</span>
1920
1337
  <span class="cline-any cline-neutral">&nbsp;</span>
1921
1338
  <span class="cline-any cline-no">&nbsp;</span>
1922
1339
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1948,7 +1365,6 @@
1948
1365
  <span class="cline-any cline-neutral">&nbsp;</span>
1949
1366
  <span class="cline-any cline-neutral">&nbsp;</span>
1950
1367
  <span class="cline-any cline-neutral">&nbsp;</span>
1951
- <span class="cline-any cline-neutral">&nbsp;</span>
1952
1368
  <span class="cline-any cline-yes">1x</span>
1953
1369
  <span class="cline-any cline-yes">1x</span>
1954
1370
  <span class="cline-any cline-yes">1x</span>
@@ -1995,7 +1411,6 @@
1995
1411
  <span class="cline-any cline-no">&nbsp;</span>
1996
1412
  <span class="cline-any cline-no">&nbsp;</span>
1997
1413
  <span class="cline-any cline-no">&nbsp;</span>
1998
- <span class="cline-any cline-no">&nbsp;</span>
1999
1414
  <span class="cline-any cline-neutral">&nbsp;</span>
2000
1415
  <span class="cline-any cline-no">&nbsp;</span>
2001
1416
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2003,7 +1418,6 @@
2003
1418
  <span class="cline-any cline-no">&nbsp;</span>
2004
1419
  <span class="cline-any cline-no">&nbsp;</span>
2005
1420
  <span class="cline-any cline-no">&nbsp;</span>
2006
- <span class="cline-any cline-no">&nbsp;</span>
2007
1421
  <span class="cline-any cline-neutral">&nbsp;</span>
2008
1422
  <span class="cline-any cline-neutral">&nbsp;</span>
2009
1423
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2018,7 +1432,6 @@
2018
1432
  <span class="cline-any cline-neutral">&nbsp;</span>
2019
1433
  <span class="cline-any cline-neutral">&nbsp;</span>
2020
1434
  <span class="cline-any cline-neutral">&nbsp;</span>
2021
- <span class="cline-any cline-neutral">&nbsp;</span>
2022
1435
  <span class="cline-any cline-no">&nbsp;</span>
2023
1436
  <span class="cline-any cline-no">&nbsp;</span>
2024
1437
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2089,22 +1502,6 @@
2089
1502
  <span class="cline-any cline-neutral">&nbsp;</span>
2090
1503
  <span class="cline-any cline-neutral">&nbsp;</span>
2091
1504
  <span class="cline-any cline-neutral">&nbsp;</span>
2092
- <span class="cline-any cline-neutral">&nbsp;</span>
2093
- <span class="cline-any cline-neutral">&nbsp;</span>
2094
- <span class="cline-any cline-neutral">&nbsp;</span>
2095
- <span class="cline-any cline-neutral">&nbsp;</span>
2096
- <span class="cline-any cline-neutral">&nbsp;</span>
2097
- <span class="cline-any cline-neutral">&nbsp;</span>
2098
- <span class="cline-any cline-neutral">&nbsp;</span>
2099
- <span class="cline-any cline-neutral">&nbsp;</span>
2100
- <span class="cline-any cline-neutral">&nbsp;</span>
2101
- <span class="cline-any cline-neutral">&nbsp;</span>
2102
- <span class="cline-any cline-neutral">&nbsp;</span>
2103
- <span class="cline-any cline-neutral">&nbsp;</span>
2104
- <span class="cline-any cline-neutral">&nbsp;</span>
2105
- <span class="cline-any cline-neutral">&nbsp;</span>
2106
- <span class="cline-any cline-neutral">&nbsp;</span>
2107
- <span class="cline-any cline-neutral">&nbsp;</span>
2108
1505
  <span class="cline-any cline-no">&nbsp;</span>
2109
1506
  <span class="cline-any cline-no">&nbsp;</span>
2110
1507
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2116,11 +1513,8 @@
2116
1513
  <span class="cline-any cline-no">&nbsp;</span>
2117
1514
  <span class="cline-any cline-neutral">&nbsp;</span>
2118
1515
  <span class="cline-any cline-neutral">&nbsp;</span>
2119
- <span class="cline-any cline-neutral">&nbsp;</span>
2120
- <span class="cline-any cline-neutral">&nbsp;</span>
2121
1516
  <span class="cline-any cline-no">&nbsp;</span>
2122
1517
  <span class="cline-any cline-no">&nbsp;</span>
2123
- <span class="cline-any cline-neutral">&nbsp;</span>
2124
1518
  <span class="cline-any cline-no">&nbsp;</span>
2125
1519
  <span class="cline-any cline-neutral">&nbsp;</span>
2126
1520
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2134,19 +1528,6 @@
2134
1528
  <span class="cline-any cline-no">&nbsp;</span>
2135
1529
  <span class="cline-any cline-neutral">&nbsp;</span>
2136
1530
  <span class="cline-any cline-no">&nbsp;</span>
2137
- <span class="cline-any cline-no">&nbsp;</span>
2138
- <span class="cline-any cline-no">&nbsp;</span>
2139
- <span class="cline-any cline-neutral">&nbsp;</span>
2140
- <span class="cline-any cline-neutral">&nbsp;</span>
2141
- <span class="cline-any cline-neutral">&nbsp;</span>
2142
- <span class="cline-any cline-neutral">&nbsp;</span>
2143
- <span class="cline-any cline-neutral">&nbsp;</span>
2144
- <span class="cline-any cline-neutral">&nbsp;</span>
2145
- <span class="cline-any cline-neutral">&nbsp;</span>
2146
- <span class="cline-any cline-neutral">&nbsp;</span>
2147
- <span class="cline-any cline-neutral">&nbsp;</span>
2148
- <span class="cline-any cline-neutral">&nbsp;</span>
2149
- <span class="cline-any cline-no">&nbsp;</span>
2150
1531
  <span class="cline-any cline-neutral">&nbsp;</span>
2151
1532
  <span class="cline-any cline-neutral">&nbsp;</span>
2152
1533
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2310,10 +1691,6 @@
2310
1691
  <span class="cline-any cline-neutral">&nbsp;</span>
2311
1692
  <span class="cline-any cline-neutral">&nbsp;</span>
2312
1693
  <span class="cline-any cline-yes">1x</span>
2313
- <span class="cline-any cline-no">&nbsp;</span>
2314
- <span class="cline-any cline-neutral">&nbsp;</span>
2315
- <span class="cline-any cline-no">&nbsp;</span>
2316
- <span class="cline-any cline-neutral">&nbsp;</span>
2317
1694
  <span class="cline-any cline-neutral">&nbsp;</span>
2318
1695
  <span class="cline-any cline-no">&nbsp;</span>
2319
1696
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2387,7 +1764,6 @@
2387
1764
  <span class="cline-any cline-neutral">&nbsp;</span>
2388
1765
  <span class="cline-any cline-neutral">&nbsp;</span>
2389
1766
  <span class="cline-any cline-neutral">&nbsp;</span>
2390
- <span class="cline-any cline-neutral">&nbsp;</span>
2391
1767
  <span class="cline-any cline-no">&nbsp;</span>
2392
1768
  <span class="cline-any cline-no">&nbsp;</span>
2393
1769
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2469,17 +1845,18 @@
2469
1845
  <span class="cline-any cline-no">&nbsp;</span>
2470
1846
  <span class="cline-any cline-no">&nbsp;</span>
2471
1847
  <span class="cline-any cline-neutral">&nbsp;</span>
2472
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { cloneDeep } from 'lodash';
2473
- import { App, LogicItem, Logic, Module, View, ViewElement, Argument, SelectMembers, SyntaxNode, BindDirective, CallLogic } from '../../concepts';
1848
+ <span class="cline-any cline-neutral">&nbsp;</span>
1849
+ <span class="cline-any cline-neutral">&nbsp;</span>
1850
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { App, LogicItem, Logic, Module, View, ViewElement, Argument, SelectMembers, SynatxNode, BindDirective, CallLogic } from '../../concepts';
2474
1851
  import { addBreakpointNodesFromApp } from '../../breakpoint';
2475
1852
  import { getConceptConstructor } from '../../decorators';
2476
1853
  import { config } from '../../config';
2477
1854
  import storageService from './service';
2478
1855
  import { v4 as uuidv4 } from 'uuid';
2479
1856
  import stepRecorder from '../../manager/stepRecorder';
2480
- import * as jsoner from './jsoner';
2481
1857
  /// #if !process.env.NODE_ENV || process.env.BUILD_TARGET === 'node'
2482
1858
  import * as fs from 'fs-extra';
1859
+ import * as jsoner from './jsoner';
2483
1860
  import type { NaslServer } from 'src/server/naslServer';
2484
1861
  /// #endif
2485
1862
  &nbsp;
@@ -2491,500 +1868,254 @@ export const batchInstruct = storageService.batchInstruct;
2491
1868
  export const breakpoint = storageService.breakpoint;
2492
1869
  &nbsp;
2493
1870
  let tabTimestamp: string;
2494
- export const databaseTypes = storageService.databaseTypes;
2495
- &nbsp;
2496
- export const operationRecordInfoMap: Map&lt;string, any&gt; = new Map();
2497
- &nbsp;
2498
- // 操作栈记录
2499
- export function <span class="fstat-no" title="function not covered" >doOperationRecord(</span>operation: Operation) {
2500
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2501
- &nbsp;
2502
- <span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2503
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2504
- const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
2505
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
2506
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
2507
- };
2508
- &nbsp;
2509
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2510
- <span class="cstat-no" title="statement not covered" > try {</span>
2511
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2512
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
2513
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2514
- <span class="cstat-no" title="statement not covered" > operation.appId = operationRecordInfoMap.get('appId');</span>
2515
- <span class="cstat-no" title="statement not covered" > operation.branchId = operationRecordInfoMap.get('branchId');</span>
2516
- <span class="cstat-no" title="statement not covered" > operation.accountId = operationRecordInfoMap.get('accountId');</span>
2517
- <span class="cstat-no" title="statement not covered" > operation.userId = operationRecordInfoMap.get('userId');</span>
2518
- <span class="cstat-no" title="statement not covered" > operation.phone = operationRecordInfoMap.get('phone');</span>
2519
- // 将时间戳添加到记录中
2520
- <span class="cstat-no" title="statement not covered" > operation.timestamp = Date.now();</span>
2521
- // 这份数据不存在向上的引用,因此用cloneDeep没有关系
2522
- <span class="cstat-no" title="statement not covered" > objectStore.put(cloneDeep(operation));</span>
2523
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2524
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2525
- };
2526
- } catch(err) {
2527
- <span class="cstat-no" title="statement not covered" > console.log(err);</span>
2528
- }
2529
- };
2530
- &nbsp;
2531
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >function(e</span>vent) {</span>
2532
- <span class="cstat-no" title="statement not covered" > console.log('Failed to open database');</span>
2533
- };
2534
- }
2535
- &nbsp;
2536
- // 删除失效数据
2537
- async function <span class="fstat-no" title="function not covered" >deleteExpiredRecords(</span>) {
2538
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
2539
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2540
- &nbsp;
2541
- <span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2542
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2543
- const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
2544
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
2545
- <span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
2546
- };
2547
- &nbsp;
2548
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2549
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2550
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
2551
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2552
- const index = <span class="cstat-no" title="statement not covered" >objectStore.index('timestamp');</span>
2553
- // 设置有效期,默认7天
2554
- const localStorageExpiresAt = <span class="cstat-no" title="statement not covered" >window.localStorage.getItem('expiresAt');</span>
2555
- const expiresAt = <span class="cstat-no" title="statement not covered" >Date.now() - (localStorageExpiresAt ? +localStorageExpiresAt : 7 * 24 * 60 * 60 * 1000);</span>
2556
- const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.upperBound(expiresAt);</span>
2557
- const expiredRecordsRequest = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
2558
- &nbsp;
2559
- <span class="cstat-no" title="statement not covered" > expiredRecordsRequest.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2560
- const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2561
- <span class="cstat-no" title="statement not covered" > if (cursor) {</span>
2562
- <span class="cstat-no" title="statement not covered" > objectStore.delete(cursor.primaryKey);</span>
2563
- <span class="cstat-no" title="statement not covered" > cursor.continue();</span>
2564
- } else {
2565
- <span class="cstat-no" title="statement not covered" > resolve(void 0);</span>
2566
- }
2567
- };
2568
- &nbsp;
2569
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2570
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2571
- };
2572
- };
2573
- &nbsp;
2574
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2575
- <span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
2576
- };
2577
- });
2578
- }
2579
- &nbsp;
2580
- // 操作栈查询
2581
- export function <span class="fstat-no" title="function not covered" >operationRecordQuery(</span>app: any) {
2582
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
2583
- const appId = <span class="cstat-no" title="statement not covered" >app?.id;</span>
2584
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2585
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2586
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2587
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readonly');</span>
2588
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2589
- const index = <span class="cstat-no" title="statement not covered" >objectStore.index('appId');</span> // 查询 'appId' 索引
2590
- const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.only(appId);</span>
2591
- const request = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
2592
- const result: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2593
- &nbsp;
2594
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2595
- const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2596
- <span class="cstat-no" title="statement not covered" > if (cursor) {</span>
2597
- const record = <span class="cstat-no" title="statement not covered" >cursor.value;</span>
2598
- const branchId = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('branchId');</span>
2599
- <span class="cstat-no" title="statement not covered" > if (record.branchId === branchId) {</span>
2600
- <span class="cstat-no" title="statement not covered" > result.push(record);</span>
2601
- }
2602
- <span class="cstat-no" title="statement not covered" > cursor.continue();</span>
2603
- } else {
2604
- <span class="cstat-no" title="statement not covered" > console.log('操作记录栈:', result);</span>
2605
- <span class="cstat-no" title="statement not covered" > resolve(result);</span>
2606
- }
2607
- };
2608
- &nbsp;
2609
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2610
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2611
- };
2612
- &nbsp;
2613
- };
2614
- &nbsp;
2615
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2616
- <span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
2617
- };
2618
- });
2619
- }
2620
- &nbsp;
2621
- // 获取父对象
2622
- function <span class="fstat-no" title="function not covered" >getParentInfo(</span>appJson: any, path: string) {
2623
- const pathArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2624
- <span class="cstat-no" title="statement not covered" > (path?.split('.') || []).forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string) =&gt; {</span>
2625
- const arrayPropertyKey = <span class="cstat-no" title="statement not covered" >pathItem.split('[')[0];</span>
2626
- const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
2627
- <span class="cstat-no" title="statement not covered" > if (matchArr) {</span>
2628
- <span class="cstat-no" title="statement not covered" > pathArr.push(arrayPropertyKey, matchArr[0]);</span>
2629
- } else {
2630
- <span class="cstat-no" title="statement not covered" > pathArr.push(pathItem);</span>
2631
- }
2632
- });
2633
- <span class="cstat-no" title="statement not covered" > pathArr.pop();</span>
2634
- let parentPath = <span class="cstat-no" title="statement not covered" >'';</span>
2635
- <span class="cstat-no" title="statement not covered" > pathArr.forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string, index: number) =&gt; {</span>
2636
- const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
2637
- <span class="cstat-no" title="statement not covered" > if (matchArr || index === 0) {</span>
2638
- <span class="cstat-no" title="statement not covered" > parentPath += pathItem;</span>
2639
- } else {
2640
- <span class="cstat-no" title="statement not covered" > parentPath += `.${pathItem}`</span>
2641
- }
2642
- });
2643
- const parentNode = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, parentPath);</span>
2644
- <span class="cstat-no" title="statement not covered" > return {</span>
2645
- parentPath,
2646
- parentNode,
2647
- };
2648
- }
2649
- &nbsp;
2650
- // 操作记录回放
2651
- export async function <span class="fstat-no" title="function not covered" >operationRecordPlayback(</span>app: any, operationRecordAction: 'undo' | 'redo') {
2652
- const operationRecord: any = <span class="cstat-no" title="statement not covered" >await operationRecordQuery(app);</span>
2653
- let operationRecordIndex = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('operationRecordIndex');</span>
2654
- <span class="cstat-no" title="statement not covered" > if ([null, undefined].includes(operationRecordIndex)) {</span>
2655
- <span class="cstat-no" title="statement not covered" > operationRecordIndex = operationRecord?.length;</span>
2656
- }
2657
- const appJson = <span class="cstat-no" title="statement not covered" >app.toJSON();</span>
2658
- <span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo') {</span>
2659
- <span class="cstat-no" title="statement not covered" > if (operationRecordIndex &gt; 0) {</span>
2660
- const currentRecordItem = <span class="cstat-no" title="statement not covered" >operationRecord?.[operationRecordIndex];</span>
2661
- const { type, action: recordItemAction } = <span class="cstat-no" title="statement not covered" >currentRecordItem || {};</span>
2662
- // 多人协作
2663
- <span class="cstat-no" title="statement not covered" > if (type === 'cooperation' &amp;&amp; recordItemAction === 'confirmPull') {</span>
2664
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},已经进行了多人协作“合并”操作,无法继续对操作栈进行回放!`);</span>
2665
- <span class="cstat-no" title="statement not covered" > return;</span>
2666
- }
2667
- <span class="cstat-no" title="statement not covered" > operationRecordIndex--;</span>
2668
- } else {
2669
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续回放`);</span>
2670
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2671
- <span class="cstat-no" title="statement not covered" > return;</span>
2672
- }
2673
- } else {
2674
- <span class="cstat-no" title="statement not covered" > if (operationRecordIndex &lt; operationRecord?.length) {</span>
2675
- <span class="cstat-no" title="statement not covered" > operationRecordIndex++;</span>
2676
- } else {
2677
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续前进`);</span>
2678
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2679
- <span class="cstat-no" title="statement not covered" > return;</span>
2680
- }
2681
- }
2682
- <span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', operationRecordIndex);</span>
2683
- const currentIndex = <span class="cstat-no" title="statement not covered" >operationRecordIndex;</span>
2684
- <span class="cstat-no" title="statement not covered" > ([...operationRecord].splice(currentIndex, operationRecord?.length) || []).reverse()?.forEach(<span class="fstat-no" title="function not covered" >(r</span>ecordItem: any) =&gt; {</span>
2685
- const { actionItem } = <span class="cstat-no" title="statement not covered" >recordItem || {};</span>
2686
- const { list } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2687
- <span class="cstat-no" title="statement not covered" > [...(list || [])].reverse().forEach(<span class="fstat-no" title="function not covered" >(a</span>ctionItem: any) =&gt; {</span>
2688
- const { path, action, object, oldObject, parentKey, index: oldIndex } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2689
- const { parentNode } = <span class="cstat-no" title="statement not covered" >getParentInfo(appJson, path);</span>
2690
- let newPath = <span class="cstat-no" title="statement not covered" >path;</span>
2691
- // 如果涉及到改名操作,需要特殊处理
2692
- <span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo' &amp;&amp; action === 'update' &amp;&amp; object?.name) {</span>
2693
- const pathArr = <span class="cstat-no" title="statement not covered" >path?.split('.') || [];</span>
2694
- const lastPathItem = <span class="cstat-no" title="statement not covered" >pathArr?.pop();</span>
2695
- <span class="cstat-no" title="statement not covered" > if (lastPathItem) {</span>
2696
- <span class="cstat-no" title="statement not covered" > pathArr.push(lastPathItem.replace(/(name=)[^\]]+/, `$1${object?.name}`));</span>
2697
- }
2698
- <span class="cstat-no" title="statement not covered" > newPath = pathArr.join('.');</span>
2699
- }
2700
- const node = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, newPath);</span>
2701
- <span class="cstat-no" title="statement not covered" > switch (action) {</span>
2702
- case 'create':
2703
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode)) {</span>
2704
- const index = <span class="cstat-no" title="statement not covered" >parentNode.indexOf(node);</span>
2705
- <span class="cstat-no" title="statement not covered" > if (index !== -1) {</span>
2706
- <span class="cstat-no" title="statement not covered" > parentNode.splice(index, 1);</span>
2707
- }
2708
- } else {
2709
- <span class="cstat-no" title="statement not covered" > parentNode[parentKey] = null;</span>
2710
- }
2711
- <span class="cstat-no" title="statement not covered" > break;</span>
2712
- case 'delete':
2713
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode) &amp;&amp; oldIndex !== -1) {</span>
2714
- <span class="cstat-no" title="statement not covered" > parentNode.splice(oldIndex, 0, oldObject);</span>
2715
- } else {
2716
- <span class="cstat-no" title="statement not covered" > parentNode[parentKey] = oldObject;</span>
2717
- }
2718
- <span class="cstat-no" title="statement not covered" > break;</span>
2719
- case 'update':
2720
- <span class="cstat-no" title="statement not covered" > for (const key in oldObject) {</span>
2721
- <span class="cstat-no" title="statement not covered" > if (node) {</span>
2722
- (<span class="cstat-no" title="statement not covered" >node as any)[key] = oldObject[key] ?? null;</span>
2723
- }
2724
- }
2725
- <span class="cstat-no" title="statement not covered" > break;</span>
2726
- }
2727
- });
2728
- });
2729
- <span class="cstat-no" title="statement not covered" > console.log('当前所处栈位置:', currentIndex);</span>
2730
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2731
- <span class="cstat-no" title="statement not covered" > return appJson;</span>
2732
- }
2733
- &nbsp;
2734
- function <span class="fstat-no" title="function not covered" >getLogic(</span>key: string, app: any, diffLogicList: string[]) {
2735
- <span class="cstat-no" title="statement not covered" > if (!diffLogicList.includes(key)) {</span>
2736
- <span class="cstat-no" title="statement not covered" > diffLogicList.push(key);</span>
2737
- <span class="cstat-no" title="statement not covered" > if (key.startsWith('app')) {</span>
2738
- const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf('.');</span>
2739
- const name = <span class="cstat-no" title="statement not covered" >key.slice(index + 1);</span>
2740
- const logic = <span class="cstat-no" title="statement not covered" >app.logics.find(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item.name === name)</span>;</span>
2741
- <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
2742
- <span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
2743
- }
2744
- } else <span class="cstat-no" title="statement not covered" >if (key.startsWith('extensions')) {</span>
2745
- const _pathArr = <span class="cstat-no" title="statement not covered" >key.split('.');</span>
1871
+ export co<span class="fstat-no" title="function not covered" >nst datab</span>aseTypes = storageService.databaseTypes;
1872
+ <span class="cstat-no" title="statement not covered" ></span>
1873
+ func<span class="cstat-no" title="statement not covered" >tion getLogic(key: string</span>, app: any, diffLogicList: string[]) {
1874
+ if<span class="cstat-no" title="statement not covered" > (!diffLogicList.includes(key)) {</span>
1875
+ diffLogicList.pu<span class="cstat-no" title="statement not covered" >sh(key);</span>
1876
+ if (key.startsW<span class="cstat-no" title="statement not covered" >ith('app')) {</span>
1877
+ const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf(<span class="fstat-no" title="function not covered" >'.</span>');<span class="cstat-no" title="statement not covered" ></span></span>
1878
+ <span class="cstat-no" title="statement not covered" > const name = key.slice(index + 1);</span>
1879
+ co<span class="cstat-no" title="statement not covered" >nst logic = app<span class="fstat-no" title="function not covered" >.l</span>ogics.find((i<span class="cstat-no" title="statement not covered" >tem: any) =&gt; item.name === name);</span></span>
1880
+ if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {
1881
+ log<span class="cstat-no" title="statement not covered" >ic.body.map((item: any) =&gt; getStatement(item, app, diffLogicList));</span>
1882
+ }<span class="cstat-no" title="statement not covered" ></span>
1883
+ } else if (key.s<span class="cstat-no" title="statement not covered" >tartsWith('e</span>xtensions')) {
1884
+ const _pathArr<span class="cstat-no" title="statement not covered" > = key.split</span>('.');
2746
1885
  const _name = <span class="cstat-no" title="statement not covered" >_pathArr[1];</span>
2747
- const _path = <span class="cstat-no" title="statement not covered" >_pathArr[3];</span>
2748
- const _list = <span class="cstat-no" title="statement not covered" >app.dependencies;</span>
2749
- const _module = <span class="cstat-no" title="statement not covered" >_list.find(<span class="fstat-no" title="function not covered" >(i</span>t: Module) =&gt; {</span>
2750
- const name = <span class="cstat-no" title="statement not covered" >it.name.replaceAll('-', '_');</span>
2751
- <span class="cstat-no" title="statement not covered" > return name === _name;</span>
2752
- });
2753
- const logic = <span class="cstat-no" title="statement not covered" >_module?.logics?.find(<span class="fstat-no" title="function not covered" >(i</span>tem: Logic) =&gt; <span class="cstat-no" title="statement not covered" >item.name === _path)</span>;</span>
2754
- <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
2755
- <span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
1886
+ const _path = _p<span class="cstat-no" title="statement not covered" >athArr[3];<span class="fstat-no" title="function not covered" ></span></span>
1887
+ const _list = a<span class="cstat-no" title="statement not covered" >pp.dependencies;</span>
1888
+ co<span class="cstat-no" title="statement not covered" >nst _module = _list.fin</span>d((it: Module) =&gt; {
1889
+ const name = it.name.replaceAll('-', '_');
1890
+ return name <span class="cstat-no" title="statement not covered" >=== _name;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
1891
+ <span class="cstat-no" title="statement not covered" > });</span>
1892
+ co<span class="cstat-no" title="statement not covered" >nst logic = _mo<span class="fstat-no" title="function not covered" >du</span>le?.logics?.f<span class="cstat-no" title="statement not covered" >ind((item: Logic) =&gt; item.name === _pat</span>h)</span>;
1893
+ if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {
1894
+ logic.body.map((item: any) =&gt; getStatement(item, app, diffLogicList));
2756
1895
  }
2757
1896
  }
2758
1897
  }
2759
- }
2760
- &nbsp;
2761
- /* 获取LogicITEM */
2762
- function <span class="fstat-no" title="function not covered" >getStatement(</span>state: any, app: any, diffLogicList: string[]) {
2763
- let logicItems = <span class="cstat-no" title="statement not covered" >[];</span>
2764
- <span class="cstat-no" title="statement not covered" > switch (state.concept) {</span>
2765
- case 'Assignment':
2766
- <span class="cstat-no" title="statement not covered" > logicItems = [state.left, state.right];</span>
2767
- <span class="cstat-no" title="statement not covered" > break;</span>
2768
- case 'IfStatement':
2769
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.consequent, ...state.alternate];</span>
2770
- <span class="cstat-no" title="statement not covered" > break;</span>
2771
- case 'ForEachStatement':
2772
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.body, state.each, state.start, state.end];</span>
1898
+ }<span class="fstat-no" title="function not covered" ></span>
1899
+ /* 获取LogicITEM */<span class="cstat-no" title="statement not covered" ></span>
1900
+ fu<span class="cstat-no" title="statement not covered" >nction getStatement(state: any, app: any, diffLogicList: string[]) {</span>
1901
+ let logicItems = [];
1902
+ swit<span class="cstat-no" title="statement not covered" >ch (state.concept) {</span>
1903
+ ca<span class="cstat-no" title="statement not covered" >se 'Ass</span>ignment':
1904
+ logicItems = [state.left, state.right];
2773
1905
  <span class="cstat-no" title="statement not covered" > break;</span>
2774
- case 'Match':
2775
- <span class="cstat-no" title="statement not covered" > logicItems = [state.expression, ...state.cases.map(getStatement).flat(1)];</span>
1906
+ ca<span class="cstat-no" title="statement not covered" >se 'IfS</span>tatement':
1907
+ logicItems = [...state.consequent, ...state.alternate];
2776
1908
  <span class="cstat-no" title="statement not covered" > break;</span>
2777
- case 'MatchCase':
2778
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.patterns, ...state.body];</span>
1909
+ ca<span class="cstat-no" title="statement not covered" >se 'For</span>EachStatement':
1910
+ logicItems = [...state.body, state.each, state.start, state.end];
2779
1911
  <span class="cstat-no" title="statement not covered" > break;</span>
2780
- case 'SwitchStatement':
2781
- <span class="cstat-no" title="statement not covered" > logicItems = state.cases.map(getStatement).flat(1);</span>
1912
+ ca<span class="cstat-no" title="statement not covered" >se 'Mat</span>ch':
1913
+ logicItems = [state.expression, ...state.cases.map(getStatement).flat(1)];
2782
1914
  <span class="cstat-no" title="statement not covered" > break;</span>
2783
- case 'SwitchCase':
2784
- <span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.consequent];</span>
1915
+ ca<span class="cstat-no" title="statement not covered" >se 'Mat</span>chCase':
1916
+ logicItems = [...state.patterns, ...state.body];
2785
1917
  <span class="cstat-no" title="statement not covered" > break;</span>
2786
- case 'WhileStatement':
2787
- <span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.body];</span>
1918
+ ca<span class="cstat-no" title="statement not covered" >se 'Swi</span>tchStatement':
1919
+ logicItems = state.cases.map(getStatement).flat(1);
2788
1920
  <span class="cstat-no" title="statement not covered" > break;</span>
2789
- case 'CallLogic':
2790
- <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
2791
- <span class="cstat-no" title="statement not covered" > getLogic(state.calleewholeKey, app, diffLogicList);</span>
1921
+ ca<span class="cstat-no" title="statement not covered" >se 'Swi</span>tchCase':
1922
+ logicItems = [state.test, ...state.consequent];
2792
1923
  <span class="cstat-no" title="statement not covered" > break;</span>
2793
- case 'CallFunction':
2794
- <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
1924
+ ca<span class="cstat-no" title="statement not covered" >se 'Whi</span>leStatement':
1925
+ logicItems = [state.test, ...state.body];
1926
+ <span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
1927
+ ca<span class="cstat-no" title="statement not covered" >se 'CallLogic':</span>
1928
+ <span class="cstat-no" title="statement not covered" > logicIt</span>ems = state.arguments?.map((item: Argument) =&gt; item.expression);
1929
+ getLogic(state.calleewholeKey, app, diffLogicList);
1930
+ <span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
1931
+ ca<span class="cstat-no" title="statement not covered" >se 'Cal</span>lFunction':
1932
+ logicItems = state.arguments?.map((item: Argument) =&gt; item.expression);
1933
+ <span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
1934
+ ca<span class="cstat-no" title="statement not covered" >se 'Cal</span>lInterface':
1935
+ logicItems = state.arguments?.map((item: Argument) =&gt; item.expression);
2795
1936
  <span class="cstat-no" title="statement not covered" > break;</span>
2796
- case 'CallInterface':
2797
- <span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
1937
+ ca<span class="cstat-no" title="statement not covered" >se 'Ext</span>ernalDestination':
1938
+ logicItems = [state.anchor, state.link];
1939
+ <span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
1940
+ ca<span class="cstat-no" title="statement not covered" >se 'Bat</span>chAssignment':
1941
+ logicItems = [state.left?.expression, ...state.left?.members, ...state.rights.map((item: SelectMembers) =&gt; [item?.expression, ...item?.members]).flat(1)];
2798
1942
  <span class="cstat-no" title="statement not covered" > break;</span>
2799
- case 'ExternalDestination':
2800
- <span class="cstat-no" title="statement not covered" > logicItems = [state.anchor, state.link];</span>
1943
+ ca<span class="cstat-no" title="statement not covered" >se 'Mem</span>berExpression':
1944
+ logicItems = [state.object, state.property];
2801
1945
  <span class="cstat-no" title="statement not covered" > break;</span>
2802
- case 'BatchAssignment':
2803
- <span class="cstat-no" title="statement not covered" > logicItems = [state.left?.expression, ...state.left?.members, ...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) =&gt; <span class="cstat-no" title="statement not covered" >[item?.expression, ...item?.members])</span>.flat(1)];</span>
1946
+ ca<span class="cstat-no" title="statement not covered" >se 'Str</span>ingInterpolation':
1947
+ logicItems = [...state.expressions];
1948
+ <span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
1949
+ ca<span class="cstat-no" title="statement not covered" >se 'New</span>Composite':
1950
+ logicItems = [...state.rights.map((item: SelectMembers) =&gt; item.expression)];
2804
1951
  <span class="cstat-no" title="statement not covered" > break;</span>
2805
- case 'MemberExpression':
2806
- <span class="cstat-no" title="statement not covered" > logicItems = [state.object, state.property];</span>
2807
- <span class="cstat-no" title="statement not covered" > break;</span>
2808
- case 'StringInterpolation':
2809
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.expressions];</span>
2810
- <span class="cstat-no" title="statement not covered" > break;</span>
2811
- case 'NewComposite':
2812
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) =&gt; <span class="cstat-no" title="statement not covered" >item.expression)</span>];</span>
2813
- <span class="cstat-no" title="statement not covered" > break;</span>
2814
- case 'NewList':
2815
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.items];</span>
1952
+ ca<span class="cstat-no" title="statement not covered" >se 'New</span>List':
1953
+ logicItems = [...state.items];
2816
1954
  <span class="cstat-no" title="statement not covered" > break;</span>
2817
1955
  default:
2818
- <span class="cstat-no" title="statement not covered" > break;</span>
2819
- }
1956
+ break;
1957
+ <span class="cstat-no" title="statement not covered" > }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2820
1958
  &nbsp;
2821
- <span class="cstat-no" title="statement not covered" > return logicItems.filter(<span class="fstat-no" title="function not covered" >(i</span>tem: LogicItem) =&gt; <span class="cstat-no" title="statement not covered" >!!item)</span>;</span>
1959
+ return logicItems.filter((item: LogicItem) =&gt; !!item);
2822
1960
  }
2823
- &nbsp;
2824
- /* 小程序影响的服务端发布 */
2825
- function <span class="fstat-no" title="function not covered" >getMiniAppChange(</span>target: any, obj: any, action: string) {
2826
- <span class="cstat-no" title="statement not covered" > if (!target.app.miniEnable) {</span>
2827
- <span class="cstat-no" title="statement not covered" > return false;</span>
2828
- }
2829
- /* 分端以后需要改 */
2830
- const len = <span class="cstat-no" title="statement not covered" >target.nodePath?.split('.').length;</span>
2831
- <span class="cstat-no" title="statement not covered" > if (len &gt; 2) {</span>
1961
+ <span class="fstat-no" title="function not covered" ></span>
1962
+ /*<span class="cstat-no" title="statement not covered" > 小程序影响的服务端发布 */</span>
1963
+ func<span class="cstat-no" title="statement not covered" >tion getMiniAp</span>pChange(target: any, obj: any, action: string) {
1964
+ if (!target.app.miniEnable) {
1965
+ return false;
1966
+ }<span class="cstat-no" title="statement not covered" ></span>
1967
+ <span class="cstat-no" title="statement not covered" > /* 分端以后需要改 */</span>
1968
+ co<span class="cstat-no" title="statement not covered" >nst len = targ</span>et.nodePath?.split('.').length;
1969
+ if (len &gt; 2) {
2832
1970
  <span class="cstat-no" title="statement not covered" > return false;</span>
2833
- }
2834
- <span class="cstat-no" title="statement not covered" > if (action === 'delete') {</span>
1971
+ }<span class="cstat-no" title="statement not covered" ></span>
1972
+ if (action === 'delete') {
2835
1973
  <span class="cstat-no" title="statement not covered" > return true;</span>
2836
- } else {
2837
- <span class="cstat-no" title="statement not covered" > if ('name' in obj || 'title' in obj) {</span>
2838
- <span class="cstat-no" title="statement not covered" > return true;</span>
1974
+ } el<span class="cstat-no" title="statement not covered" >se {</span>
1975
+ if ('name' in obj || 'title' in obj) {
1976
+ return true;
2839
1977
  }
2840
1978
  }
2841
1979
  }
2842
1980
  &nbsp;
2843
1981
  let aiExecuted = 0;
2844
- let sessionPath = '';
2845
- // AI 生成内容是否被采纳
2846
- const handleAIPoint = <span class="fstat-no" title="function not covered" >(a</span>pp: any, actionItem: any) =&gt; {
2847
- const { actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2848
- <span class="cstat-no" title="statement not covered" > if (aiExecuted &gt; 0) {</span>
2849
- <span class="cstat-no" title="statement not covered" > app.emit('logic:accepted', { ...actionItem, sessionPath });</span>
1982
+ let sessionPath = '';<span class="fstat-no" title="function not covered" ></span>
1983
+ // AI 生成内容是否被采纳<span class="cstat-no" title="statement not covered" ></span>
1984
+ co<span class="cstat-no" title="statement not covered" >nst handleAIPoint = (app: any, actionItem: any) =&gt; {</span>
1985
+ co<span class="cstat-no" title="statement not covered" >nst { actionMsg, action } = actionItem || {};</span>
1986
+ if<span class="cstat-no" title="statement not covered" > (aiExecuted &gt; 0)</span> {
1987
+ app.emit('logic:accepted', { ...actionItem, sessionPath });
2850
1988
  <span class="cstat-no" title="statement not covered" > aiExecuted -= 1;</span>
2851
- }
2852
- <span class="cstat-no" title="statement not covered" > if (actionMsg.includes('自然语言生成代码') &amp;&amp; !action) {</span>
1989
+ }<span class="cstat-no" title="statement not covered" ></span>
1990
+ if (actionMsg.includes('自然语言生成代码') &amp;&amp; !action) {
2853
1991
  <span class="cstat-no" title="statement not covered" > aiExecuted += 1;</span>
2854
1992
  // eslint-disable-next-line prefer-destructuring
2855
- <span class="cstat-no" title="statement not covered" > sessionPath = actionMsg.match(/:(.*)/)[1];</span>
1993
+ sessionPath = actionMsg.match(/:(.*)/)[1];
2856
1994
  }
2857
1995
  }
2858
1996
  &nbsp;
2859
1997
  /**
2860
- * 执行更新
2861
- */
2862
- async function <span class="fstat-no" title="function not covered" >doAction(</span>app: any, actionItem: any) {
2863
- const isOperationRecord = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('isOperationRecord');</span>
2864
- <span class="cstat-no" title="statement not covered" > if (isOperationRecord) {</span>
2865
- <span class="cstat-no" title="statement not covered" > console.log('正在进行操作栈回放操作,如需行任何Nasl操作请刷新页面');</span>
2866
- <span class="cstat-no" title="statement not covered" > return;</span>
2867
- }
2868
- let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2869
- let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2870
- const actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2871
- const { list, actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2872
- <span class="cstat-no" title="statement not covered" > handleAIPoint(app, actionItem);</span>
2873
- const itemloop = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(_</span>i: LogicItem, app: any, diffArr: string[]) =&gt; {</span>
2874
- const _l = <span class="cstat-no" title="statement not covered" >getStatement(_i, app, diffArr);</span>
2875
- <span class="cstat-no" title="statement not covered" > if (_l.length) {</span>
2876
- <span class="cstat-no" title="statement not covered" > _l.map(<span class="fstat-no" title="function not covered" >(_</span>ii: LogicItem) =&gt; <span class="cstat-no" title="statement not covered" >itemloop(_ii, app, diffArr))</span>;</span>
2877
- }
2878
- };
2879
- const loopEle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iew: View | ViewElement, checkAuth: boolean) =&gt; {</span>
2880
- <span class="cstat-no" title="statement not covered" > if (view instanceof View) {</span>
2881
- <span class="cstat-no" title="statement not covered" > view?.elements?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
2882
- }
2883
- <span class="cstat-no" title="statement not covered" > view?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
2884
- <span class="cstat-no" title="statement not covered" > if (view instanceof ViewElement) {</span>
2885
- <span class="cstat-no" title="statement not covered" > if (view.bindEvents.length) {</span>
2886
- const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2887
- <span class="cstat-no" title="statement not covered" > view.bindEvents.forEach(<span class="fstat-no" title="function not covered" >(b</span>indEvent) =&gt; {</span>
2888
- <span class="cstat-no" title="statement not covered" > bindEvent.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
2889
- <span class="cstat-no" title="statement not covered" > logic.body.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogicItem) =&gt; <span class="cstat-no" title="statement not covered" >itemloop(logicItem, app, diffArr))</span>;</span>
2890
- });
2891
- });
2892
- const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
2893
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2894
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2895
- }
2896
- }
2897
- <span class="cstat-no" title="statement not covered" > if (view.tag === 'u-uploader' || view.tag === 'van-uploader') {</span>
2898
- const bute = <span class="cstat-no" title="statement not covered" >view?.bindAttrs.find(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'url')</span>;</span>
2899
- const needUpdateBackEnd = <span class="cstat-no" title="statement not covered" >bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
2900
- <span class="cstat-no" title="statement not covered" > if (checkAuth) {</span>
2901
- <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd &amp;&amp; !view.view.parentAuth) {</span>
2902
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2903
- }
2904
- } else {
2905
- <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd) {</span>
2906
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
1998
+ * 执行更新<span class="fstat-no" title="function not covered" ></span>
1999
+ */<span class="cstat-no" title="statement not covered" ></span>
2000
+ async function doAc<span class="cstat-no" title="statement not covered" >tion(a</span>pp: any, actionItem: any) {
2001
+ let hasFrontEnd = false;<span class="cstat-no" title="statement not covered" ></span>
2002
+ let hasBackEnd = false;<span class="cstat-no" title="statement not covered" ></span>
2003
+ <span class="cstat-no" title="statement not covered" > const actionList: any[] = [];</span>
2004
+ const { list, act<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >io</span>nMsg, action } = actionItem || {};</span>
2005
+ handleAIPoint<span class="cstat-no" title="statement not covered" >(app, actionItem);</span>
2006
+ co<span class="cstat-no" title="statement not covered" >nst itemloop = (_i: LogicItem, app: any, diffArr: string[]) =&gt; {</span>
2007
+ co<span class="cstat-no" title="statement not covered" >nst _l <span class="fstat-no" title="function not covered" >= </span>getStatement(_i, a<span class="cstat-no" title="statement not covered" >pp, diffArr);</span></span>
2008
+ if (_l.length) {
2009
+ _l.map((_ii: LogicItem) =&gt; itemloop(_ii, app, diffArr));
2010
+ }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
2011
+ };<span class="cstat-no" title="statement not covered" ></span>
2012
+ cons<span class="cstat-no" title="statement not covered" >t loopEle = (view: View <span class="fstat-no" title="function not covered" >| </span>ViewElem<span class="cstat-no" title="statement not covered" >ent, checkAuth: boolean) </span>=&gt;</span> {
2013
+ if (view instanceof View) {
2014
+ <span class="cstat-no" title="statement not covered" > view?.elements?.forEac<span class="fstat-no" title="function not covered" >h(</span>(item) =<span class="cstat-no" title="statement not covered" >&gt; loopEle(item, checkAuth</span>))</span>;
2015
+ <span class="cstat-no" title="statement not covered" > }</span>
2016
+ vi<span class="cstat-no" title="statement not covered" >ew?.children?.forEach((item) =&gt; loopEle(item, checkAuth));</span>
2017
+ if (view instanceof ViewElemen<span class="cstat-no" title="statement not covered" >t) </span>{
2018
+ if<span class="cstat-no" title="statement not covered" > (view.bindEvents.length<span class="fstat-no" title="function not covered" >) </span>{</span>
2019
+ co<span class="cstat-no" title="statement not covered" >nst diffArr: string[] = [<span class="fstat-no" title="function not covered" >];</span></span>
2020
+ view<span class="cstat-no" title="statement not covered" >.bindEvents.forEach<span class="fstat-no" title="function not covered" >((</span>bindEvent) =&gt;<span class="cstat-no" title="statement not covered" > {</span></span>
2021
+ bindEvent.logics.forEach((logic) =&gt; {
2022
+ logic.body.forEach((logicItem) =&gt; itemloop(logicItem, app, diffArr));
2023
+ });<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2024
+ <span class="cstat-no" title="statement not covered" > });</span>
2025
+ co<span class="cstat-no" title="statement not covered" >nst result = diffAr</span>r.filter((item) =&gt; item.startsWith('app') || item.startsWith('extensions'));
2026
+ if (result.length) {
2027
+ hasBackEnd = true;
2028
+ <span class="cstat-no" title="statement not covered" > }</span>
2029
+ }<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2030
+ if (view.tag === 'u-uploader<span class="cstat-no" title="statement not covered" >' || view.tag === 'van-uploader') {</span>
2031
+ <span class="cstat-no" title="statement not covered" > const bute = view?.bindAttrs.find((item) =&gt; item.name === 'url');</span>
2032
+ co<span class="cstat-no" title="statement not covered" >nst needUpdateBackEnd = bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
2033
+ if (<span class="cstat-no" title="statement not covered" >checkAuth) {</span>
2034
+ if (needUpdateBackEnd &amp;&amp; !view.view.parentAuth) {
2035
+ hasBackEnd = true;
2036
+ <span class="cstat-no" title="statement not covered" > }</span>
2037
+ } el<span class="cstat-no" title="statement not covered" >se {</span>
2038
+ if (needUpdateBackEnd) {
2039
+ hasBackEnd = true;
2907
2040
  }
2908
2041
  }
2909
2042
  }
2910
2043
  }
2911
- };
2912
- &nbsp;
2913
- const loopEleAuth = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iewElement: ViewElement) =&gt; {</span>
2914
- <span class="cstat-no" title="statement not covered" > viewElement?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: ViewElement) =&gt; {</span>
2915
- const bindDirective = <span class="cstat-no" title="statement not covered" >item?.bindDirectives?.find(</span>
2916
- <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
2917
- )
2918
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
2044
+ };<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
2045
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
2046
+ const loopEleAuth = (viewE<span class="cstat-no" title="statement not covered" >lement: ViewElement) =&gt; {</span>
2047
+ view<span class="fstat-no" title="function not covered" >El</span>ement?.children?.forEac<span class="cstat-no" title="statement not covered" >h((item: ViewElement)</span> =&gt; {
2048
+ const bindDirective = item?.bindDirectives?.find(
2049
+ <span class="cstat-no" title="statement not covered" > (item: BindDirective) =&gt; item.name === 'auth'</span>
2050
+ )<span class="cstat-no" title="statement not covered" ></span>
2051
+ if (bindDirective) {
2919
2052
  <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2920
2053
  }
2921
- <span class="cstat-no" title="statement not covered" > loopEleAuth(item)</span>
2922
- })
2923
- }
2924
- <span class="cstat-no" title="statement not covered" > try {</span>
2925
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(list)) {</span>
2926
- <span class="cstat-no" title="statement not covered" > list.forEach(<span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2927
- const emitTarget = <span class="cstat-no" title="statement not covered" >event?.originEvent?.target as SyntaxNode;</span>
2928
- const _path: string = <span class="cstat-no" title="statement not covered" >event.originEvent.path;</span>
2929
- const _root = <span class="cstat-no" title="statement not covered" >_path.split('.')?.[1] || '';</span>
2930
- <span class="cstat-no" title="statement not covered" > if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >_root.startsWith(item))</span>) {</span>
2054
+ loopEleAuth(item)
2055
+ <span class="cstat-no" title="statement not covered" > })</span>
2056
+ }<span class="cstat-no" title="statement not covered" ></span>
2057
+ try <span class="cstat-no" title="statement not covered" >{<span class="fstat-no" title="function not covered" ></span></span>
2058
+ if (Array.isArray(list)<span class="cstat-no" title="statement not covered" >) {</span>
2059
+ list.forEach((event) =&gt; <span class="cstat-no" title="statement not covered" >{</span>
2060
+ const emitTarg<span class="cstat-no" title="statement not covered" >et = event?.originEvent?.tar</span>get as SynatxNode;
2061
+ <span class="cstat-no" title="statement not covered" > const _path: string = event.originEvent.path;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2062
+ co<span class="cstat-no" title="statement not covered" >nst _root = _path.s</span>plit('.')?.[1] || '';
2063
+ if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some((item) =&gt; _root.startsWith(item))) {
2931
2064
  <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2932
- }
2933
- <span class="cstat-no" title="statement not covered" > if (emitTarget) {</span>
2934
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'App') {</span>
2935
- <span class="cstat-no" title="statement not covered" > if (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
2936
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2937
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2938
- }
2939
- }
2940
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ValidationRule') {</span>
2941
- <span class="cstat-no" title="statement not covered" > if (</span>
2065
+ }<span class="cstat-no" title="statement not covered" ></span>
2066
+ if (<span class="cstat-no" title="statement not covered" >emitTarget) {</span>
2067
+ if (<span class="cstat-no" title="statement not covered" >emitTarget.concept === 'App') {</span>
2068
+ if<span class="cstat-no" title="statement not covered" > (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
2069
+ hasBackEnd = true
2070
+ hasFrontEnd = true
2071
+ <span class="cstat-no" title="statement not covered" > }</span>
2072
+ }<span class="cstat-no" title="statement not covered" ></span>
2073
+ if (emitTarget.concept === 'ValidationRule') {
2074
+ if (
2942
2075
  event?.object?.enableServerValidation ||
2943
- event?.originEvent?.object?.enableServerValidation
2944
- ) {
2945
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2946
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2947
- }
2948
- }
2949
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Logic') {</span>
2950
- const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2951
- <span class="cstat-no" title="statement not covered" > if (emitTarget.body.length &gt; 2) {</span>
2952
- <span class="cstat-no" title="statement not covered" > emitTarget.body.forEach(<span class="fstat-no" title="function not covered" >(i</span>t: LogicItem) =&gt; {</span>
2953
- <span class="cstat-no" title="statement not covered" > itemloop(it, app, diffArr);</span>
2954
- });
2955
- }
2956
- const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
2957
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2958
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2959
- }
2960
- }
2961
- <span class="cstat-no" title="statement not covered" > if ('view' in emitTarget &amp;&amp; emitTarget.view) {</span>
2076
+ <span class="cstat-no" title="statement not covered" > event?.originEvent?.object?.enableServerValidation</span>
2077
+ ) <span class="cstat-no" title="statement not covered" >{</span>
2078
+ hasBackEnd = true
2079
+ hasFrontEnd = true
2080
+ <span class="cstat-no" title="statement not covered" > }</span>
2081
+ }<span class="cstat-no" title="statement not covered" ></span>
2082
+ if<span class="cstat-no" title="statement not covered" > (emitTarget.concept === 'Logic') {</span>
2083
+ co<span class="cstat-no" title="statement not covered" >nst diffArr: string[] = <span class="fstat-no" title="function not covered" >[]</span>;</span>
2084
+ if (<span class="cstat-no" title="statement not covered" >emitTarget.body.length &gt; 2) </span>{
2085
+ emitTarget.body.forEach((it: LogicItem) =&gt; {
2086
+ itemloop(it, app, diffArr);
2087
+ });<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2088
+ <span class="cstat-no" title="statement not covered" > }</span>
2089
+ co<span class="cstat-no" title="statement not covered" >nst result = diffAr</span>r.filter((item) =&gt; item.startsWith('app') || item.startsWith('extensions'));
2090
+ if (result.length) {
2091
+ hasBackEnd = true;
2092
+ <span class="cstat-no" title="statement not covered" > }</span>
2093
+ }<span class="cstat-no" title="statement not covered" ></span>
2094
+ if ('view' in emitTarget &amp;&amp; emitTarget.view) {
2962
2095
  <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2963
- }
2964
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindDirective') {</span>
2096
+ }<span class="cstat-no" title="statement not covered" ></span>
2097
+ if<span class="cstat-no" title="statement not covered" > (emitTarget.concept === 'BindDirective') {</span>
2965
2098
  const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete'</span>
2966
- <span class="cstat-no" title="statement not covered" > if (isDelete) {</span>
2967
- const isAuto = <span class="cstat-no" title="statement not covered" >~event?.originEvent?.path?.indexOf('name=auth')</span>
2968
- <span class="cstat-no" title="statement not covered" > if (isAuto) {</span>
2969
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2970
- }
2971
- }
2972
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name === 'auth') {</span>
2973
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2974
- }
2975
- }
2976
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'View') {</span>
2977
- <span class="cstat-no" title="statement not covered" > if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {</span>
2978
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2979
- }
2980
- &nbsp;
2981
- const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete';</span>
2982
- const isAuthView = <span class="cstat-no" title="statement not covered" >emitTarget.auth &amp;&amp; event?.originEvent?.object?.name;</span>
2983
- const isUpdateAuth = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; "auth" in (event?.originEvent?.object || {});</span>
2984
- const isUpdateAuthDes = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; "authDescription" in (event?.originEvent?.object || {});</span>
2985
- const isUpdateBindRoles = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles;</span>
2986
- <span class="cstat-no" title="statement not covered" > if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView||isUpdateAuthDes) {</span>
2987
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2099
+ if<span class="cstat-no" title="statement not covered" > (isDelete) {</span>
2100
+ co<span class="cstat-no" title="statement not covered" >nst isAuto = ~event?.originEvent?.path?.indexOf('name=auth')</span>
2101
+ if (isAuto) {
2102
+ hasBackEnd = true
2103
+ <span class="cstat-no" title="statement not covered" > }</span>
2104
+ }<span class="cstat-no" title="statement not covered" ></span>
2105
+ if (event?.originEvent?.object?.name === 'auth') {
2106
+ hasBackEnd = true
2107
+ <span class="cstat-no" title="statement not covered" > }</span>
2108
+ <span class="cstat-no" title="statement not covered" > }</span>
2109
+ if (<span class="cstat-no" title="statement not covered" >emitTarget.concept </span>=== 'View') {
2110
+ if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {
2111
+ hasBackEnd = tr<span class="cstat-no" title="statement not covered" >ue;</span>
2112
+ }<span class="cstat-no" title="statement not covered" ></span>
2113
+ const isDelete = even<span class="cstat-no" title="statement not covered" >t?.originEvent?.action === 'delete';</span>
2114
+ const isAuthView = emitTar<span class="cstat-no" title="statement not covered" >get.auth &amp;&amp; event?.originEvent?.object?.name;</span>
2115
+ <span class="cstat-no" title="statement not covered" > const isUpdateAuth = event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.auth</span>
2116
+ co<span class="cstat-no" title="statement not covered" >nst isUpdateBindRol</span>es = event?.originEvent?.action === 'update' &amp;&amp; event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles;
2117
+ if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView) {
2118
+ hasBackEnd = true;
2988
2119
  // const app = emitTarget.app;
2989
2120
  // const diffArr: string[] = [];
2990
2121
  // emitTarget.logics.forEach((logic: Logic) =&gt; {
@@ -2999,79 +2130,76 @@ async function <span class="fstat-no" title="function not covered" >doAction(</s
2999
2130
  // hasBackEnd = true;
3000
2131
  // }
3001
2132
  // emitTarget.children.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
3002
- // emitTarget.elements.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
2133
+ <span class="cstat-no" title="statement not covered" > // emitTarget.elem</span>ents.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
3003
2134
  }
3004
2135
  <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
3005
- }
3006
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ViewElement') {</span>
3007
- <span class="cstat-no" title="statement not covered" > if ("authDescription" in (event?.originEvent?.object || {})) {</span>
3008
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3009
- } ;
3010
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name) {</span>
3011
- const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget.bindDirectives.find(</span>
3012
- <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
3013
- )
3014
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
3015
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3016
- }
3017
- }
3018
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action === 'delete') {</span>
3019
- const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget?.bindDirectives?.find(</span>
3020
- <span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) =&gt; <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
3021
- )
3022
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
2136
+ }<span class="cstat-no" title="statement not covered" ></span>
2137
+ if (emitTarget.concept ===<span class="cstat-no" title="statement not covered" > 'ViewElement') {</span>
2138
+ if (<span class="fstat-no" title="function not covered" >ev</span>ent?.originEvent?.objec<span class="cstat-no" title="statement not covered" >t?.name) {</span>
2139
+ const bindDirective = emitTarget.bindDirectives.find(
2140
+ <span class="cstat-no" title="statement not covered" > (item: BindDirective) =&gt; item.name === 'auth'</span>
2141
+ )<span class="cstat-no" title="statement not covered" ></span>
2142
+ if (bindDirective) {
2143
+ hasBackEnd = true;
2144
+ }<span class="cstat-no" title="statement not covered" ></span>
2145
+ }<span class="cstat-no" title="statement not covered" ></span>
2146
+ if (<span class="fstat-no" title="function not covered" >ev</span>ent?.originEvent?.actio<span class="cstat-no" title="statement not covered" >n === 'delete') {</span>
2147
+ const bindDirective = emitTarget?.bindDirectives?.find(
2148
+ <span class="cstat-no" title="statement not covered" > (item: BindDirective) =&gt; item.name === 'auth'</span>
2149
+ )<span class="cstat-no" title="statement not covered" ></span>
2150
+ if (bindDirective) {
3023
2151
  <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3024
2152
  }
3025
2153
  <span class="cstat-no" title="statement not covered" > loopEleAuth(emitTarget)</span>
3026
- }
3027
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action !== 'create') {</span>
3028
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles) {</span>
3029
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3030
- }
2154
+ }<span class="cstat-no" title="statement not covered" ></span>
2155
+ if (<span class="cstat-no" title="statement not covered" >event?.originEvent?.action !== 'create') {</span>
2156
+ if (event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles) {
2157
+ hasBackEnd = true
2158
+ <span class="cstat-no" title="statement not covered" > }</span>
3031
2159
  }
3032
2160
  <span class="cstat-no" title="statement not covered" > loopEle(emitTarget, true)</span>
3033
2161
  }
3034
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindAttribute' &amp;&amp; emitTarget.name === 'url') {</span>
3035
- const needUpdateBackEnd =
2162
+ if (<span class="cstat-no" title="statement not covered" >emitTarget.concept === 'BindAttribute' &amp;&amp; emitTarget.name === 'url') {</span>
2163
+ <span class="cstat-no" title="statement not covered" > const needUpdateBackEnd =</span>
3036
2164
  <span class="cstat-no" title="statement not covered" > emitTarget?.value?.endsWith('/import') || emitTarget?.value?.includes('/upload/')</span>
3037
- <span class="cstat-no" title="statement not covered" > if (!emitTarget.view.parentAuth &amp;&amp; needUpdateBackEnd) {</span>
3038
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3039
- }
3040
- }
3041
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'CallLogic') {</span>
3042
- const arrlist: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
3043
- <span class="cstat-no" title="statement not covered" > getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist);</span>
3044
- const result = <span class="cstat-no" title="statement not covered" >arrlist.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
3045
- // console.log(result, 'CallLogic');
3046
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
3047
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2165
+ if (!emitTarget.view.parentAuth &amp;&amp; needUpdateBackEnd) {
2166
+ hasBackEnd = true
2167
+ <span class="cstat-no" title="statement not covered" > }</span>
2168
+ }<span class="cstat-no" title="statement not covered" ></span>
2169
+ if<span class="cstat-no" title="statement not covered" > (emitTarget.concept === 'CallLogic') {</span>
2170
+ const arrlist: <span class="cstat-no" title="statement not covered" >string[] = [];<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2171
+ getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist);
2172
+ <span class="cstat-no" title="statement not covered" > const result = arrlist.filter((item) =&gt; item.startsWith('app') || item.startsWith('extensions'));</span>
2173
+ //<span class="cstat-no" title="statement not covered" > console.log(result</span>, 'CallLogic');
2174
+ if (result.length) {
2175
+ hasBackEnd = true;
3048
2176
  }
2177
+ <span class="cstat-no" title="statement not covered" > }</span>
2178
+ //<span class="cstat-no" title="statement not covered" > 更新端时需要出发后端更新</span>
2179
+ if (emitTarget.concept === 'Frontend') {
2180
+ hasBackEnd = true;
3049
2181
  }
3050
- // 更新端时需要出发后端更新
3051
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Frontend') {</span>
3052
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3053
- }
3054
- }
3055
- &nbsp;
3056
- <span class="cstat-no" title="statement not covered" > event.eventList.forEach(<span class="fstat-no" title="function not covered" >({</span> action, path, object: objItem }: { action: string; path: string; object: any }) =&gt; {</span>
3057
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(objItem)) {</span>
3058
- <span class="cstat-no" title="statement not covered" > if (action === 'update') {</span>
3059
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2182
+ }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
2183
+ <span class="cstat-no" title="statement not covered" ></span>
2184
+ even<span class="cstat-no" title="statement not covered" >t.eventList.forEach(({ action, path, object: objItem }: { action: string; path: string; object: any }) =&gt; {</span>
2185
+ if (<span class="cstat-no" title="statement not covered" >Array.isArray(objItem)) {</span>
2186
+ if (action === 'update') {
2187
+ actionList.push({
3060
2188
  action,
3061
2189
  path,
3062
2190
  node: objItem[0],
3063
- });
3064
- } else {
3065
- <span class="cstat-no" title="statement not covered" > objItem.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) =&gt; {</span>
3066
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2191
+ <span class="cstat-no" title="statement not covered" > });<span class="fstat-no" title="function not covered" ></span></span>
2192
+ } el<span class="cstat-no" title="statement not covered" >se {</span>
2193
+ objItem.forEach((item, index) =&gt; {
2194
+ actionList.push({
3067
2195
  action,
3068
2196
  path,
3069
2197
  node: item,
3070
2198
  });
3071
2199
  });
3072
- }
2200
+ <span class="cstat-no" title="statement not covered" > }</span>
3073
2201
  } else {
3074
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2202
+ actionList.push({
3075
2203
  action,
3076
2204
  path,
3077
2205
  object: objItem,
@@ -3079,66 +2207,46 @@ async function <span class="fstat-no" title="function not covered" >doAction(</s
3079
2207
  }
3080
2208
  });
3081
2209
  });
3082
- }
3083
- } catch (error) {
3084
- <span class="cstat-no" title="statement not covered" > console.log(error);</span>
3085
- <span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(app, {</span>
2210
+ <span class="cstat-no" title="statement not covered" > }</span>
2211
+ } <span class="cstat-no" title="statement not covered" >catch (error) {</span>
2212
+ console.log(error);
2213
+ taskQueue.refreshNasl(app, {
3086
2214
  errorInfo: {
3087
2215
  message: error?.message,
3088
2216
  stack: error?.stack,
3089
- },
2217
+ <span class="cstat-no" title="statement not covered" > },</span>
3090
2218
  });
3091
- <span class="cstat-no" title="statement not covered" > return;</span>
3092
- }
2219
+ return;
2220
+ }<span class="cstat-no" title="statement not covered" ></span>
3093
2221
  &nbsp;
3094
- const uuid = <span class="cstat-no" title="statement not covered" >uuidv4().replace(/-/g, '');</span>
3095
- const instructList = <span class="cstat-no" title="statement not covered" >[{</span>
3096
- uuid,
3097
- actions: actionList,
2222
+ const instructList = [{
2223
+ uuid: uuidv4().replace(/-/g, ''),
2224
+ <span class="cstat-no" title="statement not covered" > actions: actionList,</span>
3098
2225
  }];
3099
- const operation: Operation = <span class="cstat-no" title="statement not covered" >{</span>
3100
- type: 'doAction',
3101
- uuid,
3102
- actionItem: {
3103
- actionMsg,
3104
- list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; {
3105
- const { path, action, object, oldObject, parentKey, index } = <span class="cstat-no" title="statement not covered" >item?.originEvent || {};</span>
3106
- <span class="cstat-no" title="statement not covered" > return {</span>
3107
- path,
3108
- action,
3109
- parentKey,
3110
- index,
3111
- object: object?.toJSON?.() || object,
3112
- oldObject: oldObject?.toJSON?.() || oldObject,
3113
- }
3114
- }),
3115
- },
3116
- };
3117
- <span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList, operationList: [operation] });</span>
3118
- // 进行nasl操作后需要将Index重置
3119
- <span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', null);</span>
3120
- <span class="cstat-no" title="statement not covered" > if (!app._historying) {</span>
3121
- <span class="cstat-no" title="statement not covered" > if (app._historyIndex !== app._historyList.length) {</span>
2226
+ <span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList });</span>
2227
+ <span class="cstat-no" title="statement not covered" ></span>
2228
+ if (<span class="cstat-no" title="statement not covered" >!app._historying) {</span>
2229
+ if (app._historyIndex !== app._historyList.length) {
3122
2230
  <span class="cstat-no" title="statement not covered" > app._historyList = app._historyList.splice(0, app._historyIndex);</span>
3123
2231
  }
3124
- <span class="cstat-no" title="statement not covered" > app._historyList.push({</span>
2232
+ app._historyList.<span class="fstat-no" title="function not covered" >pu</span>sh({<span class="cstat-no" title="statement not covered" ></span>
3125
2233
  actionMsg,
3126
- list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; <span class="cstat-no" title="statement not covered" >item?.originEvent)</span>,
2234
+ <span class="cstat-no" title="statement not covered" > list: list.map((item: any) =&gt; item.originEv</span>ent),
3127
2235
  });
3128
- <span class="cstat-no" title="statement not covered" > app._historyIndex = app._historyList.length;</span>
2236
+ app._historyIndex <span class="cstat-no" title="statement not covered" >= app._historyList.length;</span>
3129
2237
  } else {
3130
- const actionMap = <span class="cstat-no" title="statement not covered" >{</span>
2238
+ const actionMap = {
3131
2239
  undo: '已撤销操作:',
3132
- redo: '已重做操作:',
3133
- };
3134
- let msg = <span class="cstat-no" title="statement not covered" >actionMap[action as 'undo' | 'redo'];</span>
3135
- <span class="cstat-no" title="statement not covered" > msg += actionMsg;</span>
3136
- <span class="cstat-no" title="statement not covered" > if (process.env.BUILD_TARGET !== 'node') {</span>
3137
- <span class="cstat-no" title="statement not covered" > require('element-plus').ElMessage.info(msg);</span>
2240
+ redo: '已<span class="cstat-no" title="statement not covered" >重做操作:',</span>
2241
+ <span class="cstat-no" title="statement not covered" > };</span>
2242
+ <span class="cstat-no" title="statement not covered" > let msg = actionMap[action as 'undo' | 'redo'];</span>
2243
+ ms<span class="cstat-no" title="statement not covered" >g += actionMsg;</span>
2244
+ if (process.env.BUILD_TARGET !== 'node') {
2245
+ <span class="cstat-no" title="statement not covered" > require('element-plus')</span>.ElMessage.info(msg);
3138
2246
  }
3139
2247
  <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
3140
2248
  }
3141
- <span class="cstat-no" title="statement not covered" > stepRecorder.initialized &amp;&amp; stepRecorder.record(actionMsg, actionItem, actionList);</span>
2249
+ stepRecorder.initialized &amp;&amp; stepRecorder.record(actionMsg, actionItem, actionList);
3142
2250
  }
3143
2251
  &nbsp;
3144
2252
  type Instruct = {
@@ -3150,7 +2258,6 @@ type TaskOption = {
3150
2258
  hasFrontEnd: boolean,
3151
2259
  hasBackEnd: boolean,
3152
2260
  instructList: Instruct[],
3153
- operationList: Operation[],
3154
2261
  };
3155
2262
  enum TaskQueueStatus {
3156
2263
  ExceedMaxTaskCount,
@@ -3168,163 +2275,141 @@ class TaskQueue {
3168
2275
  lastQueue: TaskOption[] = []
3169
2276
  running: Boolean = false
3170
2277
  maxTaskCount: number = 10
3171
- status?: TaskQueueStatus = undefined
3172
- &nbsp;
3173
- <span class="fstat-no" title="function not covered" > addTask(</span>task: TaskOption) {
2278
+ <span class="fstat-no" title="function not covered" > status?:</span> TaskQueueStatus = undefined
2279
+ <span class="cstat-no" title="statement not covered" ></span>
2280
+ addTask(task: TaskOption) {
3174
2281
  <span class="cstat-no" title="statement not covered" > this.queue.push(task);</span>
3175
- &nbsp;
3176
- <span class="cstat-no" title="statement not covered" > if (this.queue.length &gt;= this.maxTaskCount) {</span>
3177
- <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.ExceedMaxTaskCount;</span>
3178
- <span class="cstat-no" title="statement not covered" > task.app.emit('ExceedMaxTaskCount');</span>
3179
- }
3180
- &nbsp;
3181
- <span class="cstat-no" title="statement not covered" > this.run();</span>
3182
- }
3183
- &nbsp;
3184
- <span class="fstat-no" title="function not covered" > clear(</span>) {
2282
+ <span class="cstat-no" title="statement not covered" ></span>
2283
+ if<span class="cstat-no" title="statement not covered" > (this.queue.length &gt;= this.maxTaskCo</span>unt) {
2284
+ this.status = TaskQueueStatus.ExceedMaxTaskCount;
2285
+ task.app.emit('ExceedMaxTaskCount');
2286
+ <span class="cstat-no" title="statement not covered" > }</span>
2287
+ &nbsp;
2288
+ this.run();
2289
+ <span class="fstat-no" title="function not covered" > }</span>
2290
+ <span class="cstat-no" title="statement not covered" ></span>
2291
+ cl<span class="cstat-no" title="statement not covered" >ear() {</span>
3185
2292
  <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
3186
2293
  <span class="cstat-no" title="statement not covered" > this.lastQueue = [];</span>
3187
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
3188
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
3189
- }
3190
- &nbsp;
3191
- <span class="fstat-no" title="function not covered" > async </span>run(queue = <span class="branch-0 cbranch-no" title="branch not covered" >this.queue)</span> {
2294
+ this.status = undefined;
2295
+ this.running = false;
2296
+ <span class="fstat-no" title="function not covered" > }<span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
2297
+ <span class="cstat-no" title="statement not covered" ></span>
2298
+ asyn<span class="cstat-no" title="statement not covered" >c run(qu</span>eue = this.queue) {
3192
2299
  <span class="cstat-no" title="statement not covered" > if (this.running)</span>
3193
2300
  <span class="cstat-no" title="statement not covered" > return;</span>
3194
- <span class="cstat-no" title="statement not covered" > if (queue.length === 0)</span>
3195
- <span class="cstat-no" title="statement not covered" > return;</span>
3196
- &nbsp;
3197
- const app = <span class="cstat-no" title="statement not covered" >queue[0].app;</span>
3198
- let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
3199
- let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
3200
- let instructList: Instruct[] = <span class="cstat-no" title="statement not covered" >[];</span>
3201
- let operationList: Operation[] = <span class="cstat-no" title="statement not covered" >[];</span>
3202
- &nbsp;
3203
- <span class="cstat-no" title="statement not covered" > for (const task of queue) {</span>
2301
+ if (queue.length === 0)
2302
+ return;<span class="cstat-no" title="statement not covered" ></span>
2303
+ <span class="cstat-no" title="statement not covered" ></span>
2304
+ const app = queue<span class="cstat-no" title="statement not covered" >[0].ap</span>p;
2305
+ let hasFrontEnd = false;<span class="cstat-no" title="statement not covered" ></span>
2306
+ let hasBackEnd = false;
2307
+ <span class="cstat-no" title="statement not covered" > let instructList: Instruct[] = [];</span>
2308
+ <span class="cstat-no" title="statement not covered" ></span>
2309
+ for <span class="cstat-no" title="statement not covered" >(const task of queue</span>) {
3204
2310
  <span class="cstat-no" title="statement not covered" > if (task.hasFrontEnd)</span>
3205
2311
  <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
3206
2312
  <span class="cstat-no" title="statement not covered" > if (task.hasBackEnd)</span>
3207
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3208
- <span class="cstat-no" title="statement not covered" > instructList = instructList.concat(task.instructList);</span>
3209
- <span class="cstat-no" title="statement not covered" > operationList = operationList.concat(task.operationList);</span>
3210
- }
3211
- &nbsp;
3212
- <span class="cstat-no" title="statement not covered" > if (queue === this.queue) {</span>
3213
- <span class="cstat-no" title="statement not covered" > this.lastQueue = [...queue];</span>
3214
- <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
3215
- }
3216
- &nbsp;
3217
- <span class="cstat-no" title="statement not covered" > this.running = true;</span>
3218
- const error = <span class="cstat-no" title="statement not covered" >await _saveNasl({</span>
3219
- app, hasFrontEnd, hasBackEnd, instructList, operationList
2313
+ hasBackEnd = true;
2314
+ instructList = instructList.concat(task.instructList);
2315
+ <span class="cstat-no" title="statement not covered" > }</span>
2316
+ <span class="cstat-no" title="statement not covered" ></span>
2317
+ if<span class="cstat-no" title="statement not covered" > (queue === this.</span>queue) {
2318
+ this.lastQueue = [...queue];
2319
+ this.queue = [];
2320
+ <span class="cstat-no" title="statement not covered" > }</span>
2321
+ <span class="cstat-no" title="statement not covered" ></span>
2322
+ this.running = true;
2323
+ const error = await _saveNasl({
2324
+ app, hasFrontEnd, hasBackEnd, instructList,
3220
2325
  });
3221
2326
  &nbsp;
3222
- // code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新
3223
- // code: 500502 msg: '该应用已在新tab 页打开,请刷新!' 不重试或刷新
3224
- // code: 500505 需要刷新浏览器
3225
- <span class="cstat-no" title="statement not covered" > if (!error)</span>
3226
- <span class="cstat-no" title="statement not covered" > this.recover(app);</span>
3227
- else <span class="cstat-no" title="statement not covered" >if (![401650, 500502, 500505].includes(error.code)) {</span>
2327
+ <span class="cstat-no" title="statement not covered" > // code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新</span>
2328
+ //<span class="cstat-no" title="statement not covered" > code: 500502 msg:</span> "该应用已在新tab 页打开,请刷新!" 不重试或刷新
2329
+ if (!<span class="cstat-no" title="statement not covered" >error)</span>
2330
+ this.recover(app);
2331
+ el<span class="cstat-no" title="statement not covered" >se if (![401650, 500502].includes(error.code)) {</span>
3228
2332
  // 连接失败,或超时,或后端持久化异常
3229
- <span class="cstat-no" title="statement not covered" > if ((error.message === 'Network Error' || error.message?.includes('timeout') || error.code === 500500)</span>
3230
- &amp;&amp; this.status !== TaskQueueStatus.Retrying) {
3231
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
2333
+ if<span class="cstat-no" title="statement not covered" > ((error.message === '</span>Network Error' || error.message?.includes('timeout') || error.code === 500500)
2334
+ <span class="cstat-no" title="statement not covered" > &amp;&amp; this.status</span> !== TaskQueueStatus.Retrying) {
2335
+ this.running = false;
3232
2336
  <span class="cstat-no" title="statement not covered" > this.retry();</span>
3233
2337
  } else
3234
- <span class="cstat-no" title="statement not covered" > this.refreshNasl(app);</span>
3235
- &nbsp;
3236
- <span class="cstat-no" title="statement not covered" > return;</span>
3237
- }
3238
- &nbsp;
3239
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
3240
- &nbsp;
3241
- <span class="cstat-no" title="statement not covered" > this.run();</span>
3242
- }
3243
- &nbsp;
3244
- <span class="fstat-no" title="function not covered" > retry(</span>) {
3245
- <span class="cstat-no" title="statement not covered" > if (this.lastQueue.length === 0)</span>
3246
- <span class="cstat-no" title="statement not covered" > return;</span>
3247
- &nbsp;
3248
- const app = <span class="cstat-no" title="statement not covered" >this.lastQueue[0].app;</span>
3249
- <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.Retrying;</span>
3250
- <span class="cstat-no" title="statement not covered" > app.emit('Retrying');</span>
3251
- <span class="cstat-no" title="statement not covered" > this.run(this.lastQueue);</span>
3252
- }
3253
- &nbsp;
3254
- <span class="fstat-no" title="function not covered" > async </span>refreshNasl(app: App, options: RefreshNaslOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{ errorInfo: {} })</span> {
3255
- const failedQueue = <span class="cstat-no" title="statement not covered" >this.lastQueue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3256
- hasFrontEnd, hasBackEnd, instructList,
2338
+ <span class="cstat-no" title="statement not covered" > this.r</span>efreshNasl(app);
2339
+ &nbsp;
2340
+ return;
2341
+ <span class="cstat-no" title="statement not covered" > }</span>
2342
+ &nbsp;
2343
+ <span class="cstat-no" title="statement not covered" > this.running</span> = false;
2344
+ &nbsp;
2345
+ this.run();
2346
+ <span class="fstat-no" title="function not covered" > }</span>
2347
+ <span class="cstat-no" title="statement not covered" ></span>
2348
+ retr<span class="cstat-no" title="statement not covered" >y() {</span>
2349
+ if (this.lastQueue.length === 0)
2350
+ return;<span class="cstat-no" title="statement not covered" ></span>
2351
+ <span class="cstat-no" title="statement not covered" ></span>
2352
+ <span class="cstat-no" title="statement not covered" > const app = this.lastQ</span>ueue[0].app;
2353
+ <span class="cstat-no" title="statement not covered" > this.status = TaskQueueSta</span>tus.Retrying;
2354
+ app.emit('Retrying');
2355
+ this.run(this.lastQueue);
2356
+ <span class="fstat-no" title="function not covered" > }<span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
2357
+ <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2358
+ async refreshNasl(app: App, options: RefreshNaslOptions = { errorInfo: {} }) {
2359
+ const failedQueue = this.lastQueue.map(({ hasFrontEnd, hasBackEnd, instructList }) =&gt; ({
2360
+ hasFrontEnd,<span class="cstat-no" title="statement not covered" > hasBackEnd, in<span class="fstat-no" title="function not covered" >st</span>ructList,<span class="cstat-no" title="statement not covered" ></span></span>
3257
2361
  }));
3258
- const queue = <span class="cstat-no" title="statement not covered" >this.queue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3259
- hasFrontEnd, hasBackEnd, instructList,
2362
+ const queue = this.queue.map(({ hasFrontEnd, hasBackEnd, instructList }) =&gt; ({
2363
+ <span class="cstat-no" title="statement not covered" > hasFrontEnd, hasBackEnd, instructList,</span>
3260
2364
  }));
3261
- <span class="cstat-no" title="statement not covered" > await storageService.saveFrontendNasl({</span>
2365
+ await storageService.saveFrontendNasl({
3262
2366
  body: {
3263
2367
  nasl: app?.toJSON(),
3264
2368
  failedQueue,
3265
2369
  queue,
3266
- errorInfo: options.errorInfo,
3267
- },
3268
- }).catch(<span class="fstat-no" title="function not covered" >(e</span>rr: any) =&gt; {
3269
- <span class="cstat-no" title="statement not covered" > console.log('备份 nasl 失败:', err);</span>
3270
- });
3271
- <span class="cstat-no" title="statement not covered" > this.clear();</span>
3272
- <span class="cstat-no" title="statement not covered" > app.emit('refresh');</span>
3273
- }
3274
- &nbsp;
3275
- <span class="fstat-no" title="function not covered" > recover(</span>app: App) {
3276
- <span class="cstat-no" title="statement not covered" > switch (this.status) {</span>
3277
- case TaskQueueStatus.ExceedMaxTaskCount:
3278
- <span class="cstat-no" title="statement not covered" > app.emit('BelowMaxTaskCount');</span>
3279
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
3280
- <span class="cstat-no" title="statement not covered" > break;</span>
3281
- case TaskQueueStatus.Retrying:
3282
- <span class="cstat-no" title="statement not covered" > app.emit('SuccessRetry');</span>
3283
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
2370
+ error<span class="fstat-no" title="function not covered" >In</span>fo: options.errorInfo,
2371
+ <span class="cstat-no" title="statement not covered" > },</span>
2372
+ }).catch((err: any) =&gt; {
2373
+ <span class="cstat-no" title="statement not covered" > console.log(</span>'备份 nasl 失败:', err);
2374
+ <span class="cstat-no" title="statement not covered" > });</span>
2375
+ this.clear();
2376
+ app.emit('refresh');
2377
+ <span class="fstat-no" title="function not covered" > }</span>
2378
+ <span class="cstat-no" title="statement not covered" ></span>
2379
+ recover(app: App) {
2380
+ swit<span class="cstat-no" title="statement not covered" >ch (this.status) {</span>
2381
+ ca<span class="cstat-no" title="statement not covered" >se TaskQueueStatus.Exceed</span>MaxTaskCount:
2382
+ <span class="cstat-no" title="statement not covered" > app.emi</span>t('BelowMaxTaskCount');
2383
+ this.status = undefined;
3284
2384
  <span class="cstat-no" title="statement not covered" > break;</span>
2385
+ ca<span class="cstat-no" title="statement not covered" >se TaskQueueStatus.Retryi</span>ng:
2386
+ <span class="cstat-no" title="statement not covered" > app.emi</span>t('SuccessRetry');
2387
+ this.status = undefined;
2388
+ break;
3285
2389
  }
3286
2390
  }
3287
2391
  }
3288
- &nbsp;
3289
- export const taskQueue = new TaskQueue();
3290
- async function <span class="fstat-no" title="function not covered" >saveNasl(</span>options: TaskOption) {
3291
- <span class="cstat-no" title="statement not covered" > taskQueue.addTask(options);</span>
3292
- }
3293
- &nbsp;
3294
- class Operation {
3295
- appId?: string;
3296
- branchId?: string;
3297
- accountId?: string;
3298
- userId?: string;
3299
- phone?: string;
3300
- actionItem: any;
3301
- res?: any;
3302
- err?: any;
3303
- parentKey?: string;
3304
- timestamp?: any;
3305
- type?: string;
3306
- uuid?: string;
3307
- action?: string;
3308
- }
3309
- &nbsp;
3310
- async function <span class="fstat-no" title="function not covered" >_saveNasl(</span>options: TaskOption) {
3311
- const { app, hasFrontEnd, hasBackEnd, instructList, operationList } = <span class="cstat-no" title="statement not covered" >options;</span>
2392
+ <span class="fstat-no" title="function not covered" ></span>
2393
+ ex<span class="cstat-no" title="statement not covered" >port const taskQueue = new T</span>askQueue();
2394
+ async function saveNasl(options: TaskOption) {
2395
+ taskQueue.addTask(options);
2396
+ }<span class="fstat-no" title="function not covered" ></span>
2397
+ <span class="cstat-no" title="statement not covered" ></span>
2398
+ as<span class="cstat-no" title="statement not covered" >ync function _saveNa</span>sl(options: TaskOption) {
2399
+ const { app, hasFrontE<span class="cstat-no" title="statement not covered" >nd,</span> hasBackEnd, instructList } = options;
3312
2400
  <span class="cstat-no" title="statement not covered" > app.emit('saving');</span>
3313
- let ChangedNASLType = <span class="cstat-no" title="statement not covered" >'';</span>
3314
- <span class="cstat-no" title="statement not covered" > if (hasFrontEnd &amp;&amp; hasBackEnd) {</span>
2401
+ le<span class="cstat-no" title="statement not covered" >t ChangedNASLType = '';</span>
2402
+ if (has<span class="cstat-no" title="statement not covered" >FrontEnd &amp;&amp; hasBackEnd) {</span>
3315
2403
  <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'both';</span>
3316
2404
  } else <span class="cstat-no" title="statement not covered" >if (hasFrontEnd) {</span>
3317
2405
  <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'web';</span>
3318
- } else <span class="cstat-no" title="statement not covered" >if (hasBackEnd) {</span>
3319
- <span class="cstat-no" title="statement not covered" > ChangedNASLType = 'backend';</span>
3320
- }
3321
- let res: any;
3322
- let err: any;
3323
- &nbsp;
3324
- <span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
3325
- <span class="cstat-no" title="statement not covered" > try {</span>
3326
- // 接口请求
3327
- <span class="cstat-no" title="statement not covered" > res = await storageService.batchInstruct({</span>
2406
+ } else if (hasBackEnd) {
2407
+ ChangedNASLType = 'backend';
2408
+ <span class="cstat-no" title="statement not covered" > }</span>
2409
+ le<span class="cstat-no" title="statement not covered" >t err;</span>
2410
+ if (<span class="cstat-no" title="statement not covered" >config.storage.protocol === 'http') {</span>
2411
+ try {
2412
+ await storageService.batchInstruct({
3328
2413
  body: instructList,
3329
2414
  headers: {
3330
2415
  appId: app.id,
@@ -3332,40 +2417,27 @@ async function <span class="fstat-no" title="function not covered" >_saveNasl(</
3332
2417
  tabTimestamp,
3333
2418
  // 其他封装在 storageService 里了
3334
2419
  },
3335
- });
2420
+ <span class="cstat-no" title="statement not covered" > });</span>
3336
2421
  } catch (error) {
3337
- <span class="cstat-no" title="statement not covered" > err = error;</span>
2422
+ err<span class="cstat-no" title="statement not covered" > = error;</span>
3338
2423
  }
3339
- const { code, msg, result, success } = <span class="cstat-no" title="statement not covered" >err || {};</span>
3340
- <span class="cstat-no" title="statement not covered" > operationList.forEach(<span class="fstat-no" title="function not covered" >(o</span>peration) =&gt; {</span>
3341
- <span class="cstat-no" title="statement not covered" > doOperationRecord({</span>
3342
- ...operation,
3343
- res,
3344
- err: {
3345
- code,
3346
- msg,
3347
- result,
3348
- success,
3349
- },
3350
- });
3351
- });
3352
- } else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
3353
- // Do nothing
2424
+ } else if (config.storage.protocol === 'mock') {
2425
+ // Do nothing<span class="cstat-no" title="statement not covered" ></span>
3354
2426
  } else {
3355
- const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
3356
- &nbsp;
3357
- let actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
3358
- <span class="cstat-no" title="statement not covered" > for (const { actions } of instructList) {</span>
3359
- <span class="cstat-no" title="statement not covered" > actionList = actionList.concat(actions);</span>
3360
- }
3361
- &nbsp;
3362
- <span class="cstat-no" title="statement not covered" > jsoner.batchAction(json, actionList);</span>
3363
- <span class="cstat-no" title="statement not covered" > await fs.writeJSON(config.storage.basePath, json, {</span>
2427
+ const json = await fs.re<span class="cstat-no" title="statement not covered" >adJ</span>SON(config.storage.basePath);
2428
+ <span class="cstat-no" title="statement not covered" ></span>
2429
+ le<span class="cstat-no" title="statement not covered" >t actionList: any[] = [];</span>
2430
+ for (const { actions } of instructList) {
2431
+ actionList = actionList.concat(actions);
2432
+ <span class="cstat-no" title="statement not covered" > }</span>
2433
+ <span class="cstat-no" title="statement not covered" ></span>
2434
+ jsoner.batchAction(json, actionList);
2435
+ await fs.writeJSON(config.storage.basePath, json, {
3364
2436
  spaces: 4,
3365
- });
3366
- }
3367
- <span class="cstat-no" title="statement not covered" > app.emit('saved', err);</span>
3368
- <span class="cstat-no" title="statement not covered" > return err;</span>
2437
+ <span class="cstat-no" title="statement not covered" > });</span>
2438
+ <span class="cstat-no" title="statement not covered" > }</span>
2439
+ app.emit('saved', err);
2440
+ return err;
3369
2441
  }
3370
2442
  &nbsp;
3371
2443
  export interface ProxyApp extends App {
@@ -3379,123 +2451,123 @@ export interface ProxyApp extends App {
3379
2451
  _actionMsg: string;
3380
2452
  _action: string;
3381
2453
  naslServer: NaslServer;
3382
- }
3383
- &nbsp;
3384
- export function <span class="fstat-no" title="function not covered" >handleApp(</span>app: ProxyApp) {
3385
- <span class="cstat-no" title="statement not covered" > app._isCollectingCount = 0;</span>
3386
- <span class="cstat-no" title="statement not covered" > app._collectingList = [];</span>
2454
+ }<span class="fstat-no" title="function not covered" ></span>
2455
+ <span class="cstat-no" title="statement not covered" ></span>
2456
+ ex<span class="cstat-no" title="statement not covered" >port function handleApp(ap</span>p: ProxyApp) {
2457
+ <span class="cstat-no" title="statement not covered" > app._isCollectingCount </span>= 0;
2458
+ <span class="cstat-no" title="statement not covered" > app._collectingList = [</span>];
3387
2459
  <span class="cstat-no" title="statement not covered" > app._historyList = [];</span>
3388
- <span class="cstat-no" title="statement not covered" > app._historyIndex = 0;</span>
3389
- <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
3390
- <span class="cstat-no" title="statement not covered" > app._timer = null;</span>
3391
- &nbsp;
3392
- <span class="cstat-no" title="statement not covered" > app.on('undo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
3393
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3394
- <span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
3395
- });
3396
- &nbsp;
3397
- <span class="cstat-no" title="statement not covered" > app.on('redo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
3398
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3399
- <span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
2460
+ <span class="cstat-no" title="statement not covered" > app._historyIndex =</span> 0;
2461
+ app._historying = false;
2462
+ <span class="cstat-no" title="statement not covered" > app._timer = nu<span class="fstat-no" title="function not covered" >ll;</span></span>
2463
+ <span class="cstat-no" title="statement not covered" ></span>
2464
+ ap<span class="cstat-no" title="statement not covered" >p.on('undo', function (this: </span>ProxyApp) {
2465
+ const proxyApp = this;
2466
+ proxyApp._historying = true;
2467
+ <span class="cstat-no" title="statement not covered" > });<span class="fstat-no" title="function not covered" ></span></span>
2468
+ <span class="cstat-no" title="statement not covered" ></span>
2469
+ ap<span class="cstat-no" title="statement not covered" >p.on('redo', function (this: </span>ProxyApp) {
2470
+ const proxyApp = this;
2471
+ proxyApp._historying = true;
3400
2472
  });
3401
2473
  &nbsp;
3402
2474
  /**
3403
- * 开启收集
3404
- */
3405
- <span class="cstat-no" title="statement not covered" > app.on('collect:start', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
3406
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3407
- <span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
2475
+ <span class="cstat-no" title="statement not covered" > * 开启收集<span class="fstat-no" title="function not covered" ></span></span>
2476
+ */<span class="cstat-no" title="statement not covered" ></span>
2477
+ ap<span class="cstat-no" title="statement not covered" >p.on('collect:start', function (this: ProxyApp, event: any) {</span>
2478
+ co<span class="cstat-no" title="statement not covered" >nst proxyApp = this;</span>
2479
+ if (proxyApp._timer) {
3408
2480
  <span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
3409
- }
3410
- <span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
2481
+ }<span class="cstat-no" title="statement not covered" ></span>
2482
+ if (!proxyApp._noTimer) {
3411
2483
  <span class="cstat-no" title="statement not covered" > proxyApp._noTimer = event.noTimer;</span>
3412
- }
3413
- <span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
3414
- <span class="cstat-no" title="statement not covered" > proxyApp._timer = setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3415
- <span class="cstat-no" title="statement not covered" > console.error('收集超时,请及时排查原因', event);</span>
3416
- <span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(proxyApp, {</span>
2484
+ }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
2485
+ if (<span class="cstat-no" title="statement not covered" >!proxyApp._noTimer) {</span>
2486
+ pr<span class="cstat-no" title="statement not covered" >oxyApp._timer = setTimeout(() =&gt; {</span>
2487
+ console.error('收集超时,请及时排查原因', event);
2488
+ taskQueue.refreshNasl(proxyApp, {
3417
2489
  errorInfo: {
3418
2490
  message: '收集超时,请及时排查原因',
3419
2491
  },
3420
2492
  });
3421
- }, 2500);
3422
- }
3423
- <span class="cstat-no" title="statement not covered" > if (!proxyApp._isCollectingCount) {</span>
3424
- <span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = event?.actionMsg;</span>
3425
- <span class="cstat-no" title="statement not covered" > proxyApp._action = event?.action;</span>
2493
+ <span class="cstat-no" title="statement not covered" > }, 2500);</span>
2494
+ }<span class="cstat-no" title="statement not covered" ></span>
2495
+ if<span class="cstat-no" title="statement not covered" > (!proxyApp._isCollectingCount) {</span>
2496
+ proxyApp._actionMsg = event?.actionMsg;
2497
+ <span class="cstat-no" title="statement not covered" > proxyApp._action = event?.act</span>ion;
3426
2498
  }
3427
- <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount++;</span>
2499
+ proxyApp._isCollectingCount++;
3428
2500
  });
3429
2501
  &nbsp;
3430
2502
  /**
3431
- * 结束收集
3432
- */
3433
- <span class="cstat-no" title="statement not covered" > app.on('collect:end', <span class="fstat-no" title="function not covered" >async </span>function (this: ProxyApp) {</span>
3434
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3435
- <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount--;</span>
3436
- <span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
3437
- <span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
3438
- <span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
3439
- }
3440
- // 结束收集时,立即将全局收集变量状态重置,防止下次收集数据混乱
3441
- const collectingList = <span class="cstat-no" title="statement not covered" >proxyApp._collectingList;</span>
3442
- const actionMsg = <span class="cstat-no" title="statement not covered" >proxyApp._actionMsg;</span>
3443
- const action = <span class="cstat-no" title="statement not covered" >proxyApp._action;</span>
3444
- <span class="cstat-no" title="statement not covered" > proxyApp._collectingList = [];</span>
2503
+ <span class="cstat-no" title="statement not covered" > * 结束收集<span class="fstat-no" title="function not covered" ></span></span>
2504
+ */<span class="cstat-no" title="statement not covered" ></span>
2505
+ ap<span class="cstat-no" title="statement not covered" >p.on('collect:end', async funct</span>ion (this: ProxyApp) {
2506
+ <span class="cstat-no" title="statement not covered" > const proxyApp = this;</span>
2507
+ pr<span class="cstat-no" title="statement not covered" >oxyApp._isCollectingCount--;</span>
2508
+ if (<span class="cstat-no" title="statement not covered" >proxyApp._isCollectingCount ===</span> 0) {
2509
+ if (proxyApp._timer) {
2510
+ clearTimeout(proxyApp._timer);
2511
+ }<span class="cstat-no" title="statement not covered" ></span>
2512
+ // 结束收集时,立即将全局收集变量<span class="cstat-no" title="statement not covered" >状态重置,防止下次收集数据混乱</span>
2513
+ const collectin<span class="cstat-no" title="statement not covered" >gList = proxyApp.</span>_collectingList;
2514
+ <span class="cstat-no" title="statement not covered" > const actionMsg = proxyApp._act</span>ionMsg;
2515
+ <span class="cstat-no" title="statement not covered" > const action = proxyApp._a</span>ction;
2516
+ <span class="cstat-no" title="statement not covered" > proxyApp._collectingLis</span>t = [];
3445
2517
  <span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = '';</span>
3446
2518
  <span class="cstat-no" title="statement not covered" > proxyApp._action = '';</span>
3447
- <span class="cstat-no" title="statement not covered" > proxyApp._noTimer = undefined;</span>
3448
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(collectingList) &amp;&amp; collectingList.length) {</span>
3449
- <span class="cstat-no" title="statement not covered" > mountDatabaseTypes(proxyApp);</span>
3450
- <span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
3451
- value: collectingList,
2519
+ pr<span class="cstat-no" title="statement not covered" >oxyApp._noTimer = undefined;</span>
2520
+ if<span class="cstat-no" title="statement not covered" > (Array.isArray(collectingList) &amp;&amp; collectingList.length) {</span>
2521
+ mountDatabaseTypes(proxyApp);
2522
+ proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {
2523
+ <span class="cstat-no" title="statement not covered" > value: collectingList,</span>
3452
2524
  });
3453
- <span class="cstat-no" title="statement not covered" > await doAction(proxyApp, {</span>
2525
+ await doAction(proxyApp, {
3454
2526
  list: collectingList,
3455
2527
  actionMsg,
3456
2528
  action,
3457
- });
3458
- }
3459
- } else <span class="cstat-no" title="statement not covered" >if (proxyApp._isCollectingCount &lt; 0) {</span>
3460
- <span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount = 0;</span>
3461
- <span class="cstat-no" title="statement not covered" > throw Error('关闭收集有问题,请排查');</span>
2529
+ });<span class="cstat-no" title="statement not covered" ></span>
2530
+ <span class="cstat-no" title="statement not covered" > }</span>
2531
+ } <span class="cstat-no" title="statement not covered" >else if (proxyApp._isCollect</span>ingCount &lt; 0) {
2532
+ proxyApp._isCollectingCount = 0;
2533
+ throw Error('关闭收集有问题,请排查');
3462
2534
  }
3463
2535
  });
3464
2536
  &nbsp;
3465
2537
  /**
3466
- * 有变更
3467
- */
3468
- <span class="cstat-no" title="statement not covered" > app.on('storage', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
3469
- const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
3470
- // 是否正在收集
3471
- <span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
3472
- <span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
3473
- value: [event],
3474
- });
3475
- let actionMsg = <span class="cstat-no" title="statement not covered" >'';</span>
3476
- const { action, target } = <span class="cstat-no" title="statement not covered" >event.originEvent || {};</span>
3477
- const { concept, name } = <span class="cstat-no" title="statement not covered" >target || {};</span>
3478
- <span class="cstat-no" title="statement not covered" > switch (action) {</span>
3479
- case 'create':
3480
- <span class="cstat-no" title="statement not covered" > actionMsg = '添加';</span>
2538
+ <span class="cstat-no" title="statement not covered" > * 有变更<span class="fstat-no" title="function not covered" ></span></span>
2539
+ */<span class="cstat-no" title="statement not covered" ></span>
2540
+ app.on('storage', function (this: ProxyApp, event: any) {
2541
+ <span class="cstat-no" title="statement not covered" > const proxyApp = this;</span>
2542
+ //<span class="cstat-no" title="statement not covered" > 是否正在收集</span>
2543
+ if (proxyApp._isCollectingCount === 0) {
2544
+ proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {
2545
+ value: [event]<span class="cstat-no" title="statement not covered" >,</span>
2546
+ });<span class="cstat-no" title="statement not covered" ></span>
2547
+ let actionMsg = '';<span class="cstat-no" title="statement not covered" ></span>
2548
+ <span class="cstat-no" title="statement not covered" > const { action, target } = event.originEvent || {};</span>
2549
+ const { concept, name } = target || {};
2550
+ swit<span class="cstat-no" title="statement not covered" >ch (action) {</span>
2551
+ ca<span class="cstat-no" title="statement not covered" >se 'cre</span>ate':
2552
+ actionMsg = '添加';
3481
2553
  <span class="cstat-no" title="statement not covered" > break;</span>
3482
- case 'delete':
3483
- <span class="cstat-no" title="statement not covered" > actionMsg = '删除';</span>
2554
+ ca<span class="cstat-no" title="statement not covered" >se 'del</span>ete':
2555
+ actionMsg = '删除';
3484
2556
  <span class="cstat-no" title="statement not covered" > break;</span>
3485
- case 'update':
3486
- <span class="cstat-no" title="statement not covered" > actionMsg = '修改';</span>
2557
+ ca<span class="cstat-no" title="statement not covered" >se 'upd</span>ate':
2558
+ actionMsg = '修改';
3487
2559
  <span class="cstat-no" title="statement not covered" > break;</span>
3488
- }
3489
- <span class="cstat-no" title="statement not covered" > actionMsg += getConceptConstructor(concept).nodeTitle;</span>
3490
- <span class="cstat-no" title="statement not covered" > if (name) {</span>
2560
+ <span class="cstat-no" title="statement not covered" > }</span>
2561
+ ac<span class="cstat-no" title="statement not covered" >tionMsg += getConceptConst</span>ructor(concept).nodeTitle;
2562
+ if (name) {
3491
2563
  <span class="cstat-no" title="statement not covered" > actionMsg += `“${name}”`;</span>
3492
2564
  }
3493
- <span class="cstat-no" title="statement not covered" > doAction(proxyApp, {</span>
2565
+ doAction(proxyApp, {
3494
2566
  list: [event],
3495
2567
  actionMsg,
3496
- });
2568
+ <span class="cstat-no" title="statement not covered" > });</span>
3497
2569
  } else {
3498
- <span class="cstat-no" title="statement not covered" > proxyApp._collectingList.push(event);</span>
2570
+ proxyApp._collectingList.push(event);
3499
2571
  }
3500
2572
  });
3501
2573
  }
@@ -3510,17 +2582,13 @@ type BreakpointItem =
3510
2582
  /**
3511
2583
  * 加载 app
3512
2584
  * @param appId 如果是从文件读,就不需要传
3513
- * @returns app 对象
2585
+ * @returns app 对象<span class="fstat-no" title="function not covered" ></span>
3514
2586
  */
3515
- export async function <span class="fstat-no" title="function not covered" >loadApp(</span>appId?: string) {
3516
- <span class="cstat-no" title="statement not covered" > try {</span>
3517
- // 删除失效数据
3518
- <span class="cstat-no" title="statement not covered" > deleteExpiredRecords();</span>
3519
- } catch(err) { }
3520
- let app: App;
3521
- <span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
3522
- <span class="cstat-no" title="statement not covered" > console.time('batchQuery');</span>
3523
- const promises = <span class="cstat-no" title="statement not covered" >[</span>
2587
+ ex<span class="cstat-no" title="statement not covered" >port async function loadApp(appId?: string) {</span>
2588
+ le<span class="cstat-no" title="statement not covered" >t app: App;</span>
2589
+ if (config.storage.<span class="cstat-no" title="statement not covered" >protocol === 'http') {</span>
2590
+ console.time('batchQuery');
2591
+ const promises = [
3524
2592
  storageService.batchQuery({
3525
2593
  body: [
3526
2594
  {
@@ -3540,37 +2608,37 @@ export async function <span class="fstat-no" title="function not covered" >loadA
3540
2608
  storageService.breakpoint({
3541
2609
  body: { appId }
3542
2610
  })
3543
- ]
3544
- &nbsp;
3545
- const [batchQueryRes, breakpointRes] = <span class="cstat-no" title="statement not covered" >await Promise.all(promises)</span>
2611
+ ]<span class="cstat-no" title="statement not covered" ></span>
3546
2612
  &nbsp;
2613
+ const [batchQueryRes, breakpointRes] = await Promise.all(promises)
2614
+ <span class="cstat-no" title="statement not covered" ></span>
3547
2615
  // 请求
3548
2616
  <span class="cstat-no" title="statement not covered" > console.timeEnd('batchQuery');</span>
3549
- &nbsp;
3550
- <span class="cstat-no" title="statement not covered" > tabTimestamp = batchQueryRes?.headers?.tabtimestamp;</span>
3551
- const data = <span class="cstat-no" title="statement not covered" >batchQueryRes?.data?.result;</span>
3552
- &nbsp;
3553
- <span class="cstat-no" title="statement not covered" > console.time('new App');</span>
3554
- <span class="cstat-no" title="statement not covered" > app = new App(Object.assign(data?.[0], { id: appId }));</span>
3555
- &nbsp;
3556
- <span class="cstat-no" title="statement not covered" > breakpointRes?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: BreakpointItem = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> =&gt; {</span>
3557
- const { path, breakpointStatus } = <span class="cstat-no" title="statement not covered" >item</span>
3558
- &nbsp;
3559
- <span class="cstat-no" title="statement not covered" > if (breakpointStatus) {</span>
3560
- const node = <span class="cstat-no" title="statement not covered" >app.findNodeByPath(path)</span>
3561
- &nbsp;
3562
- <span class="cstat-no" title="statement not covered" > if (node) {</span>
3563
- <span class="cstat-no" title="statement not covered" > node.breakpoint = breakpointStatus</span>
2617
+ <span class="cstat-no" title="statement not covered" ></span>
2618
+ tabTimestamp = batchQueryRes?.headers?.tabtimestamp;
2619
+ <span class="cstat-no" title="statement not covered" > const data = batchQueryRe</span>s?.data?.result;
2620
+ <span class="cstat-no" title="statement not covered" ></span>
2621
+ console.time('new App');
2622
+ <span class="cstat-no" title="statement not covered" > app = new App(Object.as<span class="fstat-no" title="function not covered" >si</span>gn(data?.[0], { id: ap<span class="branch-0 cbranch-no" title="branch not covered" >pId</span> }));</span>
2623
+ <span class="cstat-no" title="statement not covered" ></span>
2624
+ breakpointRes?.forEach((item: BreakpointItem = {}) =&gt; {
2625
+ <span class="cstat-no" title="statement not covered" > const { path, breakpointStatus } = item</span>
2626
+ <span class="cstat-no" title="statement not covered" ></span>
2627
+ if (breakpointStatus) {
2628
+ <span class="cstat-no" title="statement not covered" > const node = app.findNodeByPath(path)</span>
2629
+ <span class="cstat-no" title="statement not covered" ></span>
2630
+ if (node) {
2631
+ node.breakpoint = breakpointStatus
3564
2632
  }
3565
- }
3566
- })
3567
- <span class="cstat-no" title="statement not covered" > console.timeEnd('new App');</span>
3568
- <span class="cstat-no" title="statement not covered" > if (!app.id) {</span>
2633
+ <span class="cstat-no" title="statement not covered" > }</span>
2634
+ <span class="cstat-no" title="statement not covered" > })</span>
2635
+ co<span class="cstat-no" title="statement not covered" >nsole.timeEnd('n</span>ew App');
2636
+ if (!app.id) {
3569
2637
  <span class="cstat-no" title="statement not covered" > app.id = appId;</span>
3570
- }
2638
+ }<span class="cstat-no" title="statement not covered" ></span>
3571
2639
  <span class="cstat-no" title="statement not covered" > addBreakpointNodesFromApp(app)</span>
3572
- } else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
3573
- <span class="cstat-no" title="statement not covered" > app = new App({</span>
2640
+ } else if (config.storage.protocol === 'mock') {
2641
+ app = new App({
3574
2642
  id: appId,
3575
2643
  concept: 'App',
3576
2644
  name: 'devapp',
@@ -3588,89 +2656,88 @@ export async function <span class="fstat-no" title="function not covered" >loadA
3588
2656
  dependencies: [],
3589
2657
  interfaceDependencies: [],
3590
2658
  frontends: [],
3591
- metadataTypes: []
3592
- });
3593
- } else {
3594
- const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
3595
- <span class="cstat-no" title="statement not covered" > app = new App(appId ? Object.assign(json, { id: appId }) : json);</span>
3596
- }
3597
- // config.scope = app.scope;
3598
- <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
3599
- (<span class="cstat-no" title="statement not covered" >app as any)._isCollectingCount = 0;</span>
3600
- <span class="cstat-no" title="statement not covered" > mountDatabaseTypes(app);</span>
3601
- <span class="cstat-no" title="statement not covered" > return app as App;</span>
2659
+ });<span class="cstat-no" title="statement not covered" ></span>
2660
+ } <span class="cstat-no" title="statement not covered" >else {</span>
2661
+ const json = await fs.readJSON(config.storage.basePath);
2662
+ app = new App(appId ? Object.assign(json, { id: appId }) : json);
2663
+ <span class="cstat-no" title="statement not covered" > }</span>
2664
+ /<span class="cstat-no" title="statement not covered" >/ config.scope = app.scope;</span>
2665
+ <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp</span>);
2666
+ <span class="cstat-no" title="statement not covered" > (app as any)._isCol</span>lectingCount = 0;
2667
+ mountDatabaseTypes(app);
2668
+ return app as App;
3602
2669
  }
3603
- &nbsp;
3604
- // 在app上挂载所有的数据库类型
3605
- export async function <span class="fstat-no" title="function not covered" >mountDatabaseTypes(</span>app: App) {
3606
- <span class="cstat-no" title="statement not covered" > if (!app.__databaseTypeMap) {</span>
3607
- <span class="cstat-no" title="statement not covered" > app.__databaseTypeMap = {};</span>
3608
- }
3609
- const dataSources = <span class="cstat-no" title="statement not covered" >app?.dataSources;</span>
3610
- const dbTypeSet = <span class="cstat-no" title="statement not covered" >new Set();</span>
3611
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
3612
- <span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
3613
- const dataSourceSqlType = <span class="cstat-no" title="statement not covered" >JSON.parse(dataSource.dataSourceConfig?.devProperty?.value || '{}')?.type;</span>
3614
- <span class="cstat-no" title="statement not covered" > if (dataSourceSqlType &amp;&amp; !app.__databaseTypeMap[dataSourceSqlType]) {</span>
3615
- <span class="cstat-no" title="statement not covered" > dbTypeSet.add(dataSourceSqlType);</span>
2670
+ <span class="fstat-no" title="function not covered" ></span>
2671
+ //<span class="cstat-no" title="statement not covered" > 在app上挂载所有的数据库类型</span>
2672
+ expo<span class="cstat-no" title="statement not covered" >rt async function mountDatab</span>aseTypes(app: App) {
2673
+ if (!app.__databaseTypeMap) {
2674
+ app.__databaseType<span class="cstat-no" title="statement not covered" >Map = {};</span>
2675
+ }<span class="cstat-no" title="statement not covered" ></span>
2676
+ <span class="cstat-no" title="statement not covered" > const dataSources = app?.dataSources;</span>
2677
+ co<span class="cstat-no" title="statement not covered" >nst dbTypeSet = new <span class="fstat-no" title="function not covered" >Se</span>t();</span>
2678
+ if (Array.isArray(dataSources)<span class="cstat-no" title="statement not covered" >) {</span>
2679
+ da<span class="cstat-no" title="statement not covered" >taSources.forEach((dataSource) =&gt; {</span>
2680
+ co<span class="cstat-no" title="statement not covered" >nst dataSourceSqlType = JSON.parse</span>(dataSource.dataSourceConfig?.devProperty?.value || '{}')?.type;
2681
+ if (dataSourceSqlType &amp;&amp; !app.__databaseTypeMap[dataSourceSqlType]) {
2682
+ dbTypeSet.add(dataSourceSqlType);
3616
2683
  }
3617
- });
3618
- }
3619
- const dbTypes = <span class="cstat-no" title="statement not covered" >[...dbTypeSet];</span>
3620
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dbTypes) &amp;&amp; dbTypes.length) {</span>
3621
- const res: any = <span class="cstat-no" title="statement not covered" >await databaseTypes({</span>
2684
+ });<span class="cstat-no" title="statement not covered" ></span>
2685
+ <span class="cstat-no" title="statement not covered" > }</span>
2686
+ const dbTypes = [..<span class="cstat-no" title="statement not covered" >.dbTypeSet];</span>
2687
+ if (Array.isArray(dbTypes) &amp;&amp; dbTypes.length) {
2688
+ const res: any = await databaseTypes({
3622
2689
  query: {
3623
2690
  dbTypes: dbTypes.join(','),
3624
- },
3625
- });
3626
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(res)) {</span>
3627
- <span class="cstat-no" title="statement not covered" > res.forEach(<span class="fstat-no" title="function not covered" >(d</span>atabaseType: any) =&gt; {</span>
3628
- const { dbType, columnTypes } = <span class="cstat-no" title="statement not covered" >databaseType || {};</span>
3629
- const columnTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
3630
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(columnTypes)) {</span>
3631
- <span class="cstat-no" title="statement not covered" > columnTypes.forEach(<span class="fstat-no" title="function not covered" >(c</span>olumnType) =&gt; {</span>
3632
- const { naslType, dataBaseTypes } = <span class="cstat-no" title="statement not covered" >columnType;</span>
3633
- const dataBaseTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
3634
- let defaultDataBaseType;
3635
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataBaseTypes)) {</span>
3636
- <span class="cstat-no" title="statement not covered" > dataBaseTypes.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataBaseType) =&gt; {</span>
3637
- const { type } = <span class="cstat-no" title="statement not covered" >dataBaseType || {};</span>
3638
- <span class="cstat-no" title="statement not covered" > if (type) {</span>
2691
+ <span class="cstat-no" title="statement not covered" > },</span>
2692
+ })<span class="cstat-no" title="statement not covered" >;<span class="fstat-no" title="function not covered" ></span></span>
2693
+ if (Array.isArray(res)) {<span class="cstat-no" title="statement not covered" ></span>
2694
+ res.forEach((databaseType: an<span class="cstat-no" title="statement not covered" >y) </span>=&gt; {
2695
+ <span class="cstat-no" title="statement not covered" > const { dbType, columnTypes } = databaseType || {};</span>
2696
+ co<span class="cstat-no" title="statement not covered" >nst columnTypeMap: a<span class="fstat-no" title="function not covered" >ny</span> = {};</span>
2697
+ if (Array.isArray(columnTypes)) {<span class="cstat-no" title="statement not covered" ></span>
2698
+ columnTypes.forEach((columnType<span class="cstat-no" title="statement not covered" >) =</span>&gt; {
2699
+ const { naslType, dataBaseTypes } = columnType;
2700
+ <span class="cstat-no" title="statement not covered" > const dataBaseTypeMap: any = {};</span>
2701
+ le<span class="cstat-no" title="statement not covered" >t defaultDataBaseType;<span class="fstat-no" title="function not covered" ></span></span>
2702
+ if (Array.isArray(dat<span class="cstat-no" title="statement not covered" >aBaseTypes)) {</span>
2703
+ da<span class="cstat-no" title="statement not covered" >taBaseTypes.forEach((dataBaseType) =&gt; {</span>
2704
+ co<span class="cstat-no" title="statement not covered" >nst { type } = dataBaseType || {};</span>
2705
+ if (type) {<span class="cstat-no" title="statement not covered" ></span>
3639
2706
  <span class="cstat-no" title="statement not covered" > dataBaseTypeMap[type] = dataBaseType;</span>
3640
- const { defaultType } = <span class="cstat-no" title="statement not covered" >dataBaseType;</span>
3641
- <span class="cstat-no" title="statement not covered" > if (defaultType) {</span>
3642
- <span class="cstat-no" title="statement not covered" > defaultDataBaseType = dataBaseType;</span>
2707
+ co<span class="cstat-no" title="statement not covered" >nst { defaultType } = dataBaseType;</span>
2708
+ if (defaultType) {
2709
+ defaultDataBaseType = dataBaseType;
3643
2710
  }
3644
2711
  }
3645
- });
2712
+ <span class="cstat-no" title="statement not covered" > });</span>
3646
2713
  }
3647
- <span class="cstat-no" title="statement not covered" > columnTypeMap[naslType] = {</span>
2714
+ columnTypeMap[naslType] = {
3648
2715
  dataBaseTypes,
3649
2716
  dataBaseTypeMap,
3650
2717
  defaultDataBaseType,
3651
2718
  };
3652
- });
2719
+ <span class="cstat-no" title="statement not covered" > });</span>
3653
2720
  }
3654
- <span class="cstat-no" title="statement not covered" > app.__databaseTypeMap[dbType] = columnTypeMap;</span>
2721
+ app.__databaseTypeMap[dbType] = columnTypeMap;
3655
2722
  });
3656
- }
3657
- }
3658
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
3659
- <span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) =&gt; {</span>
3660
- <span class="cstat-no" title="statement not covered" > dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType]);</span>
2723
+ <span class="cstat-no" title="statement not covered" > }</span>
2724
+ }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
2725
+ if (<span class="cstat-no" title="statement not covered" >Array.isArray(dataSources)) {</span>
2726
+ dataSources.forEach((dataSource) =&gt; {
2727
+ dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType]);
3661
2728
  });
3662
2729
  }
3663
2730
  }
3664
2731
  &nbsp;
3665
2732
  /**
3666
2733
  * 加载 app
3667
- * @returns app 对象
3668
- */
3669
- export function <span class="fstat-no" title="function not covered" >loadAppSync(</span>) {
3670
- const json = <span class="cstat-no" title="statement not covered" >fs.readJSONSync(config.storage.basePath);</span>
3671
- const app = <span class="cstat-no" title="statement not covered" >new App(json);</span>
3672
- <span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
3673
- <span class="cstat-no" title="statement not covered" > return app;</span>
2734
+ * @returns app <span class="fstat-no" title="function not covered" >对象</span>
2735
+ */<span class="cstat-no" title="statement not covered" ></span>
2736
+ export functio<span class="cstat-no" title="statement not covered" >n loadAppSync(</span>) {
2737
+ <span class="cstat-no" title="statement not covered" > const json = fs.readJSONSync</span>(config.storage.basePath);
2738
+ <span class="cstat-no" title="statement not covered" > const app = </span>new App(json);
2739
+ handleApp(app as ProxyApp);
2740
+ return app;
3674
2741
  }
3675
2742
  &nbsp;</pre></td></tr></table></pre>
3676
2743
 
@@ -3679,7 +2746,7 @@ export function <span class="fstat-no" title="function not covered" >loadAppSync
3679
2746
  <div class='footer quiet pad2 space-top1 center small'>
3680
2747
  Code coverage generated by
3681
2748
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3682
- at 2023-12-14T04:42:19.254Z
2749
+ at 2023-10-18T11:36:07.885Z
3683
2750
  </div>
3684
2751
  <script src="../../../prettify.js"></script>
3685
2752
  <script>