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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/.nyc_output/{78804420-ead6-486f-b682-ab54ccd95dc9.json → d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json} +1 -1
  2. package/.nyc_output/processinfo/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -1
  4. package/coverage/index.html +126 -141
  5. package/coverage/src/automate/engine/index.html +1 -1
  6. package/coverage/src/automate/engine/utils.js.html +36 -36
  7. package/coverage/src/bak/index.html +14 -14
  8. package/coverage/src/bak/translator.js.html +57 -393
  9. package/coverage/src/breakpoint/generator/AfterStartNode.ts.html +1 -1
  10. package/coverage/src/breakpoint/generator/BeforeEndNode.ts.html +1 -1
  11. package/coverage/src/breakpoint/generator/BreakpointNode.ts.html +1 -1
  12. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +1 -1
  13. package/coverage/src/breakpoint/generator/index.html +1 -1
  14. package/coverage/src/breakpoint/generator/index.ts.html +1 -1
  15. package/coverage/src/breakpoint/index.html +1 -1
  16. package/coverage/src/breakpoint/index.ts.html +1 -1
  17. package/coverage/src/breakpoint/shared/constants.ts.html +1 -1
  18. package/coverage/src/breakpoint/shared/index.html +1 -1
  19. package/coverage/src/breakpoint/shared/index.ts.html +1 -1
  20. package/coverage/src/breakpoint/shared/operations.ts.html +2 -2
  21. package/coverage/src/breakpoint/shared/socket.ts.html +1 -1
  22. package/coverage/src/breakpoint/shared/utils.ts.html +1 -1
  23. package/coverage/src/breakpoint/store/core.ts.html +3 -3
  24. package/coverage/src/breakpoint/store/dock.ts.html +1 -1
  25. package/coverage/src/breakpoint/store/index.html +1 -1
  26. package/coverage/src/breakpoint/store/index.ts.html +1 -1
  27. package/coverage/src/common/BaseNode.ts.html +164 -593
  28. package/coverage/src/common/Command.ts.html +1 -1
  29. package/coverage/src/common/EventEmitter.ts.html +31 -31
  30. package/coverage/src/common/Messager.ts.html +1 -1
  31. package/coverage/src/common/asyncFuncMap.ts.html +1 -1
  32. package/coverage/src/common/index.html +23 -38
  33. package/coverage/src/common/index.ts.html +4 -7
  34. package/coverage/src/concepts/Abort__.ts.html +9 -39
  35. package/coverage/src/concepts/Anchor__.ts.html +29 -86
  36. package/coverage/src/concepts/AnonymousFunction__.ts.html +169 -262
  37. package/coverage/src/concepts/App__.ts.html +152 -1205
  38. package/coverage/src/concepts/Argument__.ts.html +53 -137
  39. package/coverage/src/concepts/Assignee__.ts.html +34 -124
  40. package/coverage/src/concepts/AssignmentLine__.ts.html +15 -48
  41. package/coverage/src/concepts/Assignment__.ts.html +81 -213
  42. package/coverage/src/concepts/Attribute__.ts.html +14 -41
  43. package/coverage/src/concepts/AuthInterface__.ts.html +6 -9
  44. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +144 -108
  45. package/coverage/src/concepts/AuthLogic__.ts.html +6 -18
  46. package/coverage/src/concepts/BackendVariable__.ts.html +48 -168
  47. package/coverage/src/concepts/Backend__.ts.html +28 -106
  48. package/coverage/src/concepts/BatchAssignment__.ts.html +169 -274
  49. package/coverage/src/concepts/BinaryExpression__.ts.html +129 -285
  50. package/coverage/src/concepts/BindAttribute__.ts.html +111 -522
  51. package/coverage/src/concepts/BindDirective__.ts.html +26 -131
  52. package/coverage/src/concepts/BindEvent__.ts.html +64 -160
  53. package/coverage/src/concepts/BindStyle__.ts.html +21 -78
  54. package/coverage/src/concepts/BooleanLiteral__.ts.html +20 -47
  55. package/coverage/src/concepts/CallAuthInterface__.ts.html +48 -105
  56. package/coverage/src/concepts/CallConnector__.ts.html +35 -62
  57. package/coverage/src/concepts/CallFunction__.ts.html +144 -288
  58. package/coverage/src/concepts/CallInterface__.ts.html +60 -93
  59. package/coverage/src/concepts/CallLogic__.ts.html +343 -292
  60. package/coverage/src/concepts/CallQueryComponent__.ts.html +93 -126
  61. package/coverage/src/concepts/Comment__.ts.html +10 -43
  62. package/coverage/src/concepts/CompletionProperty__.ts.html +13 -40
  63. package/coverage/src/concepts/ConfigGroup__.ts.html +20 -47
  64. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +19 -22
  65. package/coverage/src/concepts/ConfigProperty__.ts.html +40 -97
  66. package/coverage/src/concepts/Configuration__.ts.html +21 -48
  67. package/coverage/src/concepts/Connection__.ts.html +22 -97
  68. package/coverage/src/concepts/ConnectorTrigger__.ts.html +6 -9
  69. package/coverage/src/concepts/Connector__.ts.html +38 -161
  70. package/coverage/src/concepts/Constant__.ts.html +24 -84
  71. package/coverage/src/concepts/DataSource__.ts.html +57 -111
  72. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +6 -9
  73. package/coverage/src/concepts/Destination__.ts.html +55 -97
  74. package/coverage/src/concepts/End__.ts.html +21 -51
  75. package/coverage/src/concepts/EntityIndex__.ts.html +10 -40
  76. package/coverage/src/concepts/EntityProperty__.ts.html +56 -164
  77. package/coverage/src/concepts/Entity__.ts.html +89 -167
  78. package/coverage/src/concepts/EnumItem__.ts.html +10 -40
  79. package/coverage/src/concepts/Enum__.ts.html +24 -84
  80. package/coverage/src/concepts/Event__.ts.html +14 -41
  81. package/coverage/src/concepts/ExternalDestination__.ts.html +21 -75
  82. package/coverage/src/concepts/ForEachStatement__.ts.html +64 -139
  83. package/coverage/src/concepts/FrontendLibrary__.ts.html +20 -71
  84. package/coverage/src/concepts/FrontendVariable__.ts.html +1 -1
  85. package/coverage/src/concepts/Frontend__.ts.html +57 -213
  86. package/coverage/src/concepts/Function__.ts.html +86 -239
  87. package/coverage/src/concepts/Identifier__.ts.html +72 -111
  88. package/coverage/src/concepts/IfStatement__.ts.html +75 -138
  89. package/coverage/src/concepts/Integration__.ts.html +19 -70
  90. package/coverage/src/concepts/InterfaceParam__.ts.html +21 -78
  91. package/coverage/src/concepts/Interface__.ts.html +60 -162
  92. package/coverage/src/concepts/JSBlock__.ts.html +11 -215
  93. package/coverage/src/concepts/JavaLogic__.ts.html +9 -42
  94. package/coverage/src/concepts/LogicItem__.ts.html +21 -51
  95. package/coverage/src/concepts/Logic__.ts.html +321 -405
  96. package/coverage/src/concepts/MatchCase__.ts.html +97 -181
  97. package/coverage/src/concepts/Match__.ts.html +59 -116
  98. package/coverage/src/concepts/MemberExpression__.ts.html +128 -182
  99. package/coverage/src/concepts/MicroApp__.ts.html +6 -9
  100. package/coverage/src/concepts/Module__.ts.html +18 -672
  101. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +14 -41
  102. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +14 -41
  103. package/coverage/src/concepts/Namespace__.ts.html +91 -358
  104. package/coverage/src/concepts/NewComposite__.ts.html +125 -278
  105. package/coverage/src/concepts/NewList__.ts.html +57 -195
  106. package/coverage/src/concepts/NewMap__.ts.html +63 -168
  107. package/coverage/src/concepts/New__.ts.html +9 -39
  108. package/coverage/src/concepts/NullLiteral__.ts.html +9 -36
  109. package/coverage/src/concepts/NumericLiteral__.ts.html +33 -90
  110. package/coverage/src/concepts/OqlQueryComponent__.ts.html +35 -161
  111. package/coverage/src/concepts/OverriddenLogic__.ts.html +201 -324
  112. package/coverage/src/concepts/Param__.ts.html +75 -189
  113. package/coverage/src/concepts/Point__.ts.html +6 -9
  114. package/coverage/src/concepts/ProcessComponent__.ts.html +21 -72
  115. package/coverage/src/concepts/ProcessElement__.ts.html +115 -316
  116. package/coverage/src/concepts/ProcessOutcome__.ts.html +13 -85
  117. package/coverage/src/concepts/ProcessOutcomes__.ts.html +13 -85
  118. package/coverage/src/concepts/Process__.ts.html +70 -211
  119. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +16 -67
  120. package/coverage/src/concepts/QueryFieldExpression__.ts.html +11 -41
  121. package/coverage/src/concepts/QueryFromExpression__.ts.html +21 -81
  122. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +19 -70
  123. package/coverage/src/concepts/QueryJoinExpression__.ts.html +25 -85
  124. package/coverage/src/concepts/QueryLimitExpression__.ts.html +20 -77
  125. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +20 -80
  126. package/coverage/src/concepts/QuerySelectExpression__.ts.html +15 -42
  127. package/coverage/src/concepts/Rect__.ts.html +6 -9
  128. package/coverage/src/concepts/Return__.ts.html +44 -164
  129. package/coverage/src/concepts/Role__.ts.html +15 -45
  130. package/coverage/src/concepts/SelectMembers__.ts.html +24 -81
  131. package/coverage/src/concepts/Slot__.ts.html +13 -40
  132. package/coverage/src/concepts/SqlQueryComponent__.ts.html +24 -84
  133. package/coverage/src/concepts/Start__.ts.html +9 -36
  134. package/coverage/src/concepts/StringInterpolation__.ts.html +29 -104
  135. package/coverage/src/concepts/StringLiteral__.ts.html +32 -62
  136. package/coverage/src/concepts/StructureProperty__.ts.html +23 -80
  137. package/coverage/src/concepts/Structure__.ts.html +32 -116
  138. package/coverage/src/concepts/SwitchCase__.ts.html +36 -87
  139. package/coverage/src/concepts/SwitchStatement__.ts.html +33 -90
  140. package/coverage/src/concepts/Theme__.ts.html +12 -15
  141. package/coverage/src/concepts/Transactional__.ts.html +6 -9
  142. package/coverage/src/concepts/TriggerEvent__.ts.html +14 -41
  143. package/coverage/src/concepts/TriggerLauncher__.ts.html +13 -46
  144. package/coverage/src/concepts/TypeAnnotation__.ts.html +116 -347
  145. package/coverage/src/concepts/TypeParam__.ts.html +12 -42
  146. package/coverage/src/concepts/UnaryExpression__.ts.html +27 -105
  147. package/coverage/src/concepts/Unparsed__.ts.html +12 -36
  148. package/coverage/src/concepts/UseComponent__.ts.html +6 -9
  149. package/coverage/src/concepts/ValidationRule__.ts.html +40 -79
  150. package/coverage/src/concepts/Variable__.ts.html +37 -157
  151. package/coverage/src/concepts/ViewBlock__.ts.html +6 -9
  152. package/coverage/src/concepts/ViewComponent__.ts.html +24 -99
  153. package/coverage/src/concepts/ViewElement__.ts.html +278 -692
  154. package/coverage/src/concepts/View__.ts.html +163 -517
  155. package/coverage/src/concepts/WhileStatement__.ts.html +55 -118
  156. package/coverage/src/concepts/basics/stdlib/index.html +1 -1
  157. package/coverage/src/concepts/basics/stdlib/index.ts.html +1 -1
  158. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +1 -1
  159. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +1 -1
  160. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +1 -1
  161. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +1 -1
  162. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +1 -1
  163. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +1 -1
  164. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +1 -1
  165. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +1 -1
  166. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +1 -1
  167. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +1 -1
  168. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +1 -1
  169. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +1 -1
  170. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +3 -3
  171. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1 -1
  172. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +1 -1
  173. package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +1 -1
  174. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +1 -1
  175. package/coverage/src/concepts/basics/types/index.html +1 -1
  176. package/coverage/src/concepts/basics/types/index.ts.html +1 -1
  177. package/coverage/src/concepts/index.html +965 -980
  178. package/coverage/src/concepts/index.ts.html +1 -1
  179. package/coverage/src/concepts/index__.ts.html +4 -7
  180. package/coverage/src/config.ts.html +1 -1
  181. package/coverage/src/decorators/index.html +5 -5
  182. package/coverage/src/decorators/index.ts.html +32 -32
  183. package/coverage/src/decorators/promise.ts.html +10 -10
  184. package/coverage/src/eventBus.ts.html +1 -1
  185. package/coverage/src/generator/compileComponent.ts.html +4 -4
  186. package/coverage/src/generator/genBundleFiles.ts.html +23 -17
  187. package/coverage/src/generator/genHash.ts.html +3 -3
  188. package/coverage/src/generator/genMetaData.ts.html +16 -103
  189. package/coverage/src/generator/genReleaseBody.ts.html +3 -3
  190. package/coverage/src/generator/icestark.ts.html +4 -10
  191. package/coverage/src/generator/index.html +21 -21
  192. package/coverage/src/generator/index.ts.html +1 -1
  193. package/coverage/src/generator/microApp.ts.html +1 -1
  194. package/coverage/src/generator/permission.ts.html +20 -92
  195. package/coverage/src/generator/qiankun.ts.html +3 -9
  196. package/coverage/src/generator/styleReplacer.ts.html +1 -1
  197. package/coverage/src/index.html +7 -7
  198. package/coverage/src/index.ts.html +4 -4
  199. package/coverage/src/manager/diagnostic.ts.html +14 -11
  200. package/coverage/src/manager/index.html +13 -13
  201. package/coverage/src/manager/stepRecorder.ts.html +1 -1
  202. package/coverage/src/natural/genNaturalTS.ts.html +1 -1
  203. package/coverage/src/natural/index.html +15 -15
  204. package/coverage/src/natural/index.ts.html +1 -1
  205. package/coverage/src/natural/naslStdlibMap.ts.html +1 -1
  206. package/coverage/src/natural/transformTSCode.ts.html +18 -78
  207. package/coverage/src/sentry/index.html +14 -14
  208. package/coverage/src/sentry/index.ts.html +32 -38
  209. package/coverage/src/server/createUiTs.ts.html +6 -15
  210. package/coverage/src/server/entity2LogicNamespace.ts.html +9 -9
  211. package/coverage/src/server/event.js.html +1 -1
  212. package/coverage/src/server/extendBaseNode.ts.html +4 -7
  213. package/coverage/src/server/formatTsUtils.ts.html +9 -9
  214. package/coverage/src/server/getConnector.ts.html +1 -1
  215. package/coverage/src/server/getExtensionModules.ts.html +1 -1
  216. package/coverage/src/server/getFunctions.ts.html +4 -4
  217. package/coverage/src/server/getInterfaces.ts.html +1 -1
  218. package/coverage/src/server/getLogging.ts.html +2 -2
  219. package/coverage/src/server/getLogics.ts.html +1 -1
  220. package/coverage/src/server/getMemberIdentifier.ts.html +119 -167
  221. package/coverage/src/server/getProcessComponents.ts.html +3 -3
  222. package/coverage/src/server/getProcesses.ts.html +1 -1
  223. package/coverage/src/server/getValidates.ts.html +4 -4
  224. package/coverage/src/server/index.html +34 -34
  225. package/coverage/src/server/index.ts.html +1 -1
  226. package/coverage/src/server/naslServer.ts.html +943 -1195
  227. package/coverage/src/server/naslStdlibMap.ts.html +1 -1
  228. package/coverage/src/server/process2LogicNamespace.ts.html +52 -52
  229. package/coverage/src/server/translator.ts.html +14 -50
  230. package/coverage/src/service/creator/add.configs.js.html +9 -27
  231. package/coverage/src/service/creator/errHandles.js.html +37 -19
  232. package/coverage/src/service/creator/index.html +22 -22
  233. package/coverage/src/service/creator/index.js.html +1 -1
  234. package/coverage/src/service/datasource/api.js.html +1 -1
  235. package/coverage/src/service/datasource/index.html +1 -1
  236. package/coverage/src/service/datasource/index.js.html +1 -1
  237. package/coverage/src/service/logic/api.js.html +1 -1
  238. package/coverage/src/service/logic/index.html +1 -1
  239. package/coverage/src/service/logic/index.js.html +1 -1
  240. package/coverage/src/service/storage/api.js.html +1 -1
  241. package/coverage/src/service/storage/index.html +29 -29
  242. package/coverage/src/service/storage/index.ts.html +1 -1
  243. package/coverage/src/service/storage/init.ts.html +601 -1534
  244. package/coverage/src/service/storage/jsoner.ts.html +13 -76
  245. package/coverage/src/service/storage/map.ts.html +3 -3
  246. package/coverage/src/service/storage/service.ts.html +1 -1
  247. package/coverage/src/service/storage/storagePoint.ts.html +1 -1
  248. package/coverage/src/templator/genCallComponentLogic.ts.html +1 -1
  249. package/coverage/src/templator/genCreateBlock.ts.html +56 -47
  250. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +31 -49
  251. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +89 -80
  252. package/coverage/src/templator/genEditTableBlock.ts.html +11 -80
  253. package/coverage/src/templator/genEnumSelectBlock.ts.html +1 -1
  254. package/coverage/src/templator/genGetBlock.ts.html +1 -1
  255. package/coverage/src/templator/genGridViewBlock.ts.html +1 -1
  256. package/coverage/src/templator/genListViewBlock.ts.html +1 -1
  257. package/coverage/src/templator/genQueryComponent.ts.html +1 -1
  258. package/coverage/src/templator/genSelectBlock.ts.html +1 -1
  259. package/coverage/src/templator/genTableBlock.ts.html +3 -66
  260. package/coverage/src/templator/genUpdateBlock.ts.html +36 -48
  261. package/coverage/src/templator/index.html +39 -39
  262. package/coverage/src/templator/index.ts.html +1 -1
  263. package/coverage/src/templator/utils.ts.html +11 -77
  264. package/coverage/src/translator/constant.ts.html +1 -1
  265. package/coverage/src/translator/index.html +21 -21
  266. package/coverage/src/translator/index.ts.html +1 -1
  267. package/coverage/src/translator/utils.ts.html +68 -389
  268. package/coverage/src/utils/cookie.ts.html +4 -4
  269. package/coverage/src/utils/env.ts.html +1 -1
  270. package/coverage/src/utils/index.html +51 -36
  271. package/coverage/src/utils/index.ts.html +22 -115
  272. package/coverage/src/utils/logger.ts.html +13 -13
  273. package/coverage/src/utils/sortTsString.ts.html +10 -25
  274. package/coverage/src/utils/string.ts.html +8 -110
  275. package/coverage/src/utils/time-slicing.ts.html +1 -1
  276. package/coverage/src/utils/traverse.ts.html +1 -1
  277. package/coverage/src/utils/window.ts.html +1 -1
  278. package/out/bak/translator.js.map +1 -1
  279. package/out/common/Command.js +1 -1
  280. package/out/common/Command.js.map +1 -1
  281. package/out/concepts/Argument__.js +7 -2
  282. package/out/concepts/Argument__.js.map +1 -1
  283. package/out/concepts/Assignment__.js +20 -3
  284. package/out/concepts/Assignment__.js.map +1 -1
  285. package/out/concepts/BackendVariable__.js +24 -2
  286. package/out/concepts/BackendVariable__.js.map +1 -1
  287. package/out/concepts/BinaryExpression__.js +40 -13
  288. package/out/concepts/BinaryExpression__.js.map +1 -1
  289. package/out/concepts/CallLogic__.js +7 -12
  290. package/out/concepts/CallLogic__.js.map +1 -1
  291. package/out/concepts/CountersignPolicy__.d.ts +26 -0
  292. package/out/concepts/CountersignPolicy__.js +73 -0
  293. package/out/concepts/CountersignPolicy__.js.map +1 -0
  294. package/out/concepts/ForEachStatement__.js +12 -26
  295. package/out/concepts/ForEachStatement__.js.map +1 -1
  296. package/out/concepts/Identifier__.js +3 -0
  297. package/out/concepts/Identifier__.js.map +1 -1
  298. package/out/concepts/JSBlock__.js +56 -0
  299. package/out/concepts/JSBlock__.js.map +1 -1
  300. package/out/concepts/LogicItem__.js +2 -1
  301. package/out/concepts/LogicItem__.js.map +1 -1
  302. package/out/concepts/Logic__.js +2 -0
  303. package/out/concepts/Logic__.js.map +1 -1
  304. package/out/concepts/Match__.js +1 -1
  305. package/out/concepts/Match__.js.map +1 -1
  306. package/out/concepts/MultiApprovalPolicy__.d.ts +24 -0
  307. package/out/concepts/MultiApprovalPolicy__.js +65 -0
  308. package/out/concepts/MultiApprovalPolicy__.js.map +1 -0
  309. package/out/concepts/NewComposite__.js +18 -10
  310. package/out/concepts/NewComposite__.js.map +1 -1
  311. package/out/concepts/NumericLiteral__.js +1 -1
  312. package/out/concepts/NumericLiteral__.js.map +1 -1
  313. package/out/concepts/Param__.js +24 -2
  314. package/out/concepts/Param__.js.map +1 -1
  315. package/out/concepts/ProcessElement__.d.ts +16 -0
  316. package/out/concepts/ProcessElement__.js +56 -1
  317. package/out/concepts/ProcessElement__.js.map +1 -1
  318. package/out/concepts/Return__.js +24 -2
  319. package/out/concepts/Return__.js.map +1 -1
  320. package/out/concepts/SequentialPolicy__.d.ts +18 -0
  321. package/out/concepts/SequentialPolicy__.js +54 -0
  322. package/out/concepts/SequentialPolicy__.js.map +1 -0
  323. package/out/concepts/Variable__.js +24 -2
  324. package/out/concepts/Variable__.js.map +1 -1
  325. package/out/concepts/ViewElement__.js.map +1 -1
  326. package/out/concepts/View__.js +2 -2
  327. package/out/concepts/View__.js.map +1 -1
  328. package/out/concepts/index__.d.ts +3 -0
  329. package/out/concepts/index__.js +3 -0
  330. package/out/concepts/index__.js.map +1 -1
  331. package/out/concepts/types__.d.ts +4 -1
  332. package/out/generator/genReleaseBody.js +2 -2
  333. package/out/generator/genReleaseBody.js.map +1 -1
  334. package/out/server/extendBaseNode.js +32 -1
  335. package/out/server/extendBaseNode.js.map +1 -1
  336. package/out/server/getLogics.d.ts +1 -0
  337. package/out/server/getLogics.js +6 -2
  338. package/out/server/getLogics.js.map +1 -1
  339. package/out/server/getProcesses.js +66 -6
  340. package/out/server/getProcesses.js.map +1 -1
  341. package/out/server/index.js +1 -0
  342. package/out/server/index.js.map +1 -1
  343. package/out/server/naslServer.js +2 -2
  344. package/out/server/naslServer.js.map +1 -1
  345. package/out/server/translator.js +3 -0
  346. package/out/server/translator.js.map +1 -1
  347. package/out/service/creator/errHandles.js +6 -3
  348. package/out/service/creator/errHandles.js.map +1 -1
  349. package/out/service/storage/init.js +2 -2
  350. package/out/service/storage/init.js.map +1 -1
  351. package/out/templator/genCreateBlock.js +9 -5
  352. package/out/templator/genCreateBlock.js.map +1 -1
  353. package/out/templator/genCurdEditMultipleKeyBlock.js +18 -12
  354. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  355. package/out/templator/genCurdMultipleKeyBlock.js +10 -8
  356. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  357. package/out/templator/genEditTableBlock.js +3 -2
  358. package/out/templator/genEditTableBlock.js.map +1 -1
  359. package/out/templator/genUpdateBlock.js +12 -9
  360. package/out/templator/genUpdateBlock.js.map +1 -1
  361. package/out/templator/utils.js.map +1 -1
  362. package/package.json +2 -2
  363. package/sandbox/stdlib/nasl.core.ts +2 -0
  364. package/sandbox/stdlib/nasl.util.ts +3 -3
  365. package/src/bak/translator.js +0 -1
  366. package/src/common/Command.ts +1 -1
  367. package/src/concepts/Argument__.ts +7 -2
  368. package/src/concepts/Assignment__.ts +31 -13
  369. package/src/concepts/BackendVariable__.ts +22 -3
  370. package/src/concepts/BinaryExpression__.ts +39 -13
  371. package/src/concepts/CallLogic__.ts +13 -23
  372. package/src/concepts/CountersignPolicy__.ts +77 -0
  373. package/src/concepts/ForEachStatement__.ts +17 -26
  374. package/src/concepts/Identifier__.ts +4 -1
  375. package/src/concepts/JSBlock__.ts +58 -0
  376. package/src/concepts/LogicItem__.ts +2 -2
  377. package/src/concepts/Logic__.ts +1 -0
  378. package/src/concepts/Match__.ts +1 -1
  379. package/src/concepts/MultiApprovalPolicy__.ts +69 -0
  380. package/src/concepts/NewComposite__.ts +18 -9
  381. package/src/concepts/NumericLiteral__.ts +1 -1
  382. package/src/concepts/Param__.ts +24 -2
  383. package/src/concepts/ProcessElement__.ts +70 -1
  384. package/src/concepts/Return__.ts +23 -3
  385. package/src/concepts/SequentialPolicy__.ts +58 -0
  386. package/src/concepts/Variable__.ts +23 -3
  387. package/src/concepts/ViewElement__.ts +6 -4
  388. package/src/concepts/View__.ts +5 -5
  389. package/src/concepts/index__.ts +3 -0
  390. package/src/concepts/types__.ts +6 -0
  391. package/src/generator/genReleaseBody.ts +40 -40
  392. package/src/server/extendBaseNode.ts +30 -2
  393. package/src/server/getLogics.ts +4 -0
  394. package/src/server/getProcesses.ts +66 -6
  395. package/src/server/index.ts +2 -1
  396. package/src/server/naslServer.ts +2 -2
  397. package/src/server/translator.ts +3 -0
  398. package/src/service/creator/errHandles.js +7 -4
  399. package/src/service/storage/init.ts +2 -2
  400. package/src/templator/genCreateBlock.ts +9 -5
  401. package/src/templator/genCurdEditMultipleKeyBlock.ts +19 -13
  402. package/src/templator/genCurdMultipleKeyBlock.ts +14 -11
  403. package/src/templator/genEditTableBlock.ts +4 -2
  404. package/src/templator/genUpdateBlock.ts +15 -12
  405. package/src/templator/utils.ts +8 -7
  406. package/test/concepts/anonymous-function/__snapshots__/toJS.spec.ts.snap +1 -1
  407. package/test/concepts/assignment/__snapshots__/toJS.spec.ts.snap +1 -1
  408. package/test/concepts/batch-assignment/__snapshots__/toJS.spec.ts.snap +2 -2
  409. package/test/concepts/binary-expression/__snapshots__/toJS.spec.ts.snap +3 -2
  410. package/test/concepts/call-interface/__snapshots__/toJS.spec.ts.snap +2 -2
  411. package/test/concepts/call-logic/__snapshots__/toJS.spec.ts.snap +3 -3
  412. package/test/concepts/match/__snapshots__/toJS.spec.ts.snap +1 -1
  413. package/test/concepts/numeric-literal/__snapshots__/toJS.spec.ts.snap +1 -1
  414. package/test/concepts/validation-rule/__snapshots__/toJS.spec.ts.snap +3 -3
  415. package/.nyc_output/processinfo/78804420-ead6-486f-b682-ab54ccd95dc9.json +0 -1
  416. package/coverage/cobertura-coverage.xml +0 -71878
  417. package/coverage/src/automate/engine/index.js.html +0 -1471
  418. package/coverage/src/automate/engine/operators.js.html +0 -862
  419. package/coverage/src/automate/engine/uniqueName.js.html +0 -412
  420. package/coverage/src/automate/engine/viewCache.js.html +0 -214
  421. package/coverage/src/automate/template/index.html +0 -116
  422. package/coverage/src/automate/template/myProcess.js.html +0 -34645
  423. package/coverage/src/common/utils.ts.html +0 -136
  424. package/coverage/src/concepts/DataElement__.ts.html +0 -118
  425. package/coverage/src/concepts/MetadataType__.ts.html +0 -2053
  426. package/coverage/src/utils/time-slicing/constant.ts.html +0 -196
  427. package/coverage/src/utils/time-slicing/controller.ts.html +0 -1111
  428. package/coverage/src/utils/time-slicing/index.html +0 -236
  429. package/coverage/src/utils/time-slicing/index.ts.html +0 -103
  430. package/coverage/src/utils/time-slicing/page-state.ts.html +0 -121
  431. package/coverage/src/utils/time-slicing/performance.ts.html +0 -253
  432. package/coverage/src/utils/time-slicing/runner.ts.html +0 -247
  433. package/coverage/src/utils/time-slicing/tool.ts.html +0 -220
  434. package/coverage/src/utils/time-slicing/utils.ts.html +0 -355
  435. package/coverage/src/utils/time-slicing/wrapper.ts.html +0 -259
  436. package/coverage/src/utils/time.ts.html +0 -118
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">5.47% </span>
26
+ <span class="strong">6.39% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>35/639</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.66% </span>
47
+ <span class="strong">6.69% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>35/618</span>
49
+ <span class='fraction'>30/448</span>
50
50
  </div>
51
51
 
52
52
 
@@ -955,579 +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-no">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1367
- <span class="cline-any cline-no">&nbsp;</span>
1368
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-no">&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
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
973
  <span class="cline-any cline-yes">1x</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-no">&nbsp;</span>
1391
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1399
- <span class="cline-any cline-neutral">&nbsp;</span>
1400
- <span class="cline-any cline-no">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1413
- <span class="cline-any cline-no">&nbsp;</span>
1414
- <span class="cline-any cline-no">&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-neutral">&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-no">&nbsp;</span>
1427
- <span class="cline-any cline-neutral">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-neutral">&nbsp;</span>
1430
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1437
- <span class="cline-any cline-neutral">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-neutral">&nbsp;</span>
1440
- <span class="cline-any cline-neutral">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-no">&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
- <span class="cline-any cline-neutral">&nbsp;</span>
1449
974
  <span class="cline-any cline-yes">1x</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
- <span class="cline-any cline-no">&nbsp;</span>
1454
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1460
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1464
- <span class="cline-any cline-neutral">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1470
- <span class="cline-any cline-neutral">&nbsp;</span>
1471
- <span class="cline-any cline-neutral">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-no">&nbsp;</span>
1474
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1478
- <span class="cline-any cline-neutral">&nbsp;</span>
1479
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1489
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1495
- <span class="cline-any cline-neutral">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-neutral">&nbsp;</span>
1498
- <span class="cline-any cline-no">&nbsp;</span>
1499
- <span class="cline-any cline-no">&nbsp;</span>
1500
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1505
975
  <span class="cline-any cline-neutral">&nbsp;</span>
1506
976
  <span class="cline-any cline-neutral">&nbsp;</span>
1507
- <span class="cline-any cline-no">&nbsp;</span>
1508
- <span class="cline-any cline-neutral">&nbsp;</span>
1509
- <span class="cline-any cline-no">&nbsp;</span>
1510
- <span class="cline-any cline-neutral">&nbsp;</span>
1511
- <span class="cline-any cline-no">&nbsp;</span>
1512
- <span class="cline-any cline-no">&nbsp;</span>
1513
- <span class="cline-any cline-neutral">&nbsp;</span>
1514
- <span class="cline-any cline-no">&nbsp;</span>
1515
- <span class="cline-any cline-neutral">&nbsp;</span>
1516
- <span class="cline-any cline-no">&nbsp;</span>
1517
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1521
- <span class="cline-any cline-neutral">&nbsp;</span>
1522
- <span class="cline-any cline-neutral">&nbsp;</span>
1523
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1527
- <span class="cline-any cline-no">&nbsp;</span>
1528
- <span class="cline-any cline-no">&nbsp;</span>
1529
- <span class="cline-any cline-no">&nbsp;</span>
1530
- <span class="cline-any cline-neutral">&nbsp;</span>
977
+ <span class="cline-any cline-yes">1x</span>
1531
978
  <span class="cline-any cline-neutral">&nbsp;</span>
1532
979
  <span class="cline-any cline-neutral">&nbsp;</span>
1533
980
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1557,7 +1004,6 @@
1557
1004
  <span class="cline-any cline-neutral">&nbsp;</span>
1558
1005
  <span class="cline-any cline-neutral">&nbsp;</span>
1559
1006
  <span class="cline-any cline-neutral">&nbsp;</span>
1560
- <span class="cline-any cline-neutral">&nbsp;</span>
1561
1007
  <span class="cline-any cline-no">&nbsp;</span>
1562
1008
  <span class="cline-any cline-no">&nbsp;</span>
1563
1009
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1662,11 +1108,6 @@
1662
1108
  <span class="cline-any cline-no">&nbsp;</span>
1663
1109
  <span class="cline-any cline-no">&nbsp;</span>
1664
1110
  <span class="cline-any cline-no">&nbsp;</span>
1665
- <span class="cline-any cline-neutral">&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
- <span class="cline-any cline-no">&nbsp;</span>
1670
1111
  <span class="cline-any cline-no">&nbsp;</span>
1671
1112
  <span class="cline-any cline-no">&nbsp;</span>
1672
1113
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1775,8 +1216,6 @@
1775
1216
  <span class="cline-any cline-no">&nbsp;</span>
1776
1217
  <span class="cline-any cline-no">&nbsp;</span>
1777
1218
  <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-neutral">&nbsp;</span>
1779
- <span class="cline-any cline-no">&nbsp;</span>
1780
1219
  <span class="cline-any cline-no">&nbsp;</span>
1781
1220
  <span class="cline-any cline-no">&nbsp;</span>
1782
1221
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1804,9 +1243,6 @@
1804
1243
  <span class="cline-any cline-no">&nbsp;</span>
1805
1244
  <span class="cline-any cline-no">&nbsp;</span>
1806
1245
  <span class="cline-any cline-no">&nbsp;</span>
1807
- <span class="cline-any cline-neutral">&nbsp;</span>
1808
- <span class="cline-any cline-no">&nbsp;</span>
1809
- <span class="cline-any cline-no">&nbsp;</span>
1810
1246
  <span class="cline-any cline-no">&nbsp;</span>
1811
1247
  <span class="cline-any cline-neutral">&nbsp;</span>
1812
1248
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1873,28 +1309,7 @@
1873
1309
  <span class="cline-any cline-neutral">&nbsp;</span>
1874
1310
  <span class="cline-any cline-neutral">&nbsp;</span>
1875
1311
  <span class="cline-any cline-neutral">&nbsp;</span>
1876
- <span class="cline-any cline-neutral">&nbsp;</span>
1877
- <span class="cline-any cline-neutral">&nbsp;</span>
1878
- <span class="cline-any cline-neutral">&nbsp;</span>
1879
- <span class="cline-any cline-neutral">&nbsp;</span>
1880
- <span class="cline-any cline-neutral">&nbsp;</span>
1881
- <span class="cline-any cline-neutral">&nbsp;</span>
1882
- <span class="cline-any cline-no">&nbsp;</span>
1883
- <span class="cline-any cline-no">&nbsp;</span>
1884
- <span class="cline-any cline-neutral">&nbsp;</span>
1885
- <span class="cline-any cline-neutral">&nbsp;</span>
1886
- <span class="cline-any cline-neutral">&nbsp;</span>
1887
- <span class="cline-any cline-neutral">&nbsp;</span>
1888
- <span class="cline-any cline-neutral">&nbsp;</span>
1889
- <span class="cline-any cline-no">&nbsp;</span>
1890
- <span class="cline-any cline-neutral">&nbsp;</span>
1891
- <span class="cline-any cline-neutral">&nbsp;</span>
1892
- <span class="cline-any cline-no">&nbsp;</span>
1893
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1897
- <span class="cline-any cline-no">&nbsp;</span>
1312
+ <span class="cline-any cline-neutral">&nbsp;</span>
1898
1313
  <span class="cline-any cline-neutral">&nbsp;</span>
1899
1314
  <span class="cline-any cline-neutral">&nbsp;</span>
1900
1315
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1907,8 +1322,10 @@
1907
1322
  <span class="cline-any cline-neutral">&nbsp;</span>
1908
1323
  <span class="cline-any cline-neutral">&nbsp;</span>
1909
1324
  <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-no">&nbsp;</span>
1910
1326
  <span class="cline-any cline-neutral">&nbsp;</span>
1911
1327
  <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-no">&nbsp;</span>
1912
1329
  <span class="cline-any cline-neutral">&nbsp;</span>
1913
1330
  <span class="cline-any cline-neutral">&nbsp;</span>
1914
1331
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1917,7 +1334,6 @@
1917
1334
  <span class="cline-any cline-no">&nbsp;</span>
1918
1335
  <span class="cline-any cline-no">&nbsp;</span>
1919
1336
  <span class="cline-any cline-no">&nbsp;</span>
1920
- <span class="cline-any cline-no">&nbsp;</span>
1921
1337
  <span class="cline-any cline-neutral">&nbsp;</span>
1922
1338
  <span class="cline-any cline-no">&nbsp;</span>
1923
1339
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1949,7 +1365,6 @@
1949
1365
  <span class="cline-any cline-neutral">&nbsp;</span>
1950
1366
  <span class="cline-any cline-neutral">&nbsp;</span>
1951
1367
  <span class="cline-any cline-neutral">&nbsp;</span>
1952
- <span class="cline-any cline-neutral">&nbsp;</span>
1953
1368
  <span class="cline-any cline-yes">1x</span>
1954
1369
  <span class="cline-any cline-yes">1x</span>
1955
1370
  <span class="cline-any cline-yes">1x</span>
@@ -1996,7 +1411,6 @@
1996
1411
  <span class="cline-any cline-no">&nbsp;</span>
1997
1412
  <span class="cline-any cline-no">&nbsp;</span>
1998
1413
  <span class="cline-any cline-no">&nbsp;</span>
1999
- <span class="cline-any cline-no">&nbsp;</span>
2000
1414
  <span class="cline-any cline-neutral">&nbsp;</span>
2001
1415
  <span class="cline-any cline-no">&nbsp;</span>
2002
1416
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2004,7 +1418,6 @@
2004
1418
  <span class="cline-any cline-no">&nbsp;</span>
2005
1419
  <span class="cline-any cline-no">&nbsp;</span>
2006
1420
  <span class="cline-any cline-no">&nbsp;</span>
2007
- <span class="cline-any cline-no">&nbsp;</span>
2008
1421
  <span class="cline-any cline-neutral">&nbsp;</span>
2009
1422
  <span class="cline-any cline-neutral">&nbsp;</span>
2010
1423
  <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,501 +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" > console.log(cursor);</span>
2563
- <span class="cstat-no" title="statement not covered" > objectStore.delete(cursor.primaryKey);</span>
2564
- <span class="cstat-no" title="statement not covered" > cursor.continue();</span>
2565
- } else {
2566
- <span class="cstat-no" title="statement not covered" > resolve(void 0);</span>
2567
- }
2568
- };
2569
- &nbsp;
2570
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2571
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2572
- };
2573
- };
2574
- &nbsp;
2575
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2576
- <span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
2577
- };
2578
- });
2579
- }
2580
- &nbsp;
2581
- // 操作栈查询
2582
- export function <span class="fstat-no" title="function not covered" >operationRecordQuery(</span>app: any) {
2583
- <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>
2584
- const appId = <span class="cstat-no" title="statement not covered" >app?.id;</span>
2585
- const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
2586
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2587
- const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2588
- const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readonly');</span>
2589
- const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
2590
- const index = <span class="cstat-no" title="statement not covered" >objectStore.index('appId');</span> // 查询 'appId' 索引
2591
- const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.only(appId);</span>
2592
- const request = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
2593
- const result: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2594
- &nbsp;
2595
- <span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) =&gt; {</span>
2596
- const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
2597
- <span class="cstat-no" title="statement not covered" > if (cursor) {</span>
2598
- const record = <span class="cstat-no" title="statement not covered" >cursor.value;</span>
2599
- const branchId = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('branchId');</span>
2600
- <span class="cstat-no" title="statement not covered" > if (record.branchId === branchId) {</span>
2601
- <span class="cstat-no" title="statement not covered" > result.push(record);</span>
2602
- }
2603
- <span class="cstat-no" title="statement not covered" > cursor.continue();</span>
2604
- } else {
2605
- <span class="cstat-no" title="statement not covered" > console.log('操作记录栈:', result);</span>
2606
- <span class="cstat-no" title="statement not covered" > resolve(result);</span>
2607
- }
2608
- };
2609
- &nbsp;
2610
- <span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2611
- <span class="cstat-no" title="statement not covered" > db.close();</span>
2612
- };
2613
- &nbsp;
2614
- };
2615
- &nbsp;
2616
- <span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2617
- <span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
2618
- };
2619
- });
2620
- }
2621
- &nbsp;
2622
- // 获取父对象
2623
- function <span class="fstat-no" title="function not covered" >getParentInfo(</span>appJson: any, path: string) {
2624
- const pathArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2625
- <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>
2626
- const arrayPropertyKey = <span class="cstat-no" title="statement not covered" >pathItem.split('[')[0];</span>
2627
- const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
2628
- <span class="cstat-no" title="statement not covered" > if (matchArr) {</span>
2629
- <span class="cstat-no" title="statement not covered" > pathArr.push(arrayPropertyKey, matchArr[0]);</span>
2630
- } else {
2631
- <span class="cstat-no" title="statement not covered" > pathArr.push(pathItem);</span>
2632
- }
2633
- });
2634
- <span class="cstat-no" title="statement not covered" > pathArr.pop();</span>
2635
- let parentPath = <span class="cstat-no" title="statement not covered" >'';</span>
2636
- <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>
2637
- const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
2638
- <span class="cstat-no" title="statement not covered" > if (matchArr || index === 0) {</span>
2639
- <span class="cstat-no" title="statement not covered" > parentPath += pathItem;</span>
2640
- } else {
2641
- <span class="cstat-no" title="statement not covered" > parentPath += `.${pathItem}`</span>
2642
- }
2643
- });
2644
- const parentNode = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, parentPath);</span>
2645
- <span class="cstat-no" title="statement not covered" > return {</span>
2646
- parentPath,
2647
- parentNode,
2648
- };
2649
- }
2650
- &nbsp;
2651
- // 操作记录回放
2652
- export async function <span class="fstat-no" title="function not covered" >operationRecordPlayback(</span>app: any, operationRecordAction: 'undo' | 'redo') {
2653
- const operationRecord: any = <span class="cstat-no" title="statement not covered" >await operationRecordQuery(app);</span>
2654
- let operationRecordIndex = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('operationRecordIndex');</span>
2655
- <span class="cstat-no" title="statement not covered" > if ([null, undefined].includes(operationRecordIndex)) {</span>
2656
- <span class="cstat-no" title="statement not covered" > operationRecordIndex = operationRecord?.length;</span>
2657
- }
2658
- const appJson = <span class="cstat-no" title="statement not covered" >app.toJSON();</span>
2659
- <span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo') {</span>
2660
- <span class="cstat-no" title="statement not covered" > if (operationRecordIndex &gt; 0) {</span>
2661
- const currentRecordItem = <span class="cstat-no" title="statement not covered" >operationRecord?.[operationRecordIndex];</span>
2662
- const { type, action: recordItemAction } = <span class="cstat-no" title="statement not covered" >currentRecordItem || {};</span>
2663
- // 多人协作
2664
- <span class="cstat-no" title="statement not covered" > if (type === 'cooperation' &amp;&amp; recordItemAction === 'confirmPull') {</span>
2665
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},已经进行了多人协作“合并”操作,无法继续对操作栈进行回放!`);</span>
2666
- <span class="cstat-no" title="statement not covered" > return;</span>
2667
- }
2668
- <span class="cstat-no" title="statement not covered" > operationRecordIndex--;</span>
2669
- } else {
2670
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续回放`);</span>
2671
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2672
- <span class="cstat-no" title="statement not covered" > return;</span>
2673
- }
2674
- } else {
2675
- <span class="cstat-no" title="statement not covered" > if (operationRecordIndex &lt; operationRecord?.length) {</span>
2676
- <span class="cstat-no" title="statement not covered" > operationRecordIndex++;</span>
2677
- } else {
2678
- <span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续前进`);</span>
2679
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2680
- <span class="cstat-no" title="statement not covered" > return;</span>
2681
- }
2682
- }
2683
- <span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', operationRecordIndex);</span>
2684
- const currentIndex = <span class="cstat-no" title="statement not covered" >operationRecordIndex;</span>
2685
- <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>
2686
- const { actionItem } = <span class="cstat-no" title="statement not covered" >recordItem || {};</span>
2687
- const { list } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2688
- <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>
2689
- const { path, action, object, oldObject, parentKey, index: oldIndex } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2690
- const { parentNode } = <span class="cstat-no" title="statement not covered" >getParentInfo(appJson, path);</span>
2691
- let newPath = <span class="cstat-no" title="statement not covered" >path;</span>
2692
- // 如果涉及到改名操作,需要特殊处理
2693
- <span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo' &amp;&amp; action === 'update' &amp;&amp; object?.name) {</span>
2694
- const pathArr = <span class="cstat-no" title="statement not covered" >path?.split('.') || [];</span>
2695
- const lastPathItem = <span class="cstat-no" title="statement not covered" >pathArr?.pop();</span>
2696
- <span class="cstat-no" title="statement not covered" > if (lastPathItem) {</span>
2697
- <span class="cstat-no" title="statement not covered" > pathArr.push(lastPathItem.replace(/(name=)[^\]]+/, `$1${object?.name}`));</span>
2698
- }
2699
- <span class="cstat-no" title="statement not covered" > newPath = pathArr.join('.');</span>
2700
- }
2701
- const node = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, newPath);</span>
2702
- <span class="cstat-no" title="statement not covered" > switch (action) {</span>
2703
- case 'create':
2704
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode)) {</span>
2705
- const index = <span class="cstat-no" title="statement not covered" >parentNode.indexOf(node);</span>
2706
- <span class="cstat-no" title="statement not covered" > if (index !== -1) {</span>
2707
- <span class="cstat-no" title="statement not covered" > parentNode.splice(index, 1);</span>
2708
- }
2709
- } else {
2710
- <span class="cstat-no" title="statement not covered" > parentNode[parentKey] = null;</span>
2711
- }
2712
- <span class="cstat-no" title="statement not covered" > break;</span>
2713
- case 'delete':
2714
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode) &amp;&amp; oldIndex !== -1) {</span>
2715
- <span class="cstat-no" title="statement not covered" > parentNode.splice(oldIndex, 0, oldObject);</span>
2716
- } else {
2717
- <span class="cstat-no" title="statement not covered" > parentNode[parentKey] = oldObject;</span>
2718
- }
2719
- <span class="cstat-no" title="statement not covered" > break;</span>
2720
- case 'update':
2721
- <span class="cstat-no" title="statement not covered" > for (const key in oldObject) {</span>
2722
- <span class="cstat-no" title="statement not covered" > if (node) {</span>
2723
- (<span class="cstat-no" title="statement not covered" >node as any)[key] = oldObject[key] ?? null;</span>
2724
- }
2725
- }
2726
- <span class="cstat-no" title="statement not covered" > break;</span>
2727
- }
2728
- });
2729
- });
2730
- <span class="cstat-no" title="statement not covered" > console.log('当前所处栈位置:', currentIndex);</span>
2731
- <span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
2732
- <span class="cstat-no" title="statement not covered" > return appJson;</span>
2733
- }
2734
- &nbsp;
2735
- function <span class="fstat-no" title="function not covered" >getLogic(</span>key: string, app: any, diffLogicList: string[]) {
2736
- <span class="cstat-no" title="statement not covered" > if (!diffLogicList.includes(key)) {</span>
2737
- <span class="cstat-no" title="statement not covered" > diffLogicList.push(key);</span>
2738
- <span class="cstat-no" title="statement not covered" > if (key.startsWith('app')) {</span>
2739
- const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf('.');</span>
2740
- const name = <span class="cstat-no" title="statement not covered" >key.slice(index + 1);</span>
2741
- 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>
2742
- <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
2743
- <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>
2744
- }
2745
- } else <span class="cstat-no" title="statement not covered" >if (key.startsWith('extensions')) {</span>
2746
- 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>('.');
2747
1885
  const _name = <span class="cstat-no" title="statement not covered" >_pathArr[1];</span>
2748
- const _path = <span class="cstat-no" title="statement not covered" >_pathArr[3];</span>
2749
- const _list = <span class="cstat-no" title="statement not covered" >app.dependencies;</span>
2750
- 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>
2751
- const name = <span class="cstat-no" title="statement not covered" >it.name.replaceAll('-', '_');</span>
2752
- <span class="cstat-no" title="statement not covered" > return name === _name;</span>
2753
- });
2754
- 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>
2755
- <span class="cstat-no" title="statement not covered" > if (logic &amp;&amp; logic.body &amp;&amp; logic.body.length &gt; 2) {</span>
2756
- <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));
2757
1895
  }
2758
1896
  }
2759
1897
  }
2760
- }
2761
- &nbsp;
2762
- /* 获取LogicITEM */
2763
- function <span class="fstat-no" title="function not covered" >getStatement(</span>state: any, app: any, diffLogicList: string[]) {
2764
- let logicItems = <span class="cstat-no" title="statement not covered" >[];</span>
2765
- <span class="cstat-no" title="statement not covered" > switch (state.concept) {</span>
2766
- case 'Assignment':
2767
- <span class="cstat-no" title="statement not covered" > logicItems = [state.left, state.right];</span>
2768
- <span class="cstat-no" title="statement not covered" > break;</span>
2769
- case 'IfStatement':
2770
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.consequent, ...state.alternate];</span>
2771
- <span class="cstat-no" title="statement not covered" > break;</span>
2772
- case 'ForEachStatement':
2773
- <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];
2774
1905
  <span class="cstat-no" title="statement not covered" > break;</span>
2775
- case 'Match':
2776
- <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];
2777
1908
  <span class="cstat-no" title="statement not covered" > break;</span>
2778
- case 'MatchCase':
2779
- <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];
2780
1911
  <span class="cstat-no" title="statement not covered" > break;</span>
2781
- case 'SwitchStatement':
2782
- <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)];
2783
1914
  <span class="cstat-no" title="statement not covered" > break;</span>
2784
- case 'SwitchCase':
2785
- <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];
2786
1917
  <span class="cstat-no" title="statement not covered" > break;</span>
2787
- case 'WhileStatement':
2788
- <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);
2789
1920
  <span class="cstat-no" title="statement not covered" > break;</span>
2790
- case 'CallLogic':
2791
- <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>
2792
- <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];
2793
1923
  <span class="cstat-no" title="statement not covered" > break;</span>
2794
- case 'CallFunction':
2795
- <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);
2796
1936
  <span class="cstat-no" title="statement not covered" > break;</span>
2797
- case 'CallInterface':
2798
- <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)];
2799
1942
  <span class="cstat-no" title="statement not covered" > break;</span>
2800
- case 'ExternalDestination':
2801
- <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];
2802
1945
  <span class="cstat-no" title="statement not covered" > break;</span>
2803
- case 'BatchAssignment':
2804
- <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)];
2805
1951
  <span class="cstat-no" title="statement not covered" > break;</span>
2806
- case 'MemberExpression':
2807
- <span class="cstat-no" title="statement not covered" > logicItems = [state.object, state.property];</span>
2808
- <span class="cstat-no" title="statement not covered" > break;</span>
2809
- case 'StringInterpolation':
2810
- <span class="cstat-no" title="statement not covered" > logicItems = [...state.expressions];</span>
2811
- <span class="cstat-no" title="statement not covered" > break;</span>
2812
- case 'NewComposite':
2813
- <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>
2814
- <span class="cstat-no" title="statement not covered" > break;</span>
2815
- case 'NewList':
2816
- <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];
2817
1954
  <span class="cstat-no" title="statement not covered" > break;</span>
2818
1955
  default:
2819
- <span class="cstat-no" title="statement not covered" > break;</span>
2820
- }
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>
2821
1958
  &nbsp;
2822
- <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);
2823
1960
  }
2824
- &nbsp;
2825
- /* 小程序影响的服务端发布 */
2826
- function <span class="fstat-no" title="function not covered" >getMiniAppChange(</span>target: any, obj: any, action: string) {
2827
- <span class="cstat-no" title="statement not covered" > if (!target.app.miniEnable) {</span>
2828
- <span class="cstat-no" title="statement not covered" > return false;</span>
2829
- }
2830
- /* 分端以后需要改 */
2831
- const len = <span class="cstat-no" title="statement not covered" >target.nodePath?.split('.').length;</span>
2832
- <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) {
2833
1970
  <span class="cstat-no" title="statement not covered" > return false;</span>
2834
- }
2835
- <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') {
2836
1973
  <span class="cstat-no" title="statement not covered" > return true;</span>
2837
- } else {
2838
- <span class="cstat-no" title="statement not covered" > if ('name' in obj || 'title' in obj) {</span>
2839
- <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;
2840
1977
  }
2841
1978
  }
2842
1979
  }
2843
1980
  &nbsp;
2844
1981
  let aiExecuted = 0;
2845
- let sessionPath = '';
2846
- // AI 生成内容是否被采纳
2847
- const handleAIPoint = <span class="fstat-no" title="function not covered" >(a</span>pp: any, actionItem: any) =&gt; {
2848
- const { actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2849
- <span class="cstat-no" title="statement not covered" > if (aiExecuted &gt; 0) {</span>
2850
- <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 });
2851
1988
  <span class="cstat-no" title="statement not covered" > aiExecuted -= 1;</span>
2852
- }
2853
- <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) {
2854
1991
  <span class="cstat-no" title="statement not covered" > aiExecuted += 1;</span>
2855
1992
  // eslint-disable-next-line prefer-destructuring
2856
- <span class="cstat-no" title="statement not covered" > sessionPath = actionMsg.match(/:(.*)/)[1];</span>
1993
+ sessionPath = actionMsg.match(/:(.*)/)[1];
2857
1994
  }
2858
1995
  }
2859
1996
  &nbsp;
2860
1997
  /**
2861
- * 执行更新
2862
- */
2863
- async function <span class="fstat-no" title="function not covered" >doAction(</span>app: any, actionItem: any) {
2864
- const isOperationRecord = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('isOperationRecord');</span>
2865
- <span class="cstat-no" title="statement not covered" > if (isOperationRecord) {</span>
2866
- <span class="cstat-no" title="statement not covered" > console.log('正在进行操作栈回放操作,如需行任何Nasl操作请刷新页面');</span>
2867
- <span class="cstat-no" title="statement not covered" > return;</span>
2868
- }
2869
- let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2870
- let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
2871
- const actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
2872
- const { list, actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
2873
- <span class="cstat-no" title="statement not covered" > handleAIPoint(app, actionItem);</span>
2874
- 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>
2875
- const _l = <span class="cstat-no" title="statement not covered" >getStatement(_i, app, diffArr);</span>
2876
- <span class="cstat-no" title="statement not covered" > if (_l.length) {</span>
2877
- <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>
2878
- }
2879
- };
2880
- 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>
2881
- <span class="cstat-no" title="statement not covered" > if (view instanceof View) {</span>
2882
- <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>
2883
- }
2884
- <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>
2885
- <span class="cstat-no" title="statement not covered" > if (view instanceof ViewElement) {</span>
2886
- <span class="cstat-no" title="statement not covered" > if (view.bindEvents.length) {</span>
2887
- const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2888
- <span class="cstat-no" title="statement not covered" > view.bindEvents.forEach(<span class="fstat-no" title="function not covered" >(b</span>indEvent) =&gt; {</span>
2889
- <span class="cstat-no" title="statement not covered" > bindEvent.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) =&gt; {</span>
2890
- <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>
2891
- });
2892
- });
2893
- 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>
2894
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2895
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2896
- }
2897
- }
2898
- <span class="cstat-no" title="statement not covered" > if (view.tag === 'u-uploader' || view.tag === 'van-uploader') {</span>
2899
- 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>
2900
- const needUpdateBackEnd = <span class="cstat-no" title="statement not covered" >bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
2901
- <span class="cstat-no" title="statement not covered" > if (checkAuth) {</span>
2902
- <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd &amp;&amp; !view.view.parentAuth) {</span>
2903
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2904
- }
2905
- } else {
2906
- <span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd) {</span>
2907
- <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;
2908
2040
  }
2909
2041
  }
2910
2042
  }
2911
2043
  }
2912
- };
2913
- &nbsp;
2914
- const loopEleAuth = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iewElement: ViewElement) =&gt; {</span>
2915
- <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>
2916
- const bindDirective = <span class="cstat-no" title="statement not covered" >item?.bindDirectives?.find(</span>
2917
- <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>
2918
- )
2919
- <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) {
2920
2052
  <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2921
2053
  }
2922
- <span class="cstat-no" title="statement not covered" > loopEleAuth(item)</span>
2923
- })
2924
- }
2925
- <span class="cstat-no" title="statement not covered" > try {</span>
2926
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(list)) {</span>
2927
- <span class="cstat-no" title="statement not covered" > list.forEach(<span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {</span>
2928
- const emitTarget = <span class="cstat-no" title="statement not covered" >event?.originEvent?.target as SyntaxNode;</span>
2929
- const _path: string = <span class="cstat-no" title="statement not covered" >event.originEvent.path;</span>
2930
- const _root = <span class="cstat-no" title="statement not covered" >_path.split('.')?.[1] || '';</span>
2931
- <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))) {
2932
2064
  <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2933
- }
2934
- <span class="cstat-no" title="statement not covered" > if (emitTarget) {</span>
2935
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'App') {</span>
2936
- <span class="cstat-no" title="statement not covered" > if (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
2937
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2938
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2939
- }
2940
- }
2941
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ValidationRule') {</span>
2942
- <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 (
2943
2075
  event?.object?.enableServerValidation ||
2944
- event?.originEvent?.object?.enableServerValidation
2945
- ) {
2946
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2947
- <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2948
- }
2949
- }
2950
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Logic') {</span>
2951
- const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
2952
- <span class="cstat-no" title="statement not covered" > if (emitTarget.body.length &gt; 2) {</span>
2953
- <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>
2954
- <span class="cstat-no" title="statement not covered" > itemloop(it, app, diffArr);</span>
2955
- });
2956
- }
2957
- 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>
2958
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
2959
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2960
- }
2961
- }
2962
- <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) {
2963
2095
  <span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
2964
- }
2965
- <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>
2966
2098
  const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete'</span>
2967
- <span class="cstat-no" title="statement not covered" > if (isDelete) {</span>
2968
- const isAuto = <span class="cstat-no" title="statement not covered" >~event?.originEvent?.path?.indexOf('name=auth')</span>
2969
- <span class="cstat-no" title="statement not covered" > if (isAuto) {</span>
2970
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2971
- }
2972
- }
2973
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name === 'auth') {</span>
2974
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
2975
- }
2976
- }
2977
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'View') {</span>
2978
- <span class="cstat-no" title="statement not covered" > if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {</span>
2979
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
2980
- }
2981
- &nbsp;
2982
- const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete';</span>
2983
- const isAuthView = <span class="cstat-no" title="statement not covered" >emitTarget.auth &amp;&amp; event?.originEvent?.object?.name;</span>
2984
- const isUpdateAuth = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; "auth" in (event?.originEvent?.object || {});</span>
2985
- const isUpdateAuthDes = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' &amp;&amp; "authDescription" in (event?.originEvent?.object || {});</span>
2986
- 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>
2987
- <span class="cstat-no" title="statement not covered" > if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView||isUpdateAuthDes) {</span>
2988
- <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;
2989
2119
  // const app = emitTarget.app;
2990
2120
  // const diffArr: string[] = [];
2991
2121
  // emitTarget.logics.forEach((logic: Logic) =&gt; {
@@ -3000,79 +2130,76 @@ async function <span class="fstat-no" title="function not covered" >doAction(</s
3000
2130
  // hasBackEnd = true;
3001
2131
  // }
3002
2132
  // emitTarget.children.forEach((item: View | ViewElement) =&gt; loopEle(item, isDelete));
3003
- // 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));
3004
2134
  }
3005
2135
  <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
3006
- }
3007
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ViewElement') {</span>
3008
- <span class="cstat-no" title="statement not covered" > if ("authDescription" in (event?.originEvent?.object || {})) {</span>
3009
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3010
- } ;
3011
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name) {</span>
3012
- const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget.bindDirectives.find(</span>
3013
- <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>
3014
- )
3015
- <span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
3016
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3017
- }
3018
- }
3019
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action === 'delete') {</span>
3020
- const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget?.bindDirectives?.find(</span>
3021
- <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>
3022
- )
3023
- <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) {
3024
2151
  <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3025
2152
  }
3026
2153
  <span class="cstat-no" title="statement not covered" > loopEleAuth(emitTarget)</span>
3027
- }
3028
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action !== 'create') {</span>
3029
- <span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object &amp;&amp; event?.originEvent?.object?.bindRoles) {</span>
3030
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3031
- }
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>
3032
2159
  }
3033
2160
  <span class="cstat-no" title="statement not covered" > loopEle(emitTarget, true)</span>
3034
2161
  }
3035
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindAttribute' &amp;&amp; emitTarget.name === 'url') {</span>
3036
- 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>
3037
2164
  <span class="cstat-no" title="statement not covered" > emitTarget?.value?.endsWith('/import') || emitTarget?.value?.includes('/upload/')</span>
3038
- <span class="cstat-no" title="statement not covered" > if (!emitTarget.view.parentAuth &amp;&amp; needUpdateBackEnd) {</span>
3039
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
3040
- }
3041
- }
3042
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'CallLogic') {</span>
3043
- const arrlist: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
3044
- <span class="cstat-no" title="statement not covered" > getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist);</span>
3045
- 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>
3046
- // console.log(result, 'CallLogic');
3047
- <span class="cstat-no" title="statement not covered" > if (result.length) {</span>
3048
- <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;
3049
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;
3050
2181
  }
3051
- // 更新端时需要出发后端更新
3052
- <span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Frontend') {</span>
3053
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3054
- }
3055
- }
3056
- &nbsp;
3057
- <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>
3058
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(objItem)) {</span>
3059
- <span class="cstat-no" title="statement not covered" > if (action === 'update') {</span>
3060
- <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({
3061
2188
  action,
3062
2189
  path,
3063
2190
  node: objItem[0],
3064
- });
3065
- } else {
3066
- <span class="cstat-no" title="statement not covered" > objItem.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) =&gt; {</span>
3067
- <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({
3068
2195
  action,
3069
2196
  path,
3070
2197
  node: item,
3071
2198
  });
3072
2199
  });
3073
- }
2200
+ <span class="cstat-no" title="statement not covered" > }</span>
3074
2201
  } else {
3075
- <span class="cstat-no" title="statement not covered" > actionList.push({</span>
2202
+ actionList.push({
3076
2203
  action,
3077
2204
  path,
3078
2205
  object: objItem,
@@ -3080,66 +2207,46 @@ async function <span class="fstat-no" title="function not covered" >doAction(</s
3080
2207
  }
3081
2208
  });
3082
2209
  });
3083
- }
3084
- } catch (error) {
3085
- <span class="cstat-no" title="statement not covered" > console.log(error);</span>
3086
- <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, {
3087
2214
  errorInfo: {
3088
2215
  message: error?.message,
3089
2216
  stack: error?.stack,
3090
- },
2217
+ <span class="cstat-no" title="statement not covered" > },</span>
3091
2218
  });
3092
- <span class="cstat-no" title="statement not covered" > return;</span>
3093
- }
2219
+ return;
2220
+ }<span class="cstat-no" title="statement not covered" ></span>
3094
2221
  &nbsp;
3095
- const uuid = <span class="cstat-no" title="statement not covered" >uuidv4().replace(/-/g, '');</span>
3096
- const instructList = <span class="cstat-no" title="statement not covered" >[{</span>
3097
- uuid,
3098
- actions: actionList,
2222
+ const instructList = [{
2223
+ uuid: uuidv4().replace(/-/g, ''),
2224
+ <span class="cstat-no" title="statement not covered" > actions: actionList,</span>
3099
2225
  }];
3100
- const operation: Operation = <span class="cstat-no" title="statement not covered" >{</span>
3101
- type: 'doAction',
3102
- uuid,
3103
- actionItem: {
3104
- actionMsg,
3105
- list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) =&gt; {
3106
- const { path, action, object, oldObject, parentKey, index } = <span class="cstat-no" title="statement not covered" >item?.originEvent || {};</span>
3107
- <span class="cstat-no" title="statement not covered" > return {</span>
3108
- path,
3109
- action,
3110
- parentKey,
3111
- index,
3112
- object: object?.toJSON?.() || object,
3113
- oldObject: oldObject?.toJSON?.() || oldObject,
3114
- }
3115
- }),
3116
- },
3117
- };
3118
- <span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList, operationList: [operation] });</span>
3119
- // 进行nasl操作后需要将Index重置
3120
- <span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', null);</span>
3121
- <span class="cstat-no" title="statement not covered" > if (!app._historying) {</span>
3122
- <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) {
3123
2230
  <span class="cstat-no" title="statement not covered" > app._historyList = app._historyList.splice(0, app._historyIndex);</span>
3124
2231
  }
3125
- <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>
3126
2233
  actionMsg,
3127
- 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),
3128
2235
  });
3129
- <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>
3130
2237
  } else {
3131
- const actionMap = <span class="cstat-no" title="statement not covered" >{</span>
2238
+ const actionMap = {
3132
2239
  undo: '已撤销操作:',
3133
- redo: '已重做操作:',
3134
- };
3135
- let msg = <span class="cstat-no" title="statement not covered" >actionMap[action as 'undo' | 'redo'];</span>
3136
- <span class="cstat-no" title="statement not covered" > msg += actionMsg;</span>
3137
- <span class="cstat-no" title="statement not covered" > if (process.env.BUILD_TARGET !== 'node') {</span>
3138
- <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);
3139
2246
  }
3140
2247
  <span class="cstat-no" title="statement not covered" > app._historying = false;</span>
3141
2248
  }
3142
- <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);
3143
2250
  }
3144
2251
  &nbsp;
3145
2252
  type Instruct = {
@@ -3151,7 +2258,6 @@ type TaskOption = {
3151
2258
  hasFrontEnd: boolean,
3152
2259
  hasBackEnd: boolean,
3153
2260
  instructList: Instruct[],
3154
- operationList: Operation[],
3155
2261
  };
3156
2262
  enum TaskQueueStatus {
3157
2263
  ExceedMaxTaskCount,
@@ -3169,162 +2275,141 @@ class TaskQueue {
3169
2275
  lastQueue: TaskOption[] = []
3170
2276
  running: Boolean = false
3171
2277
  maxTaskCount: number = 10
3172
- status?: TaskQueueStatus = undefined
3173
- &nbsp;
3174
- <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) {
3175
2281
  <span class="cstat-no" title="statement not covered" > this.queue.push(task);</span>
3176
- &nbsp;
3177
- <span class="cstat-no" title="statement not covered" > if (this.queue.length &gt;= this.maxTaskCount) {</span>
3178
- <span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.ExceedMaxTaskCount;</span>
3179
- <span class="cstat-no" title="statement not covered" > task.app.emit('ExceedMaxTaskCount');</span>
3180
- }
3181
- &nbsp;
3182
- <span class="cstat-no" title="statement not covered" > this.run();</span>
3183
- }
3184
- &nbsp;
3185
- <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>
3186
2292
  <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
3187
2293
  <span class="cstat-no" title="statement not covered" > this.lastQueue = [];</span>
3188
- <span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
3189
- <span class="cstat-no" title="statement not covered" > this.running = false;</span>
3190
- }
3191
- &nbsp;
3192
- <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) {
3193
2299
  <span class="cstat-no" title="statement not covered" > if (this.running)</span>
3194
2300
  <span class="cstat-no" title="statement not covered" > return;</span>
3195
- <span class="cstat-no" title="statement not covered" > if (queue.length === 0)</span>
3196
- <span class="cstat-no" title="statement not covered" > return;</span>
3197
- &nbsp;
3198
- const app = <span class="cstat-no" title="statement not covered" >queue[0].app;</span>
3199
- let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
3200
- let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
3201
- let instructList: Instruct[] = <span class="cstat-no" title="statement not covered" >[];</span>
3202
- let operationList: Operation[] = <span class="cstat-no" title="statement not covered" >[];</span>
3203
- &nbsp;
3204
- <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>) {
3205
2310
  <span class="cstat-no" title="statement not covered" > if (task.hasFrontEnd)</span>
3206
2311
  <span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
3207
2312
  <span class="cstat-no" title="statement not covered" > if (task.hasBackEnd)</span>
3208
- <span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
3209
- <span class="cstat-no" title="statement not covered" > instructList = instructList.concat(task.instructList);</span>
3210
- <span class="cstat-no" title="statement not covered" > operationList = operationList.concat(task.operationList);</span>
3211
- }
3212
- &nbsp;
3213
- <span class="cstat-no" title="statement not covered" > if (queue === this.queue) {</span>
3214
- <span class="cstat-no" title="statement not covered" > this.lastQueue = [...queue];</span>
3215
- <span class="cstat-no" title="statement not covered" > this.queue = [];</span>
3216
- }
3217
- &nbsp;
3218
- <span class="cstat-no" title="statement not covered" > this.running = true;</span>
3219
- const error = <span class="cstat-no" title="statement not covered" >await _saveNasl({</span>
3220
- 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,
3221
2325
  });
3222
2326
  &nbsp;
3223
- // code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新
3224
- // code: 500502 msg: '该应用已在新tab 页打开,请刷新!' 不重试或刷新
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].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-11-18T16:22:11.588Z
2749
+ at 2023-10-18T11:36:07.885Z
3683
2750
  </div>
3684
2751
  <script src="../../../prettify.js"></script>
3685
2752
  <script>