@lcap/nasl 3.2.0-beta.4 → 3.3.0-alpha

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 (774) hide show
  1. package/out/automate/upgrader/2.20.js +1 -1
  2. package/out/automate/upgrader/2.20.js.map +1 -1
  3. package/out/bak/translator.js +11 -15
  4. package/out/bak/translator.js.map +1 -1
  5. package/out/breakpoint/generator/AfterStartNode.js +3 -1
  6. package/out/breakpoint/generator/AfterStartNode.js.map +1 -1
  7. package/out/breakpoint/generator/BeforeEndNode.js.map +1 -1
  8. package/out/breakpoint/generator/BreakpointNode.d.ts +1 -0
  9. package/out/breakpoint/generator/BreakpointNode.js +48 -15
  10. package/out/breakpoint/generator/BreakpointNode.js.map +1 -1
  11. package/out/breakpoint/generator/CallbackNode.d.ts +4 -0
  12. package/out/breakpoint/generator/CallbackNode.js +22 -0
  13. package/out/breakpoint/generator/CallbackNode.js.map +1 -0
  14. package/out/breakpoint/generator/FragmentNode.d.ts +4 -0
  15. package/out/breakpoint/generator/FragmentNode.js +18 -0
  16. package/out/breakpoint/generator/FragmentNode.js.map +1 -0
  17. package/out/breakpoint/generator/index.js +25 -4
  18. package/out/breakpoint/generator/index.js.map +1 -1
  19. package/out/breakpoint/shared/constants.d.ts +3 -0
  20. package/out/breakpoint/shared/constants.js +6 -1
  21. package/out/breakpoint/shared/constants.js.map +1 -1
  22. package/out/breakpoint/shared/operations.js.map +1 -1
  23. package/out/breakpoint/shared/socket.d.ts +1 -1
  24. package/out/breakpoint/shared/socket.js +36 -7
  25. package/out/breakpoint/shared/socket.js.map +1 -1
  26. package/out/breakpoint/shared/utils.d.ts +2 -0
  27. package/out/breakpoint/shared/utils.js +15 -2
  28. package/out/breakpoint/shared/utils.js.map +1 -1
  29. package/out/breakpoint/store/core.d.ts +48 -2
  30. package/out/breakpoint/store/core.js +58 -32
  31. package/out/breakpoint/store/core.js.map +1 -1
  32. package/out/breakpoint/store/dock.js +1 -1
  33. package/out/breakpoint/store/dock.js.map +1 -1
  34. package/out/common/BaseNode.d.ts +1 -1
  35. package/out/common/BaseNode.js +105 -51
  36. package/out/common/BaseNode.js.map +1 -1
  37. package/out/common/Command.d.ts +13 -2
  38. package/out/common/Command.js +37 -9
  39. package/out/common/Command.js.map +1 -1
  40. package/out/common/EventEmitter.js.map +1 -1
  41. package/out/common/Messager.d.ts +3 -3
  42. package/out/common/Messager.js +6 -7
  43. package/out/common/Messager.js.map +1 -1
  44. package/out/common/asyncFuncMap.js.map +1 -1
  45. package/out/concepts/Abort__.js +6 -5
  46. package/out/concepts/Abort__.js.map +1 -1
  47. package/out/concepts/Anchor__.d.ts +4 -3
  48. package/out/concepts/Anchor__.js +24 -7
  49. package/out/concepts/Anchor__.js.map +1 -1
  50. package/out/concepts/AnonymousFunction__.d.ts +22 -21
  51. package/out/concepts/AnonymousFunction__.js +48 -22
  52. package/out/concepts/AnonymousFunction__.js.map +1 -1
  53. package/out/concepts/App__.d.ts +421 -247
  54. package/out/concepts/App__.js +286 -54
  55. package/out/concepts/App__.js.map +1 -1
  56. package/out/concepts/Argument__.d.ts +4 -3
  57. package/out/concepts/Argument__.js +42 -11
  58. package/out/concepts/Argument__.js.map +1 -1
  59. package/out/concepts/Assignee__.d.ts +45 -45
  60. package/out/concepts/Assignee__.js +15 -15
  61. package/out/concepts/Assignee__.js.map +1 -1
  62. package/out/concepts/AssignmentLine__.js +6 -5
  63. package/out/concepts/AssignmentLine__.js.map +1 -1
  64. package/out/concepts/Assignment__.d.ts +7 -6
  65. package/out/concepts/Assignment__.js +40 -22
  66. package/out/concepts/Assignment__.js.map +1 -1
  67. package/out/concepts/Attribute__.d.ts +3 -3
  68. package/out/concepts/Attribute__.js +8 -7
  69. package/out/concepts/Attribute__.js.map +1 -1
  70. package/out/concepts/AuthInterface__.js +4 -3
  71. package/out/concepts/AuthInterface__.js.map +1 -1
  72. package/out/concepts/AuthLogicForCallInterface__.d.ts +15 -15
  73. package/out/concepts/AuthLogicForCallInterface__.js +46 -27
  74. package/out/concepts/AuthLogicForCallInterface__.js.map +1 -1
  75. package/out/concepts/AuthLogic__.js +27 -13
  76. package/out/concepts/AuthLogic__.js.map +1 -1
  77. package/out/concepts/BackendVariable__.d.ts +5 -5
  78. package/out/concepts/BackendVariable__.js +23 -26
  79. package/out/concepts/BackendVariable__.js.map +1 -1
  80. package/out/concepts/Backend__.d.ts +18 -18
  81. package/out/concepts/Backend__.js +13 -13
  82. package/out/concepts/Backend__.js.map +1 -1
  83. package/out/concepts/BatchAssignment__.d.ts +34 -33
  84. package/out/concepts/BatchAssignment__.js +83 -43
  85. package/out/concepts/BatchAssignment__.js.map +1 -1
  86. package/out/concepts/BinaryExpression__.d.ts +7 -6
  87. package/out/concepts/BinaryExpression__.js +60 -24
  88. package/out/concepts/BinaryExpression__.js.map +1 -1
  89. package/out/concepts/BindAttribute__.d.ts +37 -37
  90. package/out/concepts/BindAttribute__.js +101 -48
  91. package/out/concepts/BindAttribute__.js.map +1 -1
  92. package/out/concepts/BindDirective__.d.ts +13 -13
  93. package/out/concepts/BindDirective__.js +23 -21
  94. package/out/concepts/BindDirective__.js.map +1 -1
  95. package/out/concepts/BindEvent__.d.ts +28 -28
  96. package/out/concepts/BindEvent__.js +99 -48
  97. package/out/concepts/BindEvent__.js.map +1 -1
  98. package/out/concepts/BindStyle__.d.ts +14 -15
  99. package/out/concepts/BindStyle__.js +16 -16
  100. package/out/concepts/BindStyle__.js.map +1 -1
  101. package/out/concepts/BooleanLiteral__.d.ts +1 -0
  102. package/out/concepts/BooleanLiteral__.js +12 -5
  103. package/out/concepts/BooleanLiteral__.js.map +1 -1
  104. package/out/concepts/CallAuthInterface__.d.ts +15 -15
  105. package/out/concepts/CallAuthInterface__.js +23 -22
  106. package/out/concepts/CallAuthInterface__.js.map +1 -1
  107. package/out/concepts/CallConnector__.d.ts +11 -9
  108. package/out/concepts/CallConnector__.js +79 -36
  109. package/out/concepts/CallConnector__.js.map +1 -1
  110. package/out/concepts/CallFunction__.d.ts +17 -16
  111. package/out/concepts/CallFunction__.js +95 -63
  112. package/out/concepts/CallFunction__.js.map +1 -1
  113. package/out/concepts/CallInterface__.d.ts +9 -8
  114. package/out/concepts/CallInterface__.js +71 -30
  115. package/out/concepts/CallInterface__.js.map +1 -1
  116. package/out/concepts/CallLogic__.d.ts +20 -19
  117. package/out/concepts/CallLogic__.js +155 -52
  118. package/out/concepts/CallLogic__.js.map +1 -1
  119. package/out/concepts/CallQueryComponent__.d.ts +51 -51
  120. package/out/concepts/CallQueryComponent__.js +66 -63
  121. package/out/concepts/CallQueryComponent__.js.map +1 -1
  122. package/out/concepts/Comment__.d.ts +1 -0
  123. package/out/concepts/Comment__.js +13 -6
  124. package/out/concepts/Comment__.js.map +1 -1
  125. package/out/concepts/CompletionProperty__.d.ts +3 -3
  126. package/out/concepts/CompletionProperty__.js +8 -7
  127. package/out/concepts/CompletionProperty__.js.map +1 -1
  128. package/out/concepts/ConfigGroup__.d.ts +15 -15
  129. package/out/concepts/ConfigGroup__.js +9 -9
  130. package/out/concepts/ConfigGroup__.js.map +1 -1
  131. package/out/concepts/ConfigPropertyValue__.js +4 -3
  132. package/out/concepts/ConfigPropertyValue__.js.map +1 -1
  133. package/out/concepts/ConfigProperty__.d.ts +15 -15
  134. package/out/concepts/ConfigProperty__.js +10 -10
  135. package/out/concepts/ConfigProperty__.js.map +1 -1
  136. package/out/concepts/Configuration__.d.ts +15 -15
  137. package/out/concepts/Configuration__.js +9 -9
  138. package/out/concepts/Configuration__.js.map +1 -1
  139. package/out/concepts/Connection__.d.ts +166 -0
  140. package/out/concepts/Connection__.js +332 -0
  141. package/out/concepts/Connection__.js.map +1 -0
  142. package/out/concepts/ConnectorTrigger__.js +4 -3
  143. package/out/concepts/ConnectorTrigger__.js.map +1 -1
  144. package/out/concepts/Connector__.d.ts +66 -66
  145. package/out/concepts/Connector__.js +16 -15
  146. package/out/concepts/Connector__.js.map +1 -1
  147. package/out/concepts/Constant__.d.ts +3 -3
  148. package/out/concepts/Constant__.js +8 -7
  149. package/out/concepts/Constant__.js.map +1 -1
  150. package/out/concepts/DataElement__.d.ts +3 -3
  151. package/out/concepts/DataElement__.js +6 -5
  152. package/out/concepts/DataElement__.js.map +1 -1
  153. package/out/concepts/DataSource__.d.ts +15 -15
  154. package/out/concepts/DataSource__.js +55 -39
  155. package/out/concepts/DataSource__.js.map +1 -1
  156. package/out/concepts/DatabaseTypeAnnotation__.js +4 -3
  157. package/out/concepts/DatabaseTypeAnnotation__.js.map +1 -1
  158. package/out/concepts/Destination__.d.ts +12 -11
  159. package/out/concepts/Destination__.js +93 -36
  160. package/out/concepts/Destination__.js.map +1 -1
  161. package/out/concepts/End__.js +15 -13
  162. package/out/concepts/End__.js.map +1 -1
  163. package/out/concepts/EntityIndex__.d.ts +1 -1
  164. package/out/concepts/EntityIndex__.js +6 -5
  165. package/out/concepts/EntityIndex__.js.map +1 -1
  166. package/out/concepts/EntityProperty__.d.ts +8 -7
  167. package/out/concepts/EntityProperty__.js +39 -24
  168. package/out/concepts/EntityProperty__.js.map +1 -1
  169. package/out/concepts/Entity__.d.ts +31 -30
  170. package/out/concepts/Entity__.js +40 -16
  171. package/out/concepts/Entity__.js.map +1 -1
  172. package/out/concepts/EnumItem__.d.ts +1 -0
  173. package/out/concepts/EnumItem__.js +12 -5
  174. package/out/concepts/EnumItem__.js.map +1 -1
  175. package/out/concepts/Enum__.d.ts +9 -8
  176. package/out/concepts/Enum__.js +24 -11
  177. package/out/concepts/Enum__.js.map +1 -1
  178. package/out/concepts/Event__.d.ts +15 -15
  179. package/out/concepts/Event__.js +6 -5
  180. package/out/concepts/Event__.js.map +1 -1
  181. package/out/concepts/ExternalDestination__.d.ts +6 -6
  182. package/out/concepts/ExternalDestination__.js +12 -11
  183. package/out/concepts/ExternalDestination__.js.map +1 -1
  184. package/out/concepts/ForEachStatement__.d.ts +25 -24
  185. package/out/concepts/ForEachStatement__.js +101 -36
  186. package/out/concepts/ForEachStatement__.js.map +1 -1
  187. package/out/concepts/FrontendLibrary__.d.ts +30 -30
  188. package/out/concepts/FrontendLibrary__.js +12 -13
  189. package/out/concepts/FrontendLibrary__.js.map +1 -1
  190. package/out/concepts/FrontendVariable__.js +4 -3
  191. package/out/concepts/FrontendVariable__.js.map +1 -1
  192. package/out/concepts/Frontend__.d.ts +64 -65
  193. package/out/concepts/Frontend__.js +23 -27
  194. package/out/concepts/Frontend__.js.map +1 -1
  195. package/out/concepts/Function__.d.ts +64 -63
  196. package/out/concepts/Function__.js +49 -21
  197. package/out/concepts/Function__.js.map +1 -1
  198. package/out/concepts/Identifier__.js +37 -31
  199. package/out/concepts/Identifier__.js.map +1 -1
  200. package/out/concepts/IfStatement__.d.ts +20 -19
  201. package/out/concepts/IfStatement__.js +64 -34
  202. package/out/concepts/IfStatement__.js.map +1 -1
  203. package/out/concepts/Integration__.d.ts +3 -3
  204. package/out/concepts/Integration__.js +8 -7
  205. package/out/concepts/Integration__.js.map +1 -1
  206. package/out/concepts/InterfaceParam__.d.ts +3 -3
  207. package/out/concepts/InterfaceParam__.js +7 -6
  208. package/out/concepts/InterfaceParam__.js.map +1 -1
  209. package/out/concepts/Interface__.d.ts +33 -33
  210. package/out/concepts/Interface__.js +19 -20
  211. package/out/concepts/Interface__.js.map +1 -1
  212. package/out/concepts/JSBlock__.d.ts +1 -0
  213. package/out/concepts/JSBlock__.js +12 -5
  214. package/out/concepts/JSBlock__.js.map +1 -1
  215. package/out/concepts/JavaLogic__.js +10 -9
  216. package/out/concepts/JavaLogic__.js.map +1 -1
  217. package/out/concepts/LogicItem__.d.ts +6 -0
  218. package/out/concepts/LogicItem__.js +14 -5
  219. package/out/concepts/LogicItem__.js.map +1 -1
  220. package/out/concepts/Logic__.d.ts +80 -79
  221. package/out/concepts/Logic__.js +204 -58
  222. package/out/concepts/Logic__.js.map +1 -1
  223. package/out/concepts/MatchCase__.d.ts +39 -38
  224. package/out/concepts/MatchCase__.js +122 -37
  225. package/out/concepts/MatchCase__.js.map +1 -1
  226. package/out/concepts/Match__.d.ts +13 -11
  227. package/out/concepts/Match__.js +128 -60
  228. package/out/concepts/Match__.js.map +1 -1
  229. package/out/concepts/MemberExpression__.d.ts +7 -6
  230. package/out/concepts/MemberExpression__.js +52 -22
  231. package/out/concepts/MemberExpression__.js.map +1 -1
  232. package/out/concepts/MicroApp__.js +4 -3
  233. package/out/concepts/MicroApp__.js.map +1 -1
  234. package/out/concepts/Module__.d.ts +239 -155
  235. package/out/concepts/Module__.js +139 -33
  236. package/out/concepts/Module__.js.map +1 -1
  237. package/out/concepts/MsgTriggerEvent__.d.ts +15 -15
  238. package/out/concepts/MsgTriggerEvent__.js +6 -5
  239. package/out/concepts/MsgTriggerEvent__.js.map +1 -1
  240. package/out/concepts/MsgTriggerLauncher__.d.ts +23 -15
  241. package/out/concepts/MsgTriggerLauncher__.js +24 -5
  242. package/out/concepts/MsgTriggerLauncher__.js.map +1 -1
  243. package/out/concepts/Namespace__.d.ts +180 -180
  244. package/out/concepts/Namespace__.js +33 -34
  245. package/out/concepts/Namespace__.js.map +1 -1
  246. package/out/concepts/NewComposite__.d.ts +49 -48
  247. package/out/concepts/NewComposite__.js +164 -49
  248. package/out/concepts/NewComposite__.js.map +1 -1
  249. package/out/concepts/NewList__.d.ts +19 -18
  250. package/out/concepts/NewList__.js +29 -12
  251. package/out/concepts/NewList__.js.map +1 -1
  252. package/out/concepts/NewMap__.d.ts +34 -33
  253. package/out/concepts/NewMap__.js +81 -72
  254. package/out/concepts/NewMap__.js.map +1 -1
  255. package/out/concepts/New__.js +6 -5
  256. package/out/concepts/New__.js.map +1 -1
  257. package/out/concepts/NullLiteral__.js +6 -5
  258. package/out/concepts/NullLiteral__.js.map +1 -1
  259. package/out/concepts/NumericLiteral__.d.ts +4 -3
  260. package/out/concepts/NumericLiteral__.js +15 -8
  261. package/out/concepts/NumericLiteral__.js.map +1 -1
  262. package/out/concepts/OqlQueryComponent__.d.ts +4 -3
  263. package/out/concepts/OqlQueryComponent__.js +25 -16
  264. package/out/concepts/OqlQueryComponent__.js.map +1 -1
  265. package/out/concepts/OverriddenLogic__.d.ts +79 -79
  266. package/out/concepts/OverriddenLogic__.js +79 -58
  267. package/out/concepts/OverriddenLogic__.js.map +1 -1
  268. package/out/concepts/Param__.d.ts +6 -5
  269. package/out/concepts/Param__.js +66 -29
  270. package/out/concepts/Param__.js.map +1 -1
  271. package/out/concepts/Point__.js +4 -3
  272. package/out/concepts/Point__.js.map +1 -1
  273. package/out/concepts/ProcessComponent__.d.ts +30 -30
  274. package/out/concepts/ProcessComponent__.js +8 -7
  275. package/out/concepts/ProcessComponent__.js.map +1 -1
  276. package/out/concepts/ProcessElement__.d.ts +96 -96
  277. package/out/concepts/ProcessElement__.js +34 -34
  278. package/out/concepts/ProcessElement__.js.map +1 -1
  279. package/out/concepts/ProcessOutcome__.js +6 -5
  280. package/out/concepts/ProcessOutcome__.js.map +1 -1
  281. package/out/concepts/ProcessOutcomes__.js +6 -5
  282. package/out/concepts/ProcessOutcomes__.js.map +1 -1
  283. package/out/concepts/Process__.d.ts +75 -75
  284. package/out/concepts/Process__.js +33 -30
  285. package/out/concepts/Process__.js.map +1 -1
  286. package/out/concepts/QueryAggregateExpression__.d.ts +3 -3
  287. package/out/concepts/QueryAggregateExpression__.js +8 -7
  288. package/out/concepts/QueryAggregateExpression__.js.map +1 -1
  289. package/out/concepts/QueryFieldExpression__.js +7 -6
  290. package/out/concepts/QueryFieldExpression__.js.map +1 -1
  291. package/out/concepts/QueryFromExpression__.d.ts +8 -8
  292. package/out/concepts/QueryFromExpression__.js +8 -7
  293. package/out/concepts/QueryFromExpression__.js.map +1 -1
  294. package/out/concepts/QueryGroupByExpression__.d.ts +3 -3
  295. package/out/concepts/QueryGroupByExpression__.js +9 -10
  296. package/out/concepts/QueryGroupByExpression__.js.map +1 -1
  297. package/out/concepts/QueryJoinExpression__.d.ts +23 -23
  298. package/out/concepts/QueryJoinExpression__.js +11 -10
  299. package/out/concepts/QueryJoinExpression__.js.map +1 -1
  300. package/out/concepts/QueryLimitExpression__.d.ts +6 -6
  301. package/out/concepts/QueryLimitExpression__.js +9 -8
  302. package/out/concepts/QueryLimitExpression__.js.map +1 -1
  303. package/out/concepts/QueryOrderByExpression__.d.ts +6 -6
  304. package/out/concepts/QueryOrderByExpression__.js +9 -8
  305. package/out/concepts/QueryOrderByExpression__.js.map +1 -1
  306. package/out/concepts/QuerySelectExpression__.d.ts +30 -30
  307. package/out/concepts/QuerySelectExpression__.js +9 -8
  308. package/out/concepts/QuerySelectExpression__.js.map +1 -1
  309. package/out/concepts/Rect__.js +4 -3
  310. package/out/concepts/Rect__.js.map +1 -1
  311. package/out/concepts/Return__.d.ts +4 -3
  312. package/out/concepts/Return__.js +37 -18
  313. package/out/concepts/Return__.js.map +1 -1
  314. package/out/concepts/Role__.js +9 -9
  315. package/out/concepts/Role__.js.map +1 -1
  316. package/out/concepts/SelectMembers__.d.ts +18 -18
  317. package/out/concepts/SelectMembers__.js +10 -9
  318. package/out/concepts/SelectMembers__.js.map +1 -1
  319. package/out/concepts/Slot__.d.ts +3 -3
  320. package/out/concepts/Slot__.js +6 -5
  321. package/out/concepts/Slot__.js.map +1 -1
  322. package/out/concepts/SqlQueryComponent__.d.ts +4 -3
  323. package/out/concepts/SqlQueryComponent__.js +21 -12
  324. package/out/concepts/SqlQueryComponent__.js.map +1 -1
  325. package/out/concepts/Start__.js +6 -5
  326. package/out/concepts/Start__.js.map +1 -1
  327. package/out/concepts/StringInterpolation__.d.ts +16 -15
  328. package/out/concepts/StringInterpolation__.js +37 -14
  329. package/out/concepts/StringInterpolation__.js.map +1 -1
  330. package/out/concepts/StringLiteral__.d.ts +1 -0
  331. package/out/concepts/StringLiteral__.js +13 -8
  332. package/out/concepts/StringLiteral__.js.map +1 -1
  333. package/out/concepts/StructureProperty__.d.ts +4 -3
  334. package/out/concepts/StructureProperty__.js +22 -9
  335. package/out/concepts/StructureProperty__.js.map +1 -1
  336. package/out/concepts/Structure__.d.ts +31 -30
  337. package/out/concepts/Structure__.js +27 -15
  338. package/out/concepts/Structure__.js.map +1 -1
  339. package/out/concepts/SwitchCase__.d.ts +12 -11
  340. package/out/concepts/SwitchCase__.js +69 -31
  341. package/out/concepts/SwitchCase__.js.map +1 -1
  342. package/out/concepts/SwitchStatement__.d.ts +9 -8
  343. package/out/concepts/SwitchStatement__.js +27 -7
  344. package/out/concepts/SwitchStatement__.js.map +1 -1
  345. package/out/concepts/Theme__.js +4 -3
  346. package/out/concepts/Theme__.js.map +1 -1
  347. package/out/concepts/Transactional__.js +4 -3
  348. package/out/concepts/Transactional__.js.map +1 -1
  349. package/out/concepts/TriggerEvent__.d.ts +15 -15
  350. package/out/concepts/TriggerEvent__.js +6 -5
  351. package/out/concepts/TriggerEvent__.js.map +1 -1
  352. package/out/concepts/TriggerLauncher__.d.ts +15 -10
  353. package/out/concepts/TriggerLauncher__.js +54 -32
  354. package/out/concepts/TriggerLauncher__.js.map +1 -1
  355. package/out/concepts/TypeAnnotation__.d.ts +28 -27
  356. package/out/concepts/TypeAnnotation__.js +144 -124
  357. package/out/concepts/TypeAnnotation__.js.map +1 -1
  358. package/out/concepts/TypeParam__.d.ts +1 -0
  359. package/out/concepts/TypeParam__.js +12 -5
  360. package/out/concepts/TypeParam__.js.map +1 -1
  361. package/out/concepts/UnaryExpression__.d.ts +4 -3
  362. package/out/concepts/UnaryExpression__.js +31 -20
  363. package/out/concepts/UnaryExpression__.js.map +1 -1
  364. package/out/concepts/Unparsed__.d.ts +1 -0
  365. package/out/concepts/Unparsed__.js +12 -5
  366. package/out/concepts/Unparsed__.js.map +1 -1
  367. package/out/concepts/UseComponent__.js +4 -3
  368. package/out/concepts/UseComponent__.js.map +1 -1
  369. package/out/concepts/ValidationRule__.d.ts +14 -14
  370. package/out/concepts/ValidationRule__.js +19 -17
  371. package/out/concepts/ValidationRule__.js.map +1 -1
  372. package/out/concepts/Variable__.d.ts +4 -3
  373. package/out/concepts/Variable__.js +39 -23
  374. package/out/concepts/Variable__.js.map +1 -1
  375. package/out/concepts/ViewBlock__.js +4 -3
  376. package/out/concepts/ViewBlock__.js.map +1 -1
  377. package/out/concepts/ViewComponent__.d.ts +90 -90
  378. package/out/concepts/ViewComponent__.js +16 -15
  379. package/out/concepts/ViewComponent__.js.map +1 -1
  380. package/out/concepts/ViewElement__.d.ts +91 -86
  381. package/out/concepts/ViewElement__.js +218 -146
  382. package/out/concepts/ViewElement__.js.map +1 -1
  383. package/out/concepts/View__.d.ts +92 -92
  384. package/out/concepts/View__.js +135 -60
  385. package/out/concepts/View__.js.map +1 -1
  386. package/out/concepts/WhileStatement__.d.ts +12 -11
  387. package/out/concepts/WhileStatement__.js +46 -23
  388. package/out/concepts/WhileStatement__.js.map +1 -1
  389. package/out/concepts/index__.d.ts +2 -1
  390. package/out/concepts/index__.js +2 -1
  391. package/out/concepts/index__.js.map +1 -1
  392. package/out/concepts/types__.d.ts +2 -1
  393. package/out/decorators/index.d.ts +1 -1
  394. package/out/decorators/index.js +20 -7
  395. package/out/decorators/index.js.map +1 -1
  396. package/out/decorators/promise.d.ts +7 -0
  397. package/out/decorators/promise.js +28 -0
  398. package/out/decorators/promise.js.map +1 -0
  399. package/out/enums/KEYWORDS.js.map +1 -1
  400. package/out/enums/LEVEL_NAME_MAP.js.map +1 -1
  401. package/out/generator/compileComponent.js.map +1 -1
  402. package/out/generator/genBundleFiles.d.ts +4 -1
  403. package/out/generator/genBundleFiles.js +15 -11
  404. package/out/generator/genBundleFiles.js.map +1 -1
  405. package/out/generator/genHash.js.map +1 -1
  406. package/out/generator/genMetaData.js +12 -8
  407. package/out/generator/genMetaData.js.map +1 -1
  408. package/out/generator/genReleaseBody.js +33 -35
  409. package/out/generator/genReleaseBody.js.map +1 -1
  410. package/out/generator/microApp.js +2 -1
  411. package/out/generator/microApp.js.map +1 -1
  412. package/out/generator/permission.js +16 -14
  413. package/out/generator/permission.js.map +1 -1
  414. package/out/generator/styleReplacer.js +4 -7
  415. package/out/generator/styleReplacer.js.map +1 -1
  416. package/out/index.d.ts +0 -2
  417. package/out/index.js +0 -3
  418. package/out/index.js.map +1 -1
  419. package/out/manager/diagnostic.d.ts +1 -1
  420. package/out/manager/diagnostic.js.map +1 -1
  421. package/out/manager/stepRecorder.js +13 -9
  422. package/out/manager/stepRecorder.js.map +1 -1
  423. package/out/natural/RequirementAnalyzer.d.ts +22 -0
  424. package/out/natural/RequirementAnalyzer.js +196 -0
  425. package/out/natural/RequirementAnalyzer.js.map +1 -0
  426. package/out/natural/RequirementExecutor.d.ts +51 -0
  427. package/out/natural/RequirementExecutor.js +692 -0
  428. package/out/natural/RequirementExecutor.js.map +1 -0
  429. package/out/natural/componentData.d.ts +31 -0
  430. package/out/natural/componentData.js +85 -0
  431. package/out/natural/componentData.js.map +1 -0
  432. package/out/natural/genNaturalTS.d.ts +3 -0
  433. package/out/natural/genNaturalTS.js +76 -0
  434. package/out/natural/genNaturalTS.js.map +1 -0
  435. package/out/natural/index.d.ts +4 -0
  436. package/out/natural/index.js +21 -0
  437. package/out/natural/index.js.map +1 -0
  438. package/out/natural/knowledgeMap.d.ts +4 -0
  439. package/out/natural/knowledgeMap.js +40 -0
  440. package/out/natural/knowledgeMap.js.map +1 -0
  441. package/out/natural/naslStdlibMap.d.ts +2 -0
  442. package/out/natural/naslStdlibMap.js +26 -0
  443. package/out/natural/naslStdlibMap.js.map +1 -0
  444. package/out/natural/transformTSCode.d.ts +7 -0
  445. package/out/natural/transformTSCode.js +760 -0
  446. package/out/natural/transformTSCode.js.map +1 -0
  447. package/out/sentry/index.d.ts +2 -1
  448. package/out/sentry/index.js.map +1 -1
  449. package/out/server/createUiTs.js +28 -16
  450. package/out/server/createUiTs.js.map +1 -1
  451. package/out/server/entity2LogicNamespace.js +24 -22
  452. package/out/server/entity2LogicNamespace.js.map +1 -1
  453. package/out/server/event.js.map +1 -1
  454. package/out/server/extendBaseNode.js +55 -70
  455. package/out/server/extendBaseNode.js.map +1 -1
  456. package/out/server/formatTsUtils.js +46 -50
  457. package/out/server/formatTsUtils.js.map +1 -1
  458. package/out/server/getConnector.d.ts +3 -3
  459. package/out/server/getConnector.js +7 -8
  460. package/out/server/getConnector.js.map +1 -1
  461. package/out/server/getExtensionModules.js +2 -2
  462. package/out/server/getExtensionModules.js.map +1 -1
  463. package/out/server/getFunctions.js.map +1 -1
  464. package/out/server/getInterfaces.js.map +1 -1
  465. package/out/server/getLogging.js.map +1 -1
  466. package/out/server/getLogics.d.ts +1 -1
  467. package/out/server/getLogics.js +34 -16
  468. package/out/server/getLogics.js.map +1 -1
  469. package/out/server/getMemberIdentifier.js +13 -10
  470. package/out/server/getMemberIdentifier.js.map +1 -1
  471. package/out/server/getProcessComponents.js.map +1 -1
  472. package/out/server/getProcesses.js +21 -29
  473. package/out/server/getProcesses.js.map +1 -1
  474. package/out/server/getScope.js.map +1 -1
  475. package/out/server/getValidates.js.map +1 -1
  476. package/out/server/index.js +0 -1
  477. package/out/server/index.js.map +1 -1
  478. package/out/server/naslServer.d.ts +99 -94
  479. package/out/server/naslServer.js +485 -465
  480. package/out/server/naslServer.js.map +1 -1
  481. package/out/server/naslStdlibMap.js +4 -2
  482. package/out/server/naslStdlibMap.js.map +1 -1
  483. package/out/server/process2LogicNamespace.js.map +1 -1
  484. package/out/server/translator.d.ts +1 -1
  485. package/out/server/translator.js +52 -47
  486. package/out/server/translator.js.map +1 -1
  487. package/out/service/storage/init.d.ts +15 -1
  488. package/out/service/storage/init.js +65 -56
  489. package/out/service/storage/init.js.map +1 -1
  490. package/out/templator/genCallComponentLogic.js +1 -2
  491. package/out/templator/genCallComponentLogic.js.map +1 -1
  492. package/out/templator/genCreateBlock.js +13 -8
  493. package/out/templator/genCreateBlock.js.map +1 -1
  494. package/out/templator/genCurdEditMultipleKeyBlock.js +19 -10
  495. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  496. package/out/templator/genCurdMultipleKeyBlock.js +22 -26
  497. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  498. package/out/templator/genEditTableBlock.js +11 -12
  499. package/out/templator/genEditTableBlock.js.map +1 -1
  500. package/out/templator/genEnumSelectBlock.js +1 -1
  501. package/out/templator/genEnumSelectBlock.js.map +1 -1
  502. package/out/templator/genGetBlock.js +2 -2
  503. package/out/templator/genGetBlock.js.map +1 -1
  504. package/out/templator/genGridViewBlock.js +10 -14
  505. package/out/templator/genGridViewBlock.js.map +1 -1
  506. package/out/templator/genListViewBlock.js +4 -7
  507. package/out/templator/genListViewBlock.js.map +1 -1
  508. package/out/templator/genQueryComponent.js +22 -15
  509. package/out/templator/genQueryComponent.js.map +1 -1
  510. package/out/templator/genSelectBlock.js +12 -33
  511. package/out/templator/genSelectBlock.js.map +1 -1
  512. package/out/templator/genTableBlock.js +8 -10
  513. package/out/templator/genTableBlock.js.map +1 -1
  514. package/out/templator/genUpdateBlock.js +12 -7
  515. package/out/templator/genUpdateBlock.js.map +1 -1
  516. package/out/templator/index.d.ts +4 -2
  517. package/out/templator/index.js +2 -2
  518. package/out/templator/index.js.map +1 -1
  519. package/out/templator/utils.d.ts +2 -2
  520. package/out/templator/utils.js +21 -22
  521. package/out/templator/utils.js.map +1 -1
  522. package/out/translator/index.js +27 -28
  523. package/out/translator/index.js.map +1 -1
  524. package/out/utils/index.d.ts +2 -1
  525. package/out/utils/index.js +8 -14
  526. package/out/utils/index.js.map +1 -1
  527. package/out/utils/logger.js.map +1 -1
  528. package/out/utils/sortTsString.js +3 -1
  529. package/out/utils/sortTsString.js.map +1 -1
  530. package/out/utils/string.js +8 -11
  531. package/out/utils/string.js.map +1 -1
  532. package/out/utils/time-slicing.d.ts +41 -0
  533. package/out/utils/time-slicing.js +81 -0
  534. package/out/utils/time-slicing.js.map +1 -0
  535. package/out/utils/traverse.js +4 -6
  536. package/out/utils/traverse.js.map +1 -1
  537. package/package.json +11 -7
  538. package/sandbox/stdlib/nasl.auth.ts +49 -46
  539. package/sandbox/stdlib/nasl.http.ts +29 -31
  540. package/sandbox/stdlib/nasl.ui.definition.ts +13 -1
  541. package/sandbox-natural/stdlib/nasl.core.ts +36 -0
  542. package/sandbox-natural/stdlib/nasl.oql.ts +8 -0
  543. package/sandbox-natural/stdlib/nasl.ui.ts +56 -0
  544. package/sandbox-natural/stdlib/nasl.util.ts +26 -0
  545. package/sandbox-natural/tsconfig.json +12 -0
  546. package/src/automate/upgrader/2.20.js +1 -1
  547. package/src/bak/translator.js +92 -99
  548. package/src/breakpoint/generator/AfterStartNode.ts +19 -17
  549. package/src/breakpoint/generator/BeforeEndNode.ts +17 -17
  550. package/src/breakpoint/generator/BreakpointNode.ts +243 -195
  551. package/src/breakpoint/generator/CallbackNode.ts +20 -0
  552. package/src/breakpoint/generator/FragmentNode.ts +14 -0
  553. package/src/breakpoint/generator/index.ts +107 -80
  554. package/src/breakpoint/shared/constants.ts +59 -53
  555. package/src/breakpoint/shared/operations.ts +6 -6
  556. package/src/breakpoint/shared/socket.ts +277 -223
  557. package/src/breakpoint/shared/utils.ts +166 -146
  558. package/src/breakpoint/store/core.ts +326 -297
  559. package/src/breakpoint/store/dock.ts +103 -103
  560. package/src/breakpoint/types/index.d.ts +11 -11
  561. package/src/common/BaseNode.ts +1102 -1024
  562. package/src/common/Command.ts +46 -16
  563. package/src/common/ComponentAPI.ts +72 -72
  564. package/src/common/EventEmitter.ts +80 -76
  565. package/src/common/Messager.ts +223 -224
  566. package/src/common/asyncFuncMap.ts +12 -12
  567. package/src/concepts/Abort__.ts +53 -60
  568. package/src/concepts/Anchor__.ts +158 -149
  569. package/src/concepts/AnonymousFunction__.ts +584 -551
  570. package/src/concepts/App__.ts +4278 -3671
  571. package/src/concepts/Argument__.ts +234 -210
  572. package/src/concepts/Assignee__.ts +680 -656
  573. package/src/concepts/AssignmentLine__.ts +80 -84
  574. package/src/concepts/Assignment__.ts +275 -264
  575. package/src/concepts/Attribute__.ts +183 -184
  576. package/src/concepts/AuthInterface__.ts +61 -63
  577. package/src/concepts/AuthLogicForCallInterface__.ts +540 -511
  578. package/src/concepts/AuthLogic__.ts +210 -194
  579. package/src/concepts/BackendVariable__.ts +414 -415
  580. package/src/concepts/Backend__.ts +317 -303
  581. package/src/concepts/BatchAssignment__.ts +987 -939
  582. package/src/concepts/BinaryExpression__.ts +370 -341
  583. package/src/concepts/BindAttribute__.ts +1057 -1007
  584. package/src/concepts/BindDirective__.ts +540 -542
  585. package/src/concepts/BindEvent__.ts +992 -911
  586. package/src/concepts/BindStyle__.ts +442 -451
  587. package/src/concepts/BooleanLiteral__.ts +89 -90
  588. package/src/concepts/CallAuthInterface__.ts +458 -433
  589. package/src/concepts/CallConnector__.ts +209 -164
  590. package/src/concepts/CallFunction__.ts +600 -600
  591. package/src/concepts/CallInterface__.ts +752 -721
  592. package/src/concepts/CallLogic__.ts +1324 -1200
  593. package/src/concepts/CallQueryComponent__.ts +1580 -1501
  594. package/src/concepts/Comment__.ts +69 -68
  595. package/src/concepts/CompletionProperty__.ts +250 -255
  596. package/src/concepts/ConfigGroup__.ts +312 -296
  597. package/src/concepts/ConfigPropertyValue__.ts +92 -93
  598. package/src/concepts/ConfigProperty__.ts +374 -357
  599. package/src/concepts/Configuration__.ts +288 -276
  600. package/src/concepts/Connection__.ts +426 -0
  601. package/src/concepts/ConnectorTrigger__.ts +146 -142
  602. package/src/concepts/Connector__.ts +1090 -1048
  603. package/src/concepts/Constant__.ts +226 -219
  604. package/src/concepts/DataElement__.ts +108 -115
  605. package/src/concepts/DataSource__.ts +508 -472
  606. package/src/concepts/DatabaseTypeAnnotation__.ts +53 -59
  607. package/src/concepts/Destination__.ts +808 -746
  608. package/src/concepts/End__.ts +85 -89
  609. package/src/concepts/EntityIndex__.ts +206 -202
  610. package/src/concepts/EntityProperty__.ts +825 -791
  611. package/src/concepts/Entity__.ts +921 -864
  612. package/src/concepts/EnumItem__.ts +133 -125
  613. package/src/concepts/Enum__.ts +347 -337
  614. package/src/concepts/Event__.ts +305 -292
  615. package/src/concepts/ExternalDestination__.ts +269 -280
  616. package/src/concepts/ForEachStatement__.ts +583 -531
  617. package/src/concepts/FrontendLibrary__.ts +507 -485
  618. package/src/concepts/FrontendVariable__.ts +44 -49
  619. package/src/concepts/Frontend__.ts +1239 -1187
  620. package/src/concepts/Function__.ts +1110 -1045
  621. package/src/concepts/Identifier__.ts +276 -272
  622. package/src/concepts/IfStatement__.ts +467 -436
  623. package/src/concepts/Integration__.ts +136 -137
  624. package/src/concepts/InterfaceParam__.ts +239 -238
  625. package/src/concepts/Interface__.ts +969 -948
  626. package/src/concepts/JSBlock__.ts +83 -83
  627. package/src/concepts/JavaLogic__.ts +101 -106
  628. package/src/concepts/LogicItem__.ts +307 -237
  629. package/src/concepts/Logic__.ts +2301 -2088
  630. package/src/concepts/MatchCase__.ts +886 -779
  631. package/src/concepts/Match__.ts +728 -659
  632. package/src/concepts/MemberExpression__.ts +330 -311
  633. package/src/concepts/MicroApp__.ts +91 -97
  634. package/src/concepts/Module__.ts +2590 -2278
  635. package/src/concepts/MsgTriggerEvent__.ts +297 -281
  636. package/src/concepts/MsgTriggerLauncher__.ts +286 -256
  637. package/src/concepts/Namespace__.ts +2579 -2466
  638. package/src/concepts/NewComposite__.ts +1487 -1350
  639. package/src/concepts/NewList__.ts +464 -450
  640. package/src/concepts/NewMap__.ts +691 -674
  641. package/src/concepts/New__.ts +42 -49
  642. package/src/concepts/NullLiteral__.ts +66 -72
  643. package/src/concepts/NumericLiteral__.ts +169 -169
  644. package/src/concepts/OqlQueryComponent__.ts +282 -279
  645. package/src/concepts/OverriddenLogic__.ts +2142 -2097
  646. package/src/concepts/Param__.ts +500 -442
  647. package/src/concepts/Point__.ts +53 -59
  648. package/src/concepts/ProcessComponent__.ts +497 -475
  649. package/src/concepts/ProcessElement__.ts +1852 -1780
  650. package/src/concepts/ProcessOutcome__.ts +59 -64
  651. package/src/concepts/ProcessOutcomes__.ts +59 -64
  652. package/src/concepts/Process__.ts +1491 -1428
  653. package/src/concepts/QueryAggregateExpression__.ts +135 -142
  654. package/src/concepts/QueryFieldExpression__.ts +138 -142
  655. package/src/concepts/QueryFromExpression__.ts +246 -254
  656. package/src/concepts/QueryGroupByExpression__.ts +130 -136
  657. package/src/concepts/QueryJoinExpression__.ts +441 -438
  658. package/src/concepts/QueryLimitExpression__.ts +159 -166
  659. package/src/concepts/QueryOrderByExpression__.ts +173 -180
  660. package/src/concepts/QuerySelectExpression__.ts +464 -439
  661. package/src/concepts/Rect__.ts +73 -79
  662. package/src/concepts/Return__.ts +366 -345
  663. package/src/concepts/Role__.ts +146 -147
  664. package/src/concepts/SelectMembers__.ts +358 -350
  665. package/src/concepts/Slot__.ts +152 -153
  666. package/src/concepts/SqlQueryComponent__.ts +230 -228
  667. package/src/concepts/Start__.ts +45 -52
  668. package/src/concepts/StringInterpolation__.ts +323 -296
  669. package/src/concepts/StringLiteral__.ts +113 -115
  670. package/src/concepts/StructureProperty__.ts +306 -295
  671. package/src/concepts/Structure__.ts +615 -578
  672. package/src/concepts/SwitchCase__.ts +326 -290
  673. package/src/concepts/SwitchStatement__.ts +236 -229
  674. package/src/concepts/Theme__.ts +64 -68
  675. package/src/concepts/Transactional__.ts +159 -153
  676. package/src/concepts/TriggerEvent__.ts +285 -274
  677. package/src/concepts/TriggerLauncher__.ts +232 -196
  678. package/src/concepts/TypeAnnotation__.ts +1049 -1011
  679. package/src/concepts/TypeParam__.ts +48 -50
  680. package/src/concepts/UnaryExpression__.ts +163 -153
  681. package/src/concepts/Unparsed__.ts +81 -82
  682. package/src/concepts/UseComponent__.ts +53 -59
  683. package/src/concepts/ValidationRule__.ts +524 -544
  684. package/src/concepts/Variable__.ts +419 -397
  685. package/src/concepts/ViewBlock__.ts +58 -64
  686. package/src/concepts/ViewComponent__.ts +1323 -1261
  687. package/src/concepts/ViewElement__.ts +2538 -2350
  688. package/src/concepts/View__.ts +2447 -2268
  689. package/src/concepts/WhileStatement__.ts +293 -272
  690. package/src/concepts/index__.ts +2 -1
  691. package/src/concepts/types__.ts +123 -121
  692. package/src/decorators/index.ts +75 -77
  693. package/src/decorators/promise.ts +28 -0
  694. package/src/enums/KEYWORDS.ts +1228 -1228
  695. package/src/enums/LEVEL_NAME_MAP.ts +24 -24
  696. package/src/generator/compileComponent.ts +10 -10
  697. package/src/generator/genBundleFiles.ts +300 -291
  698. package/src/generator/genHash.ts +2 -2
  699. package/src/generator/genMetaData.ts +280 -261
  700. package/src/generator/genReleaseBody.ts +312 -291
  701. package/src/generator/icestark.ts +1 -1
  702. package/src/generator/microApp.ts +17 -20
  703. package/src/generator/permission.ts +227 -218
  704. package/src/generator/qiankun.ts +1 -1
  705. package/src/generator/styleReplacer.ts +28 -31
  706. package/src/index.ts +0 -3
  707. package/src/manager/diagnostic.ts +84 -82
  708. package/src/manager/stepRecorder.ts +106 -94
  709. package/src/natural/RequirementAnalyzer.ts +208 -0
  710. package/src/natural/RequirementExecutor.ts +685 -0
  711. package/src/natural/componentData.ts +81 -0
  712. package/src/natural/genNaturalTS.ts +77 -0
  713. package/src/natural/index.ts +4 -0
  714. package/src/natural/knowledgeMap.ts +39 -0
  715. package/src/natural/naslStdlibMap.ts +24 -0
  716. package/src/natural/transformTSCode.ts +692 -0
  717. package/src/sentry/index.ts +109 -104
  718. package/src/server/createUiTs.ts +190 -184
  719. package/src/server/entity2LogicNamespace.ts +379 -359
  720. package/src/server/event.js +145 -145
  721. package/src/server/extendBaseNode.ts +461 -456
  722. package/src/server/formatTsUtils.ts +712 -713
  723. package/src/server/getConnector.ts +33 -33
  724. package/src/server/getExtensionModules.ts +23 -22
  725. package/src/server/getFunctions.ts +6 -6
  726. package/src/server/getInterfaces.ts +38 -37
  727. package/src/server/getLogging.ts +1 -1
  728. package/src/server/getLogics.ts +390 -344
  729. package/src/server/getMemberIdentifier.ts +286 -281
  730. package/src/server/getProcessComponents.ts +2 -2
  731. package/src/server/getProcesses.ts +548 -534
  732. package/src/server/getScope.ts +51 -51
  733. package/src/server/getValidates.ts +3 -3
  734. package/src/server/index.ts +29 -30
  735. package/src/server/naslServer.ts +4302 -4225
  736. package/src/server/naslStdlibMap.ts +43 -41
  737. package/src/server/process2LogicNamespace.ts +97 -97
  738. package/src/server/translator.ts +740 -746
  739. package/src/service/storage/init.ts +761 -728
  740. package/src/templator/genCallComponentLogic.ts +14 -15
  741. package/src/templator/genCreateBlock.ts +257 -229
  742. package/src/templator/genCurdEditMultipleKeyBlock.ts +332 -316
  743. package/src/templator/genCurdMultipleKeyBlock.ts +501 -473
  744. package/src/templator/genEditTableBlock.ts +192 -182
  745. package/src/templator/genEnumSelectBlock.ts +13 -7
  746. package/src/templator/genGetBlock.ts +57 -55
  747. package/src/templator/genGridViewBlock.ts +191 -201
  748. package/src/templator/genListViewBlock.ts +59 -64
  749. package/src/templator/genQueryComponent.ts +337 -287
  750. package/src/templator/genSelectBlock.ts +276 -285
  751. package/src/templator/genTableBlock.ts +157 -160
  752. package/src/templator/genUpdateBlock.ts +269 -255
  753. package/src/templator/index.ts +4 -4
  754. package/src/templator/utils.ts +490 -464
  755. package/src/translator/index.ts +84 -84
  756. package/src/translator/lsp.ts +22 -22
  757. package/src/translator/tsp.ts +6 -6
  758. package/src/utils/index.ts +115 -117
  759. package/src/utils/logger.ts +3 -4
  760. package/src/utils/sortTsString.ts +34 -32
  761. package/src/utils/string.ts +47 -48
  762. package/src/utils/time-slicing.ts +109 -0
  763. package/src/utils/traverse.ts +114 -126
  764. package/test/concepts/match/__snapshots__/toEmbeddedTS.spec.ts.snap +66 -0
  765. package/test/concepts/match/__snapshots__/toJS.spec.ts.snap +40 -0
  766. package/test/concepts/match/constant.ts +5 -0
  767. package/test/concepts/match/fixtures/isExpression.json +259 -0
  768. package/test/concepts/match/fixtures/lastBodyIf.json +268 -0
  769. package/test/concepts/match/fixtures/noExpression.json +176 -0
  770. package/test/concepts/match/toEmbeddedTS.spec.ts +14 -0
  771. package/test/concepts/match/toJS.spec.ts +14 -0
  772. package/test/setup.ts +2 -1
  773. package/ts-worker/src/index.js +0 -2
  774. package/tsconfig.json +21 -21
@@ -1,3 +1,5 @@
1
+ import * as JSON5 from 'json5';
2
+ import { v4 as uuidv4 } from 'uuid';
1
3
  import { TranslatorState, shiftState, withSourceMap } from '../translator';
2
4
  import Logic from './Logic__';
3
5
  import Param from './Param__';
@@ -5,20 +7,18 @@ import View from './View__';
5
7
  import { ElementToVueOptions } from './ViewElement__';
6
8
  import { getNodeByNodeCallee, getNaslNodeByNodeCallee } from '../automate/engine/utils';
7
9
  import { findConceptKeyWordIndexFromNamespace } from '../utils';
8
- import * as JSON5 from 'json5';
9
10
  import { config } from '../config';
10
11
  import Identifier from './Identifier__';
11
12
  import type { TSPPosition } from '../translator/tsp';
12
13
 
13
- //================================================================================
14
+ //= ===============================================================================
14
15
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
15
16
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
16
- //================================================================================
17
+ //= ===============================================================================
17
18
  import { EventPayload, Params } from '../common/EventEmitter';
18
19
  import { concept, excludedInJSON, property } from '../decorators';
19
20
 
20
21
  import * as utils from '../utils';
21
- import { v4 as uuidv4 } from 'uuid';
22
22
  import BaseNode from '../common/BaseNode';
23
23
  import classMap from '../common/classMap';
24
24
  import TypeAnnotation from './TypeAnnotation__';
@@ -31,1283 +31,1407 @@ import LogicItem from './LogicItem__';
31
31
  */
32
32
  @concept('调用逻辑')
33
33
  export class CallLogic extends LogicItem {
34
- /**
35
- * uuid
36
- */
37
- @property()
38
- uuid: string = uuidv4().replace(/-/g, '');
39
-
40
- /**
41
- * 产品概念
42
- */
43
- @property()
44
- concept: 'CallLogic' | 'CallConnector' = 'CallLogic';
45
-
46
- /**
47
- * 调用逻辑标题
48
- */
49
- @property()
50
- label: string = '调用逻辑';
51
-
52
- /**
53
- * calleeNamespace
54
- */
55
- @property()
56
- calleeNamespace: string = undefined;
57
-
58
- /**
59
- * calleeName
60
- */
61
- @property()
62
- calleeName: string = undefined;
63
-
64
- /**
65
- * shortcut
66
- */
67
- @property()
68
- shortcut: boolean = undefined;
69
-
70
- /**
71
- * handleError
72
- */
73
- @property()
74
- handleError: boolean = undefined;
75
-
76
- /**
77
- * 类型参数
78
- */
79
- @property('TypeAnnotation')
80
- typeArguments?: Array<TypeAnnotation> = null;
81
-
82
- /**
83
- * 实际参数
84
- */
85
- @property('Argument')
86
- arguments: Array<Argument> = [];
87
-
88
- /**
89
- * 验证规则
90
- */
91
- @property('BindAttribute')
92
- validation: BindAttribute = undefined;
93
-
94
- /**
95
- * 是否被折叠
96
- */
97
- @property()
98
- isAdvancedSettingFolded: boolean = undefined;
99
-
100
-
101
- /**
102
- * @param source 需要合并的部分参数
103
- */
104
- constructor(source?: Partial<CallLogic>) {
105
- source = Object.assign({}, CallLogic.getDefaultOptions(), source);
106
- super(source);
107
- super.subConstructor(source);
34
+ /**
35
+ * uuid
36
+ */
37
+ @property()
38
+ uuid: string = uuidv4().replace(/-/g, '');
39
+
40
+ /**
41
+ * 产品概念
42
+ */
43
+ @property()
44
+ concept: 'CallLogic' | 'CallConnector' = 'CallLogic';
45
+
46
+ /**
47
+ * 调用逻辑标题
48
+ */
49
+ @property()
50
+ label: string = '调用逻辑';
51
+
52
+ /**
53
+ * calleeNamespace
54
+ */
55
+ @property()
56
+ calleeNamespace: string = undefined;
57
+
58
+ /**
59
+ * calleeName
60
+ */
61
+ @property()
62
+ calleeName: string = undefined;
63
+
64
+ /**
65
+ * shortcut
66
+ */
67
+ @property()
68
+ shortcut: boolean = undefined;
69
+
70
+ /**
71
+ * handleError
72
+ */
73
+ @property()
74
+ handleError: boolean = undefined;
75
+
76
+ /**
77
+ * 类型参数
78
+ */
79
+ @property('TypeAnnotation')
80
+ typeArguments?: Array<TypeAnnotation> = null;
81
+
82
+ /**
83
+ * 实际参数
84
+ */
85
+ @property('Argument')
86
+ arguments: Array<Argument> = [];
87
+
88
+ /**
89
+ * 验证规则
90
+ */
91
+ @property('BindAttribute')
92
+ validation: BindAttribute = undefined;
93
+
94
+ /**
95
+ * 是否被折叠
96
+ */
97
+ @property()
98
+ isAdvancedSettingFolded: boolean = undefined;
99
+
100
+ /**
101
+ * @param source 需要合并的部分参数
102
+ */
103
+ constructor(source?: Partial<CallLogic>) {
104
+ // @ts-ignore
105
+ source = { ...CallLogic.getDefaultOptions(), ...source };
106
+ super(source);
107
+ super.subConstructor(source);
108
+ }
109
+
110
+ getClassName() {
111
+ return 'CallLogic';
112
+ }
113
+
114
+ static from(source: any, parentNode?: any, parentKey?: string): CallLogic {
115
+ return super.from(source, parentNode, parentKey) as CallLogic;
116
+ }
117
+
118
+ /**
119
+ * 设置验证规则
120
+ */
121
+ setValidation(validation: BindAttribute) {
122
+ validation._delete();
123
+ const relationOptions = { parentNode: this, parentKey: 'validation' };
124
+ Object.assign(validation, relationOptions);
125
+ const object = {
126
+ validation,
127
+ };
128
+ this.update({
129
+ ...object,
130
+ });
131
+ }
132
+
133
+ /**
134
+ * 设置是否被折叠
135
+ */
136
+ setIsAdvancedSettingFolded(isAdvancedSettingFolded: boolean) {
137
+ const object = {
138
+ isAdvancedSettingFolded,
139
+ };
140
+ this.update({
141
+ ...object,
142
+ });
143
+ }
144
+
145
+ /**
146
+ * 插入类型标注
147
+ * @internal
148
+ * @param typeAnnotationOptions 类型标注参数
149
+ */
150
+ _insertTypeAnnotationAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
151
+
152
+ /**
153
+ * 插入类型标注
154
+ * @internal
155
+ * @param typeAnnotation 已有的类型标注实例
156
+ */
157
+ _insertTypeAnnotationAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
158
+
159
+ _insertTypeAnnotationAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
160
+ const typeAnnotationOptions: any = {};
161
+ const relationOptions = { parentNode: this, parentKey: 'typeArguments' };
162
+ let typeAnnotation: TypeAnnotation;
163
+ if (options instanceof TypeAnnotation) {
164
+ options.ensureDelete(); // 同一实例不支持多处存在
165
+ typeAnnotation = options;
166
+ Object.assign(typeAnnotation, relationOptions);
167
+ } else {
168
+ typeAnnotation = TypeAnnotation.from(
169
+ {
170
+ ...typeAnnotationOptions,
171
+ ...options,
172
+ },
173
+ this,
174
+ 'typeArguments'
175
+ );
108
176
  }
109
- getClassName() {
110
- return 'CallLogic';
177
+ this.typeArguments.splice(index, 0, typeAnnotation);
178
+ return typeAnnotation;
179
+ }
180
+
181
+ /**
182
+ * 插入类型标注
183
+ * @param typeAnnotationOptions 类型标注参数
184
+ */
185
+ insertTypeAnnotationAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
186
+
187
+ /**
188
+ * 插入类型标注
189
+ * @param typeAnnotation 已有的类型标注实例
190
+ */
191
+ insertTypeAnnotationAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
192
+
193
+ insertTypeAnnotationAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
194
+ const node = this._insertTypeAnnotationAt(options as any, index);
195
+ node.create({
196
+ index,
197
+ parentNode: this,
198
+ parentKey: 'typeArguments',
199
+ });
200
+ return node;
201
+ }
202
+
203
+ /**
204
+ * 添加类型标注
205
+ * @internal
206
+ * @param typeAnnotationOptions 类型标注参数
207
+ */
208
+ _addTypeAnnotation(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
209
+
210
+ /**
211
+ * 添加类型标注
212
+ * @internal
213
+ * @param typeAnnotation 已有的类型标注实例
214
+ */
215
+ _addTypeAnnotation(typeAnnotation: TypeAnnotation): TypeAnnotation;
216
+
217
+ _addTypeAnnotation(options?: Partial<TypeAnnotation> | TypeAnnotation) {
218
+ const index = this.typeArguments.length;
219
+ return this._insertTypeAnnotationAt(options as any, index);
220
+ }
221
+
222
+ /**
223
+ * 添加类型标注
224
+ * @param typeAnnotationOptions 类型标注参数
225
+ */
226
+ addTypeAnnotation(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
227
+
228
+ /**
229
+ * 添加类型标注
230
+ * @param typeAnnotation 已有的类型标注实例
231
+ */
232
+ addTypeAnnotation(typeAnnotation: TypeAnnotation): TypeAnnotation;
233
+
234
+ addTypeAnnotation(options?: Partial<TypeAnnotation> | TypeAnnotation) {
235
+ const node = this._addTypeAnnotation(options as any);
236
+ const index = this.typeArguments.indexOf(node);
237
+ node.create({
238
+ index,
239
+ parentNode: this,
240
+ parentKey: 'typeArguments',
241
+ });
242
+ return node;
243
+ }
244
+
245
+ /**
246
+ * 插入实际参数
247
+ * @internal
248
+ * @param argumentOptions 实际参数参数
249
+ */
250
+ _insertArgumentAt(argumentOptions: Partial<Argument>, index: number): Argument;
251
+
252
+ /**
253
+ * 插入实际参数
254
+ * @internal
255
+ * @param argument 已有的实际参数实例
256
+ */
257
+ _insertArgumentAt(argument: Argument, index: number): Argument;
258
+
259
+ _insertArgumentAt(options: Partial<Argument> | Argument, index: number) {
260
+ const argumentOptions: any = {};
261
+ const relationOptions = { parentNode: this, parentKey: 'arguments' };
262
+ let argument: Argument;
263
+ if (options instanceof Argument) {
264
+ options.ensureDelete(); // 同一实例不支持多处存在
265
+ argument = options;
266
+ Object.assign(argument, relationOptions);
267
+ } else {
268
+ argument = Argument.from(
269
+ {
270
+ ...argumentOptions,
271
+ ...options,
272
+ },
273
+ this,
274
+ 'arguments'
275
+ );
111
276
  }
112
-
113
- static from(source: any, parentNode?: any, parentKey?: string): CallLogic {
114
- return super.from(source, parentNode, parentKey) as CallLogic;
277
+ this.arguments.splice(index, 0, argument);
278
+ return argument;
279
+ }
280
+
281
+ /**
282
+ * 插入实际参数
283
+ * @param argumentOptions 实际参数参数
284
+ */
285
+ insertArgumentAt(argumentOptions: Partial<Argument>, index: number): Argument;
286
+
287
+ /**
288
+ * 插入实际参数
289
+ * @param argument 已有的实际参数实例
290
+ */
291
+ insertArgumentAt(argument: Argument, index: number): Argument;
292
+
293
+ insertArgumentAt(options: Partial<Argument> | Argument, index: number) {
294
+ const node = this._insertArgumentAt(options as any, index);
295
+ node.create({
296
+ index,
297
+ parentNode: this,
298
+ parentKey: 'arguments',
299
+ });
300
+ return node;
301
+ }
302
+
303
+ /**
304
+ * 添加实际参数
305
+ * @internal
306
+ * @param argumentOptions 实际参数参数
307
+ */
308
+ _addArgument(argumentOptions: Partial<Argument>): Argument;
309
+
310
+ /**
311
+ * 添加实际参数
312
+ * @internal
313
+ * @param argument 已有的实际参数实例
314
+ */
315
+ _addArgument(argument: Argument): Argument;
316
+
317
+ _addArgument(options?: Partial<Argument> | Argument) {
318
+ const index = this.arguments.length;
319
+ return this._insertArgumentAt(options as any, index);
320
+ }
321
+
322
+ /**
323
+ * 添加实际参数
324
+ * @param argumentOptions 实际参数参数
325
+ */
326
+ addArgument(argumentOptions: Partial<Argument>): Argument;
327
+
328
+ /**
329
+ * 添加实际参数
330
+ * @param argument 已有的实际参数实例
331
+ */
332
+ addArgument(argument: Argument): Argument;
333
+
334
+ addArgument(options?: Partial<Argument> | Argument) {
335
+ const node = this._addArgument(options as any);
336
+ const index = this.arguments.indexOf(node);
337
+ node.create({
338
+ index,
339
+ parentNode: this,
340
+ parentKey: 'arguments',
341
+ });
342
+ return node;
343
+ }
344
+
345
+ /**
346
+ * 删除类型标注
347
+ * @param typeAnnotation 已有的类型标注实例
348
+ */
349
+ removeTypeAnnotation(typeAnnotation: TypeAnnotation): void;
350
+
351
+ removeTypeAnnotation(options: TypeAnnotation) {
352
+ const typeAnnotation: TypeAnnotation = options;
353
+ return typeAnnotation.delete();
354
+ }
355
+
356
+ __removeTypeAnnotation(typeAnnotation: TypeAnnotation) {
357
+ const { parentKey } = typeAnnotation;
358
+ const params: Params = {
359
+ parentNode: this,
360
+ parentKey,
361
+ index: -1,
362
+ object: null,
363
+ oldObject: typeAnnotation,
364
+ };
365
+ if (parentKey) {
366
+ params.parentKey = parentKey;
367
+ if (Array.isArray((this as any)[parentKey])) {
368
+ const index = (this as any)[parentKey].indexOf(typeAnnotation);
369
+ ~index && (this as any)[parentKey].splice(index, 1);
370
+ params.index = index;
371
+ } else if ((this as any)[parentKey] === typeAnnotation) {
372
+ params.index = 0;
373
+ (this as any)[parentKey] = undefined;
374
+ }
115
375
  }
116
-
117
- /**
118
- * 设置验证规则
119
- */
120
- setValidation(validation: BindAttribute) {
121
- validation._delete();
122
- const relationOptions = { parentNode: this, parentKey: 'validation' };
123
- Object.assign(validation, relationOptions);
124
- const object = {
125
- validation,
126
- };
127
- this.update({
128
- ...object,
129
- });
376
+ return params;
377
+ }
378
+
379
+ /**
380
+ * 删除实际参数
381
+ * @param argument 已有的实际参数实例
382
+ */
383
+ removeArgument(argument: Argument): void;
384
+
385
+ removeArgument(options: Argument) {
386
+ const argument: Argument = options;
387
+ return argument.delete();
388
+ }
389
+
390
+ __removeLogicItem(logicItem: LogicItem) {
391
+ const { parentKey } = logicItem;
392
+ const params: Params = {
393
+ parentNode: this,
394
+ parentKey,
395
+ index: -1,
396
+ object: null,
397
+ oldObject: logicItem,
398
+ };
399
+ if (parentKey) {
400
+ params.parentKey = parentKey;
401
+ if (Array.isArray((this as any)[parentKey])) {
402
+ const index = (this as any)[parentKey].indexOf(logicItem);
403
+ ~index && (this as any)[parentKey].splice(index, 1);
404
+ params.index = index;
405
+ } else if ((this as any)[parentKey] === logicItem) {
406
+ params.index = 0;
407
+ (this as any)[parentKey] = undefined;
408
+ }
130
409
  }
131
-
132
- /**
133
- * 设置是否被折叠
134
- */
135
- setIsAdvancedSettingFolded(isAdvancedSettingFolded: boolean) {
136
- const object = {
137
- isAdvancedSettingFolded,
138
- };
139
- this.update({
140
- ...object,
141
- });
410
+ return params;
411
+ }
412
+
413
+ /**
414
+ * 删除元素绑定属性
415
+ * @param name 元素绑定属性名称
416
+ */
417
+ removeValidation(name: string): void;
418
+
419
+ /**
420
+ * 删除元素绑定属性
421
+ * @param validation 已有的元素绑定属性实例
422
+ */
423
+ removeValidation(validation: BindAttribute): void;
424
+
425
+ removeValidation(options: string | BindAttribute) {
426
+ let validation: BindAttribute;
427
+ if (typeof options === 'string') {
428
+ validation = this.validation;
429
+ if (!validation) {
430
+ throw new Error(`找不到元素绑定属性 ${options}`);
431
+ }
432
+ } else {
433
+ validation = options;
142
434
  }
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
- /**
151
- * 插入类型标注
152
- * @internal
153
- * @param typeAnnotationOptions 类型标注参数
154
- */
155
- _insertTypeAnnotationAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
156
-
157
- /**
158
- * 插入类型标注
159
- * @internal
160
- * @param typeAnnotation 已有的类型标注实例
161
- */
162
- _insertTypeAnnotationAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
163
-
164
- _insertTypeAnnotationAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
165
- const typeAnnotationOptions: any = {};
166
- const relationOptions = { parentNode: this, parentKey: 'typeArguments' };
167
- let typeAnnotation: TypeAnnotation;
168
- if (options instanceof TypeAnnotation) {
169
- options.ensureDelete(); // 同一实例不支持多处存在
170
- typeAnnotation = options;
171
- Object.assign(typeAnnotation, relationOptions);
172
- } else {
173
- typeAnnotation = TypeAnnotation.from({
174
- ...typeAnnotationOptions,
175
- ...options,
176
- }, this, 'typeArguments');
177
- }
178
- this.typeArguments.splice(index, 0, typeAnnotation);
179
- return typeAnnotation;
435
+ return validation.delete();
436
+ }
437
+
438
+ __removeBindAttribute(bindAttribute: BindAttribute) {
439
+ const { parentKey } = bindAttribute;
440
+ const params: Params = {
441
+ parentNode: this,
442
+ parentKey,
443
+ index: -1,
444
+ object: null,
445
+ oldObject: bindAttribute,
446
+ };
447
+ if (parentKey) {
448
+ params.parentKey = parentKey;
449
+ if (Array.isArray((this as any)[parentKey])) {
450
+ const index = (this as any)[parentKey].indexOf(bindAttribute);
451
+ ~index && (this as any)[parentKey].splice(index, 1);
452
+ params.index = index;
453
+ } else if ((this as any)[parentKey] === bindAttribute) {
454
+ params.index = 0;
455
+ (this as any)[parentKey] = undefined;
456
+ }
180
457
  }
181
-
182
- /**
183
- * 插入类型标注
184
- * @param typeAnnotationOptions 类型标注参数
185
- */
186
- insertTypeAnnotationAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
187
-
188
- /**
189
- * 插入类型标注
190
- * @param typeAnnotation 已有的类型标注实例
191
- */
192
- insertTypeAnnotationAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
193
-
194
- insertTypeAnnotationAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
195
- const node = this._insertTypeAnnotationAt(options as any, index);
196
- node.create({
197
- index,
198
- parentNode: this,
199
- parentKey: 'typeArguments',
200
- });
201
- return node;
458
+ return params;
459
+ }
460
+
461
+ //= ===============================================================================
462
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
463
+ // 自动生成的代码已结束。下面可以手动编写。
464
+ //= ===============================================================================
465
+
466
+ get tsCalleeNamespace() {
467
+ if (this.calleeNamespace) {
468
+ let tsCalleeNamespace = this.calleeNamespace;
469
+ tsCalleeNamespace = tsCalleeNamespace.replace(/\.[0-9]/g, (m) => m.replace('.', '.$'));
470
+ tsCalleeNamespace = tsCalleeNamespace.replace(/-/g, '_');
471
+ return tsCalleeNamespace;
202
472
  }
203
-
204
- /**
205
- * 添加类型标注
206
- * @internal
207
- * @param typeAnnotationOptions 类型标注参数
208
- */
209
- _addTypeAnnotation(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
210
-
211
- /**
212
- * 添加类型标注
213
- * @internal
214
- * @param typeAnnotation 已有的类型标注实例
215
- */
216
- _addTypeAnnotation(typeAnnotation: TypeAnnotation): TypeAnnotation;
217
-
218
- _addTypeAnnotation(options?: Partial<TypeAnnotation> | TypeAnnotation) {
219
- const index = this.typeArguments.length;
220
- return this._insertTypeAnnotationAt(options as any, index);
473
+ return '';
474
+ }
475
+
476
+ // 用于logic回填
477
+ get calleewholeKey(): string {
478
+ if (!this.calleeNamespace && this.calleeName && this.view) {
479
+ // 页面逻辑单独处理
480
+ return `${this.view.getNamespace()}.${this.view.name}.logics.${this.calleeName}`;
221
481
  }
222
-
223
- /**
224
- * 添加类型标注
225
- * @param typeAnnotationOptions 类型标注参数
226
- */
227
- addTypeAnnotation(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
228
-
229
- /**
230
- * 添加类型标注
231
- * @param typeAnnotation 已有的类型标注实例
232
- */
233
- addTypeAnnotation(typeAnnotation: TypeAnnotation): TypeAnnotation;
234
-
235
- addTypeAnnotation(options?: Partial<TypeAnnotation> | TypeAnnotation) {
236
- const node = this._addTypeAnnotation(options as any);
237
- const index = this.typeArguments.indexOf(node);
238
- node.create({
239
- index,
240
- parentNode: this,
241
- parentKey: 'typeArguments',
242
- });
243
- return node;
482
+ // "app.logics"
483
+ return `${this.calleeNamespace}.${this.calleeName}`;
484
+ }
485
+
486
+ get calleeKey(): string {
487
+ const { tsCalleeNamespace } = this;
488
+ const { calleeName } = this;
489
+ if (!tsCalleeNamespace) {
490
+ return calleeName ? `${calleeName}` : '__IDENTIFIER__';
244
491
  }
245
-
246
- /**
247
- * 插入实际参数
248
- * @internal
249
- * @param argumentOptions 实际参数参数
250
- */
251
- _insertArgumentAt(argumentOptions: Partial<Argument>, index: number): Argument;
252
-
253
- /**
254
- * 插入实际参数
255
- * @internal
256
- * @param argument 已有的实际参数实例
257
- */
258
- _insertArgumentAt(argument: Argument, index: number): Argument;
259
-
260
- _insertArgumentAt(options: Partial<Argument> | Argument, index: number) {
261
- const argumentOptions: any = {};
262
- const relationOptions = { parentNode: this, parentKey: 'arguments' };
263
- let argument: Argument;
264
- if (options instanceof Argument) {
265
- options.ensureDelete(); // 同一实例不支持多处存在
266
- argument = options;
267
- Object.assign(argument, relationOptions);
268
- } else {
269
- argument = Argument.from({
270
- ...argumentOptions,
271
- ...options,
272
- }, this, 'arguments');
273
- }
274
- this.arguments.splice(index, 0, argument);
275
- return argument;
276
- }
277
-
278
- /**
279
- * 插入实际参数
280
- * @param argumentOptions 实际参数参数
281
- */
282
- insertArgumentAt(argumentOptions: Partial<Argument>, index: number): Argument;
283
-
284
- /**
285
- * 插入实际参数
286
- * @param argument 已有的实际参数实例
287
- */
288
- insertArgumentAt(argument: Argument, index: number): Argument;
289
-
290
- insertArgumentAt(options: Partial<Argument> | Argument, index: number) {
291
- const node = this._insertArgumentAt(options as any, index);
292
- node.create({
293
- index,
294
- parentNode: this,
295
- parentKey: 'arguments',
296
- });
297
- return node;
492
+ // elements单独处理相对路径,和后缀的问题
493
+ if (tsCalleeNamespace.startsWith('elements') && tsCalleeNamespace.endsWith('logics')) {
494
+ const methodName = tsCalleeNamespace.substring(0, tsCalleeNamespace.length - '.logics'.length);
495
+ return `__${methodName}.${calleeName}`;
298
496
  }
299
-
300
- /**
301
- * 添加实际参数
302
- * @internal
303
- * @param argumentOptions 实际参数参数
304
- */
305
- _addArgument(argumentOptions: Partial<Argument>): Argument;
306
-
307
- /**
308
- * 添加实际参数
309
- * @internal
310
- * @param argument 已有的实际参数实例
311
- */
312
- _addArgument(argument: Argument): Argument;
313
-
314
- _addArgument(options?: Partial<Argument> | Argument) {
315
- const index = this.arguments.length;
316
- return this._insertArgumentAt(options as any, index);
497
+ return calleeName ? `${tsCalleeNamespace}.${calleeName}` : '__IDENTIFIER__';
498
+ }
499
+
500
+ /**
501
+ * 设置argment 触发别的地方的更新
502
+ */
503
+ setArgumentName({ argument }: { argument: Argument[] }) {
504
+ // argument.setKeyword(newKeyword);
505
+ // this.arguments = argument;
506
+ }
507
+
508
+ /**
509
+ * 设置setCalleeName
510
+ */
511
+ setCalleeName(calleeName: string) {
512
+ const object = {
513
+ calleeName,
514
+ };
515
+ this.update({
516
+ ...object,
517
+ });
518
+ }
519
+
520
+ /**
521
+ * 设置calleeNamespace
522
+ */
523
+ setCalleeNamespace(calleeNamespace: string) {
524
+ const object = {
525
+ calleeNamespace,
526
+ };
527
+ this.update({
528
+ ...object,
529
+ });
530
+ }
531
+
532
+ /**
533
+ * 设置 handleError
534
+ */
535
+ setHandleError(handleError: boolean) {
536
+ const object = {
537
+ handleError,
538
+ };
539
+ this.update({
540
+ ...object,
541
+ });
542
+ }
543
+
544
+ _setCallee(logic: Logic) {
545
+ this.calleeNamespace = logic.getNamespace();
546
+ if (logic.parentNode instanceof View) {
547
+ this.calleeNamespace = '';
317
548
  }
318
-
319
- /**
320
- * 添加实际参数
321
- * @param argumentOptions 实际参数参数
322
- */
323
- addArgument(argumentOptions: Partial<Argument>): Argument;
324
-
325
- /**
326
- * 添加实际参数
327
- * @param argument 已有的实际参数实例
328
- */
329
- addArgument(argument: Argument): Argument;
330
-
331
- addArgument(options?: Partial<Argument> | Argument) {
332
- const node = this._addArgument(options as any);
333
- const index = this.arguments.indexOf(node);
334
- node.create({
335
- index,
336
- parentNode: this,
337
- parentKey: 'arguments',
338
- });
339
- return node;
549
+ this.calleeName = logic.name;
550
+ this.arguments = [];
551
+ logic.params.forEach((param: any) => {
552
+ const argument = this._addArgument({
553
+ keyword: param.name,
554
+ });
555
+ if (param.defaultExpression) {
556
+ const exp: any = BaseNode.from({ ...param.defaultExpression.toJSON() });
557
+ argument.setExpression(exp);
558
+ }
559
+ });
560
+ if (logic.typeParams) {
561
+ this.typeArguments = [];
562
+ logic.typeParams.forEach(() => {
563
+ this._addTypeAnnotation({});
564
+ });
340
565
  }
566
+ }
341
567
 
342
- /**
343
- * 删除类型标注
344
- * @param typeAnnotation 已有的类型标注实例
345
- */
346
- removeTypeAnnotation(typeAnnotation: TypeAnnotation): void;
347
-
348
- removeTypeAnnotation(options: TypeAnnotation) {
349
- const typeAnnotation: TypeAnnotation = options;
350
- return typeAnnotation.delete();
568
+ setCallee(logic: Logic) {
569
+ let calleeNamespace = logic?.getNamespace() || '';
570
+ if (logic.parentNode instanceof View) {
571
+ calleeNamespace = '';
351
572
  }
352
-
353
- __removeTypeAnnotation(typeAnnotation: TypeAnnotation) {
354
- const parentKey = typeAnnotation.parentKey;
355
- const params: Params = {
356
- parentNode: this,
357
- parentKey,
358
- index: -1,
359
- object: null,
360
- oldObject: typeAnnotation,
361
- };
362
- if (parentKey) {
363
- params.parentKey = parentKey;
364
- if (Array.isArray((this as any)[parentKey])) {
365
- const index = (this as any)[parentKey].indexOf(typeAnnotation);
366
- ~index && (this as any)[parentKey].splice(index, 1);
367
- params.index = index;
368
- } else if ((this as any)[parentKey] === typeAnnotation) {
369
- params.index = 0;
370
- (this as any)[parentKey] = undefined;
371
- }
372
- }
373
- return params;
573
+ const calleeName = logic.name;
574
+ const params = logic?.params?.map((param) => {
575
+ const relationOptions = { parentNode: this, parentKey: 'arguments' };
576
+ const argument = Argument.from(
577
+ {
578
+ keyword: param.name,
579
+ expression: param.isFunction ? new Identifier() : param.defaultExpression,
580
+ },
581
+ this
582
+ );
583
+ Object.assign(argument, relationOptions);
584
+ return argument;
585
+ });
586
+ let typeArguments = null;
587
+ if (logic.typeParams) {
588
+ typeArguments = logic.typeParams.map(() => {
589
+ const relationOptions = { parentNode: this, parentKey: 'typeArguments' };
590
+ const typeArgu = new TypeAnnotation();
591
+ Object.assign(typeArgu, relationOptions);
592
+ return typeArgu;
593
+ });
374
594
  }
375
595
 
376
- /**
377
- * 删除实际参数
378
- * @param argument 已有的实际参数实例
379
- */
380
- removeArgument(argument: Argument): void;
381
-
382
- removeArgument(options: Argument) {
383
- const argument: Argument = options;
384
- return argument.delete();
596
+ // 如果打开了处理error的开关 或者是 依赖库的逻辑引用,而且类型中携带了Error的
597
+ let handleError = false;
598
+ if (calleeNamespace?.startsWith('extensions') && Logic.checkLogicReturnTypeHasError(logic)) {
599
+ handleError = true;
385
600
  }
386
-
387
- __removeLogicItem(logicItem: LogicItem) {
388
- const parentKey = logicItem.parentKey;
389
- const params: Params = {
390
- parentNode: this,
391
- parentKey,
392
- index: -1,
393
- object: null,
394
- oldObject: logicItem,
395
- };
396
- if (parentKey) {
397
- params.parentKey = parentKey;
398
- if (Array.isArray((this as any)[parentKey])) {
399
- const index = (this as any)[parentKey].indexOf(logicItem);
400
- ~index && (this as any)[parentKey].splice(index, 1);
401
- params.index = index;
402
- } else if ((this as any)[parentKey] === logicItem) {
403
- params.index = 0;
404
- (this as any)[parentKey] = undefined;
405
- }
406
- }
407
- return params;
601
+ if (this.app) {
602
+ this.app.emit('collect:start', {
603
+ actionMsg: `切换调用逻辑`,
604
+ });
605
+ const { parentNode } = this;
606
+ this.update({
607
+ calleeNamespace,
608
+ calleeName,
609
+ arguments: params,
610
+ typeArguments,
611
+ folded: false,
612
+ handleError,
613
+ });
614
+ if (parentNode.concept === 'MemberExpression') {
615
+ const topNode = parentNode.firstMemberExpressionNode();
616
+ topNode.replaceNode(this);
617
+ }
618
+ this.app.emit('collect:end');
619
+ } else {
620
+ this.update({
621
+ calleeNamespace,
622
+ calleeName,
623
+ arguments: params,
624
+ typeArguments,
625
+ folded: false,
626
+ handleError,
627
+ });
408
628
  }
409
-
629
+ }
630
+
631
+ addCalleeArg(logic: Logic) {
632
+ const newArgs = this.arguments.map((argument) =>
633
+ Argument.from(
634
+ {
635
+ ...argument,
636
+ },
637
+ this
638
+ )
639
+ );
640
+ const relationOptions = { parentNode: this, parentKey: 'arguments' };
410
641
  /**
411
- * 删除元素绑定属性
412
- * @param name 元素绑定属性名称
413
- */
414
- removeValidation(name: string): void;
415
-
416
- /**
417
- * 删除元素绑定属性
418
- * @param validation 已有的元素绑定属性实例
642
+ * 当前两个参数对应上,添加的时候,logic会比参数位内容多,就添加一个 argment
419
643
  */
420
- removeValidation(validation: BindAttribute): void;
421
-
422
- removeValidation(options: string | BindAttribute) {
423
- let validation: BindAttribute;
424
- if (typeof options === 'string') {
425
- validation = this.validation;
426
- if (!validation) {
427
- throw new Error('找不到元素绑定属性 ' + options);
428
- }
644
+ if (logic.params.length >= newArgs.length) {
645
+ logic.params.forEach((param: Param, index: number) => {
646
+ const arg = newArgs[index];
647
+ if (!arg) {
648
+ const newParam = Argument.from(
649
+ {
650
+ keyword: param.name,
651
+ },
652
+ this
653
+ );
654
+ Object.assign(newParam, relationOptions);
655
+ newArgs.push(newParam);
429
656
  } else {
430
- validation = options;
431
- }
432
- return validation.delete();
433
- }
434
-
435
- __removeBindAttribute(bindAttribute: BindAttribute) {
436
- const parentKey = bindAttribute.parentKey;
437
- const params: Params = {
438
- parentNode: this,
439
- parentKey,
440
- index: -1,
441
- object: null,
442
- oldObject: bindAttribute,
443
- };
444
- if (parentKey) {
445
- params.parentKey = parentKey;
446
- if (Array.isArray((this as any)[parentKey])) {
447
- const index = (this as any)[parentKey].indexOf(bindAttribute);
448
- ~index && (this as any)[parentKey].splice(index, 1);
449
- params.index = index;
450
- } else if ((this as any)[parentKey] === bindAttribute) {
451
- params.index = 0;
452
- (this as any)[parentKey] = undefined;
453
- }
657
+ arg.keyword = param.name;
454
658
  }
455
- return params;
456
- }
457
-
458
- //================================================================================
459
- // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
460
- // 自动生成的代码已结束。下面可以手动编写。
461
- //================================================================================
462
-
463
- get tsCalleeNamespace() {
464
- if (this.calleeNamespace) {
465
- let tsCalleeNamespace = this.calleeNamespace;
466
- tsCalleeNamespace = tsCalleeNamespace.replace(/\.[0-9]/g, (m) => m.replace('.', '.$'));
467
- tsCalleeNamespace = tsCalleeNamespace.replace(/-/g, '_');
468
- return tsCalleeNamespace;
659
+ });
660
+ } else {
661
+ /**
662
+ * 当前calllogic上数量比logic参数还多,他就需要找一个arg使他变成可用的参数
663
+ */
664
+ newArgs.forEach((arg: Argument, index: number) => {
665
+ const param = logic.params[index];
666
+ if (param) {
667
+ arg.keyword = param.name;
469
668
  }
470
- return '';
471
- }
472
-
473
- // 用于logic回填
474
- get calleewholeKey(): string {
475
- if (!this.calleeNamespace && this.calleeName && this.view) {
476
- // 页面逻辑单独处理
477
- return `${this.view.getNamespace()}.${this.view.name}.logics.${this.calleeName}`;
478
- }
479
- // "app.logics"
480
- return this.calleeNamespace + '.' + this.calleeName;
481
- }
482
- get calleeKey(): string {
483
- const tsCalleeNamespace = this.tsCalleeNamespace;
484
- const calleeName = this.calleeName;
485
- if (!tsCalleeNamespace) {
486
- return calleeName ? `${calleeName}` : '__IDENTIFIER__';
487
- }
488
- // elements单独处理相对路径,和后缀的问题
489
- if (tsCalleeNamespace.startsWith('elements') && tsCalleeNamespace.endsWith('logics')) {
490
- const methodName = tsCalleeNamespace.substring(0, tsCalleeNamespace.length - '.logics'.length);
491
- return '__' + methodName + `.${calleeName}`;
492
- }
493
- return calleeName ? `${tsCalleeNamespace}.${calleeName}` : '__IDENTIFIER__';
494
- }
495
-
496
- /**
497
- * 设置argment 触发别的地方的更新
498
- */
499
- setArgumentName({ argument }: { argument: Argument[] }) {
500
- // argument.setKeyword(newKeyword);
501
- // this.arguments = argument;
669
+ });
502
670
  }
671
+ this.update({
672
+ arguments: newArgs,
673
+ });
674
+ }
503
675
 
676
+ deleteCalleeArg(argIndex: number) {
504
677
  /**
505
- * 设置setCalleeName
678
+ * 传递过下标来,然后直接移动到最后结束
679
+ * 如果原来就是最后一个位置就不移动了
506
680
  */
507
- setCalleeName(calleeName: string) {
508
- const object = {
509
- calleeName,
510
- };
511
- this.update({
512
- ...object,
681
+ if (typeof argIndex === 'number') {
682
+ if (!this.arguments[argIndex]?.expression) {
683
+ // 如果本身没有值就直接删除
684
+ return this.arguments[argIndex]?.delete();
685
+ }
686
+ if (argIndex !== this.arguments.length - 1) {
687
+ this.arguments[argIndex]?.moveNode({
688
+ sourceNode: this.arguments[this.arguments.length - 1],
689
+ position: 'insertAfter',
513
690
  });
691
+ }
514
692
  }
515
-
516
- /**
517
- * 设置calleeNamespace
518
- */
519
- setCalleeNamespace(calleeNamespace: string) {
520
- const object = {
521
- calleeNamespace,
522
- };
523
- this.update({
524
- ...object,
525
- });
526
- }
527
- /**
528
- * 设置 handleError
529
- */
530
- setHandleError(handleError: boolean) {
531
- const object = {
532
- handleError,
533
- };
534
- this.update({
535
- ...object,
536
- });
693
+ }
694
+
695
+ toVue(options?: ElementToVueOptions): string {
696
+ let code = '';
697
+ if (
698
+ this.calleeNamespace === 'nasl.browser' ||
699
+ this.calleeNamespace === 'nasl.auth' ||
700
+ this.calleeNamespace === 'nasl.configuration' ||
701
+ this.calleeNamespace === 'nasl.process'
702
+ ) {
703
+ code += '$global.';
537
704
  }
538
-
539
- _setCallee(logic: Logic) {
540
- console.trace();
541
- this.calleeNamespace = logic.getNamespace();
542
- if (logic.parentNode instanceof View) {
543
- this.calleeNamespace = '';
544
- }
545
- this.calleeName = logic.name;
546
- this.arguments = [];
547
- logic.params.forEach((param: any) => {
548
- const argument = this._addArgument({
549
- keyword: param.name,
550
- });
551
- if (param.defaultExpression) {
552
- const exp: any = BaseNode.from({ ...param.defaultExpression.toJSON() });
553
- argument.setExpression(exp);
554
- }
555
- });
556
- if (logic.typeParams) {
557
- this.typeArguments = [];
558
- logic.typeParams.forEach(() => {
559
- this._addTypeAnnotation({});
560
- });
561
- }
562
- }
563
-
564
- setCallee(logic: Logic) {
565
- let calleeNamespace = logic?.getNamespace() || '';
566
- if (logic.parentNode instanceof View) {
567
- calleeNamespace = '';
568
- }
569
- const calleeName = logic.name;
570
- const params = logic?.params?.map((param) => {
571
- const relationOptions = { parentNode: this, parentKey: 'arguments' };
572
- const argument = Argument.from({
573
- keyword: param.name,
574
- expression: param.isFunction ? new Identifier() : param.defaultExpression,
575
- }, this);
576
- Object.assign(argument, relationOptions);
577
- return argument;
578
- });
579
- let typeArguments = null;
580
- if (logic.typeParams) {
581
- typeArguments = logic.typeParams.map(() => {
582
- const relationOptions = { parentNode: this, parentKey: 'typeArguments' };
583
- const typeArgu = new TypeAnnotation();
584
- Object.assign(typeArgu, relationOptions);
585
- return typeArgu;
586
- });
587
- }
588
-
589
- // 如果打开了处理error的开关 或者是 依赖库的逻辑引用,而且类型中携带了Error的
590
- let handleError = false;
591
- if (calleeNamespace?.startsWith('extensions') && Logic.checkLogicReturnTypeHasError(logic)) {
592
- handleError = true;
593
- }
594
- if (this.app) {
595
- this.app.emit('collect:start', {
596
- actionMsg: `切换调用逻辑`,
597
- });
598
- const parentNode: any = this.parentNode;
599
- this.update({
600
- calleeNamespace,
601
- calleeName,
602
- arguments: params,
603
- typeArguments,
604
- folded: false,
605
- handleError,
606
- });
607
- if (parentNode.concept === 'MemberExpression') {
608
- const topNode = parentNode.firstMemberExpressionNode();
609
- topNode.replaceNode(this);
610
- }
611
- this.app.emit('collect:end');
612
- } else {
613
- this.update({
614
- calleeNamespace,
615
- calleeName,
616
- arguments: params,
617
- typeArguments,
618
- folded: false,
619
- handleError,
620
- });
621
- }
705
+ code += this.calleeName;
706
+ code += '(';
707
+ const { completeArguments } = this;
708
+ completeArguments.forEach((arg, index) => {
709
+ code += arg?.toVue(options);
710
+ if (index !== completeArguments.length - 1) code += ', ';
711
+ });
712
+ code += ')';
713
+ return code;
714
+ }
715
+
716
+ toUI(state?: TranslatorState): string {
717
+ let code = this.calleeName;
718
+ code += '(';
719
+
720
+ const node = this.getCallNode();
721
+ let logicParam: Param[] = [];
722
+ if (node?.params) {
723
+ logicParam = node.params;
622
724
  }
623
-
624
- addCalleeArg(logic: Logic) {
625
- const newArgs = this.arguments.map((argument) =>
626
- Argument.from({
627
- ...argument,
628
- }, this));
629
- const relationOptions = { parentNode: this, parentKey: 'arguments' };
630
- /**
631
- * 当前两个参数对应上,添加的时候,logic会比参数位内容多,就添加一个 argment
632
- */
633
- if (logic.params.length >= newArgs.length) {
634
- logic.params.forEach((param: Param, index: number) => {
635
- const arg = newArgs[index];
636
- if (!arg) {
637
- const newParam = Argument.from({
638
- keyword: param.name,
639
- }, this);
640
- Object.assign(newParam, relationOptions);
641
- newArgs.push(newParam);
642
- } else {
643
- arg.keyword = param.name;
644
- }
645
- });
725
+ if (this.arguments?.length) {
726
+ this.arguments.forEach((arg, index) => {
727
+ const param = logicParam[index] || ({} as any);
728
+ // 打开了必填,
729
+ // 或者遗留问题,没有required = undefined 而且没有defaultValue,就是之前的必填项
730
+ const paramRequired = Boolean(param.required || (param.required === undefined && !param.defaultValue));
731
+ // 取到是不是必填放入参数中
732
+ if (param && !arg.expression && !paramRequired) {
733
+ // 非必填时 才会有默认值
734
+ code += param.defaultValue;
646
735
  } else {
647
- /**
648
- * 当前calllogic上数量比logic参数还多,他就需要找一个arg使他变成可用的参数
649
- */
650
- newArgs.forEach((arg: Argument, index: number) => {
651
- const param = logic.params[index];
652
- if (param) {
653
- arg.keyword = param.name;
654
- }
655
- });
736
+ code += arg?.toUI();
656
737
  }
657
- this.update({
658
- arguments: newArgs,
659
- });
738
+ if (index !== this.arguments?.length - 1) code += ', ';
739
+ });
660
740
  }
661
-
662
- deleteCalleeArg(argIndex: number) {
663
- /**
664
- * 传递过下标来,然后直接移动到最后结束
665
- * 如果原来就是最后一个位置就不移动了
666
- */
667
- if (typeof argIndex === 'number') {
668
- if (!this.arguments[argIndex]?.expression) {
669
- // 如果本身没有值就直接删除
670
- return this.arguments[argIndex]?.delete();
671
- }
672
- if (argIndex !== this.arguments.length - 1) {
673
- this.arguments[argIndex]?.moveNode({
674
- sourceNode: this.arguments[this.arguments.length - 1],
675
- position: 'insertAfter',
676
- });
677
- }
678
- }
679
- }
680
- toVue(options?: ElementToVueOptions): string {
681
- let code = '';
682
- if (this.calleeNamespace === 'nasl.browser' || this.calleeNamespace === 'nasl.auth' || this.calleeNamespace === 'nasl.configuration' || this.calleeNamespace === 'nasl.process') {
683
- code += '$global.';
684
- }
685
- code += this.calleeName;
686
- code += '(';
687
- const completeArguments = this.completeArguments;
688
- completeArguments.forEach((arg, index) => {
689
- code += arg?.toVue(options);
690
- if (index !== completeArguments.length - 1)
691
- code += ', ';
692
- });
693
- code += ')';
694
- return code;
695
- }
696
-
697
- toUI(state?: TranslatorState): string {
698
- let code = this.calleeName;
699
- code += '(';
700
-
701
- const node = this.getCallNode();
702
- let logicParam: Param[] = [];
703
- if (node?.params) {
704
- logicParam = node.params;
741
+ code += ')';
742
+
743
+ return code;
744
+ }
745
+
746
+ // 是否属于页面逻辑
747
+ get isViewLogic() {
748
+ // 页面逻辑
749
+ let flag = true;
750
+ const { calleeNamespace } = this;
751
+ // calleeNamespace不存在,一定是页面逻辑
752
+ if (calleeNamespace) {
753
+ const namespaceArr = calleeNamespace.split('.');
754
+ const start = namespaceArr[0];
755
+ const isFrontendLibrary = ~calleeNamespace.indexOf('frontends');
756
+ if (start === 'app' || (start === 'extensions' && !isFrontendLibrary)) {
757
+ const keywordViewsIndex = findConceptKeyWordIndexFromNamespace(this.calleeNamespace, 'views');
758
+ if (keywordViewsIndex === -1) {
759
+ flag = false;
705
760
  }
706
- if (this.arguments?.length) {
707
- this.arguments.forEach((arg, index) => {
708
- const param = logicParam[index] || ({} as any);
709
- // 打开了必填,
710
- // 或者遗留问题,没有required = undefined 而且没有defaultValue,就是之前的必填项
711
- const paramRequired = Boolean(param.required || (param.required === undefined && !param.defaultValue));
712
- // 取到是不是必填放入参数中
713
- if (param && !arg.expression && !paramRequired) {
714
- // 非必填时 才会有默认值
715
- code += param.defaultValue;
716
- } else {
717
- code += arg?.toUI();
718
- }
719
- if (index !== this.arguments?.length - 1)
720
- code += ', ';
721
- });
722
- }
723
- code += ')';
724
-
725
- return code;
761
+ }
726
762
  }
727
-
728
- // 是否属于页面逻辑
729
- get isViewLogic() {
730
- // 页面逻辑
731
- let flag = true;
732
- const calleeNamespace = this.calleeNamespace;
733
- // calleeNamespace不存在,一定是页面逻辑
734
- if (calleeNamespace) {
735
- const namespaceArr = calleeNamespace.split('.');
736
- const start = namespaceArr[0];
737
- const isFrontendLibrary = ~calleeNamespace.indexOf('frontends');
738
- if (start === 'app' || (start === 'extensions' && !isFrontendLibrary)) {
739
- const keywordViewsIndex = findConceptKeyWordIndexFromNamespace(this.calleeNamespace, 'views');
740
- if (keywordViewsIndex === -1) {
741
- flag = false;
742
- }
743
- }
744
- }
745
- return flag;
763
+ return flag;
764
+ }
765
+
766
+ // 是否属于组件逻辑
767
+ get isComponentLogic() {
768
+ // 组件逻辑
769
+ let flag = false;
770
+ const { calleeNamespace } = this;
771
+ // calleeNamespace不存在,一定是页面逻辑
772
+ if (calleeNamespace) {
773
+ const namespaceArr = calleeNamespace.split('.');
774
+ const start = namespaceArr[0];
775
+ if (start === 'elements' && namespaceArr.length === 3 && namespaceArr[2] === 'logics') {
776
+ flag = true;
777
+ }
746
778
  }
747
-
748
- // 是否属于组件逻辑
749
- get isComponentLogic() {
750
- // 组件逻辑
751
- let flag = false;
752
- const calleeNamespace = this.calleeNamespace;
753
- // calleeNamespace不存在,一定是页面逻辑
754
- if (calleeNamespace) {
755
- const namespaceArr = calleeNamespace.split('.');
756
- const start = namespaceArr[0];
757
- if (start === 'elements' && namespaceArr.length === 3 && namespaceArr[2] === 'logics') {
758
- flag = true;
759
- }
760
- }
761
- return flag;
779
+ return flag;
780
+ }
781
+
782
+ toJS(state?: TranslatorState): string {
783
+ let code = '';
784
+ code += 'await (';
785
+ let refName = '';
786
+ let extensionName = '';
787
+
788
+ const { calleeName, calleeNamespace, isComponentLogic, completeArguments, isViewLogic, typeArguments } = this;
789
+
790
+ const isShowArgument = (arg?: Argument) => {
791
+ return arg.expression || (arg.paramDefaultValue && arg.paramTypeAnnotation);
792
+ };
793
+
794
+ const keywordProcessIndex = findConceptKeyWordIndexFromNamespace(calleeNamespace, 'processes');
795
+ const isProcessLogic = keywordProcessIndex !== -1;
796
+ const isFrontendLibrary = calleeNamespace.startsWith('extensions') && calleeNamespace.indexOf('frontends');
797
+ // calleeNamespace不存在,一定是页面逻辑
798
+ if (calleeNamespace) {
799
+ const namespaceArr = calleeNamespace.split('.');
800
+ if (isComponentLogic) {
801
+ const componentName = namespaceArr[1];
802
+ const viewElement = this.view?.findElementByName(componentName);
803
+ refName = viewElement?.refName ?? componentName;
804
+ }
805
+ if (isFrontendLibrary) {
806
+ extensionName = namespaceArr[1];
807
+ }
762
808
  }
763
-
764
- toJS(state?: TranslatorState): string {
765
- let code = '';
766
- code += 'await (';
767
- let refName = '';
768
- let extensionName = '';
769
-
770
- const {
771
- calleeName,
772
- calleeNamespace,
773
- isComponentLogic,
774
- completeArguments,
775
- isViewLogic,
776
- typeArguments,
777
- } = this;
778
-
779
- const keywordProcessIndex = findConceptKeyWordIndexFromNamespace(calleeNamespace, 'processes');
780
- const isProcessLogic = keywordProcessIndex !== -1;
781
- const isFrontendLibrary = calleeNamespace.startsWith('extensions') && calleeNamespace.indexOf('frontends');
782
- // calleeNamespace不存在,一定是页面逻辑
783
- if (calleeNamespace) {
784
- const namespaceArr = calleeNamespace.split('.');
785
- if (isComponentLogic) {
786
- const componentName = namespaceArr[1];
787
- const viewElement = this.view?.findElementByName(componentName);
788
- refName = viewElement?.refName ?? componentName;
789
- }
790
- if (isFrontendLibrary) {
791
- extensionName = namespaceArr[1];
792
- }
793
- }
794
- // 全局逻辑
795
- if (!isViewLogic) {
796
- const logic = this.getCallNode();
797
- const args = logic?.params || [];
798
- const keywordEntitiesIndex = findConceptKeyWordIndexFromNamespace(this.calleeNamespace, 'entities');
799
- code += `this.$logics['${this.calleeNamespace ? `${this.calleeNamespace}.${this.calleeName}` : this.calleeName}']`;
800
- code += `({
809
+ // 全局逻辑
810
+ if (!isViewLogic) {
811
+ const logic = this.getCallNode();
812
+ const args = logic?.params || [];
813
+ const keywordEntitiesIndex = findConceptKeyWordIndexFromNamespace(this.calleeNamespace, 'entities');
814
+ code += `this.$logics['${this.calleeNamespace ? `${this.calleeNamespace}.${this.calleeName}` : this.calleeName}']`;
815
+ code += `({
801
816
  config: {
802
817
  download: false,
803
818
  },
804
819
  query: {`;
805
- if (isProcessLogic) {
806
- const argsStr = args
807
- .map((arg, index) => {
808
- const actualArg = completeArguments[index];
809
- return {
810
- keyword: arg?.name,
811
- arg: actualArg,
812
- };
813
- })
814
- .filter((item) => Boolean(item.arg.expression))
815
- .map((obj: any) => `\n${obj?.keyword}: ${obj?.arg?.toJS(shiftState(state, code))}`)
816
- .join(', ');
817
- code += argsStr;
818
- }
819
- code += `},
820
+ if (isProcessLogic) {
821
+ const argsStr = args
822
+ .map((arg, index) => {
823
+ const actualArg = completeArguments[index];
824
+ return {
825
+ keyword: arg?.name,
826
+ arg: actualArg,
827
+ };
828
+ })
829
+ .filter((item) => isShowArgument(item.arg))
830
+ .map((obj: any) => `\n${obj?.keyword}: ${obj?.arg?.toJS(shiftState(state, code))}`)
831
+ .join(', ');
832
+ code += argsStr;
833
+ }
834
+ code += `},
820
835
  headers: {
821
836
  "lcap-calllogic-uuid": "${this.uuid}",
822
837
  },
823
838
  `;
824
839
 
825
- if (keywordEntitiesIndex !== -1) {
826
- let logicArgs = this.arguments;
827
- let breakBody = false;
828
- switch (calleeName) {
829
- case 'get':
830
- case 'delete': {
831
- logicArgs = [];
832
- code += `query: {`;
833
- const argsStr = args
834
- .map((arg, index) => {
835
- const actualArg = this.arguments?.[index];
836
- return {
837
- keyword: arg?.name,
838
- arg: actualArg,
839
- };
840
- })
841
- .map((obj: any) => `\n${obj?.keyword}: ${obj?.arg?.toJS(shiftState(state, code))}`)
842
- .join(', ');
843
- code += argsStr;
844
- code += `},\n`;
845
- break;
846
- }
847
- case 'update':
848
- case 'createOrUpdate':
849
- case 'batchUpdate': {
850
- code += `body: {\n`;
851
- const argsStr = logicArgs
852
- .filter((arg) => arg.expression)
853
- .map((arg) => {
854
- const name = arg.keyword === 'body' ? (this.calleeName === 'batchUpdate' ? 'entities' : 'entity') : arg.keyword;
855
- return `${name}: ${arg.expression.toJS(shiftState(state, code))}`;
856
- })
857
- .join(',\n');
858
- code += argsStr;
859
- code += `},\n`;
860
- logicArgs = [];
861
- breakBody = true;
862
- break;
863
- }
864
- case 'updateBy': {
865
- code += `body: {`;
866
- const argsStr = logicArgs
867
- .filter((arg) => arg.expression)
868
- .map((arg: any) => {
869
- const name = arg.keyword === 'body' ? 'entity' : arg.keyword;
870
- // filter回调函数
871
- if (arg.expression.returnExpression) {
872
- const argsStr = JSON.stringify(handleMember(arg.expression.returnExpression)).replace(/"__@@(.*?)@@__"/g, '$1');
873
- return `${name}: {
840
+ if (keywordEntitiesIndex !== -1) {
841
+ let logicArgs = this.arguments;
842
+ let breakBody = false;
843
+ switch (calleeName) {
844
+ case 'get':
845
+ case 'delete': {
846
+ logicArgs = [];
847
+ code += `query: {`;
848
+ const argsStr = args
849
+ .map((arg, index) => {
850
+ const actualArg = this.arguments?.[index];
851
+ return {
852
+ keyword: arg?.name,
853
+ arg: actualArg,
854
+ };
855
+ })
856
+ .map((obj: any) => `\n${obj?.keyword}: ${obj?.arg?.toJS(shiftState(state, code))}`)
857
+ .join(', ');
858
+ code += argsStr;
859
+ code += `},\n`;
860
+ break;
861
+ }
862
+ case 'update':
863
+ case 'createOrUpdate':
864
+ case 'batchUpdate': {
865
+ code += `body: {\n`;
866
+ const argsStr = logicArgs
867
+ .map((arg) => {
868
+ const name = arg.keyword === 'body' ? (this.calleeName === 'batchUpdate' ? 'entities' : 'entity') : arg.keyword;
869
+ return `${name}: ${arg.expression.toJS(shiftState(state, code))}`;
870
+ })
871
+ .join(',\n');
872
+ code += argsStr;
873
+ code += `},\n`;
874
+ logicArgs = [];
875
+ breakBody = true;
876
+ break;
877
+ }
878
+ case 'updateBy': {
879
+ code += `body: {`;
880
+ const argsStr = logicArgs
881
+ .map((arg: any) => {
882
+ const name = arg.keyword === 'body' ? 'entity' : arg.keyword;
883
+ // filter回调函数
884
+ if (arg.expression.returnExpression) {
885
+ const argsStr = JSON.stringify(handleMember(arg.expression.returnExpression)).replace(/"__@@(.*?)@@__"/g, '$1');
886
+ return `${name}: {
874
887
  concept: 'Function',
875
888
  name: 'filter',
876
889
  returnExpression: this.$resolveRequestData(${argsStr})
877
890
  }`;
878
- } else {
879
- return `${name}: ${arg.expression.toJS(shiftState(state, code))}`;
880
- }
881
- })
882
- .join(',');
883
- code += argsStr;
884
- code += `},\n`;
885
- logicArgs = [];
886
- breakBody = true;
887
- break;
888
- }
889
- case 'deleteBy': {
890
- code += `body: `;
891
- const argsStr = JSON.stringify(handleMember((logicArgs[0].expression as any).returnExpression)).replace(/"__@@(.*?)@@__"/g, '$1');
892
- code += `{
891
+ }
892
+ return `${name}: ${arg.expression.toJS(shiftState(state, code))}`;
893
+ })
894
+ .join(',');
895
+ code += argsStr;
896
+ code += `},\n`;
897
+ logicArgs = [];
898
+ breakBody = true;
899
+ break;
900
+ }
901
+ case 'deleteBy': {
902
+ code += `body: `;
903
+ const argsStr = JSON.stringify(handleMember((logicArgs[0].expression as any).returnExpression)).replace(/"__@@(.*?)@@__"/g, '$1');
904
+ code += `{
893
905
  concept: 'Function',
894
906
  name: 'filter',
895
907
  returnExpression: this.$resolveRequestData(${argsStr})
896
908
  }`;
897
- code += `,\n`;
898
- logicArgs = [];
899
- breakBody = true;
900
- break;
901
- }
902
- }
903
- const bodyArgument = logicArgs.find((arg) => arg.keyword === 'body');
904
- if (!breakBody) {
905
- if (bodyArgument) {
906
- code += `\n${bodyArgument?.keyword}: ${bodyArgument?.toJS(shiftState(state, code))}`;
907
- } else {
908
- code += `body: {}`;
909
- }
910
- }
911
- } else {
912
- code += `path: {},
909
+ code += `,\n`;
910
+ logicArgs = [];
911
+ breakBody = true;
912
+ break;
913
+ }
914
+ }
915
+ const bodyArgument = logicArgs.find((arg) => arg.keyword === 'body');
916
+ if (!breakBody) {
917
+ if (bodyArgument) {
918
+ code += `\n${bodyArgument?.keyword}: ${bodyArgument?.toJS(shiftState(state, code))}`;
919
+ } else {
920
+ code += `body: {}`;
921
+ }
922
+ }
923
+ } else {
924
+ code += `path: {},
913
925
  body: {`;
914
- if (!isProcessLogic) {
915
- const argsStr = args
916
- .map((arg, index) => {
917
- const actualArg = completeArguments[index];
918
- return {
919
- keyword: arg?.name,
920
- arg: actualArg,
921
- };
922
- })
923
- .filter((item) => Boolean(item.arg.expression))
924
- .map((obj) => `\n${obj?.keyword}: ${obj?.arg?.toJS(shiftState(state, code))}`)
925
- .join(', ');
926
- code += argsStr;
927
- if (Array.isArray(typeArguments) && typeArguments.length) {
928
- code += `,\n__typeArguments: ${JSON5.stringify(this.typeArguments)}`;
929
- }
930
- }
931
- code += '\n}';
932
- }
933
- code += '\n})';
934
- } else {
935
- if (isComponentLogic) {
936
- // 组件ref元素的对象没有qu dao的容错
937
- code += `this.$refs && this.$refs[\`${refName}\`] && this.$refs[\`${refName}\`].${this.calleeName} && this.$refs[\`${refName}\`].${this.calleeName}`;
938
- } else if (calleeNamespace === 'nasl.ui' || calleeNamespace === 'nasl.util') {
939
- switch (this.calleeName) {
940
- case 'showMessage':
941
- code += `this.$toast.show`;
942
- break;
943
- case 'consoleLog':
944
- code += `console.log`;
945
- break;
946
- case 'jsonSerialize':
947
- code += `JSON.stringify`;
948
- break;
949
- case 'jsonDeserialize':
950
- code += `JSON.parse`;
951
- break;
952
- }
953
- } else if (calleeNamespace === 'nasl.browser' || calleeNamespace === 'nasl.auth' || calleeNamespace === 'nasl.configuration' || calleeNamespace === 'nasl.process' || calleeNamespace === 'nasl.io') {
954
- code += `this.$global.${this.calleeName}`;
955
- } else if (calleeNamespace === 'nasl.event') {
956
- code += `event && event.${this.calleeName} && event.${this.calleeName}`; // 防止万一event不存在
957
- } else if (isFrontendLibrary) {
958
- code += `this.$library['${extensionName}'].${this.calleeName}`;
959
- } else {
960
- code += `this.${this.calleeName}`;
961
- }
962
- if (calleeNamespace === 'nasl.process' || calleeNamespace === 'nasl.auth') {
963
- code += '({';
964
- this.arguments?.filter((arg) => arg?.expression)
965
- .forEach((arg, index) => {
966
- code += `${arg.keyword}: ${arg?.toJS(shiftState(state, code))}`;
967
- if (index !== this.arguments?.length - 1)
968
- code += ', ';
969
- });
970
- code += '})';
971
- } else {
972
- code += '(';
973
- const needToString = ['showMessage', 'consoleLog'].includes(this.calleeName);
974
- if (needToString) {
975
- code += `this.$utils['ToString'](`;
976
- }
977
- if (Array.isArray(completeArguments) && completeArguments.length) {
978
- completeArguments.forEach((arg, index) => {
979
- code += arg?.toJS(shiftState(state, code));
980
- if (index !== completeArguments?.length - 1)
981
- code += ', ';
982
- });
983
- if (needToString) {
984
- const arg = this.arguments[0];
985
- const argTypeAnnotation = (arg as any).typeAnnotation || arg.__TypeAnnotation;
986
- if (argTypeAnnotation) {
987
- code += `, '${argTypeAnnotation?.sortedTypeKey}'`;
988
- }
989
- }
990
- }
991
- if (needToString) {
992
- code += `)`;
993
- }
994
- code += ')';
995
- }
926
+ if (!isProcessLogic) {
927
+ const argsStr = args
928
+ .map((arg, index) => {
929
+ const actualArg = completeArguments[index];
930
+ return {
931
+ keyword: arg?.name,
932
+ arg: actualArg,
933
+ };
934
+ })
935
+ .filter((item) => isShowArgument(item.arg))
936
+ .map((obj) => `\n${obj?.keyword}: ${obj?.arg?.toJS(shiftState(state, code))}`)
937
+ .join(', ');
938
+ code += argsStr;
939
+ if (Array.isArray(typeArguments) && typeArguments.length) {
940
+ code += `,\n__typeArguments: ${JSON5.stringify(this.typeArguments)}`;
941
+ }
996
942
  }
997
-
998
- function handleMember(root: any): any {
999
- if (!root)
1000
- return;
1001
- if (root.concept === 'Identifier') {
1002
- return {
1003
- concept: root.concept,
1004
- name: root.name,
1005
- value: `__@@${root.toJS()}@@__`,
1006
- expression: root.toJS(),
1007
- };
1008
- }
1009
- if (root.concept === 'MemberExpression') {
1010
- let concept = root.concept;
1011
- let value = root.value;
1012
- if (root?.object.name === '_') {
1013
- return {
1014
- concept,
1015
- name: root.name,
1016
- value,
1017
- object: root.object,
1018
- property: root.property,
1019
- };
1020
- }
1021
- let expression = root.toJS();
1022
- if (root.object?.namespace === 'app.enums') {
1023
- value = expression.replace(/^"(.+)"$/, '$1');
1024
- expression = undefined;
1025
- concept = 'StringLiteral';
1026
- } else {
1027
- value = `__@@${expression}@@__`;
1028
- }
1029
- return {
1030
- concept,
1031
- name: root.name,
1032
- value,
1033
- expression,
1034
- };
1035
- }
1036
-
1037
- let left;
1038
- if (root.concept === 'UnaryExpression') {
1039
- left = handleMember(root.argument);
1040
- } else {
1041
- left = handleMember(root.left);
943
+ code += '\n}';
944
+ }
945
+ code += '\n})';
946
+ } else {
947
+ if (isComponentLogic) {
948
+ // 组件ref元素的对象没有qu dao的容错
949
+ code += `this.$refs && this.$refs[\`${refName}\`] && this.$refs[\`${refName}\`].${this.calleeName} && this.$refs[\`${refName}\`].${this.calleeName}`;
950
+ } else if (calleeNamespace === 'nasl.ui' || calleeNamespace === 'nasl.util') {
951
+ switch (this.calleeName) {
952
+ case 'showMessage':
953
+ code += `this.$toast.show`;
954
+ break;
955
+ case 'consoleLog':
956
+ code += `console.log`;
957
+ break;
958
+ case 'jsonSerialize':
959
+ code += `JSON.stringify`;
960
+ break;
961
+ case 'jsonDeserialize':
962
+ code += `JSON.parse`;
963
+ break;
964
+ }
965
+ } else if (
966
+ calleeNamespace === 'nasl.browser' ||
967
+ calleeNamespace === 'nasl.auth' ||
968
+ calleeNamespace === 'nasl.configuration' ||
969
+ calleeNamespace === 'nasl.process' ||
970
+ calleeNamespace === 'nasl.io'
971
+ ) {
972
+ code += `this.$global.${this.calleeName}`;
973
+ } else if (calleeNamespace === 'nasl.event') {
974
+ code += `event && event.${this.calleeName} && event.${this.calleeName}`; // 防止万一event不存在
975
+ } else if (isFrontendLibrary) {
976
+ code += `this.$library['${extensionName}'].${this.calleeName}`;
977
+ } else {
978
+ code += `this.${this.calleeName}`;
979
+ }
980
+ if (calleeNamespace === 'nasl.process' || calleeNamespace === 'nasl.auth') {
981
+ code += '({';
982
+ this.arguments
983
+ ?.filter((arg) => arg?.expression)
984
+ .forEach((arg, index) => {
985
+ code += `${arg.keyword}: ${arg?.toJS(shiftState(state, code))}`;
986
+ if (index !== this.arguments?.length - 1) code += ', ';
987
+ });
988
+ code += '})';
989
+ } else {
990
+ code += '(';
991
+ const needToString = ['showMessage', 'consoleLog'].includes(this.calleeName);
992
+ if (needToString) {
993
+ code += `this.$utils['ToString'](`;
994
+ }
995
+ if (Array.isArray(completeArguments) && completeArguments.length) {
996
+ completeArguments.forEach((arg, index) => {
997
+ code += arg?.toJS(shiftState(state, code));
998
+ if (index !== completeArguments?.length - 1) code += ', ';
999
+ });
1000
+ if (needToString) {
1001
+ const arg = this.arguments[0];
1002
+ const argTypeAnnotation = (arg as any).typeAnnotation || arg.__TypeAnnotation;
1003
+ if (argTypeAnnotation) {
1004
+ code += `, '${argTypeAnnotation?.sortedTypeKey}'`;
1042
1005
  }
1043
- const right = handleMember(root.right);
1044
- return {
1045
- concept: root.concept,
1046
- name: root.name,
1047
- value: root.value,
1048
- expression: root.expression,
1049
- operator: root.operator,
1050
- left,
1051
- right,
1052
- };
1006
+ }
1053
1007
  }
1054
- const typeAnnotation = (this as any).typeAnnotation || this.__TypeAnnotation;
1055
- const needGenInitFromSchema = typeAnnotation && (
1056
- !['primitive', 'union'].includes(typeAnnotation.typeKind)
1057
- || typeAnnotation.typeName === 'DateTime'
1058
- );
1059
- if (needGenInitFromSchema) {
1060
- code = `this.$genInitFromSchema('${typeAnnotation?.sortedTypeKey}', ${code})`;
1008
+ if (needToString) {
1009
+ code += `)`;
1061
1010
  }
1062
1011
  code += ')';
1063
- return code;
1064
- }
1065
-
1066
- toBrief(): string {
1067
- return this.arguments.map((a) => a.toBrief()).join('<br />');
1068
- }
1069
-
1070
- get useValidation() {
1071
- const {
1072
- validation,
1073
- rootNode,
1074
- } = this;
1075
-
1076
- return (
1077
- rootNode?.preferenceMap.serverValidationRules === 'custom' &&
1078
- Boolean(validation)
1079
- );
1080
- }
1081
-
1082
- get useIife() {
1083
- return Boolean(this.handleError || this.useValidation);
1012
+ }
1084
1013
  }
1085
1014
 
1086
- @withSourceMap()
1087
- toEmbeddedTS(state?: TranslatorState): string {
1088
- let code = '';
1089
-
1090
- const {
1091
- handleError,
1092
- calleeKey,
1093
- calleeName,
1094
- parentKey,
1095
- typeArguments,
1096
- tsCalleeNamespace,
1097
- completeArguments,
1098
- parentNode,
1099
- validation,
1100
- useIife,
1101
- useValidation,
1102
- arguments: logicArgs,
1103
- } = this;
1104
-
1105
- /** 设置函数范型参数 */
1106
- const setTypeArguments = () => {
1107
- if (Array.isArray(typeArguments) && typeArguments.length) {
1108
- // 如果有内容
1109
- code += `<`;
1110
- typeArguments.forEach((arg, i, arr) => {
1111
- code += arg.toEmbeddedTS(shiftState(state, code, { tabSize: 0 }));
1112
- if (i !== arr.length - 1) {
1113
- code += ', ';
1114
- }
1115
- });
1116
- code += `>`;
1117
- }
1118
- };
1119
- /** 设置输入参数 */
1120
- const setInputParam = () => {
1121
- const paramRequired = ['showMessage', 'consoleLog'].includes(calleeName);
1122
- if ((tsCalleeNamespace.startsWith('elements') && tsCalleeNamespace.endsWith('logics')) || tsCalleeNamespace.startsWith('nasl.')) {
1123
- code += '(';
1124
- logicArgs.forEach((arg, index) => {
1125
- // 页面逻辑先都非必填
1126
- code += arg.toEmbeddedTS(shiftState(state, code), paramRequired);
1127
- if (index !== logicArgs.length - 1)
1128
- code += ', ';
1129
- });
1130
- code += ')';
1131
- } else {
1132
- if (completeArguments.length) {
1133
- code += '(';
1134
- completeArguments.forEach((arg, index) => {
1135
- // 取到是不是必填放入参数中
1136
- code += arg.toEmbeddedTS(shiftState(state, code), arg?.paramRequired);
1137
- if (index !== logicArgs.length - 1)
1138
- code += ', ';
1139
- });
1140
- code += ')';
1141
- } else {
1142
- code += '()';
1143
- }
1144
- }
1145
- };
1146
-
1147
- /** 设置表达式末尾分号 */
1148
- const setEndSemi = () => {
1149
- const { concept: parentConcept } = parentNode ?? {};
1150
- if (
1151
- !['test', 'patterns','returnExpression'].includes(parentKey) &&
1152
- ![
1153
- 'Argument',
1154
- 'Assignment',
1155
- 'ForEachStatement',
1156
- 'SelectMembers',
1157
- 'UnaryExpression',
1158
- 'BinaryExpression',
1159
- 'StringInterpolation',
1160
- 'MemberExpression',
1161
- 'NewMap',
1162
- 'NewList',
1163
- ].includes(parentConcept)
1164
- ) {
1165
- code += ';';
1166
- }
1015
+ function handleMember(root: any): any {
1016
+ if (!root) return;
1017
+ if (root.concept === 'Identifier') {
1018
+ return {
1019
+ concept: root.concept,
1020
+ name: root.name,
1021
+ value: `__@@${root.toJS()}@@__`,
1022
+ expression: root.toJS(),
1167
1023
  };
1168
-
1169
- if (useIife) {
1170
- code += '(() =>{\nconst wrapper = ';
1171
-
1172
- if (handleError) {
1173
- code += 'nasl.util.autoHandleError(';
1174
- }
1175
-
1176
- if (useValidation) {
1177
- code += 'nasl.util.callLogicWithChecker(';
1178
- }
1179
-
1180
- code += calleeKey;
1181
- setTypeArguments();
1182
-
1183
- if (useValidation) {
1184
- code += ', (';
1185
- code += completeArguments.map((item) => item.keyword).join(', ');
1186
- code += ') => {\n';
1187
- code += validation.toEmbeddedTS(shiftState(state, code));
1188
- code += ';\n})';
1189
- }
1190
-
1191
- if (handleError) {
1192
- code += ')';
1193
- }
1194
-
1195
- code += ';\nreturn wrapper';
1196
- setInputParam();
1197
- code += ';\n})()';
1198
- } else {
1199
- code += calleeKey;
1200
- setTypeArguments();
1201
- setInputParam();
1024
+ }
1025
+ if (root.concept === 'MemberExpression') {
1026
+ let { concept } = root;
1027
+ let { value } = root;
1028
+ if (root?.object.name === '_') {
1029
+ return {
1030
+ concept,
1031
+ name: root.name,
1032
+ value,
1033
+ object: root.object,
1034
+ property: root.property,
1035
+ };
1202
1036
  }
1203
-
1204
- setEndSemi();
1205
-
1206
- return code;
1207
- }
1208
-
1209
- // 通过内容过去节点
1210
- getCallNode(): Logic | undefined {
1211
- let node;
1212
- // 如果是页面局部逻辑
1213
- if (!this.calleeNamespace && this.calleeName && this.view) {
1214
- node = this.view.logics.find((l) => l.name === this.calleeName);
1215
- } else if (this.calleeNamespace?.startsWith('nasl.')) {
1216
- // 如果是页面组件
1217
- node = getNaslNodeByNodeCallee(this.calleeNamespace, this.calleeName);
1037
+ let expression = root.toJS();
1038
+ if (root.object?.namespace === 'app.enums') {
1039
+ value = expression.replace(/^"(.+)"$/, '$1');
1040
+ expression = undefined;
1041
+ concept = 'StringLiteral';
1218
1042
  } else {
1219
- // 如果是其余app下自定义逻辑
1220
- try {
1221
- node = getNodeByNodeCallee(this.app, this.calleewholeKey, (key: any, tempPoint: any) => {
1222
- // 处理 NASL 中未定义的假的节点
1223
- if (key === tempPoint.name) {
1224
- return {
1225
- tempPoint,
1226
- state: 1,
1227
- };
1228
- }
1229
- const t = tempPoint[key];
1230
- return {
1231
- tempPoint: t,
1232
- state: Array.isArray(t) ? 2 : 1,
1233
- };
1234
- });
1235
- } catch (err) { }
1043
+ value = `__@@${expression}@@__`;
1236
1044
  }
1237
- return node;
1238
- }
1239
-
1240
- /** 获取类型标注时的偏移量 */
1241
- getQuickInfoOffset(detail: TSPPosition, code: string): TSPPosition {
1242
- if (!this.useIife) {
1243
- return { ...detail };
1244
- }
1245
-
1246
- const characterOffset = 8;
1247
- const lines = code.split('\n');
1248
- // @ts-ignore
1249
- const lineOffset = lines.findLastIndex((item) => item.startsWith('return wrapper'));
1250
-
1251
1045
  return {
1252
- line: detail.line + lineOffset,
1253
- offset: characterOffset,
1046
+ concept,
1047
+ name: root.name,
1048
+ value,
1049
+ expression,
1254
1050
  };
1051
+ }
1052
+
1053
+ let left;
1054
+ if (root.concept === 'UnaryExpression') {
1055
+ left = handleMember(root.argument);
1056
+ } else {
1057
+ left = handleMember(root.left);
1058
+ }
1059
+ const right = handleMember(root.right);
1060
+ return {
1061
+ concept: root.concept,
1062
+ name: root.name,
1063
+ value: root.value,
1064
+ expression: root.expression,
1065
+ operator: root.operator,
1066
+ left,
1067
+ right,
1068
+ };
1255
1069
  }
1256
-
1257
- /**
1258
- * 是否允许验证规则
1259
- * - 当前元素在前端,但是调用的函数在后端
1260
- */
1261
- enableValidation() {
1262
- const calledLogic = this.getCallNode();
1263
- return Boolean(this.view) && calledLogic && !calledLogic.view;
1070
+ const typeAnnotation = (this as any).typeAnnotation || this.__TypeAnnotation;
1071
+ const needGenInitFromSchema =
1072
+ typeAnnotation && (!['primitive', 'union'].includes(typeAnnotation.typeKind) || typeAnnotation.typeName === 'DateTime');
1073
+ if (needGenInitFromSchema) {
1074
+ code = `this.$genInitFromSchema('${typeAnnotation?.sortedTypeKey}', ${code})`;
1264
1075
  }
1265
-
1266
- // 可以设置默认值的节点
1267
- // 目前只开放了app下的,所以这些节点,查找引用吧默认值塞回来
1268
- get completeArguments() {
1269
- const callArguments = (this.arguments ?? []).slice();
1270
- // 没有参数时可以跳过查询原逻辑标签
1271
- const node = callArguments.length > 0 ? this.getCallNode() : undefined;
1272
- const logicParams = node?.params ?? [];
1273
-
1274
- callArguments.forEach((arg, index) => {
1275
- const param = logicParams[index] || ({} as Param);
1276
- // 打开了必填,
1277
- // 或者遗留问题,没有required = undefined 而且没有defaultValue,就是之前的必填项
1278
- arg.paramRequired = Boolean(param.required || (param.required === undefined && !param.defaultValue));
1279
- arg.paramTypeAnnotation = undefined;
1280
- arg.paramDefaultValue = undefined;
1281
- // 强制更新当前的 keyword
1282
- arg.keyword = (param?.name && param.name.length > 0) ? param.name : arg.keyword;
1283
- // 取到是不是必填放入参数中
1284
- if (param && !arg.expression) {
1285
- // 非必填时 才会有默认值
1286
- arg.paramTypeAnnotation = param.typeAnnotation;
1287
- arg.paramDefaultValue = param.defaultValue;
1288
- }
1076
+ code += ')';
1077
+ return code;
1078
+ }
1079
+
1080
+ toBrief(): string {
1081
+ return this.arguments.map((a) => a.toBrief()).join('<br />');
1082
+ }
1083
+
1084
+ get useValidation() {
1085
+ const { validation, rootNode } = this;
1086
+
1087
+ return rootNode?.preferenceMap.serverValidationRules === 'custom' && Boolean(validation);
1088
+ }
1089
+
1090
+ get useIife() {
1091
+ return Boolean(this.handleError || this.useValidation);
1092
+ }
1093
+
1094
+ @withSourceMap()
1095
+ toEmbeddedTS(state?: TranslatorState): string {
1096
+ let code = '';
1097
+
1098
+ const {
1099
+ handleError,
1100
+ calleeKey,
1101
+ calleeName,
1102
+ parentKey,
1103
+ typeArguments,
1104
+ tsCalleeNamespace,
1105
+ completeArguments,
1106
+ parentNode,
1107
+ validation,
1108
+ useIife,
1109
+ useValidation,
1110
+ arguments: logicArgs,
1111
+ } = this;
1112
+
1113
+ /** 设置函数范型参数 */
1114
+ const setTypeArguments = () => {
1115
+ if (Array.isArray(typeArguments) && typeArguments.length) {
1116
+ // 如果有内容
1117
+ code += `<`;
1118
+ typeArguments.forEach((arg, i, arr) => {
1119
+ code += arg.toEmbeddedTS(shiftState(state, code, { tabSize: 0 }));
1120
+ if (i !== arr.length - 1) {
1121
+ code += ', ';
1122
+ }
1123
+ });
1124
+ code += `>`;
1125
+ }
1126
+ };
1127
+ /** 设置输入参数 */
1128
+ const setInputParam = () => {
1129
+ const paramRequired = ['showMessage', 'consoleLog'].includes(calleeName);
1130
+ if ((tsCalleeNamespace.startsWith('elements') && tsCalleeNamespace.endsWith('logics')) || tsCalleeNamespace.startsWith('nasl.')) {
1131
+ code += '(';
1132
+ logicArgs.forEach((arg, index) => {
1133
+ // 页面逻辑先都非必填
1134
+ code += arg.toEmbeddedTS(shiftState(state, code), paramRequired);
1135
+ if (index !== logicArgs.length - 1) code += ', ';
1136
+ });
1137
+ code += ')';
1138
+ } else if (completeArguments.length) {
1139
+ code += '(';
1140
+ completeArguments.forEach((arg, index) => {
1141
+ // 取到是不是必填放入参数中
1142
+ code += arg.toEmbeddedTS(shiftState(state, code), arg?.paramRequired);
1143
+ if (index !== logicArgs.length - 1) code += ', ';
1289
1144
  });
1145
+ code += ')';
1146
+ } else {
1147
+ code += '()';
1148
+ }
1149
+ };
1150
+
1151
+ /** 设置表达式末尾分号 */
1152
+ const setEndSemi = () => {
1153
+ const { concept: parentConcept } = parentNode ?? {};
1154
+ if (
1155
+ !['test', 'patterns', 'returnExpression'].includes(parentKey) &&
1156
+ ![
1157
+ 'Argument',
1158
+ 'Assignment',
1159
+ 'ForEachStatement',
1160
+ 'SelectMembers',
1161
+ 'UnaryExpression',
1162
+ 'BinaryExpression',
1163
+ 'StringInterpolation',
1164
+ 'MemberExpression',
1165
+ 'NewMap',
1166
+ 'NewList',
1167
+ ].includes(parentConcept)
1168
+ ) {
1169
+ code += ';';
1170
+ }
1171
+ };
1172
+
1173
+ if (useIife) {
1174
+ code += '(() =>{\nconst wrapper = ';
1175
+
1176
+ if (handleError) {
1177
+ code += 'nasl.util.autoHandleError(';
1178
+ }
1179
+
1180
+ if (useValidation) {
1181
+ code += 'nasl.util.callLogicWithChecker(';
1182
+ }
1183
+
1184
+ code += calleeKey;
1185
+ setTypeArguments();
1186
+
1187
+ if (useValidation) {
1188
+ code += ', (';
1189
+ code += completeArguments.map((item) => item.keyword).join(', ');
1190
+ code += ') => {\n';
1191
+ code += validation.toEmbeddedTS(shiftState(state, code));
1192
+ code += ';\n})';
1193
+ }
1194
+
1195
+ if (handleError) {
1196
+ code += ')';
1197
+ }
1198
+
1199
+ code += ';\nreturn wrapper';
1200
+ setInputParam();
1201
+ code += ';\n})()';
1202
+ } else {
1203
+ code += calleeKey;
1204
+ setTypeArguments();
1205
+ setInputParam();
1206
+ }
1290
1207
 
1291
- return callArguments;
1208
+ setEndSemi();
1209
+
1210
+ return code;
1211
+ }
1212
+
1213
+ @withSourceMap()
1214
+ toNaturalTS(state?: TranslatorState): string {
1215
+ const {
1216
+ handleError,
1217
+ calleeKey,
1218
+ calleeName,
1219
+ parentKey,
1220
+ typeArguments,
1221
+ tsCalleeNamespace,
1222
+ completeArguments,
1223
+ parentNode,
1224
+ validation,
1225
+ useIife,
1226
+ useValidation,
1227
+ arguments: logicArgs,
1228
+ } = this;
1229
+
1230
+ let code = calleeKey.replace('__elements', '$refs');
1231
+ if (/^app.+?\.entities\..+?logics/.test(code))
1232
+ code = code.replace(/^app.+?\.entities\.(.+?)\.logics/, '$1');
1233
+ /** 设置函数范型参数 */
1234
+ const setTypeArguments = () => {
1235
+ if (Array.isArray(typeArguments) && typeArguments.length) {
1236
+ // 如果有内容
1237
+ code += `<`;
1238
+ typeArguments.forEach((arg, i, arr) => {
1239
+ code += arg.toNaturalTS(shiftState(state, code, { tabSize: 0 }));
1240
+ if (i !== arr.length - 1) {
1241
+ code += ', ';
1242
+ }
1243
+ });
1244
+ code += `>`;
1245
+ }
1246
+ };
1247
+ /** 设置输入参数 */
1248
+ const setInputParam = () => {
1249
+ const paramRequired = ['showMessage', 'consoleLog'].includes(calleeName);
1250
+ if ((tsCalleeNamespace.startsWith('elements') && tsCalleeNamespace.endsWith('logics')) || tsCalleeNamespace.startsWith('nasl.')) {
1251
+ code += '(';
1252
+ logicArgs.forEach((arg, index) => {
1253
+ // 页面逻辑先都非必填
1254
+ code += arg.toNaturalTS(shiftState(state, code), paramRequired);
1255
+ if (index !== logicArgs.length - 1) code += ', ';
1256
+ });
1257
+ code += ')';
1258
+ } else if (completeArguments.length) {
1259
+ code += '(';
1260
+ completeArguments.forEach((arg, index) => {
1261
+ // 取到是不是必填放入参数中
1262
+ code += arg.toNaturalTS(shiftState(state, code), arg?.paramRequired);
1263
+ if (index !== logicArgs.length - 1) code += ', ';
1264
+ });
1265
+ code += ')';
1266
+ } else {
1267
+ code += '()';
1268
+ }
1269
+ };
1270
+
1271
+ /** 设置表达式末尾分号 */
1272
+ const setEndSemi = () => {
1273
+ const { concept: parentConcept } = parentNode ?? {};
1274
+ if (
1275
+ !['test', 'patterns', 'returnExpression'].includes(parentKey) &&
1276
+ ![
1277
+ 'Argument',
1278
+ 'Assignment',
1279
+ 'ForEachStatement',
1280
+ 'SelectMembers',
1281
+ 'UnaryExpression',
1282
+ 'BinaryExpression',
1283
+ 'StringInterpolation',
1284
+ 'MemberExpression',
1285
+ 'NewMap',
1286
+ 'NewList',
1287
+ ].includes(parentConcept)
1288
+ ) {
1289
+ code += ';';
1290
+ }
1291
+ };
1292
+
1293
+ if (useIife) {
1294
+ code += '(() =>{\nconst wrapper = ';
1295
+
1296
+ if (handleError) {
1297
+ code += 'nasl.util.autoHandleError(';
1298
+ }
1299
+
1300
+ if (useValidation) {
1301
+ code += 'nasl.util.callLogicWithChecker(';
1302
+ }
1303
+
1304
+ code += calleeKey;
1305
+ setTypeArguments();
1306
+
1307
+ if (useValidation) {
1308
+ code += ', (';
1309
+ code += completeArguments.map((item) => item.keyword).join(', ');
1310
+ code += ') => {\n';
1311
+ code += validation.toNaturalTS(shiftState(state, code));
1312
+ code += ';\n})';
1313
+ }
1314
+
1315
+ if (handleError) {
1316
+ code += ')';
1317
+ }
1318
+
1319
+ code += ';\nreturn wrapper';
1320
+ setInputParam();
1321
+ code += ';\n})()';
1322
+ } else {
1323
+ code += calleeKey;
1324
+ setTypeArguments();
1325
+ setInputParam();
1292
1326
  }
1293
1327
 
1294
- static isSystem(node: CallLogic) {
1295
- // 如此处需要更新,则需同时更新 menu-poppup 组件下的 includesSystemLogic 校验逻辑
1296
- return ['nasl.process', 'nasl.browser', 'nasl.auth', 'nasl.configuration', 'nasl.io'].includes(node?.calleeNamespace);
1328
+ setEndSemi();
1329
+
1330
+ return code;
1331
+ }
1332
+
1333
+ // 通过内容过去节点
1334
+ getCallNode(): Logic | undefined {
1335
+ let node;
1336
+ // 如果是页面局部逻辑
1337
+ if (!this.calleeNamespace && this.calleeName && this.view) {
1338
+ node = this.view.logics.find((l) => l.name === this.calleeName);
1339
+ } else if (this.calleeNamespace?.startsWith('nasl.')) {
1340
+ // 如果是页面组件
1341
+ node = getNaslNodeByNodeCallee(this.calleeNamespace, this.calleeName);
1342
+ } else {
1343
+ // 如果是其余app下自定义逻辑
1344
+ try {
1345
+ node = getNodeByNodeCallee(this.app, this.calleewholeKey, (key: any, tempPoint: any) => {
1346
+ // 处理 NASL 中未定义的假的节点
1347
+ if (key === tempPoint.name) {
1348
+ return {
1349
+ tempPoint,
1350
+ state: 1,
1351
+ };
1352
+ }
1353
+ const t = tempPoint[key];
1354
+ return {
1355
+ tempPoint: t,
1356
+ state: Array.isArray(t) ? 2 : 1,
1357
+ };
1358
+ });
1359
+ } catch (err) { }
1297
1360
  }
1361
+ return node;
1362
+ }
1298
1363
 
1299
- public static getDefaultOptions() {
1300
- return {};
1364
+ /** 获取类型标注时的偏移量 */
1365
+ getQuickInfoOffset(detail: TSPPosition, code: string): TSPPosition {
1366
+ if (!this.useIife) {
1367
+ return { ...detail };
1301
1368
  }
1302
- //================================================================================
1303
- // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1304
- // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1305
- //================================================================================
1369
+
1370
+ const characterOffset = 8;
1371
+ const lines = code.split('\n');
1372
+ // @ts-ignore
1373
+ const lineOffset = lines.findLastIndex((item) => item.startsWith('return wrapper'));
1374
+
1375
+ return {
1376
+ line: detail.line + lineOffset,
1377
+ offset: characterOffset,
1378
+ };
1379
+ }
1380
+
1381
+ /**
1382
+ * 是否允许验证规则
1383
+ * - 当前元素在前端,但是调用的函数在后端
1384
+ */
1385
+ enableValidation() {
1386
+ const calledLogic = this.getCallNode();
1387
+ return Boolean(this.view) && calledLogic && !calledLogic.view;
1388
+ }
1389
+
1390
+ // 可以设置默认值的节点
1391
+ // 目前只开放了app下的,所以这些节点,查找引用吧默认值塞回来
1392
+ get completeArguments() {
1393
+ const callArguments = (this.arguments ?? []).slice();
1394
+ // 没有参数时可以跳过查询原逻辑标签
1395
+ const node = callArguments.length > 0 ? this.getCallNode() : undefined;
1396
+ const logicParams = node?.params ?? [];
1397
+
1398
+ callArguments.forEach((arg, index) => {
1399
+ const param = logicParams[index] || ({} as Param);
1400
+ // 打开了必填,
1401
+ // 或者遗留问题,没有required = undefined 而且没有defaultValue,就是之前的必填项
1402
+ arg.paramRequired = Boolean(param.required || (param.required === undefined && !param.defaultValue));
1403
+ arg.paramTypeAnnotation = undefined;
1404
+ arg.paramDefaultValue = undefined;
1405
+ // 强制更新当前的 keyword
1406
+ arg.keyword = param?.name && param.name.length > 0 ? param.name : arg.keyword;
1407
+ // 取到是不是必填放入参数中
1408
+ if (param && !arg.expression) {
1409
+ // 非必填时 才会有默认值
1410
+ arg.paramTypeAnnotation = param.typeAnnotation;
1411
+ arg.paramDefaultValue = param.defaultValue;
1412
+ }
1413
+ });
1414
+
1415
+ return callArguments;
1416
+ }
1417
+
1418
+ static isSystem(node: CallLogic) {
1419
+ // 如此处需要更新,则需同时更新 menu-poppup 组件下的 includesSystemLogic 校验逻辑
1420
+ return ['nasl.process', 'nasl.browser', 'nasl.auth', 'nasl.configuration', 'nasl.io'].includes(node?.calleeNamespace);
1421
+ }
1422
+
1423
+ public static getDefaultOptions() {
1424
+ return {};
1425
+ }
1426
+ //= ===============================================================================
1427
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1428
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1429
+ //= ===============================================================================
1306
1430
  }
1307
1431
 
1308
1432
  classMap.CallLogic = CallLogic;
1309
1433
  export default CallLogic;
1310
- //================================================================================
1434
+ //= ===============================================================================
1311
1435
  // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
1312
1436
  // 自动生成的代码已结束。下面可以手动编写。
1313
- //================================================================================
1437
+ //= ===============================================================================