@lcap/nasl 3.7.4-beta.1 → 3.7.4-beta.3

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 (347) hide show
  1. package/.nyc_output/943352aa-23df-44e0-863b-3dcd3e8bf57a.json +1 -0
  2. package/.nyc_output/processinfo/943352aa-23df-44e0-863b-3dcd3e8bf57a.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -0
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/cobertura-coverage.xml +72356 -0
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +161 -0
  9. package/coverage/prettify.css +1 -0
  10. package/coverage/prettify.js +2 -0
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +196 -0
  13. package/coverage/src/automate/engine/index.html +116 -0
  14. package/coverage/src/automate/engine/utils.js.html +1414 -0
  15. package/coverage/src/bak/index.html +116 -0
  16. package/coverage/src/bak/translator.js.html +622 -0
  17. package/coverage/src/breakpoint/generator/AfterStartNode.ts.html +175 -0
  18. package/coverage/src/breakpoint/generator/BeforeEndNode.ts.html +169 -0
  19. package/coverage/src/breakpoint/generator/BreakpointNode.ts.html +1246 -0
  20. package/coverage/src/breakpoint/generator/CallbackNode.ts.html +145 -0
  21. package/coverage/src/breakpoint/generator/index.html +176 -0
  22. package/coverage/src/breakpoint/generator/index.ts.html +508 -0
  23. package/coverage/src/breakpoint/index.html +116 -0
  24. package/coverage/src/breakpoint/index.ts.html +94 -0
  25. package/coverage/src/breakpoint/shared/constants.ts.html +436 -0
  26. package/coverage/src/breakpoint/shared/index.html +176 -0
  27. package/coverage/src/breakpoint/shared/index.ts.html +94 -0
  28. package/coverage/src/breakpoint/shared/operations.ts.html +160 -0
  29. package/coverage/src/breakpoint/shared/socket.ts.html +1297 -0
  30. package/coverage/src/breakpoint/shared/utils.ts.html +1087 -0
  31. package/coverage/src/breakpoint/store/core.ts.html +1600 -0
  32. package/coverage/src/breakpoint/store/dock.ts.html +733 -0
  33. package/coverage/src/breakpoint/store/index.html +146 -0
  34. package/coverage/src/breakpoint/store/index.ts.html +91 -0
  35. package/coverage/src/common/BaseNode.ts.html +3874 -0
  36. package/coverage/src/common/Command.ts.html +310 -0
  37. package/coverage/src/common/EventEmitter.ts.html +370 -0
  38. package/coverage/src/common/Messager.ts.html +820 -0
  39. package/coverage/src/common/asyncFuncMap.ts.html +127 -0
  40. package/coverage/src/common/index.html +191 -0
  41. package/coverage/src/common/index.ts.html +94 -0
  42. package/coverage/src/concepts/Abort__.ts.html +328 -0
  43. package/coverage/src/concepts/Anchor__.ts.html +646 -0
  44. package/coverage/src/concepts/AnonymousFunction__.ts.html +2029 -0
  45. package/coverage/src/concepts/App__.ts.html +13252 -0
  46. package/coverage/src/concepts/Argument__.ts.html +964 -0
  47. package/coverage/src/concepts/Assignee__.ts.html +2236 -0
  48. package/coverage/src/concepts/AssignmentLine__.ts.html +409 -0
  49. package/coverage/src/concepts/Assignment__.ts.html +1123 -0
  50. package/coverage/src/concepts/Attribute__.ts.html +733 -0
  51. package/coverage/src/concepts/AuthInterface__.ts.html +367 -0
  52. package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +1984 -0
  53. package/coverage/src/concepts/AuthLogic__.ts.html +781 -0
  54. package/coverage/src/concepts/BackendVariable__.ts.html +1483 -0
  55. package/coverage/src/concepts/Backend__.ts.html +1165 -0
  56. package/coverage/src/concepts/BatchAssignment__.ts.html +3301 -0
  57. package/coverage/src/concepts/BinaryExpression__.ts.html +1441 -0
  58. package/coverage/src/concepts/BindAttribute__.ts.html +3835 -0
  59. package/coverage/src/concepts/BindDirective__.ts.html +1921 -0
  60. package/coverage/src/concepts/BindEvent__.ts.html +3406 -0
  61. package/coverage/src/concepts/BindStyle__.ts.html +1612 -0
  62. package/coverage/src/concepts/BooleanLiteral__.ts.html +418 -0
  63. package/coverage/src/concepts/CallAuthInterface__.ts.html +1615 -0
  64. package/coverage/src/concepts/CallConnector__.ts.html +922 -0
  65. package/coverage/src/concepts/CallFunction__.ts.html +2122 -0
  66. package/coverage/src/concepts/CallInterface__.ts.html +2719 -0
  67. package/coverage/src/concepts/CallLogic__.ts.html +4807 -0
  68. package/coverage/src/concepts/CallQueryComponent__.ts.html +5308 -0
  69. package/coverage/src/concepts/Comment__.ts.html +394 -0
  70. package/coverage/src/concepts/CompletionProperty__.ts.html +925 -0
  71. package/coverage/src/concepts/ConfigGroup__.ts.html +1105 -0
  72. package/coverage/src/concepts/ConfigPropertyValue__.ts.html +424 -0
  73. package/coverage/src/concepts/ConfigProperty__.ts.html +1348 -0
  74. package/coverage/src/concepts/Configuration__.ts.html +1027 -0
  75. package/coverage/src/concepts/Connection__.ts.html +1360 -0
  76. package/coverage/src/concepts/ConnectorTrigger__.ts.html +595 -0
  77. package/coverage/src/concepts/Connector__.ts.html +4255 -0
  78. package/coverage/src/concepts/Constant__.ts.html +913 -0
  79. package/coverage/src/concepts/DataSource__.ts.html +1771 -0
  80. package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +331 -0
  81. package/coverage/src/concepts/Destination__.ts.html +2731 -0
  82. package/coverage/src/concepts/End__.ts.html +433 -0
  83. package/coverage/src/concepts/EntityIndex__.ts.html +787 -0
  84. package/coverage/src/concepts/EntityProperty__.ts.html +2668 -0
  85. package/coverage/src/concepts/Entity__.ts.html +2950 -0
  86. package/coverage/src/concepts/EnumItem__.ts.html +550 -0
  87. package/coverage/src/concepts/Enum__.ts.html +1231 -0
  88. package/coverage/src/concepts/Event__.ts.html +1084 -0
  89. package/coverage/src/concepts/ExternalDestination__.ts.html +1033 -0
  90. package/coverage/src/concepts/ForEachStatement__.ts.html +1957 -0
  91. package/coverage/src/concepts/FrontendLibrary__.ts.html +1711 -0
  92. package/coverage/src/concepts/FrontendVariable__.ts.html +292 -0
  93. package/coverage/src/concepts/Frontend__.ts.html +3961 -0
  94. package/coverage/src/concepts/Function__.ts.html +3598 -0
  95. package/coverage/src/concepts/Identifier__.ts.html +1057 -0
  96. package/coverage/src/concepts/IfStatement__.ts.html +1594 -0
  97. package/coverage/src/concepts/Integration__.ts.html +1228 -0
  98. package/coverage/src/concepts/InterfaceParam__.ts.html +1087 -0
  99. package/coverage/src/concepts/Interface__.ts.html +3394 -0
  100. package/coverage/src/concepts/JSBlock__.ts.html +421 -0
  101. package/coverage/src/concepts/JavaLogic__.ts.html +460 -0
  102. package/coverage/src/concepts/LogicItem__.ts.html +1171 -0
  103. package/coverage/src/concepts/Logic__.ts.html +7408 -0
  104. package/coverage/src/concepts/MatchCase__.ts.html +2929 -0
  105. package/coverage/src/concepts/Match__.ts.html +2455 -0
  106. package/coverage/src/concepts/MemberExpression__.ts.html +1726 -0
  107. package/coverage/src/concepts/MicroApp__.ts.html +436 -0
  108. package/coverage/src/concepts/Module__.ts.html +9220 -0
  109. package/coverage/src/concepts/MsgTriggerEvent__.ts.html +1045 -0
  110. package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +1018 -0
  111. package/coverage/src/concepts/Namespace__.ts.html +7942 -0
  112. package/coverage/src/concepts/NewComposite__.ts.html +4729 -0
  113. package/coverage/src/concepts/NewList__.ts.html +1618 -0
  114. package/coverage/src/concepts/NewMap__.ts.html +2326 -0
  115. package/coverage/src/concepts/New__.ts.html +289 -0
  116. package/coverage/src/concepts/NullLiteral__.ts.html +349 -0
  117. package/coverage/src/concepts/NumericLiteral__.ts.html +676 -0
  118. package/coverage/src/concepts/OqlQueryComponent__.ts.html +1141 -0
  119. package/coverage/src/concepts/OverriddenLogic__.ts.html +6817 -0
  120. package/coverage/src/concepts/Param__.ts.html +1726 -0
  121. package/coverage/src/concepts/Point__.ts.html +331 -0
  122. package/coverage/src/concepts/ProcessComponent__.ts.html +1666 -0
  123. package/coverage/src/concepts/ProcessElement__.ts.html +5884 -0
  124. package/coverage/src/concepts/ProcessOutcome__.ts.html +352 -0
  125. package/coverage/src/concepts/ProcessOutcomes__.ts.html +343 -0
  126. package/coverage/src/concepts/Process__.ts.html +4768 -0
  127. package/coverage/src/concepts/QueryAggregateExpression__.ts.html +568 -0
  128. package/coverage/src/concepts/QueryFieldExpression__.ts.html +583 -0
  129. package/coverage/src/concepts/QueryFromExpression__.ts.html +910 -0
  130. package/coverage/src/concepts/QueryGroupByExpression__.ts.html +559 -0
  131. package/coverage/src/concepts/QueryJoinExpression__.ts.html +1567 -0
  132. package/coverage/src/concepts/QueryLimitExpression__.ts.html +637 -0
  133. package/coverage/src/concepts/QueryOrderByExpression__.ts.html +679 -0
  134. package/coverage/src/concepts/QuerySelectExpression__.ts.html +1714 -0
  135. package/coverage/src/concepts/Rect__.ts.html +373 -0
  136. package/coverage/src/concepts/Return__.ts.html +1312 -0
  137. package/coverage/src/concepts/Role__.ts.html +601 -0
  138. package/coverage/src/concepts/SelectMembers__.ts.html +1246 -0
  139. package/coverage/src/concepts/Slot__.ts.html +628 -0
  140. package/coverage/src/concepts/SqlQueryComponent__.ts.html +982 -0
  141. package/coverage/src/concepts/Start__.ts.html +304 -0
  142. package/coverage/src/concepts/StringInterpolation__.ts.html +1129 -0
  143. package/coverage/src/concepts/StringLiteral__.ts.html +505 -0
  144. package/coverage/src/concepts/StructureProperty__.ts.html +1132 -0
  145. package/coverage/src/concepts/Structure__.ts.html +2092 -0
  146. package/coverage/src/concepts/SwitchCase__.ts.html +1174 -0
  147. package/coverage/src/concepts/SwitchStatement__.ts.html +877 -0
  148. package/coverage/src/concepts/Theme__.ts.html +358 -0
  149. package/coverage/src/concepts/Transactional__.ts.html +628 -0
  150. package/coverage/src/concepts/TriggerEvent__.ts.html +1012 -0
  151. package/coverage/src/concepts/TriggerLauncher__.ts.html +775 -0
  152. package/coverage/src/concepts/TypeAnnotation__.ts.html +3718 -0
  153. package/coverage/src/concepts/TypeParam__.ts.html +319 -0
  154. package/coverage/src/concepts/UnaryExpression__.ts.html +697 -0
  155. package/coverage/src/concepts/Unparsed__.ts.html +394 -0
  156. package/coverage/src/concepts/UseComponent__.ts.html +331 -0
  157. package/coverage/src/concepts/ValidationRule__.ts.html +1840 -0
  158. package/coverage/src/concepts/Variable__.ts.html +1489 -0
  159. package/coverage/src/concepts/ViewBlock__.ts.html +352 -0
  160. package/coverage/src/concepts/ViewComponent__.ts.html +4180 -0
  161. package/coverage/src/concepts/ViewElement__.ts.html +8803 -0
  162. package/coverage/src/concepts/View__.ts.html +8620 -0
  163. package/coverage/src/concepts/WhileStatement__.ts.html +1063 -0
  164. package/coverage/src/concepts/basics/stdlib/index.html +356 -0
  165. package/coverage/src/concepts/basics/stdlib/index.ts.html +208 -0
  166. package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +565 -0
  167. package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +517 -0
  168. package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +226 -0
  169. package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +172 -0
  170. package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +214 -0
  171. package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +145 -0
  172. package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +589 -0
  173. package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +214 -0
  174. package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +229 -0
  175. package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +268 -0
  176. package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +1999 -0
  177. package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +3259 -0
  178. package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +6844 -0
  179. package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1768 -0
  180. package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +163 -0
  181. package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +664 -0
  182. package/coverage/src/concepts/basics/types/coreTypeList.ts.html +121 -0
  183. package/coverage/src/concepts/basics/types/index.html +131 -0
  184. package/coverage/src/concepts/basics/types/index.ts.html +160 -0
  185. package/coverage/src/concepts/index.html +1961 -0
  186. package/coverage/src/concepts/index.ts.html +103 -0
  187. package/coverage/src/concepts/index__.ts.html +451 -0
  188. package/coverage/src/config.ts.html +343 -0
  189. package/coverage/src/decorators/index.html +131 -0
  190. package/coverage/src/decorators/index.ts.html +739 -0
  191. package/coverage/src/decorators/promise.ts.html +169 -0
  192. package/coverage/src/eventBus.ts.html +100 -0
  193. package/coverage/src/generator/compileComponent.ts.html +142 -0
  194. package/coverage/src/generator/genBundleFiles.ts.html +1828 -0
  195. package/coverage/src/generator/genHash.ts.html +124 -0
  196. package/coverage/src/generator/genMetaData.ts.html +1042 -0
  197. package/coverage/src/generator/genReleaseBody.ts.html +1282 -0
  198. package/coverage/src/generator/icestark.ts.html +220 -0
  199. package/coverage/src/generator/index.html +266 -0
  200. package/coverage/src/generator/index.ts.html +106 -0
  201. package/coverage/src/generator/microApp.ts.html +172 -0
  202. package/coverage/src/generator/permission.ts.html +1036 -0
  203. package/coverage/src/generator/qiankun.ts.html +232 -0
  204. package/coverage/src/generator/styleReplacer.ts.html +199 -0
  205. package/coverage/src/index.html +116 -0
  206. package/coverage/src/index.ts.html +121 -0
  207. package/coverage/src/manager/diagnostic.ts.html +442 -0
  208. package/coverage/src/manager/index.html +131 -0
  209. package/coverage/src/manager/stepRecorder.ts.html +457 -0
  210. package/coverage/src/natural/genNaturalTS.ts.html +355 -0
  211. package/coverage/src/natural/index.html +161 -0
  212. package/coverage/src/natural/index.ts.html +91 -0
  213. package/coverage/src/natural/naslStdlibMap.ts.html +157 -0
  214. package/coverage/src/natural/transformTSCode.ts.html +2647 -0
  215. package/coverage/src/sentry/index.html +116 -0
  216. package/coverage/src/sentry/index.ts.html +676 -0
  217. package/coverage/src/server/createUiTs.ts.html +910 -0
  218. package/coverage/src/server/entity2LogicNamespace.ts.html +1294 -0
  219. package/coverage/src/server/event.js.html +526 -0
  220. package/coverage/src/server/extendBaseNode.ts.html +1762 -0
  221. package/coverage/src/server/formatTsUtils.ts.html +2689 -0
  222. package/coverage/src/server/getConnector.ts.html +316 -0
  223. package/coverage/src/server/getExtensionModules.ts.html +178 -0
  224. package/coverage/src/server/getFunctions.ts.html +133 -0
  225. package/coverage/src/server/getInterfaces.ts.html +229 -0
  226. package/coverage/src/server/getLogging.ts.html +100 -0
  227. package/coverage/src/server/getLogics.ts.html +1363 -0
  228. package/coverage/src/server/getMemberIdentifier.ts.html +1561 -0
  229. package/coverage/src/server/getProcessComponents.ts.html +112 -0
  230. package/coverage/src/server/getProcesses.ts.html +2023 -0
  231. package/coverage/src/server/getValidates.ts.html +115 -0
  232. package/coverage/src/server/index.html +401 -0
  233. package/coverage/src/server/index.ts.html +229 -0
  234. package/coverage/src/server/naslServer.ts.html +14401 -0
  235. package/coverage/src/server/naslStdlibMap.ts.html +241 -0
  236. package/coverage/src/server/process2LogicNamespace.ts.html +454 -0
  237. package/coverage/src/server/translator.ts.html +2566 -0
  238. package/coverage/src/service/creator/add.configs.js.html +379 -0
  239. package/coverage/src/service/creator/errHandles.js.html +322 -0
  240. package/coverage/src/service/creator/index.html +146 -0
  241. package/coverage/src/service/creator/index.js.html +352 -0
  242. package/coverage/src/service/datasource/api.js.html +118 -0
  243. package/coverage/src/service/datasource/index.html +131 -0
  244. package/coverage/src/service/datasource/index.js.html +103 -0
  245. package/coverage/src/service/logic/api.js.html +109 -0
  246. package/coverage/src/service/logic/index.html +131 -0
  247. package/coverage/src/service/logic/index.js.html +103 -0
  248. package/coverage/src/service/storage/api.js.html +202 -0
  249. package/coverage/src/service/storage/index.html +206 -0
  250. package/coverage/src/service/storage/index.ts.html +103 -0
  251. package/coverage/src/service/storage/init.ts.html +2761 -0
  252. package/coverage/src/service/storage/jsoner.ts.html +502 -0
  253. package/coverage/src/service/storage/map.ts.html +256 -0
  254. package/coverage/src/service/storage/service.ts.html +331 -0
  255. package/coverage/src/service/storage/storagePoint.ts.html +304 -0
  256. package/coverage/src/templator/genCallComponentLogic.ts.html +163 -0
  257. package/coverage/src/templator/genCreateBlock.ts.html +1093 -0
  258. package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +1609 -0
  259. package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +2254 -0
  260. package/coverage/src/templator/genEditTableBlock.ts.html +955 -0
  261. package/coverage/src/templator/genEnumSelectBlock.ts.html +178 -0
  262. package/coverage/src/templator/genGetBlock.ts.html +451 -0
  263. package/coverage/src/templator/genGridViewBlock.ts.html +1114 -0
  264. package/coverage/src/templator/genListViewBlock.ts.html +475 -0
  265. package/coverage/src/templator/genQueryComponent.ts.html +1207 -0
  266. package/coverage/src/templator/genSelectBlock.ts.html +1243 -0
  267. package/coverage/src/templator/genTableBlock.ts.html +910 -0
  268. package/coverage/src/templator/genUpdateBlock.ts.html +1192 -0
  269. package/coverage/src/templator/index.html +326 -0
  270. package/coverage/src/templator/index.ts.html +154 -0
  271. package/coverage/src/templator/utils.ts.html +1861 -0
  272. package/coverage/src/translator/constant.ts.html +106 -0
  273. package/coverage/src/translator/index.html +146 -0
  274. package/coverage/src/translator/index.ts.html +94 -0
  275. package/coverage/src/translator/utils.ts.html +436 -0
  276. package/coverage/src/utils/cookie.ts.html +265 -0
  277. package/coverage/src/utils/env.ts.html +91 -0
  278. package/coverage/src/utils/index.html +206 -0
  279. package/coverage/src/utils/index.ts.html +1429 -0
  280. package/coverage/src/utils/logger.ts.html +145 -0
  281. package/coverage/src/utils/sortTsString.ts.html +187 -0
  282. package/coverage/src/utils/string.ts.html +544 -0
  283. package/coverage/src/utils/time-slicing/controller.ts.html +1144 -0
  284. package/coverage/src/utils/time-slicing/index.html +221 -0
  285. package/coverage/src/utils/time-slicing/index.ts.html +103 -0
  286. package/coverage/src/utils/time-slicing/page-state.ts.html +121 -0
  287. package/coverage/src/utils/time-slicing/performance.ts.html +253 -0
  288. package/coverage/src/utils/time-slicing/runner.ts.html +241 -0
  289. package/coverage/src/utils/time-slicing/tool.ts.html +220 -0
  290. package/coverage/src/utils/time-slicing/utils.ts.html +355 -0
  291. package/coverage/src/utils/time-slicing/wrapper.ts.html +259 -0
  292. package/coverage/src/utils/time-slicing.ts.html +418 -0
  293. package/coverage/src/utils/traverse.ts.html +568 -0
  294. package/coverage/src/utils/types.ts.html +133 -0
  295. package/coverage/src/utils/window.ts.html +112 -0
  296. package/out/concepts/BindAttribute__.js +1 -3
  297. package/out/concepts/BindAttribute__.js.map +1 -1
  298. package/out/concepts/BindDirective__.js +0 -1
  299. package/out/concepts/BindDirective__.js.map +1 -1
  300. package/out/concepts/CallLogic__.d.ts +3 -0
  301. package/out/concepts/CallLogic__.js +6 -3
  302. package/out/concepts/CallLogic__.js.map +1 -1
  303. package/out/concepts/StringLiteral__.js +0 -1
  304. package/out/concepts/StringLiteral__.js.map +1 -1
  305. package/out/concepts/ViewElement__.js +2 -0
  306. package/out/concepts/ViewElement__.js.map +1 -1
  307. package/out/generator/genBundleFiles.js +10 -2
  308. package/out/generator/genBundleFiles.js.map +1 -1
  309. package/out/generator/release-body/body.js +1 -1
  310. package/out/generator/release-body/body.js.map +1 -1
  311. package/out/natural/transformTS2UI.js +31 -13
  312. package/out/natural/transformTS2UI.js.map +1 -1
  313. package/out/natural/transformTSCode.js +26 -10
  314. package/out/natural/transformTSCode.js.map +1 -1
  315. package/out/service/storage/init.d.ts +2 -0
  316. package/out/service/storage/init.js +18 -5
  317. package/out/service/storage/init.js.map +1 -1
  318. package/out/templator/genCreateBlock.js +2 -2
  319. package/out/templator/genCreateBlock.js.map +1 -1
  320. package/out/templator/genCurdEditMultipleKeyBlock.js +2 -2
  321. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  322. package/out/templator/genCurdMultipleKeyBlock.js +4 -4
  323. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  324. package/out/templator/genEditTableBlock.js +1 -1
  325. package/out/templator/genEditTableBlock.js.map +1 -1
  326. package/out/templator/genUpdateBlock.js +2 -2
  327. package/out/templator/genUpdateBlock.js.map +1 -1
  328. package/out/templator/utils.js +1 -1
  329. package/out/templator/utils.js.map +1 -1
  330. package/package.json +1 -1
  331. package/src/concepts/BindAttribute__.ts +1 -3
  332. package/src/concepts/BindDirective__.ts +0 -1
  333. package/src/concepts/CallLogic__.ts +8 -3
  334. package/src/concepts/StringLiteral__.ts +0 -1
  335. package/src/concepts/ViewElement__.ts +1 -0
  336. package/src/generator/genBundleFiles.ts +10 -2
  337. package/src/generator/release-body/body.ts +1 -1
  338. package/src/natural/transformTS2UI.ts +28 -13
  339. package/src/natural/transformTSCode.ts +25 -10
  340. package/src/service/storage/init.ts +22 -5
  341. package/src/templator/genCreateBlock.ts +2 -2
  342. package/src/templator/genCurdEditMultipleKeyBlock.ts +2 -2
  343. package/src/templator/genCurdMultipleKeyBlock.ts +4 -4
  344. package/src/templator/genEditTableBlock.ts +1 -1
  345. package/src/templator/genUpdateBlock.ts +2 -2
  346. package/src/templator/utils.ts +1 -1
  347. package/test/concepts/string-literal/__snapshots__/toVue.spec.ts.snap +1 -1
@@ -0,0 +1,1429 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/utils/index.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/utils</a> index.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">5.44% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>11/202</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">4.44% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>4/90</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">2% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/50</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">5.34% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>10/187</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">199x</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-yes">1x</span>
519
+ <span class="cline-any cline-yes">1x</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-yes">1x</span>
524
+ <span class="cline-any cline-yes">1x</span>
525
+ <span class="cline-any cline-yes">1x</span>
526
+ <span class="cline-any cline-yes">1x</span>
527
+ <span class="cline-any cline-yes">1x</span>
528
+ <span class="cline-any cline-yes">1x</span>
529
+ <span class="cline-any cline-yes">1x</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-no">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-no">&nbsp;</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-no">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-no">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-neutral">&nbsp;</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-neutral">&nbsp;</span>
643
+ <span class="cline-any cline-neutral">&nbsp;</span>
644
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-no">&nbsp;</span>
706
+ <span class="cline-any cline-no">&nbsp;</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-no">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-neutral">&nbsp;</span>
719
+ <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-neutral">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-no">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-no">&nbsp;</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-no">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-no">&nbsp;</span>
819
+ <span class="cline-any cline-no">&nbsp;</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-no">&nbsp;</span>
833
+ <span class="cline-any cline-no">&nbsp;</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-no">&nbsp;</span>
837
+ <span class="cline-any cline-no">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-no">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-no">&nbsp;</span>
845
+ <span class="cline-any cline-no">&nbsp;</span>
846
+ <span class="cline-any cline-no">&nbsp;</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-no">&nbsp;</span>
850
+ <span class="cline-any cline-neutral">&nbsp;</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-no">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-no">&nbsp;</span>
882
+ <span class="cline-any cline-no">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-no">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-no">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-no">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-neutral">&nbsp;</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
898
+ <span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-no">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</span>
905
+ <span class="cline-any cline-no">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-no">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-no">&nbsp;</span>
960
+ <span class="cline-any cline-no">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="branch-2 cbranch-no" title="branch not covered" >import { compare } from '</span>compare-versions';
963
+ import { BaseNode, LogicItem, AnonymousFunction, Param } from '..';
964
+ import type { ForEachStatement, Logic, View } from '..';
965
+ import * as types from '../concepts/utils/types';
966
+ import { getConceptPropertyMap } from '../decorators/index';
967
+ import { traverse } from './traverse';
968
+ // import TypeAnnotation from '../concepts/TypeAnnotation__';
969
+ // import App from '../concepts/App__';
970
+ &nbsp;
971
+ export * from './string';
972
+ export * from './traverse';
973
+ export * from './logger';
974
+ export * from './types';
975
+ export * from './window';
976
+ export * from './env';
977
+ export * from './time-slicing';
978
+ &nbsp;
979
+ // 查找最近的模块
980
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >findClosestModule(n</span></span>ode: BaseNode) {
981
+ let moduleNode = <span class="cstat-no" title="statement not covered" >node;</span>
982
+ <span class="cstat-no" title="statement not covered" > while (moduleNode &amp;&amp; !['App', 'Module'].includes(moduleNode.concept)) {</span>
983
+ <span class="cstat-no" title="statement not covered" > moduleNode = moduleNode.parentNode;</span>
984
+ }
985
+ <span class="cstat-no" title="statement not covered" > return moduleNode;</span>
986
+ }
987
+ &nbsp;
988
+ // 从namespace获取关键字
989
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >findConceptKeyWordByNamespace(n</span></span>amespace: string) {
990
+ const namespaceArr = <span class="cstat-no" title="statement not covered" >namespace?.split('.') || [];</span>
991
+ const start = <span class="cstat-no" title="statement not covered" >namespaceArr[0];</span>
992
+ const mod = <span class="cstat-no" title="statement not covered" >start === 'app' ? 1 : 0;</span>
993
+ const keywordViews = <span class="cstat-no" title="statement not covered" >namespaceArr.filter(<span class="fstat-no" title="function not covered" >(n</span>amespaceItem, index) =&gt; <span class="cstat-no" title="statement not covered" >index % 2 === mod)</span>;</span>
994
+ <span class="cstat-no" title="statement not covered" > return keywordViews.pop();</span>
995
+ }
996
+ &nbsp;
997
+ // 从namespace中查找concept关键字
998
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >findConceptKeyWordIndexFromNamespace(n</span></span>amespace: string, keyword: string) {
999
+ const namespaceArr = <span class="cstat-no" title="statement not covered" >namespace?.split('.') || [];</span>
1000
+ const start = <span class="cstat-no" title="statement not covered" >namespaceArr[0];</span>
1001
+ const mod = <span class="cstat-no" title="statement not covered" >start === 'app' ? 1 : 0;</span>
1002
+ <span class="cstat-no" title="statement not covered" > return namespaceArr.findIndex(<span class="fstat-no" title="function not covered" >(n</span>amespaceItem, index) =&gt; {</span>
1003
+ <span class="cstat-no" title="statement not covered" > if (index % 2 === mod) {</span>
1004
+ <span class="cstat-no" title="statement not covered" > return namespaceItem === keyword;</span>
1005
+ }
1006
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1007
+ });
1008
+ }
1009
+ &nbsp;
1010
+ // 从namespace中查找concept,返回找到类型对应的值
1011
+ // 如 namespace : app.datasource.defaultDS keyword: datasource
1012
+ // 返回 defaultDS
1013
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >findConceptValueFromNamespace(n</span></span>amespace: string, keyword: string) {
1014
+ const namespaceArr = <span class="cstat-no" title="statement not covered" >namespace?.split('.') || [];</span>
1015
+ const start = <span class="cstat-no" title="statement not covered" >namespaceArr[0];</span>
1016
+ const mod = <span class="cstat-no" title="statement not covered" >start === 'app' ? 1 : 0;</span>
1017
+ const findIndex = <span class="cstat-no" title="statement not covered" >namespaceArr.findIndex(<span class="fstat-no" title="function not covered" >(n</span>amespaceItem, index) =&gt; {</span>
1018
+ <span class="cstat-no" title="statement not covered" > if (index % 2 === mod) {</span>
1019
+ <span class="cstat-no" title="statement not covered" > return namespaceItem === keyword;</span>
1020
+ }
1021
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1022
+ });
1023
+ &nbsp;
1024
+ <span class="cstat-no" title="statement not covered" > if (findIndex) <span class="cstat-no" title="statement not covered" >return namespaceArr[findIndex + 1];</span></span>
1025
+ <span class="cstat-no" title="statement not covered" > return '';</span>
1026
+ }
1027
+ &nbsp;
1028
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >getGlobalEnv() {</span></span>
1029
+ <span class="cstat-no" title="statement not covered" > return typeof window !== 'undefined' ? (window as any).appInfo.env : (global as any).appInfoEnv;</span>
1030
+ }
1031
+ &nbsp;
1032
+ /**
1033
+ * 用 lodash 的 throttle 好像有点问题,先临时做个处理
1034
+ * @param func
1035
+ * @param wait
1036
+ * @param options
1037
+ */
1038
+ export const throttle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(f</span></span>unc: Function, wait: number, options: any) =&gt; <span class="cstat-no" title="statement not covered" >func;</span>
1039
+ &nbsp;
1040
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >clearObject(o</span></span>bj: any) {
1041
+ <span class="cstat-no" title="statement not covered" > Object.keys(obj).forEach((<span class="fstat-no" title="function not covered" >key) =&gt; {</span></span>
1042
+ <span class="cstat-no" title="statement not covered" > if (obj[key] === undefined || obj[key] === null) <span class="cstat-no" title="statement not covered" >delete obj[key];</span></span>
1043
+ });
1044
+ }
1045
+ &nbsp;
1046
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >clearObjectDeep(o</span></span>bj: any) <span class="cstat-no" title="statement not covered" >{</span>
1047
+ traverse(
1048
+ (<span class="fstat-no" title="function not covered" >current) =&gt; {</span>
1049
+ <span class="cstat-no" title="statement not covered" > Object.keys(current.node).forEach((<span class="fstat-no" title="function not covered" >key) =&gt; {</span></span>
1050
+ <span class="cstat-no" title="statement not covered" > if (current.node[key] === null) <span class="cstat-no" title="statement not covered" >delete current.node[key];</span></span>
1051
+ });
1052
+ },
1053
+ { node: obj },
1054
+ { mode: 'anyObject' }
1055
+ );
1056
+ }
1057
+ &nbsp;
1058
+ export const waitPromise = <span class="cstat-no" title="statement not covered" >(<span class="fstat-no" title="function not covered" >w</span>ait: number) =&gt; <span class="cstat-no" title="statement not covered" >n</span>ew Promise((<span class="fstat-no" title="function not covered" >res) =&gt; <span class="cstat-no" title="statement not covered" >s</span>etTimeout(<span class="fstat-no" title="function not covered" >() =&gt; <span class="cstat-no" title="statement not covered" >r</span>es(wait), w</span>ait))</span>;</span>
1059
+ &nbsp;
1060
+ // 官方扩展组件暂时不包含 css 文件
1061
+ export const officialCustoms = <span class="cstat-no" title="statement not covered" >[</span>
1062
+ 'u-sider-modal',
1063
+ 'timer-count-down',
1064
+ 'u-calendar-table',
1065
+ 'lcap-login',
1066
+ 'lcap-video',
1067
+ 'lcap-amap-nav',
1068
+ 'lcap-amap-poi',
1069
+ 'lcap-echarts-bar',
1070
+ 'lcap-echarts-line',
1071
+ 'lcap-echarts-pie',
1072
+ 'lcap-report',
1073
+ 'lcap-wang-editor',
1074
+ 'lcap-clock',
1075
+ ];
1076
+ // 特殊官方组件,部分低版本有 css,高版本没有 css
1077
+ export const specialOfficialCustoms = <span class="cstat-no" title="statement not covered" >[{ name: 'lcap-rich-text-editor', version: '1.3.10' }];</span>
1078
+ // lcap-h5 开头表示官方 H5 扩展组件
1079
+ export const shouldLoadCss = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(n</span></span>ame: string, version: string): boolean =&gt;
1080
+ <span class="cstat-no" title="statement not covered" > !officialCustoms.includes(name) &amp;&amp;</span>
1081
+ !/lcap-h5/.test(name) &amp;&amp;
1082
+ !specialOfficialCustoms.find((<span class="fstat-no" title="function not covered" >extra) =&gt; <span class="cstat-no" title="statement not covered" >e</span>xtra.name === name &amp;&amp; compare(version, extra.version, '&gt;='))</span>;
1083
+ &nbsp;
1084
+ // https://github.com/Microsoft/TypeScript/issues/27024#issuecomment-421529650
1085
+ export type IfEquals&lt;X, Y, A, B&gt; = (&lt;T&gt;() =&gt; T extends X ? 1 : 2) extends &lt;T&gt;() =&gt; T extends Y ? 1 : 2 ? A : B;
1086
+ &nbsp;
1087
+ // Alternatively:
1088
+ /*
1089
+ type IfEquals&lt;X, Y, A, B&gt; =
1090
+ [2] &amp; [0, 1, X] extends [2] &amp; [0, 1, Y] &amp; [0, infer W, unknown]
1091
+ ? W extends 1 ? B : A
1092
+ : B;
1093
+ */
1094
+ &nbsp;
1095
+ export type WritableKeysOf&lt;T&gt; = {
1096
+ [P in keyof T]: IfEquals&lt;{ [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, P, never&gt;;
1097
+ }[keyof T];
1098
+ export type WritablePart&lt;T&gt; = Pick&lt;T, WritableKeysOf&lt;T&gt;&gt;;
1099
+ export type NoReadonly&lt;T&gt; = { -readonly [P in keyof T]: T[P] };
1100
+ &nbsp;
1101
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >toBriefExpr(e</span></span>xpression: LogicItem): string {
1102
+ let expr = <span class="cstat-no" title="statement not covered" >'-';</span>
1103
+ <span class="cstat-no" title="statement not covered" > if (</span>
1104
+ [
1105
+ 'NumericLiteral',
1106
+ 'StringLiteral',
1107
+ 'Identifier',
1108
+ 'MemberExpression',
1109
+ 'QueryFieldExpression',
1110
+ 'BooleanLiteral',
1111
+ 'NullLiteral',
1112
+ 'Unparsed',
1113
+ 'BinaryExpression',
1114
+ 'UnaryExpression',
1115
+ ].includes(expression?.concept)
1116
+ ) {
1117
+ <span class="cstat-no" title="statement not covered" > expr = expression.toBrief();</span>
1118
+ <span class="cstat-no" title="statement not covered" > } else if (</span>
1119
+ ['CallFunction', 'CallLogic', 'CallInterface', 'CallQueryComponent', 'SqlQueryComponent', 'OqlQueryComponent', 'Paginate'].includes(expression?.concept)
1120
+ ) {
1121
+ <span class="cstat-no" title="statement not covered" > expr = expression.label;</span>
1122
+ }
1123
+ <span class="cstat-no" title="statement not covered" > return expr;</span>
1124
+ }
1125
+ &nbsp;
1126
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >replaceNode(o</span></span>ldNode: any, newNode: any) {
1127
+ const { parentNode, parentKey, offsetX, offsetY, app } = <span class="cstat-no" title="statement not covered" >oldNode;</span>
1128
+ const { logic } = <span class="cstat-no" title="statement not covered" >oldNode;</span>
1129
+ <span class="cstat-no" title="statement not covered" > if (!Array.isArray(parentNode[parentKey])) {</span>
1130
+ <span class="cstat-no" title="statement not covered" > parentNode.update({</span>
1131
+ [parentKey]: newNode,
1132
+ });
1133
+ } else {
1134
+ // 虽然如果不在参数里使用属性访问没有意义,但是得兼容
1135
+ <span class="cstat-no" title="statement not covered" > app.emit('collect:start', {</span>
1136
+ actionMsg: '删除属性变量',
1137
+ });
1138
+ <span class="cstat-no" title="statement not covered" > if (parentNode.concept === 'Logic') {</span>
1139
+ <span class="cstat-no" title="statement not covered" > if (parentKey === 'body') {</span>
1140
+ const expIndex = <span class="cstat-no" title="statement not covered" >logic.body.findIndex((<span class="fstat-no" title="function not covered" >item: any) =&gt; <span class="cstat-no" title="statement not covered" >i</span>tem === oldNode)</span>;</span>
1141
+ <span class="cstat-no" title="statement not covered" > logic.insertItemInBodyAt(newNode, expIndex);</span>
1142
+ } else {
1143
+ const expIndex = <span class="cstat-no" title="statement not covered" >logic.playground.findIndex((<span class="fstat-no" title="function not covered" >item: any) =&gt; <span class="cstat-no" title="statement not covered" >i</span>tem === oldNode)</span>;</span>
1144
+ <span class="cstat-no" title="statement not covered" > Object.assign(newNode, { offsetX, offsetY });</span>
1145
+ <span class="cstat-no" title="statement not covered" > logic.insertItemInPlaygroundAt(newNode, expIndex);</span>
1146
+ }
1147
+ } else {
1148
+ const expIndex = <span class="cstat-no" title="statement not covered" >parentNode[parentKey].findIndex((<span class="fstat-no" title="function not covered" >item: any) =&gt; <span class="cstat-no" title="statement not covered" >i</span>tem === oldNode)</span>;</span>
1149
+ const firstUpperText = <span class="cstat-no" title="statement not covered" >parentKey[0].toUpperCase() + parentKey.slice(1, parentKey.length);</span>
1150
+ <span class="cstat-no" title="statement not covered" > if (parentNode[`insertItemIn${firstUpperText}At`]) <span class="cstat-no" title="statement not covered" >parentNode[`insertItemIn${firstUpperText}At`](newNode, expIndex);</span></span>
1151
+ else <span class="cstat-no" title="statement not covered" >parentNode.insertItemAt(newNode, expIndex);</span>
1152
+ }
1153
+ <span class="cstat-no" title="statement not covered" > oldNode.delete();</span>
1154
+ <span class="cstat-no" title="statement not covered" > app.emit('collect:end');</span>
1155
+ }
1156
+ }
1157
+ &nbsp;
1158
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >attrConvertCamelCase(s</span></span>tr: string) {
1159
+ let strList: string[] = <span class="cstat-no" title="statement not covered" >str.split('-');</span>
1160
+ <span class="cstat-no" title="statement not covered" > strList = strList.map(<span class="fstat-no" title="function not covered" >(s</span>trItem, index) =&gt; {</span>
1161
+ <span class="cstat-no" title="statement not covered" > if (index === 0) {</span>
1162
+ <span class="cstat-no" title="statement not covered" > return strItem;</span>
1163
+ } else {
1164
+ <span class="cstat-no" title="statement not covered" > return `${strItem.slice(0, 1).toUpperCase()}${strItem.slice(1)}`;</span>
1165
+ }
1166
+ });
1167
+ <span class="cstat-no" title="statement not covered" > return strList.join('');</span>
1168
+ }
1169
+ &nbsp;
1170
+ export class AnonymousFnNode <span class="cstat-no" title="statement not covered" >{</span>
1171
+ node: types.SyntaxNode;
1172
+ descendants: AnonymousFnNode[];
1173
+ }
1174
+ &nbsp;
1175
+ /**
1176
+ * 收集匿名函数
1177
+ * @param param0
1178
+ * @returns
1179
+ */
1180
+ function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >collectAnonymousFn({</span></span>
1181
+ anonymousFnNode,
1182
+ cb
1183
+ }: {
1184
+ anonymousFnNode: AnonymousFnNode;
1185
+ cb: (anonymousFnNode: AnonymousFnNode) =&gt; void
1186
+ }) {
1187
+ const descendantsAnonyList: any = <span class="cstat-no" title="statement not covered" >cb(anonymousFnNode);</span>
1188
+ const { node } = <span class="cstat-no" title="statement not covered" >anonymousFnNode;</span>
1189
+ const <span class="cstat-no" title="statement not covered" >propertyMap = getConceptPropertyMap(node?.concept);</span>
1190
+ <span class="cstat-no" title="statement not covered" > if (!propertyMap) {</span>
1191
+ <span class="cstat-no" title="statement not covered" > return;</span>
1192
+ }
1193
+ <span class="cstat-no" title="statement not covered" > for (const property of propertyMap.keys()) {</span>
1194
+ const child = <span class="cstat-no" title="statement not covered" >node[property as keyof BaseNode];</span>
1195
+ <span class="cstat-no" title="statement not covered" > if (!child) {</span>
1196
+ <span class="cstat-no" title="statement not covered" > continue;</span>
1197
+ <span class="cstat-no" title="statement not covered" > } else if (Array.isArray(child)) {</span>
1198
+ <span class="cstat-no" title="statement not covered" > child.forEach((<span class="fstat-no" title="function not covered" >node: types.SyntaxNode) =&gt; <span class="cstat-no" title="statement not covered" >c</span>ollectAnonymousFn({</span></span>
1199
+ anonymousFnNode: {
1200
+ node,
1201
+ descendants: descendantsAnonyList
1202
+ },
1203
+ cb
1204
+ }));
1205
+ } else {
1206
+ <span class="cstat-no" title="statement not covered" > collectAnonymousFn({</span>
1207
+ anonymousFnNode: {
1208
+ node: child,
1209
+ descendants: descendantsAnonyList
1210
+ },
1211
+ cb
1212
+ });
1213
+ }
1214
+ }
1215
+ }
1216
+ &nbsp;
1217
+ function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >getAnonymousFnNodes(n</span></span>ode: types.SyntaxNode) {
1218
+ const anonymousFnNodes: AnonymousFnNode[] = <span class="cstat-no" title="statement not covered" >[];</span>
1219
+ // 1.匿名函数可能在里层,如:ListDistinctBy
1220
+ // 2.存在多级匿名数据结构
1221
+ <span class="cstat-no" title="statement not covered" > collectAnonymousFn({</span>
1222
+ anonymousFnNode: {
1223
+ node,
1224
+ descendants: anonymousFnNodes
1225
+ },
1226
+ cb: (<span class="fstat-no" title="function not covered" >anonymousFnNode) =&gt; {</span>
1227
+ const { node, descendants } = <span class="cstat-no" title="statement not covered" >anonymousFnNode;</span>
1228
+ <span class="cstat-no" title="statement not covered" > if (node?.concept === 'AnonymousFunction') {</span>
1229
+ const newAnonymousNode: any = <span class="cstat-no" title="statement not covered" >{</span>
1230
+ node,
1231
+ descendants: [],
1232
+ };
1233
+ <span class="cstat-no" title="statement not covered" > descendants?.push(newAnonymousNode);</span>
1234
+ <span class="cstat-no" title="statement not covered" > return newAnonymousNode.descendants;</span>
1235
+ }
1236
+ <span class="cstat-no" title="statement not covered" > return descendants;</span>
1237
+ }
1238
+ });
1239
+ <span class="cstat-no" title="statement not covered" > return anonymousFnNodes;</span>
1240
+ }
1241
+ &nbsp;
1242
+ /**
1243
+ * 父链上存在的参数名字
1244
+ * @returns
1245
+ */
1246
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >getAncestorExistingParamNames(b</span></span>aseNode: types.SyntaxNode) {
1247
+ let node: BaseNode = <span class="cstat-no" title="statement not covered" >baseNode;</span>
1248
+ const names: Set&lt;string&gt; = <span class="cstat-no" title="statement not covered" >new Set();</span>
1249
+ <span class="cstat-no" title="statement not covered" > while (node) {</span>
1250
+ <span class="cstat-no" title="statement not covered" > node = node.parentNode;</span>
1251
+ <span class="cstat-no" title="statement not covered" > switch (node?.concept) {</span>
1252
+ case 'AnonymousFunction':
1253
+ (<span class="cstat-no" title="statement not covered" >node as AnonymousFunction).params.forEach((<span class="fstat-no" title="function not covered" >param: Param) =&gt; {</span></span>
1254
+ <span class="cstat-no" title="statement not covered" > names.add(param.name);</span>
1255
+ });
1256
+ <span class="cstat-no" title="statement not covered" > break;</span>
1257
+ case 'ForEachStatement':
1258
+ <span class="cstat-no" title="statement not covered" > names.add((node as ForEachStatement).item?.name);</span>
1259
+ <span class="cstat-no" title="statement not covered" > names.add((node as ForEachStatement).index?.name);</span>
1260
+ <span class="cstat-no" title="statement not covered" > break;</span>
1261
+ case 'Logic':
1262
+ case 'View':
1263
+ const varList = <span class="cstat-no" title="statement not covered" >[</span>
1264
+ ...((node as Logic | View).params || []),
1265
+ ];
1266
+ <span class="cstat-no" title="statement not covered" > varList?.forEach((<span class="fstat-no" title="function not covered" >variable) =&gt; {</span></span>
1267
+ <span class="cstat-no" title="statement not covered" > names.add(variable?.name);</span>
1268
+ });
1269
+ <span class="cstat-no" title="statement not covered" > break;</span>
1270
+ }
1271
+ }
1272
+ <span class="cstat-no" title="statement not covered" > return names;</span>
1273
+ }
1274
+ &nbsp;
1275
+ &nbsp;
1276
+ /**
1277
+ * 父链上存在的变量名字
1278
+ * @returns
1279
+ */
1280
+ function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >getAncestorExistingVarNames(b</span></span>aseNode: types.SyntaxNode) {
1281
+ let node: BaseNode = <span class="cstat-no" title="statement not covered" >baseNode;</span>
1282
+ const names: Set&lt;string&gt; = <span class="cstat-no" title="statement not covered" >new Set();</span>
1283
+ <span class="cstat-no" title="statement not covered" > while (node) {</span>
1284
+ <span class="cstat-no" title="statement not covered" > node = node.parentNode;</span>
1285
+ <span class="cstat-no" title="statement not covered" > switch (node?.concept) {</span>
1286
+ case 'AnonymousFunction':
1287
+ (<span class="cstat-no" title="statement not covered" >node as AnonymousFunction).params.forEach((<span class="fstat-no" title="function not covered" >param: Param) =&gt; {</span></span>
1288
+ <span class="cstat-no" title="statement not covered" > names.add(param.name);</span>
1289
+ });
1290
+ <span class="cstat-no" title="statement not covered" > break;</span>
1291
+ case 'ForEachStatement':
1292
+ <span class="cstat-no" title="statement not covered" > names.add((node as ForEachStatement).item?.name);</span>
1293
+ <span class="cstat-no" title="statement not covered" > names.add((node as ForEachStatement).index?.name);</span>
1294
+ <span class="cstat-no" title="statement not covered" > break;</span>
1295
+ case 'Logic':
1296
+ case 'View':
1297
+ const varList = <span class="cstat-no" title="statement not covered" >[</span>
1298
+ ...((node as Logic | View).params || []),
1299
+ ...((node as Logic).returns || []),
1300
+ ...((node as Logic | View).variables || [])
1301
+ ];
1302
+ <span class="cstat-no" title="statement not covered" > varList?.forEach((<span class="fstat-no" title="function not covered" >variable) =&gt; {</span></span>
1303
+ <span class="cstat-no" title="statement not covered" > names.add(variable?.name);</span>
1304
+ });
1305
+ <span class="cstat-no" title="statement not covered" > break;</span>
1306
+ }
1307
+ }
1308
+ <span class="cstat-no" title="statement not covered" > return names;</span>
1309
+ }
1310
+ &nbsp;
1311
+ /**
1312
+ * 确保匿名函数的参数名称都是不重复的,且更新内部的引用关系
1313
+ * @param param0
1314
+ */
1315
+ function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >ensureAnonymousFnsParamName({</span></span>
1316
+ ancestorParamNames,
1317
+ anonymousFnNodes,
1318
+ }: {
1319
+ ancestorParamNames: Set&lt;string&gt;;
1320
+ anonymousFnNodes: AnonymousFnNode[];
1321
+ }) {
1322
+ const paramInfoMapList: Map&lt;string, any&gt;[] = <span class="cstat-no" title="statement not covered" >[];</span>
1323
+ <span class="cstat-no" title="statement not covered" > anonymousFnNodes.forEach((<span class="fstat-no" title="function not covered" >anonymousFnNode) =&gt; {</span></span>
1324
+ const { node: anonymousFn, descendants } = <span class="cstat-no" title="statement not covered" >anonymousFnNode || {};</span>
1325
+ const tempParamInfoMap = (<span class="cstat-no" title="statement not covered" >anonymousFn as AnonymousFunction)?.ensureParamName(ancestorParamNames);</span>
1326
+ <span class="cstat-no" title="statement not covered" > paramInfoMapList.push(tempParamInfoMap);</span>
1327
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(descendants)) {</span>
1328
+ const paramNames = <span class="cstat-no" title="statement not covered" >new Set([...ancestorParamNames]);</span>
1329
+ <span class="cstat-no" title="statement not covered" > tempParamInfoMap.forEach((<span class="fstat-no" title="function not covered" >value) =&gt; {</span></span>
1330
+ <span class="cstat-no" title="statement not covered" > paramNames.add(value.newName);</span>
1331
+ });
1332
+ const descendantTempParamInfoMap = <span class="cstat-no" title="statement not covered" >ensureAnonymousFnsParamName({</span>
1333
+ ancestorParamNames: paramNames,
1334
+ anonymousFnNodes: descendants,
1335
+ });
1336
+ <span class="cstat-no" title="statement not covered" > paramInfoMapList.push(...descendantTempParamInfoMap);</span>
1337
+ }
1338
+ });
1339
+ <span class="cstat-no" title="statement not covered" > return paramInfoMapList;</span>
1340
+ }
1341
+ &nbsp;
1342
+ /**
1343
+ * 校验匿名函数的局部变量是否重名
1344
+ */
1345
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >checkParamNameOfAnonymousFunction(n</span></span>ode: types.SyntaxNode) {
1346
+ const anonymousFnNodes: any = <span class="cstat-no" title="statement not covered" >getAnonymousFnNodes(node);</span>
1347
+ // 从外到里计算更改的name
1348
+ const paramInfoMapList = <span class="cstat-no" title="statement not covered" >ensureAnonymousFnsParamName({</span>
1349
+ ancestorParamNames: getAncestorExistingVarNames(node),
1350
+ anonymousFnNodes
1351
+ });
1352
+ <span class="cstat-no" title="statement not covered" > paramInfoMapList?.forEach((<span class="fstat-no" title="function not covered" >paramInfoMap: Map&lt;string, any&gt;) =&gt; {</span></span>
1353
+ <span class="cstat-no" title="statement not covered" > paramInfoMap.forEach((<span class="fstat-no" title="function not covered" >paramInfo) =&gt; {</span></span>
1354
+ const { newName, param, identifiers } = <span class="cstat-no" title="statement not covered" >paramInfo || {};</span>
1355
+ <span class="cstat-no" title="statement not covered" > param?.update({</span>
1356
+ name: newName,
1357
+ });
1358
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(identifiers)) {</span>
1359
+ <span class="cstat-no" title="statement not covered" > identifiers.forEach((<span class="fstat-no" title="function not covered" >identifier) =&gt; {</span></span>
1360
+ <span class="cstat-no" title="statement not covered" > identifier?.update({</span>
1361
+ name: newName,
1362
+ });
1363
+ });
1364
+ }
1365
+ });
1366
+ });
1367
+ }
1368
+ &nbsp;
1369
+ // 获取内部匿名函数的局部变量
1370
+ function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >collectAnonymousFnNodesParams(n</span></span>ode: types.SyntaxNode) {
1371
+ const paramNames: Set&lt;string&gt; = <span class="cstat-no" title="statement not covered" >new Set();</span>
1372
+ const anonymousFnNodes = <span class="cstat-no" title="statement not covered" >getAnonymousFnNodes(node);</span>
1373
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(anonymousFnNodes)) {</span>
1374
+ <span class="cstat-no" title="statement not covered" > anonymousFnNodes.forEach((<span class="fstat-no" title="function not covered" >anonymousFnNode) =&gt; {</span></span>
1375
+ const { node: anonymousFn, descendants } = <span class="cstat-no" title="statement not covered" >anonymousFnNode || {};</span>
1376
+ (<span class="cstat-no" title="statement not covered" >anonymousFn as AnonymousFunction).params.forEach((<span class="fstat-no" title="function not covered" >param: Param) =&gt; {</span></span>
1377
+ <span class="cstat-no" title="statement not covered" > paramNames.add(param.name);</span>
1378
+ });
1379
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(descendants)) {</span>
1380
+ <span class="cstat-no" title="statement not covered" > descendants.forEach(<span class="fstat-no" title="function not covered" >({</span></span>
1381
+ node: descendantNode
1382
+ }) =&gt; {
1383
+ const descendantParamNames = <span class="cstat-no" title="statement not covered" >collectAnonymousFnNodesParams(descendantNode);</span>
1384
+ <span class="cstat-no" title="statement not covered" > descendantParamNames.forEach((<span class="fstat-no" title="function not covered" >descendantParamName) =&gt; {</span></span>
1385
+ <span class="cstat-no" title="statement not covered" > paramNames.add(descendantParamName);</span>
1386
+ });
1387
+ });
1388
+ }
1389
+ });
1390
+ }
1391
+ <span class="cstat-no" title="statement not covered" > return paramNames;</span>
1392
+ }
1393
+ &nbsp;
1394
+ /**
1395
+ * 新的参数名是否存在同名
1396
+ * @param param0
1397
+ */
1398
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >hasParamNameOfAnonymousFunction({</span></span>
1399
+ node,
1400
+ newName,
1401
+ }: {
1402
+ node: types.SyntaxNode,
1403
+ newName: string
1404
+ }) {
1405
+ const ancestorParamNames = <span class="cstat-no" title="statement not covered" >getAncestorExistingVarNames(node);</span>
1406
+ const anonymousFnNodesParams = <span class="cstat-no" title="statement not covered" >collectAnonymousFnNodesParams(node);</span>
1407
+ const paramNames = <span class="cstat-no" title="statement not covered" >new Set([...ancestorParamNames.values(), ...anonymousFnNodesParams.values()]);</span>
1408
+ <span class="cstat-no" title="statement not covered" > return paramNames.has(newName);</span>
1409
+ }
1410
+ &nbsp;</pre></td></tr></table></pre>
1411
+
1412
+ <div class='push'></div><!-- for sticky footer -->
1413
+ </div><!-- /wrapper -->
1414
+ <div class='footer quiet pad2 space-top1 center small'>
1415
+ Code coverage generated by
1416
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1417
+ at 2024-01-11T05:46:51.196Z
1418
+ </div>
1419
+ <script src="../../prettify.js"></script>
1420
+ <script>
1421
+ window.onload = function () {
1422
+ prettyPrint();
1423
+ };
1424
+ </script>
1425
+ <script src="../../sorter.js"></script>
1426
+ <script src="../../block-navigation.js"></script>
1427
+ </body>
1428
+ </html>
1429
+