@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
@@ -9,7 +9,7 @@ import { loadThen } from '../service/storage/storagePoint';
9
9
 
10
10
  import { EventEmitter, EventPayload, Params } from './EventEmitter';
11
11
  import * as utils from '../utils';
12
- import classMap from '../common/classMap';
12
+ import classMap from './classMap';
13
13
  import { action, circular, excludedInJSON, property, getConceptConstructor, getConceptPropertyMap } from '../decorators';
14
14
  import { Diagnostic } from '../manager/diagnostic';
15
15
  import type { ViewElement, TypeAnnotation, App } from '..';
@@ -18,1107 +18,1185 @@ import { sentryMonitorNaslNode } from '../sentry';
18
18
  import operations from '../breakpoint/shared/operations';
19
19
  import type { SynatxNode, SynatxNodeConcept } from '../concepts';
20
20
 
21
+ // 确保属性都是定义过的
22
+ function ensureDefined(object: any, concept: string) {
23
+ if (!object) {
24
+ return object;
25
+ }
26
+ const newObject: any = {};
27
+ const actualConcept = object?.concept || concept;
28
+ if (actualConcept) {
29
+ const propertyMap = getConceptPropertyMap(actualConcept);
30
+ for (const key in object) {
31
+ const property = propertyMap.get(key);
32
+ if (property) {
33
+ const objProperty = object[key] ?? null;
34
+ const propertyConcept = property?.objectRef;
35
+ if (propertyConcept) {
36
+ if (Array.isArray(objProperty)) {
37
+ newObject[key] = objProperty.map((objItem: any) => {
38
+ return ensureDefined(objItem, propertyConcept);
39
+ });
40
+ } else {
41
+ newObject[key] = ensureDefined(objProperty, propertyConcept);
42
+ }
43
+ } else {
44
+ newObject[key] = objProperty;
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return newObject;
50
+ }
51
+
21
52
  /**
22
53
  * 顶点类
23
54
  * 属性均为只读,仅在初始化和 load 的情况下可以修改
24
55
  */
25
56
  @sentryMonitorNaslNode
26
57
  export class BaseNode extends EventEmitter {
58
+ /**
59
+ * 可修改标志,内部属性
60
+ * 标记在构造函数结束后是否可修改
61
+ */
62
+ @excludedInJSON()
63
+ _mutable = true;
64
+
65
+ /**
66
+ * 概念
67
+ */
68
+ @property()
69
+ concept: string = undefined;
70
+
71
+ /**
72
+ * toJSON 时需要去除的键,为了避免出现 CircularJSON
73
+ */
74
+ readonly JSON_EXCLUDED_KEYS: Set<string>;
75
+
76
+ /**
77
+ * 唯一 Id
78
+ */
79
+ id: string = uuidv4().replace(/-/g, '');
80
+
81
+ /**
82
+ * 变动时间
83
+ */
84
+ @property()
85
+ changedTime: number = undefined;
86
+
87
+ /**
88
+ * 分支名称
89
+ */
90
+ @property()
91
+ branchName: string = undefined;
92
+
93
+ /**
94
+ * 合并代码相关
95
+ */
96
+ @property()
97
+ workingCopy: object = undefined;
98
+
99
+ @property()
100
+ branch: object = undefined;
101
+
102
+ /**
103
+ * 断点状态
104
+ * undefined ==> 未设置
105
+ * null ==> 已删除
106
+ * 'ENABLED' ==> 启用断点
107
+ * 'DISABLED' ==> 禁用断点
108
+ */
109
+ @property()
110
+ breakpoint: 'ENABLED' | 'DISABLED' | null | undefined = undefined;
111
+
112
+ /**
113
+ * 父节点
114
+ */
115
+ @circular()
116
+ parentNode: SynatxNode = null;
117
+
118
+ parentKey: string = '';
119
+
120
+ /**
121
+ * 是否正在编辑
122
+ * 前端 UI 状态
123
+ */
124
+ @excludedInJSON()
125
+ editable: boolean = undefined;
126
+
127
+ /**
128
+ * 是否可以删除
129
+ * 前端 UI 状态
130
+ */
131
+ @excludedInJSON()
132
+ removable: boolean = undefined;
133
+
134
+ /**
135
+ * 是否正在编辑
136
+ * 前端 UI 状态
137
+ */
138
+ @excludedInJSON()
139
+ editing: boolean = false;
140
+
141
+ /**
142
+ * 是否正在请求
143
+ * 前端 UI 状态
144
+ */
145
+ @excludedInJSON()
146
+ loading: boolean = false;
147
+
148
+ /**
149
+ * 节点是否为展开状态
150
+ * 前端 UI 状态
151
+ */
152
+ @excludedInJSON()
153
+ expanded: boolean = false;
154
+
155
+ /**
156
+ * 节点是否显示
157
+ * 前端 UI 状态
158
+ */
159
+ @excludedInJSON()
160
+ hidden: boolean = false;
161
+
162
+ /**
163
+ * 页面树节点是否显示
164
+ * 前端 UI 状态
165
+ */
166
+ @excludedInJSON()
167
+ pageTreeNodeHidden: boolean = false;
168
+
169
+ /**
170
+ * 逻辑树节点是否显示
171
+ * 前端 UI 状态
172
+ */
173
+ @excludedInJSON()
174
+ logicTreeNodeHidden: boolean = false;
175
+
176
+ /**
177
+ * 数据树节点是否显示
178
+ * 前端 UI 状态
179
+ */
180
+ @excludedInJSON()
181
+ dataTreeNodeHidden: boolean = false;
182
+
183
+ /**
184
+ * 数据树节点是否展开
185
+ * 前端 UI 状态
186
+ */
187
+ @excludedInJSON()
188
+ logicTreeNodeExpanded: boolean = false;
189
+
190
+ /**
191
+ * 用于挂 embeddedTS 的 sourceMap
192
+ */
193
+ @excludedInJSON()
194
+ sourceMap: SourceMap = undefined;
195
+
196
+ /**
197
+ * 是否为叶子节点
198
+ * 前端 UI 状态
199
+ */
200
+ @excludedInJSON()
201
+ isLeaf: boolean = false;
202
+
203
+ @excludedInJSON()
204
+ storageJSON: any;
205
+
206
+ /**
207
+ * 当前节点上报错详细信息
208
+ */
209
+ tsErrorDetail: Diagnostic | undefined = undefined;
210
+
211
+ @property()
212
+ name: string = '';
213
+
214
+ /**
215
+ * 当前节点的类型标注
216
+ */
217
+ @excludedInJSON()
218
+ __TypeAnnotation: TypeAnnotation = undefined;
219
+
220
+ /**
221
+ * 当前节点的类型标注是不是正确的
222
+ */
223
+ @excludedInJSON()
224
+ __isCorrectTypeAnnotation: boolean = false;
225
+
226
+ /**
227
+ * @param source 需要合并的部分参数
228
+ */
229
+ constructor(source?: Partial<BaseNode>) {
230
+ super();
231
+ if (this.hasOwnProperty('JSON_EXCLUDED_KEYS') && this.JSON_EXCLUDED_KEYS === undefined) delete (this as any).JSON_EXCLUDED_KEYS;
27
232
  /**
28
- * 可修改标志,内部属性
29
- * 标记在构造函数结束后是否可修改
30
- */
31
- @excludedInJSON()
32
- _mutable = true;
33
- /**
34
- * 概念
35
- */
36
- @property()
37
- concept: string = undefined;
38
- /**
39
- * toJSON 时需要去除的键,为了避免出现 CircularJSON
40
- */
41
- readonly JSON_EXCLUDED_KEYS: Set<string>;
42
- /**
43
- * 唯一 Id
44
- */
45
- id: string = uuidv4().replace(/-/g, '');
46
- /**
47
- * 变动时间
48
- */
49
- @property()
50
- changedTime: number = undefined;
51
- /**
52
- * 分支名称
53
- */
54
- @property()
55
- branchName: string = undefined;
56
- /**
57
- * 合并代码相关
58
- */
59
- @property()
60
- workingCopy: object = undefined;
61
- @property()
62
- branch: object = undefined;
63
- /**
64
- * 断点状态
65
- * undefined ==> 未设置
66
- * null ==> 已删除
67
- * 'ENABLED' ==> 启用断点
68
- * 'DISABLED' ==> 禁用断点
69
- */
70
- @property()
71
- breakpoint: 'ENABLED' | 'DISABLED' | null | undefined = undefined;
72
- /**
73
- * 父节点
74
- */
75
- @circular()
76
- parentNode: SynatxNode = null;
77
-
78
- parentKey: string = '';
79
- /**
80
- * 是否正在编辑
81
- * 前端 UI 状态
82
- */
83
- @excludedInJSON()
84
- editable: boolean = undefined;
85
- /**
86
- * 是否可以删除
87
- * 前端 UI 状态
88
- */
89
- @excludedInJSON()
90
- removable: boolean = undefined;
91
- /**
92
- * 是否正在编辑
93
- * 前端 UI 状态
94
- */
95
- @excludedInJSON()
96
- editing: boolean = false;
97
- /**
98
- * 是否正在请求
99
- * 前端 UI 状态
100
- */
101
- @excludedInJSON()
102
- loading: boolean = false;
103
- /**
104
- * 节点是否为展开状态
105
- * 前端 UI 状态
106
- */
107
- @excludedInJSON()
108
- expanded: boolean = false;
109
- /**
110
- * 节点是否显示
111
- * 前端 UI 状态
112
- */
113
- @excludedInJSON()
114
- hidden: boolean = false;
115
- /**
116
- * 页面树节点是否显示
117
- * 前端 UI 状态
118
- */
119
- @excludedInJSON()
120
- pageTreeNodeHidden: boolean = false;
121
- /**
122
- * 逻辑树节点是否显示
123
- * 前端 UI 状态
124
- */
125
- @excludedInJSON()
126
- logicTreeNodeHidden: boolean = false;
127
- /**
128
- * 数据树节点是否显示
129
- * 前端 UI 状态
130
- */
131
- @excludedInJSON()
132
- dataTreeNodeHidden: boolean = false;
133
- /**
134
- * 数据树节点是否展开
135
- * 前端 UI 状态
136
- */
137
- @excludedInJSON()
138
- logicTreeNodeExpanded: boolean = false;
139
- /**
140
- * 用于挂 embeddedTS 的 sourceMap
141
- */
142
- @excludedInJSON()
143
- sourceMap: SourceMap = undefined;
144
- /**
145
- * 是否为叶子节点
146
- * 前端 UI 状态
147
- */
148
- @excludedInJSON()
149
- isLeaf: boolean = false;
150
- @excludedInJSON()
151
- storageJSON: any;
152
- /**
153
- * 当前节点上报错详细信息
233
+ * 监听action,delete,update事件
154
234
  */
155
- tsErrorDetail: Diagnostic | undefined = undefined;
156
-
157
- @property()
158
- name: string = '';
235
+ this.on('create', this.genActionListener);
236
+ this.on('delete', this.genActionListener);
237
+ this.on('update', this.genActionListener);
159
238
 
160
239
  /**
161
- * 当前节点的类型标注
162
- */
163
- @excludedInJSON()
164
- __TypeAnnotation: TypeAnnotation = undefined;
165
- /**
166
- * 当前节点的类型标注是不是正确的
240
+ * 监听action,delete,update事件
167
241
  */
168
- @excludedInJSON()
169
- __isCorrectTypeAnnotation: boolean = false;
170
- /**
171
- * @param source 需要合并的部分参数
172
- */
173
- constructor(source?: Partial<BaseNode>) {
174
- super();
175
- if (this.hasOwnProperty('JSON_EXCLUDED_KEYS') && this.JSON_EXCLUDED_KEYS === undefined)
176
- delete (this as any).JSON_EXCLUDED_KEYS;
177
- /**
178
- * 监听action,delete,update事件
179
- */
180
- this.on('create', this.genActionListener);
181
- this.on('delete', this.genActionListener);
182
- this.on('update', this.genActionListener);
183
-
184
- /**
185
- * 监听action,delete,update事件
186
- */
187
- this.on('create', () => operations.create(this));
188
- this.on('delete', () => operations.delete(this));
189
- this.on('update', () => operations.update(this));
190
- }
191
-
192
- // static constructorName = 'BaseNode'
193
- getClassName() {
194
- return 'BaseNode';
242
+ this.on('create', () => operations.create(this));
243
+ this.on('delete', () => operations.delete(this));
244
+ this.on('update', () => operations.update(this));
245
+ }
246
+
247
+ // static constructorName = 'BaseNode'
248
+ getClassName() {
249
+ return 'BaseNode';
250
+ }
251
+
252
+ subConstructor(source?: Partial<BaseNode>) {
253
+ const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
254
+ const properties = Array.from(new Set([...Object.keys(this), ...Object.keys(source)])).filter((key) => propertyMap.has(key));
255
+
256
+ // 测试时用的标记属性
257
+ if (process.env.NODE_ENV === 'testing') {
258
+ properties.push('__$Selected');
195
259
  }
196
- subConstructor(source?: Partial<BaseNode>) {
197
- const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
198
- const properties = Array.from(new Set([...Object.keys(this), ...Object.keys(source)])).filter((key) => propertyMap.has(key));
199
260
 
200
- // 测试时用的标记属性
201
- if (process.env.NODE_ENV === 'testing') {
202
- properties.push('__$Selected');
203
- }
204
-
205
- properties.forEach((key) => {
206
- const property = propertyMap.get(key);
207
- const sourceItem = (source as any)[key] !== undefined ? (source as any)[key] : (this as any)[key];
208
- let objectRefCtor: any;
209
- try {
210
- if (property?.objectRef) {
211
- const arr = property.objectRef.split(' | ');
212
- for (let i = 0; i < arr.length; i++) {
213
- objectRefCtor = getConceptConstructor(arr[i]);
214
- if (sourceItem instanceof objectRefCtor) {
215
- sourceItem.parentNode = this;
216
- sourceItem.parentKey = key;
217
- break;
218
- }
219
- }
220
- }
221
- // 数组的情况也在这里做掉了
222
- (this as any)[key] = objectRefCtor && sourceItem && !(sourceItem instanceof objectRefCtor) ? this.instantiateSub(sourceItem, key) : sourceItem;
223
- } catch (e) {
224
- // Function has non-object prototype 'undefined' in instanceof check
225
- if (!e.message.includes('Function has non-object prototype'))
226
- throw e;
227
- }
228
- });
229
- operations.create(this);
230
- // if (config.storage.protocol === 'http' && loadThen[source.concept as 'App' | 'View']) {
231
- // const { childNodes } = loadThen[source.concept as 'App' | 'View'] || {};
232
- // const queryList = childNodes.map(({ field, concept }) => {
233
- // const path = [this.nodePath, field].join('.');
234
- // return {
235
- // path,
236
- // excludes: loadThen[concept as 'App' | 'View'].childNodes.map(({ field }) => field),
237
- // };
238
- // });
239
- // storageService
240
- // .batchQuery({
241
- // body: queryList,
242
- // headers: {
243
- // appId: this.rootNode?.id || this.id,
244
- // },
245
- // })
246
- // .then((data: any) =>
247
- // data.forEach((sourceItem: any, index: number) => {
248
- // const { field, concept } = childNodes[index];
249
- // if (!sourceItem || (Array.isArray((this as any)[field]) && !Array.isArray(sourceItem))) {
250
- // return;
251
- // }
252
- // const objectRefCtor = getConceptConstructor(concept);
253
- // (this as any)[field] = objectRefCtor ? this.instantiateSub(sourceItem, field) : sourceItem;
254
- // }));
255
- // }
256
- }
257
-
258
- fixInstantiate() {
259
- const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
260
-
261
- const properties = Object.keys(this).filter((key) => propertyMap.has(key));
262
- properties.forEach((key) => {
263
- const property = propertyMap.get(key);
264
- const sourceItem = (this as any)[key];
265
- const objectRefCtor = property.objectRef && getConceptConstructor(property.objectRef);
266
- if (objectRefCtor) {
267
- if (Array.isArray(sourceItem)) {
268
- sourceItem.forEach((item, index) => {
269
- if (item instanceof objectRefCtor) {
270
- item.parentNode = this;
271
- item.parentKey = key;
272
- item.fixInstantiate();
273
- } else {
274
- sourceItem[index] = this.instantiateSub(item instanceof BaseNode ? item.toJSON() : item, key);
275
- }
276
- });
277
- } else {
278
- if (sourceItem instanceof objectRefCtor) {
279
- sourceItem.parentNode = this;
280
- sourceItem.parentKey = key;
281
- sourceItem.fixInstantiate();
282
- } else {
283
- (this as any)[key] = this.instantiateSub(sourceItem instanceof BaseNode ? sourceItem.toJSON() : sourceItem, key);
284
- }
285
- }
261
+ properties.forEach((key) => {
262
+ const property = propertyMap.get(key);
263
+ const sourceItem = (source as any)[key] !== undefined ? (source as any)[key] : (this as any)[key];
264
+ let objectRefCtor: any;
265
+ try {
266
+ if (property?.objectRef) {
267
+ const arr = property.objectRef.split(' | ');
268
+ for (let i = 0; i < arr.length; i++) {
269
+ objectRefCtor = getConceptConstructor(arr[i]);
270
+ if (sourceItem instanceof objectRefCtor) {
271
+ sourceItem.parentNode = this;
272
+ sourceItem.parentKey = key;
273
+ break;
286
274
  }
287
- });
288
- }
289
-
290
- getIndexOfParent() {
291
- let index = -1;
292
- const parentNode = this.parentNode;
293
- if (parentNode) {
294
- const parentKey = this.parentKey;
295
- const parentProperty = (parentNode as any)[parentKey];
296
- if (Array.isArray(parentProperty)) {
297
- index = parentProperty.indexOf(this);
298
- }
299
- }
300
- return index;
301
- }
302
-
303
- /**
304
- * 为存储点生成行为监听器
305
- * @param action
306
- * @returns
307
- */
308
- genActionListener($event: EventPayload) {
309
- // eventList是要被发送给后端的数据
310
- if (!$event.eventList) {
311
- $event.eventList = [];
312
- }
313
- if (!$event.eventStop) {
314
- $event.eventList.push($event);
275
+ }
315
276
  }
316
- $event.originEvent = $event.originEvent || $event;
317
- this.onChange($event);
318
- if (this.concept === 'App') {
319
- this.emit('storage', $event);
320
- } else if (this.parentNode && this.parentNode.emit) {
321
- const event: EventPayload = {
322
- action: 'update',
323
- path: this.parentNode?.getNodePath(false),
324
- object: {},
325
- oldObject: {},
326
- originEvent: $event.originEvent,
327
- eventList: $event.eventList,
328
- // eventStop为true后,数据不再存入eventList,就不再会将冒泡数据发送给后端
329
- eventStop: true,
330
- };
331
- this.parentNode?.emit('update', event);
332
- }
333
- }
334
-
335
- createNode({ parentNode, parentKey, index }: { parentNode: SynatxNode; parentKey: string; index: number }) {
336
- if (parentNode) {
337
- const property = parentNode[parentKey as keyof SynatxNode];
338
- if (Array.isArray(property) && index !== -1) {
339
- property.splice(index, 0, this);
277
+ // 数组的情况也在这里做掉了
278
+ (this as any)[key] =
279
+ objectRefCtor && sourceItem && !(sourceItem instanceof objectRefCtor) ? this.instantiateSub(sourceItem, key) : sourceItem;
280
+ } catch (e) {
281
+ // Function has non-object prototype 'undefined' in instanceof check
282
+ if (!e.message.includes('Function has non-object prototype')) throw e;
283
+ }
284
+ });
285
+ operations.create(this);
286
+ // if (config.storage.protocol === 'http' && loadThen[source.concept as 'App' | 'View']) {
287
+ // const { childNodes } = loadThen[source.concept as 'App' | 'View'] || {};
288
+ // const queryList = childNodes.map(({ field, concept }) => {
289
+ // const path = [this.nodePath, field].join('.');
290
+ // return {
291
+ // path,
292
+ // excludes: loadThen[concept as 'App' | 'View'].childNodes.map(({ field }) => field),
293
+ // };
294
+ // });
295
+ // storageService
296
+ // .batchQuery({
297
+ // body: queryList,
298
+ // headers: {
299
+ // appId: this.rootNode?.id || this.id,
300
+ // },
301
+ // })
302
+ // .then((data: any) =>
303
+ // data.forEach((sourceItem: any, index: number) => {
304
+ // const { field, concept } = childNodes[index];
305
+ // if (!sourceItem || (Array.isArray((this as any)[field]) && !Array.isArray(sourceItem))) {
306
+ // return;
307
+ // }
308
+ // const objectRefCtor = getConceptConstructor(concept);
309
+ // (this as any)[field] = objectRefCtor ? this.instantiateSub(sourceItem, field) : sourceItem;
310
+ // }));
311
+ // }
312
+ }
313
+
314
+ fixInstantiate() {
315
+ const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
316
+
317
+ const properties = Object.keys(this).filter((key) => propertyMap.has(key));
318
+ properties.forEach((key) => {
319
+ const property = propertyMap.get(key);
320
+ const sourceItem = (this as any)[key];
321
+ const objectRefCtor = property.objectRef && getConceptConstructor(property.objectRef);
322
+ if (objectRefCtor) {
323
+ if (Array.isArray(sourceItem)) {
324
+ sourceItem.forEach((item, index) => {
325
+ if (item instanceof objectRefCtor) {
326
+ item.parentNode = this;
327
+ item.parentKey = key;
328
+ item.fixInstantiate();
340
329
  } else {
341
- (parentNode as any)[parentKey] = this;
330
+ sourceItem[index] = this.instantiateSub(item instanceof BaseNode ? item.toJSON() : item, key);
342
331
  }
343
- this.parentNode = parentNode;
344
- this.parentKey = parentKey;
345
- this.create({
346
- index,
347
- parentKey,
348
- });
332
+ });
333
+ } else if (sourceItem instanceof objectRefCtor) {
334
+ sourceItem.parentNode = this;
335
+ sourceItem.parentKey = key;
336
+ sourceItem.fixInstantiate();
337
+ } else {
338
+ (this as any)[key] = this.instantiateSub(sourceItem instanceof BaseNode ? sourceItem.toJSON() : sourceItem, key);
349
339
  }
340
+ }
341
+ });
342
+ }
343
+
344
+ getIndexOfParent() {
345
+ let index = -1;
346
+ const { parentNode } = this;
347
+ if (parentNode) {
348
+ const { parentKey } = this;
349
+ const parentProperty = (parentNode as any)[parentKey];
350
+ if (Array.isArray(parentProperty)) {
351
+ index = parentProperty.indexOf(this);
352
+ }
350
353
  }
351
-
352
- toTemplateJSON() {
353
- return this._toJSON((source) => {
354
- delete source.id;
355
- return source;
356
- });
354
+ return index;
355
+ }
356
+
357
+ /**
358
+ * 为存储点生成行为监听器
359
+ * @param action
360
+ * @returns
361
+ */
362
+ genActionListener($event: EventPayload) {
363
+ // eventList是要被发送给后端的数据
364
+ if (!$event.eventList) {
365
+ $event.eventList = [];
357
366
  }
358
-
359
- /**
360
- * 创建节点
361
- */
362
- create(parentParams: Params) {
363
- this.emit('create', {
364
- action: 'create',
365
- path: this.getNodePath(true),
366
- object: this.toJSON(),
367
- ...parentParams,
368
- oldObject: null,
369
- });
367
+ if (!$event.eventStop) {
368
+ $event.eventList.push($event);
370
369
  }
371
-
372
- /**
373
- * 如果有父节点,则删除节点,在添加时调用
374
- */
375
- ensureDelete() {
376
- // 批量赋值因为连线的问题需要特殊处理一下.
377
- if (this.parentNode?.concept === 'SelectMembers') {
378
- this.parentNode.ensureDelete();
379
- return;
380
- }
381
-
382
- if (this.parentNode && this.parentKey) {
383
- const path = this.getNodePath(false);
384
- const parentParams = this._delete();
385
- if (parentParams && parentParams.index !== -1) {
386
- if (Array.isArray((this.parentNode as any)[this.parentKey])) {
387
- this.emit('delete', {
388
- action: 'delete',
389
- path,
390
- object: null,
391
- ...parentParams,
392
- });
393
- } else {
394
- const parentPath = this.parentNode.getNodePath(false);
395
- this.parentNode.emit('update', {
396
- action: 'update',
397
- path: parentPath,
398
- object: {
399
- [this.parentKey]: null,
400
- },
401
- oldObject: {
402
- [this.parentKey]: this.toJSON(),
403
- },
404
- });
405
- }
406
- }
407
- }
370
+ $event.originEvent = $event.originEvent || $event;
371
+ this.onChange($event);
372
+ if (this.concept === 'App') {
373
+ this.emit('storage', $event);
374
+ } else if (this.parentNode && this.parentNode.emit) {
375
+ const event: EventPayload = {
376
+ action: 'update',
377
+ path: this.parentNode?.getNodePath(false),
378
+ object: {},
379
+ oldObject: {},
380
+ originEvent: $event.originEvent,
381
+ eventList: $event.eventList,
382
+ // eventStop为true后,数据不再存入eventList,就不再会将冒泡数据发送给后端
383
+ eventStop: true,
384
+ };
385
+ this.parentNode?.emit('update', event);
408
386
  }
409
-
410
- /**
411
- * 删除节点
412
- */
413
- delete() {
414
- if (this.parentNode?.concept === 'Match' && this.parentKey === 'expression') {
415
- (this.parentNode as any).setExpressionWitchCase(null);
416
- return;
417
- }
418
- // 批量赋值因为连线的问题需要特殊处理一下.
419
- if (this.parentNode?.concept === 'SelectMembers') {
420
- const node: any = this.parentNode;
421
- node.delete();
422
- return;
423
- } else if (this.concept === 'SelectMembers') {
424
- const node: any = this.parentNode;
425
- node.changeLinesLocation(this);
426
- }
427
-
428
- const useIndex = ['BindEvent', 'Identifier'].includes(this.concept);
429
- const path = this.getNodePath(useIndex);
430
- const parentParams = this._delete();
431
- if (parentParams && parentParams.index !== -1) {
432
- if (Array.isArray((this.parentNode as any)[this.parentKey])) {
433
- this.emit('delete', {
434
- action: 'delete',
435
- path,
436
- object: null,
437
- ...parentParams,
438
- });
439
- } else {
440
- const parentPath = this.parentNode.getNodePath(false);
441
- this.parentNode.emit('update', {
442
- action: 'update',
443
- path: parentPath,
444
- object: {
445
- [this.parentKey]: null,
446
- },
447
- oldObject: {
448
- [this.parentKey]: this.toJSON(),
449
- },
450
- });
451
- }
452
- }
387
+ }
388
+
389
+ createNode({ parentNode, parentKey, index }: { parentNode: SynatxNode; parentKey: string; index: number }) {
390
+ if (parentNode) {
391
+ const property = parentNode[parentKey as keyof SynatxNode];
392
+ if (Array.isArray(property) && index !== -1) {
393
+ property.splice(index, 0, this);
394
+ } else {
395
+ (parentNode as any)[parentKey] = this;
396
+ }
397
+ this.parentNode = parentNode;
398
+ this.parentKey = parentKey;
399
+ this.create({
400
+ index,
401
+ parentKey,
402
+ });
453
403
  }
454
-
455
- /**
456
- * 更新节点
457
- */
458
- update({ field, ...object }: any) {
459
- // const useIndexKeys = ['Module'];
460
- const path = this.getNodePath(false);
461
- const oldObject: any = {};
462
- for (const key in object) {
463
- if (Object.prototype.hasOwnProperty.call(object, key)) {
464
- const oldProperty = (this as any)[key] ?? null;
465
- oldObject[key] = oldProperty;
466
- if (Array.isArray(oldProperty)) {
467
- oldObject[key] = oldProperty.map((item) => {
468
- let propertyItem = item ?? null;
469
- if (item instanceof BaseNode) {
470
- propertyItem = item.toJSON();
471
- }
472
- return propertyItem;
473
- });
474
- } else if (oldProperty instanceof BaseNode) {
475
- oldObject[key] = oldProperty.toJSON();
476
- }
477
- const property = object[key] ?? null;
478
- (this as any)[key] = property;
479
- const objectRefCtor = getConceptConstructor(property?.concept);
480
- if (Array.isArray(property)) {
481
- (this as any)[key] = property.map((item) => {
482
- let propertyItem = item ?? null;
483
- const propertyObjectRefCtor = getConceptConstructor(item?.concept);
484
- if (propertyObjectRefCtor?.from) {
485
- propertyItem = (propertyObjectRefCtor as any).from(item, this, key);
486
- }
487
- return propertyItem;
488
- });
489
- } else if (objectRefCtor?.from) {
490
- (this as any)[key] = (objectRefCtor as any).from(property, this, key);
491
- }
492
- }
493
- }
494
- this.emit('update', {
495
- action: 'update',
496
- path,
497
- object,
498
- oldObject,
499
- field,
500
- });
404
+ }
405
+
406
+ toTemplateJSON() {
407
+ return this._toJSON((source) => {
408
+ delete source.id;
409
+ return source;
410
+ });
411
+ }
412
+
413
+ /**
414
+ * 创建节点
415
+ */
416
+ create(parentParams: Params) {
417
+ this.emit('create', {
418
+ action: 'create',
419
+ path: this.getNodePath(true),
420
+ object: this.toJSON(),
421
+ ...parentParams,
422
+ oldObject: null,
423
+ });
424
+ }
425
+
426
+ /**
427
+ * 如果有父节点,则删除节点,在添加时调用
428
+ */
429
+ ensureDelete() {
430
+ // 批量赋值因为连线的问题需要特殊处理一下.
431
+ if (this.parentNode?.concept === 'SelectMembers') {
432
+ this.parentNode.ensureDelete();
433
+ return;
501
434
  }
502
435
 
503
- _delete(): Params {
504
- /* override */
505
- return {
506
- propertyName: '',
507
- index: -1,
436
+ if (this.parentNode && this.parentKey) {
437
+ const path = this.getNodePath(false);
438
+ const parentParams = this._delete();
439
+ if (parentParams && parentParams.index !== -1) {
440
+ if (Array.isArray((this.parentNode as any)[this.parentKey])) {
441
+ this.emit('delete', {
442
+ action: 'delete',
443
+ path,
508
444
  object: null,
509
- oldObject: this,
510
- };
511
- }
512
-
513
- static from(source: any, parentNode?: BaseNode, parentKey?: string): BaseNode {
514
- // 有一些继承的情况
515
- const Ctor = classMap?.[source?.concept] || this;
516
- if (Ctor && source instanceof Ctor) {
517
- if (parentNode) {
518
- source.parentNode = parentNode;
519
- }
520
- if (parentKey) {
521
- source.parentKey = parentKey;
522
- }
523
- return source;
524
- }
525
-
526
- if (Ctor) {
527
- const instance = new Ctor();
528
- if (parentNode) {
529
- instance.parentNode = parentNode;
530
- }
531
- if (parentKey) {
532
- instance.parentKey = parentKey;
533
- }
534
- instance.subConstructor({
535
- ...source,
536
- concept: source.concept || this?.prototype?.getClassName() || Ctor.name,
537
- parentNode,
538
- });
539
- return instance;
540
- }
541
- }
542
-
543
- get nodePath() {
544
- return this.getNodePath(false);
545
- }
546
-
547
- getNodePath(useIndex: boolean): string
548
- getNodePath(useIndexKeys: string[]): string
549
- getNodePath(useIndex: boolean | string[]) {
550
- let node: BaseNode = this;
551
- let useIndexKeys: string[] = [];
552
- if (Array.isArray(useIndex)) {
553
- useIndexKeys = useIndex;
554
- useIndex = false;
555
- }
556
- let isNodeSelf = true;
557
- const pathArr = [];
558
- while (node) {
559
- let path = '';
560
- const parentNode = node.parentNode;
561
- if (parentNode) {
562
- const parentKey = node.parentKey;
563
- path = parentKey;
564
- const parentProperty = parentNode[parentKey as keyof BaseNode];
565
- if (Array.isArray(parentProperty)) {
566
- const name = node.name;
567
- if (!name || (useIndex && isNodeSelf) || useIndexKeys.includes(node.concept)) {
568
- const index = parentProperty.indexOf(node);
569
- path += `[${index}]`;
570
- } else {
571
- path += `[name=${name}]`;
572
- }
573
- }
574
- pathArr.unshift(path);
575
- }
576
- node = parentNode;
577
- isNodeSelf = false;
445
+ ...parentParams,
446
+ });
447
+ } else {
448
+ const parentPath = this.parentNode.getNodePath(false);
449
+ this.parentNode.emit('update', {
450
+ action: 'update',
451
+ path: parentPath,
452
+ object: {
453
+ [this.parentKey]: null,
454
+ },
455
+ oldObject: {
456
+ [this.parentKey]: this.toJSON(),
457
+ },
458
+ });
578
459
  }
579
- pathArr.unshift('app');
580
- return pathArr.join('.');
460
+ }
581
461
  }
582
-
583
- /**
584
- * 上层节点
585
- */
586
- get upperNode(): SynatxNode {
587
- // eslint-disable-next-line consistent-this
588
- let _upperNode: BaseNode = this;
589
- while (!!_upperNode && _upperNode.concept === this.concept) {
590
- _upperNode = _upperNode.parentNode;
591
- }
592
- return _upperNode as SynatxNode;
462
+ }
463
+
464
+ /**
465
+ * 删除节点
466
+ */
467
+ delete() {
468
+ if (this.parentNode?.concept === 'Match' && this.parentKey === 'expression') {
469
+ (this.parentNode as any).setExpressionWitchCase(null);
470
+ return;
593
471
  }
594
-
595
- /**
596
- * 根节点
597
- */
598
- get rootNode() {
599
- return this.getAncestor('App') as App;
472
+ // 批量赋值因为连线的问题需要特殊处理一下.
473
+ if (this.parentNode?.concept === 'SelectMembers') {
474
+ const node: any = this.parentNode;
475
+ node.delete();
476
+ return;
600
477
  }
601
-
602
- /**
603
- * 获取祖先节点
604
- */
605
- getAncestor(concept: SynatxNode['concept']): SynatxNode;
606
- getAncestor<Node extends SynatxNode>(concept: Node['concept']): Node;
607
- getAncestor<Node extends SynatxNode = SynatxNode>(concept: SynatxNode['concept']): Node {
608
- let upperNode = this.upperNode;
609
- while (upperNode && upperNode.concept && upperNode.concept !== concept) {
610
- upperNode = upperNode.upperNode;
611
- }
612
- return upperNode as Node;
478
+ if (this.concept === 'SelectMembers') {
479
+ const node: any = this.parentNode;
480
+ node.changeLinesLocation(this);
613
481
  }
614
482
 
615
- /**
616
- *
617
- * @param source
618
- * @param Ctor
619
- * @param completeList
620
- * @param idsList
621
- */
622
- handleSource(source: any, completeList: any[]) {
623
- const { id, concept } = source || {};
624
- const actualSource = source instanceof BaseNode ? source : getSourceFromMap(id, concept);
625
- completeList.push(actualSource || source);
483
+ const useIndex = ['BindEvent', 'Identifier'].includes(this.concept);
484
+ const path = this.getNodePath(useIndex);
485
+ const parentParams = this._delete();
486
+ if (parentParams && parentParams.index !== -1) {
487
+ if (Array.isArray((this.parentNode as any)[this.parentKey])) {
488
+ this.emit('delete', {
489
+ action: 'delete',
490
+ path,
491
+ object: null,
492
+ ...parentParams,
493
+ });
494
+ } else {
495
+ const parentPath = this.parentNode.getNodePath(false);
496
+ this.parentNode.emit('update', {
497
+ action: 'update',
498
+ path: parentPath,
499
+ object: {
500
+ [this.parentKey]: null,
501
+ },
502
+ oldObject: {
503
+ [this.parentKey]: this.toJSON(),
504
+ },
505
+ });
506
+ }
626
507
  }
627
-
628
- /**
629
- * 获取当前的TsName
630
- */
631
- get tsName() {
632
- if (this.name) {
633
- let tsName = this.name;
634
- // 匹配所有特殊字符都转为_
635
- tsName = tsName.replace(/\W/g, '_');
636
- if (/^\d/.test(tsName)) {
637
- tsName = '$' + tsName;
508
+ }
509
+
510
+ /**
511
+ * 更新节点
512
+ */
513
+ update({ field, ...object }: any) {
514
+ const path = this.getNodePath(false);
515
+ const oldObject: any = {};
516
+ for (const key in object) {
517
+ if (Object.prototype.hasOwnProperty.call(object, key)) {
518
+ const oldProperty = (this as any)[key] ?? null;
519
+ oldObject[key] = oldProperty;
520
+ if (Array.isArray(oldProperty)) {
521
+ oldObject[key] = oldProperty.map((item) => {
522
+ let propertyItem = item ?? null;
523
+ if (item instanceof BaseNode) {
524
+ propertyItem = item.toJSON();
638
525
  }
639
- return tsName;
640
- }
641
- return '';
642
- }
643
-
644
- /**
645
- * 生成json
646
- * @param instance
647
- * @param Ctor
648
- */
649
- genSources(instance: BaseNode, filerFn?: (source: Partial<BaseNode>) => {}) {
650
- if (!instance) {
651
- return instance;
526
+ return propertyItem;
527
+ });
528
+ } else if (oldProperty instanceof BaseNode) {
529
+ oldObject[key] = oldProperty.toJSON();
652
530
  }
653
- if (Array.isArray(instance)) {
654
- return instance.map((item) => (item && item._toJSON ? item._toJSON(filerFn) : item));
655
- } else {
656
- return instance && instance._toJSON ? instance._toJSON(filerFn) : instance;
657
- }
658
- }
659
-
660
- /**
661
- * 实例化一个 JSON
662
- * 由于有 from,只能先实例化父级,再实例化子级
663
- * @param obj
664
- * @param parentNode
665
- * @returns
666
- */
667
- instantiate(source: any, parentNode: BaseNode, parentKey: string) {
668
- if (source instanceof BaseNode) {
669
- if (!source.parentNode || !source.parentKey) {
670
- source.parentNode = parentNode as SynatxNode;
671
- source.parentKey = parentKey;
531
+ const property = object[key] ?? null;
532
+ (this as any)[key] = property;
533
+ const objectRefCtor = getConceptConstructor(property?.concept);
534
+ if (Array.isArray(property)) {
535
+ (this as any)[key] = property.map((item) => {
536
+ let propertyItem = item ?? null;
537
+ const propertyObjectRefCtor = getConceptConstructor(item?.concept);
538
+ if (propertyObjectRefCtor?.from) {
539
+ propertyItem = (propertyObjectRefCtor as any).from(item, this, key);
672
540
  }
673
- return source;
674
- } else if (source && source.concept && classMap[source.concept]) {
675
- const Ctor = classMap[source.concept] as any;
676
- const instance = Ctor.from(source, parentNode, parentKey);
677
- if (instance && instance.toStorageJSON)
678
- instance.storageJSON = instance.toStorageJSON();
679
- return instance;
680
- } else {
681
- return source;
541
+ return propertyItem;
542
+ });
543
+ } else if (objectRefCtor?.from) {
544
+ (this as any)[key] = (objectRefCtor as any).from(property, this, key);
682
545
  }
546
+ }
683
547
  }
684
-
685
- /**
686
- * 激活 JSON 内部实例
687
- * @param source
688
- */
689
- instantiateSub(source: any, parentKey: string) {
690
- if (!source) {
691
- return;
692
- }
693
- const completeList: any[] = [];
694
- let isArray = false;
695
- // 暂时通过是否有name判断数据是否全
696
- if (Array.isArray(source)) {
697
- isArray = true;
698
- source.forEach((sourceItem) => {
699
- this.handleSource(sourceItem, completeList);
548
+ const newObject: any = {};
549
+ const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
550
+ for (const key in object) {
551
+ const property = propertyMap.get(key);
552
+ if (property) {
553
+ const objProperty = object[key] ?? null;
554
+ const propertyConcept = property?.objectRef;
555
+ if (propertyConcept) {
556
+ if (Array.isArray(objProperty)) {
557
+ newObject[key] = objProperty.map((objItem: any) => {
558
+ return ensureDefined(objItem, propertyConcept);
700
559
  });
560
+ } else {
561
+ newObject[key] = ensureDefined(objProperty, propertyConcept);
562
+ }
701
563
  } else {
702
- this.handleSource(source, completeList);
703
- }
704
- const instanceList: any[] = completeList.map((item) => this.instantiate(item, this, parentKey));
705
- if (isArray) {
706
- return instanceList;
707
- } else if (Array.isArray(instanceList) && instanceList.length) {
708
- return instanceList[0];
564
+ newObject[key] = objProperty;
709
565
  }
566
+ }
710
567
  }
711
-
712
- plainAssign(source: any) {
713
- this._mutable = true;
714
-
715
- const oldId = this.id;
716
-
717
- Object.keys(source).forEach((key) => {
718
- const value = source[key];
719
- if (typeof value !== 'object' && typeof value !== 'function')
720
- (this as any)[key] = value;
721
- });
722
-
723
- this._mutable = false;
568
+ this.emit('update', {
569
+ action: 'update',
570
+ path,
571
+ object: newObject,
572
+ oldObject,
573
+ field,
574
+ });
575
+ }
576
+
577
+ _delete(): Params {
578
+ /* override */
579
+ return {
580
+ propertyName: '',
581
+ index: -1,
582
+ object: null,
583
+ oldObject: this,
584
+ };
585
+ }
586
+
587
+ static from(source: any, parentNode?: BaseNode, parentKey?: string): BaseNode {
588
+ // 有一些继承的情况
589
+ const Ctor = classMap?.[source?.concept] || this;
590
+ if (Ctor && source instanceof Ctor) {
591
+ if (parentNode) {
592
+ source.parentNode = parentNode;
593
+ }
594
+ if (parentKey) {
595
+ source.parentKey = parentKey;
596
+ }
597
+ return source;
724
598
  }
725
599
 
726
- pick(source: any, keys: Array<string> = []) {
727
- const obj: { [name: string]: any } = {};
728
- keys.forEach((key) => (obj[key] = source[key]));
729
- // 这里统一用 assign,集中处理 id 的问题
730
- // this.assign(obj);
600
+ if (Ctor) {
601
+ const instance = new Ctor();
602
+ if (parentNode) {
603
+ instance.parentNode = parentNode;
604
+ }
605
+ if (parentKey) {
606
+ instance.parentKey = parentKey;
607
+ }
608
+ instance.subConstructor({
609
+ ...source,
610
+ concept: source.concept || this?.prototype?.getClassName() || Ctor.name,
611
+ parentNode,
612
+ });
613
+ return instance;
731
614
  }
732
- /**
733
- * 从对象中深度获取
734
- * @param source
735
- * @param keys
736
- * @example 比如一般后端返回只是添加了个 id
737
- * ```
738
- * this.deepPick(result, ['id'])
739
- */
740
- deepPick(source: any, keys: Array<string> = []) {
741
- utils.traverse((current) => {
742
- const subSource = current.jsonPath ? at(source, [current.jsonPath])[0] : source;
743
- const target = current.jsonPath ? at(this as any, [current.jsonPath])[0] : this;
744
- if (!target)
745
- return;
746
-
747
- const obj: { [name: string]: any } = {};
748
- keys.forEach((key) => {
749
- if (subSource.hasOwnProperty(key)) {
750
- obj[key] = subSource[key];
751
- }
752
- });
753
- // 这里统一用 assign,集中处理 id 的问题
754
- target.assign ? target.assign(obj) : Object.assign(target, obj);
755
- }, { node: source }, { mode: 'anyObject' });
615
+ }
616
+
617
+ get nodePath() {
618
+ return this.getNodePath(false);
619
+ }
620
+
621
+ getNodePath(useIndex: boolean): string;
622
+ getNodePath(useIndexKeys: string[]): string;
623
+ getNodePath(useIndex: boolean | string[]) {
624
+ let node: BaseNode = this;
625
+ let useIndexKeys: string[] = [];
626
+ if (Array.isArray(useIndex)) {
627
+ useIndexKeys = useIndex;
628
+ useIndex = false;
756
629
  }
757
- /**
758
- * 去除循环依赖,转为纯 JSON
759
- * @param parentKey 外面的 key,提供给 JSON.stringify 使用
760
- * @param excludedKeys 需要额外排除的 keys
761
- */
762
- toJSON() {
763
- return this._toJSON();
630
+ let isNodeSelf = true;
631
+ const pathArr = [];
632
+ while (node) {
633
+ let path = '';
634
+ const { parentNode } = node;
635
+ if (parentNode) {
636
+ const { parentKey } = node;
637
+ path = parentKey;
638
+ const parentProperty = parentNode[parentKey as keyof BaseNode];
639
+ if (Array.isArray(parentProperty)) {
640
+ const { name } = node;
641
+ // 如果存在同名节点,使用下标来表示NodePath
642
+ const siblingNode: BaseNode = name
643
+ ? (parentProperty as BaseNode[]).find((child) => {
644
+ // 因为proxy的关系,导致两边的引用不相同,所以这里需要判断id
645
+ return child?.name === name && child !== node && child?.id !== node?.id;
646
+ })
647
+ : null;
648
+ if (siblingNode || !name || (useIndex && isNodeSelf) || useIndexKeys.includes(node.concept)) {
649
+ const index = parentProperty.indexOf(node);
650
+ path += `[${index}]`;
651
+ } else {
652
+ path += `[name=${name}]`;
653
+ }
654
+ }
655
+ pathArr.unshift(path);
656
+ }
657
+ node = parentNode;
658
+ isNodeSelf = false;
764
659
  }
765
-
766
- _toJSON(filerFn?: (source: Partial<BaseNode>) => {}): any {
767
- const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
768
- const source: Partial<BaseNode> = {};
769
- propertyMap.forEach((property, key: string) => {
770
- if (property) {
771
- const { objectRef: propertyObjectRef } = property;
772
- if (!propertyObjectRef) {
773
- (source as any)[key] = this[key as keyof BaseNode];
774
- } else {
775
- const sources: any = this.genSources(this[key as keyof BaseNode], filerFn);
776
- (source as any)[key] = sources;
777
- }
778
- }
779
- });
780
- return filerFn ? filerFn(source) : source;
660
+ pathArr.unshift('app');
661
+ return pathArr.join('.');
662
+ }
663
+
664
+ /**
665
+ * 上层节点
666
+ */
667
+ get upperNode(): SynatxNode {
668
+ // eslint-disable-next-line consistent-this
669
+ let _upperNode: BaseNode = this;
670
+ while (!!_upperNode && _upperNode.concept === this.concept) {
671
+ _upperNode = _upperNode.parentNode;
781
672
  }
782
- /**
783
- * 转为单层的 JSON
784
- * @param parentKey 外面的 key,提供给 JSON.stringify 使用
785
- * @param excludedKeys 需要额外排除的 keys
786
- */
787
- toPlainJSON(parentKey?: string, excludedKeys: Array<string> = []): any {
788
- const JSON_EXCLUDED_KEYS = new Set(this.JSON_EXCLUDED_KEYS || []); // Object.getPrototypeOf(this).constructor.JSON_EXCLUDED_KEYS || [];
789
- excludedKeys.forEach((key) => JSON_EXCLUDED_KEYS.add(key));
790
-
791
- const temp: { [prop: string]: any } = {};
792
- Object.keys(this).forEach((key) => {
793
- const value = (this as any)[key];
794
- if (!JSON_EXCLUDED_KEYS.has(key) && typeof value !== 'object' && typeof value !== 'function')
795
- temp[key] = value;
796
- });
797
- return JSON.parse(JSON.stringify(temp));
673
+ return _upperNode as SynatxNode;
674
+ }
675
+
676
+ /**
677
+ * 根节点
678
+ */
679
+ get rootNode() {
680
+ return this.getAncestor('App') as App;
681
+ }
682
+
683
+ /**
684
+ * 获取祖先节点
685
+ */
686
+ getAncestor(concept: SynatxNode['concept']): SynatxNode;
687
+ getAncestor<Node extends SynatxNode>(concept: Node['concept']): Node;
688
+ getAncestor<Node extends SynatxNode = SynatxNode>(concept: SynatxNode['concept']): Node {
689
+ let { upperNode } = this;
690
+ while (upperNode && upperNode.concept && upperNode.concept !== concept) {
691
+ upperNode = upperNode.upperNode;
798
692
  }
799
- /**
800
- * 查找引用
801
- */
802
- @action('查找引用')
803
- async findUsage(): Promise<any> {
804
- /* override */
693
+ return upperNode as Node;
694
+ }
695
+
696
+ /**
697
+ *
698
+ * @param source
699
+ * @param Ctor
700
+ * @param completeList
701
+ * @param idsList
702
+ */
703
+ handleSource(source: any, completeList: any[]) {
704
+ const { id, concept } = source || {};
705
+ const actualSource = source instanceof BaseNode ? source : getSourceFromMap(id, concept);
706
+ completeList.push(actualSource || source);
707
+ }
708
+
709
+ /**
710
+ * 获取当前的TsName
711
+ */
712
+ get tsName() {
713
+ if (this.name) {
714
+ let tsName = this.name;
715
+ // 匹配所有特殊字符都转为_
716
+ tsName = tsName.replace(/\W/g, '_');
717
+ if (/^\d/.test(tsName)) {
718
+ tsName = `$${tsName}`;
719
+ }
720
+ return tsName;
805
721
  }
806
-
807
- /**
808
- * 通过当前节点,查找被引用的节点
809
- */
810
- @action('通过当前节点,查找被引用的节点')
811
- async nodeFindRefNodes(): Promise<any> {
812
- /* override */
722
+ return '';
723
+ }
724
+
725
+ /**
726
+ * 生成json
727
+ * @param instance
728
+ * @param Ctor
729
+ */
730
+ genSources(instance: BaseNode, filerFn?: (source: Partial<BaseNode>) => {}) {
731
+ if (!instance) {
732
+ return instance;
813
733
  }
814
-
815
- async findReadOnlyLogicUsage(): Promise<any> {
816
- /* override */
734
+ if (Array.isArray(instance)) {
735
+ return instance.map((item) => (item && item._toJSON ? item._toJSON(filerFn) : item));
817
736
  }
818
-
819
- /**
820
- * 重命名
821
- */
822
- @action('重命名')
823
- async changeName(newValue: string): Promise<any> {
824
- /* override */
737
+ return instance && instance._toJSON ? instance._toJSON(filerFn) : instance;
738
+ }
739
+
740
+ /**
741
+ * 实例化一个 JSON
742
+ * 由于有 from,只能先实例化父级,再实例化子级
743
+ * @param obj
744
+ * @param parentNode
745
+ * @returns
746
+ */
747
+ instantiate(source: any, parentNode: BaseNode, parentKey: string) {
748
+ if (source instanceof BaseNode) {
749
+ if (!source.parentNode || !source.parentKey) {
750
+ source.parentNode = parentNode as SynatxNode;
751
+ source.parentKey = parentKey;
752
+ }
753
+ return source;
825
754
  }
826
-
827
- /**
828
- * 准备删除
829
- */
830
- @action('准备删除')
831
- async prepareDelete(cb?: Function): Promise<any> {
832
- /* override */
755
+ if (source && source.concept && classMap[source.concept]) {
756
+ const Ctor = classMap[source.concept] as any;
757
+ const instance = Ctor.from(source, parentNode, parentKey);
758
+ if (instance && instance.toStorageJSON) instance.storageJSON = instance.toStorageJSON();
759
+ return instance;
833
760
  }
834
-
835
- /**
836
- * 添加参数准备
837
- */
838
- @action('添加参数准备')
839
- async addParamsPrepare(): Promise<any> {
840
- /* override */
761
+ return source;
762
+ }
763
+
764
+ /**
765
+ * 激活 JSON 内部实例
766
+ * @param source
767
+ */
768
+ instantiateSub(source: any, parentKey: string) {
769
+ if (!source) {
770
+ return;
841
771
  }
842
-
843
- /**
844
- * 获取当前节点类型
845
- */
846
- @action('获取当前节点类型')
847
- async getCurrentTypeAnnotation(): Promise<any> {
848
- /* override */
772
+ const completeList: any[] = [];
773
+ let isArray = false;
774
+ // 暂时通过是否有name判断数据是否全
775
+ if (Array.isArray(source)) {
776
+ isArray = true;
777
+ source.forEach((sourceItem) => {
778
+ this.handleSource(sourceItem, completeList);
779
+ });
780
+ } else {
781
+ this.handleSource(source, completeList);
849
782
  }
850
- /**
851
- * 获取当前节点的下一级内容
852
- */
853
- @action('获取当前节点的下一级内容')
854
- getSelectRef(newTypeAnnotation: TypeAnnotation, needNewStructure = false): any {
855
- /* override */
783
+ const instanceList: any[] = completeList.map((item) => this.instantiate(item, this, parentKey));
784
+ if (isArray) {
785
+ return instanceList;
856
786
  }
857
- /**
858
- * 销毁
859
- * 从 Map 中删除点和子节点
860
- */
861
- destroy() {
862
- // utils.traverse((current) => , { node: this }, {
863
- // mode: 'anyObject',
864
- // excludedKeySet: this.JSON_EXCLUDED_KEYS,
865
- // });
787
+ if (Array.isArray(instanceList) && instanceList.length) {
788
+ return instanceList[0];
866
789
  }
790
+ }
791
+
792
+ plainAssign(source: any) {
793
+ this._mutable = true;
794
+
795
+ const oldId = this.id;
796
+
797
+ Object.keys(source).forEach((key) => {
798
+ const value = source[key];
799
+ if (typeof value !== 'object' && typeof value !== 'function') (this as any)[key] = value;
800
+ });
801
+
802
+ this._mutable = false;
803
+ }
804
+
805
+ pick(source: any, keys: Array<string> = []) {
806
+ const obj: { [name: string]: any } = {};
807
+ keys.forEach((key) => (obj[key] = source[key]));
808
+ // 这里统一用 assign,集中处理 id 的问题
809
+ // this.assign(obj);
810
+ }
811
+
812
+ /**
813
+ * 从对象中深度获取
814
+ * @param source
815
+ * @param keys
816
+ * @example 比如一般后端返回只是添加了个 id
817
+ * ```
818
+ * this.deepPick(result, ['id'])
819
+ */
820
+ deepPick(source: any, keys: Array<string> = []) {
821
+ utils.traverse(
822
+ (current) => {
823
+ const subSource = current.jsonPath ? at(source, [current.jsonPath])[0] : source;
824
+ const target = current.jsonPath ? at(this as any, [current.jsonPath])[0] : this;
825
+ if (!target) return;
867
826
 
868
- onChange($event?: EventPayload) {
869
- /* override */
827
+ const obj: { [name: string]: any } = {};
828
+ keys.forEach((key) => {
829
+ if (subSource.hasOwnProperty(key)) {
830
+ obj[key] = subSource[key];
831
+ }
832
+ });
833
+ // 这里统一用 assign,集中处理 id 的问题
834
+ target.assign ? target.assign(obj) : Object.assign(target, obj);
835
+ },
836
+ { node: source },
837
+ { mode: 'anyObject' }
838
+ );
839
+ }
840
+
841
+ /**
842
+ * 去除循环依赖,转为纯 JSON
843
+ * @param parentKey 外面的 key,提供给 JSON.stringify 使用
844
+ * @param excludedKeys 需要额外排除的 keys
845
+ */
846
+ toJSON() {
847
+ return this._toJSON();
848
+ }
849
+
850
+ _toJSON(filerFn?: (source: Partial<BaseNode>) => {}): any {
851
+ const propertyMap = getConceptPropertyMap(this.getClassName() || this.constructor.name);
852
+ const source: Partial<BaseNode> = {};
853
+ propertyMap.forEach((property, key: string) => {
854
+ if (property) {
855
+ const { objectRef: propertyObjectRef } = property;
856
+ if (!propertyObjectRef) {
857
+ (source as any)[key] = this[key as keyof BaseNode];
858
+ } else {
859
+ const sources: any = this.genSources(this[key as keyof BaseNode], filerFn);
860
+ (source as any)[key] = sources;
861
+ }
862
+ }
863
+ });
864
+ return filerFn ? filerFn(source) : source;
865
+ }
866
+
867
+ /**
868
+ * 转为单层的 JSON
869
+ * @param parentKey 外面的 key,提供给 JSON.stringify 使用
870
+ * @param excludedKeys 需要额外排除的 keys
871
+ */
872
+ toPlainJSON(parentKey?: string, excludedKeys: Array<string> = []): any {
873
+ const JSON_EXCLUDED_KEYS = new Set(this.JSON_EXCLUDED_KEYS || []); // Object.getPrototypeOf(this).constructor.JSON_EXCLUDED_KEYS || [];
874
+ excludedKeys.forEach((key) => JSON_EXCLUDED_KEYS.add(key));
875
+
876
+ const temp: { [prop: string]: any } = {};
877
+ Object.keys(this).forEach((key) => {
878
+ const value = (this as any)[key];
879
+ if (!JSON_EXCLUDED_KEYS.has(key) && typeof value !== 'object' && typeof value !== 'function') temp[key] = value;
880
+ });
881
+ return JSON.parse(JSON.stringify(temp));
882
+ }
883
+
884
+ /**
885
+ * 查找引用
886
+ */
887
+ @action('查找引用')
888
+ async findUsage(): Promise<any> {
889
+ /* override */
890
+ }
891
+
892
+ /**
893
+ * 通过当前节点,查找被引用的节点
894
+ */
895
+ @action('通过当前节点,查找被引用的节点')
896
+ async nodeFindRefNodes(): Promise<any> {
897
+ /* override */
898
+ }
899
+
900
+ async findReadOnlyLogicUsage(): Promise<any> {
901
+ /* override */
902
+ }
903
+
904
+ /**
905
+ * 重命名
906
+ */
907
+ @action('重命名')
908
+ async changeName(newValue: string, updateAll: boolean = false): Promise<any> {
909
+ /* override */
910
+ }
911
+
912
+ /**
913
+ * 准备删除
914
+ */
915
+ @action('准备删除')
916
+ async prepareDelete(cb?: Function): Promise<any> {
917
+ /* override */
918
+ }
919
+
920
+ /**
921
+ * 添加参数准备
922
+ */
923
+ @action('添加参数准备')
924
+ async addParamsPrepare(): Promise<any> {
925
+ /* override */
926
+ }
927
+
928
+ /**
929
+ * 获取当前节点类型
930
+ */
931
+ @action('获取当前节点类型')
932
+ async getCurrentTypeAnnotation(): Promise<any> {
933
+ /* override */
934
+ }
935
+
936
+ /**
937
+ * 获取当前节点的下一级内容
938
+ */
939
+ @action('获取当前节点的下一级内容')
940
+ getSelectRef(newTypeAnnotation: TypeAnnotation, needNewStructure = false): any {
941
+ /* override */
942
+ }
943
+
944
+ /**
945
+ * 销毁
946
+ * 从 Map 中删除点和子节点
947
+ */
948
+ destroy() {
949
+ // utils.traverse((current) => , { node: this }, {
950
+ // mode: 'anyObject',
951
+ // excludedKeySet: this.JSON_EXCLUDED_KEYS,
952
+ // });
953
+ }
954
+
955
+ onChange($event?: EventPayload) {
956
+ this.emit('change', $event);
957
+ }
958
+
959
+ onCreate($event?: any) {
960
+ /* override */
961
+ }
962
+
963
+ onDelete($event?: any) {
964
+ /* override */
965
+ }
966
+
967
+ /**
968
+ * 移动节点
969
+ * @param sourceNode
970
+ * @param position
971
+ */
972
+ moveNode(options: { sourceNode: BaseNode; position: 'append' | 'insertBefore' | 'insertAfter'; action?: string }) {
973
+ const { sourceNode, position } = options;
974
+ if (this.concept === 'App') {
975
+ return;
870
976
  }
871
- onCreate($event?: any) {
872
- /* override */
977
+ let actionMsg = `移动${(this.constructor as any).nodeTitle}`;
978
+ if (this.name) {
979
+ actionMsg += `“${this.name}”`;
873
980
  }
874
- onDelete($event?: any) {
875
- /* override */
981
+ (sourceNode as any).app.emit('collect:start', {
982
+ actionMsg,
983
+ });
984
+ // 如果是兄弟节点之前的移动
985
+ if (position !== 'append' && this.concept !== sourceNode.concept) {
986
+ return;
876
987
  }
877
-
878
- /**
879
- * 移动节点
880
- * @param sourceNode
881
- * @param position
882
- */
883
- moveNode(options: {
884
- sourceNode: BaseNode,
885
- position: 'append' | 'insertBefore' | 'insertAfter',
886
- action?: string
887
- }) {
888
- const { sourceNode, position } = options;
889
- if (this.concept === 'App') {
890
- return;
891
- }
892
- let actionMsg = `移动${(this.constructor as any).nodeTitle}`;
893
- if (this.name) {
894
- actionMsg += `“${this.name}”`;
988
+ // 先删
989
+ this.delete();
990
+ if (position === 'append') {
991
+ let { action } = options;
992
+ if (!action) action = `add${this.concept}`;
993
+ const parentNode = sourceNode;
994
+ (parentNode as any)[action](this as any);
995
+ } else {
996
+ const parentNode = sourceNode?.parentNode;
997
+ const parentKey = sourceNode?.parentKey || '';
998
+ const list = (parentNode as any)[parentKey];
999
+ if (Array.isArray(list)) {
1000
+ let index = list.indexOf(sourceNode);
1001
+ if (position === 'insertAfter') {
1002
+ index += 1;
895
1003
  }
896
- (sourceNode as any).app.emit('collect:start', {
897
- actionMsg,
1004
+ Object.assign(this, {
1005
+ parentNode,
1006
+ parentKey,
898
1007
  });
899
- // 如果是兄弟节点之前的移动
900
- if (position !== 'append' && this.concept !== sourceNode.concept) {
901
- return;
902
- }
903
- // 先删
904
- this.delete();
905
- if (position === 'append') {
906
- let { action } = options;
907
- if (!action)
908
- action = `add${this.concept}`;
909
- const parentNode = sourceNode;
910
- (parentNode as any)[action](this as any);
911
- } else {
912
- const parentNode = sourceNode?.parentNode;
913
- const parentKey = sourceNode?.parentKey || '';
914
- const list = (parentNode as any)[parentKey];
915
- if (Array.isArray(list)) {
916
- let index = list.indexOf(sourceNode);
917
- if (position === 'insertAfter') {
918
- index += 1;
919
- }
920
- Object.assign(this, {
921
- parentNode,
922
- parentKey,
923
- });
924
-
925
- if (this.concept === 'ViewElement')
926
- this.name = (this as unknown as ViewElement).getViewElementUniqueName(this.name);
927
-
928
- list.splice(index, 0, this);
929
- this.create({
930
- index,
931
- parentNode,
932
- parentKey,
933
- });
934
- }
935
- }
936
- (sourceNode as any).app.emit('collect:end');
937
- }
938
1008
 
939
- // 其他节点替换本nasl节点
940
- replaceNode(newNode: any) {
941
- const oldNode: any = this;
942
- const { parentNode, parentKey, offsetX, offsetY, app } = oldNode;
943
- const logic = oldNode.logic;
944
- if (!Array.isArray(parentNode[parentKey])) {
945
- /**
946
- * match切换分支,需要调用setExpressionWitchCase,补全分支的信息
947
- */
948
- if (parentNode.concept === 'Match' && parentKey === 'expression') {
949
- parentNode.setExpressionWitchCase(newNode);
950
- return;
951
- }
952
- parentNode.update({
953
- [parentKey]: newNode,
954
- });
1009
+ if (this.concept === 'ViewElement') this.name = (this as unknown as ViewElement).getViewElementUniqueName(this.name);
1010
+
1011
+ list.splice(index, 0, this);
1012
+ this.create({
1013
+ index,
1014
+ parentNode,
1015
+ parentKey,
1016
+ });
1017
+ }
1018
+ }
1019
+ (sourceNode as any).app.emit('collect:end');
1020
+ }
1021
+
1022
+ // 其他节点替换本nasl节点
1023
+ replaceNode(newNode: any) {
1024
+ const oldNode: any = this;
1025
+ const { parentNode, parentKey, offsetX, offsetY, app } = oldNode;
1026
+ const { logic } = oldNode;
1027
+ if (!Array.isArray(parentNode[parentKey])) {
1028
+ /**
1029
+ * match切换分支,需要调用setExpressionWitchCase,补全分支的信息
1030
+ */
1031
+ if (parentNode.concept === 'Match' && parentKey === 'expression') {
1032
+ parentNode.setExpressionWitchCase(newNode);
1033
+ return;
1034
+ }
1035
+ parentNode.update({
1036
+ [parentKey]: newNode,
1037
+ });
1038
+ } else {
1039
+ app.emit('collect:start', {
1040
+ actionMsg: '删除属性变量',
1041
+ });
1042
+ if (parentNode.concept === 'Logic') {
1043
+ if (parentKey === 'body') {
1044
+ const expIndex = logic.body.findIndex((item: any) => item === oldNode);
1045
+ logic.insertItemInBodyAt(newNode, expIndex);
955
1046
  } else {
956
- app.emit('collect:start', {
957
- actionMsg: '删除属性变量',
958
- });
959
- if (parentNode.concept === 'Logic') {
960
- if (parentKey === 'body') {
961
- const expIndex = logic.body.findIndex((item: any) => item === oldNode);
962
- logic.insertItemInBodyAt(newNode, expIndex);
963
- } else {
964
- const expIndex = logic.playground.findIndex((item: any) => item === oldNode);
965
- Object.assign(newNode, { offsetX, offsetY });
966
- logic.insertItemInPlaygroundAt(newNode, expIndex);
967
- }
968
- } else {
969
- const expIndex = parentNode[parentKey].findIndex((item: any) => item === oldNode);
970
- const firstUpperText = parentKey[0].toUpperCase() + parentKey.slice(1, parentKey.length);
971
- Object.assign(newNode, { offsetX, offsetY });
972
- if (parentNode.concept === 'MatchCase') {
973
- parentKey === 'body' ? parentNode.insertItemInBodyAt(newNode, expIndex) : parentNode.insertLogicItemInPatternsAt(newNode, expIndex);
974
- } else if (parentNode[`insertItemIn${firstUpperText}At`])
975
- parentNode[`insertItemIn${firstUpperText}At`](newNode, expIndex);
976
- else
977
- parentNode.insertItemAt(newNode, expIndex);
978
- }
979
- oldNode.delete();
980
- app.emit('collect:end');
1047
+ const expIndex = logic.playground.findIndex((item: any) => item === oldNode);
1048
+ Object.assign(newNode, { offsetX, offsetY });
1049
+ logic.insertItemInPlaygroundAt(newNode, expIndex);
981
1050
  }
1051
+ } else {
1052
+ const expIndex = parentNode[parentKey].findIndex((item: any) => item === oldNode);
1053
+ const firstUpperText = parentKey[0].toUpperCase() + parentKey.slice(1, parentKey.length);
1054
+ Object.assign(newNode, { offsetX, offsetY });
1055
+ if (parentNode.concept === 'MatchCase') {
1056
+ parentKey === 'body' ? parentNode.insertItemInBodyAt(newNode, expIndex) : parentNode.insertLogicItemInPatternsAt(newNode, expIndex);
1057
+ } else if (parentNode[`insertItemIn${firstUpperText}At`]) parentNode[`insertItemIn${firstUpperText}At`](newNode, expIndex);
1058
+ else parentNode.insertItemAt(newNode, expIndex);
1059
+ }
1060
+ oldNode.delete();
1061
+ app.emit('collect:end');
982
1062
  }
983
-
984
- /**
985
- * 获取添加时的默认选项
986
- * @returns
987
- */
988
- public static getDefaultOptions(): any {
989
- return {};
1063
+ }
1064
+
1065
+ /**
1066
+ * 获取添加时的默认选项
1067
+ * @returns
1068
+ */
1069
+ public static getDefaultOptions(): any {
1070
+ return {};
1071
+ }
1072
+
1073
+ public traverseChildren(cb: (ele: SynatxNode) => void): void {
1074
+ function traverse(node: SynatxNode) {
1075
+ cb(node);
1076
+
1077
+ const propertyMap = getConceptPropertyMap(node?.concept);
1078
+ if (!propertyMap) return;
1079
+
1080
+ for (const property of propertyMap.keys()) {
1081
+ const child = node[property as keyof BaseNode];
1082
+ if (!child) continue;
1083
+ else if (Array.isArray(child)) child.forEach((node: SynatxNode) => traverse(node));
1084
+ else traverse(child);
1085
+ }
990
1086
  }
991
1087
 
992
- public traverseChildren(cb: (ele: SynatxNode) => void): void {
993
- function traverse(node: SynatxNode) {
994
- cb(node);
995
-
996
- const propertyMap = getConceptPropertyMap(node?.concept);
997
- if (!propertyMap)
998
- return;
999
-
1000
- for (const property of propertyMap.keys()) {
1001
- const child = node[property as keyof BaseNode];
1002
- if (!child)
1003
- continue;
1004
- else if (Array.isArray(child))
1005
- child.forEach((node: SynatxNode) => traverse(node));
1006
- else
1007
- traverse(child);
1008
- }
1009
- }
1010
-
1011
- traverse(this as unknown as SynatxNode);
1088
+ traverse(this as unknown as SynatxNode);
1089
+ }
1090
+
1091
+ /**
1092
+ * 获取当前节点在nasl标注节点上的节点
1093
+ */
1094
+ public getCurrentAnnotatedJSON() {
1095
+ return this.__TypeAnnotation;
1096
+ }
1097
+
1098
+ /**
1099
+ * 获取
1100
+ * 当前this上下文 的Source 和 父级文件级别的节点
1101
+ */
1102
+ public getCurrentSource() {
1103
+ const node = this as BaseNode;
1104
+ let { sourceMap } = node;
1105
+ let fileNode = node;
1106
+ // 如果没有sourceMap,就继续向上找 ,或者到module结束
1107
+ // 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
1108
+ // 如果当前节点是view就不要向上查找了
1109
+ while (!sourceMap && fileNode && !(fileNode.parentNode.concept === 'App')) {
1110
+ fileNode = fileNode.parentNode;
1111
+ sourceMap = fileNode?.sourceMap;
1012
1112
  }
1013
-
1014
- /**
1015
- * 获取当前节点在nasl标注节点上的节点
1016
- */
1017
- public getCurrentAnnotatedJSON() {
1018
- return this.__TypeAnnotation;
1113
+ const currentSource = sourceMap && sourceMap.get(node);
1114
+ if (currentSource) {
1115
+ return { currentSource, fileNode };
1019
1116
  }
1020
- /**
1021
- * 获取
1022
- * 当前this上下文 的Source 和 父级文件级别的节点
1023
- */
1024
- public getCurrentSource() {
1025
- const node = (this as BaseNode);
1026
- let sourceMap = node.sourceMap;
1027
- let fileNode = node;
1028
- // 如果没有sourceMap,就继续向上找 ,或者到module结束
1029
- // 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
1030
- // 如果当前节点是view就不要向上查找了
1031
- while (
1032
- !sourceMap
1033
- && fileNode
1034
- && !(fileNode.parentNode.concept === 'App')
1035
- ) {
1036
- fileNode = fileNode.parentNode;
1037
- sourceMap = fileNode?.sourceMap;
1038
- }
1039
- const currentSource = sourceMap && sourceMap.get(node);
1040
- if (currentSource) {
1041
- return { currentSource, fileNode };
1042
- }
1043
- return { fileNode };
1117
+ return { fileNode };
1118
+ }
1119
+
1120
+ /**
1121
+ * 获取
1122
+ * 当前this上下文 的Source 父级文件级别的节点
1123
+ */
1124
+ public getFileConceptNode(concept: string) {
1125
+ const node = this as BaseNode;
1126
+ let { sourceMap } = node;
1127
+ let fileNode = node;
1128
+ // 如果没有sourceMap,就继续向上找 ,或者到module结束
1129
+ // 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
1130
+ // 如果当前节点是view就不要向上查找了
1131
+ while (!sourceMap && fileNode && !(fileNode.parentNode.concept === 'App')) {
1132
+ fileNode = fileNode.parentNode;
1133
+ sourceMap = fileNode?.sourceMap;
1044
1134
  }
1045
-
1046
- /**
1047
- * 获取
1048
- * 当前this上下文 的Source 父级文件级别的节点
1049
- */
1050
- public getFileConceptNode(concept: string) {
1051
- const node = (this as BaseNode);
1052
- let sourceMap = node.sourceMap;
1053
- let fileNode = node;
1054
- // 如果没有sourceMap,就继续向上找 ,或者到module结束
1055
- // 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
1056
- // 如果当前节点是view就不要向上查找了
1057
- while (
1058
- !sourceMap
1059
- && fileNode
1060
- && !(fileNode.parentNode.concept === 'App')
1061
- ) {
1062
- fileNode = fileNode.parentNode;
1063
- sourceMap = fileNode?.sourceMap;
1064
- }
1065
- const arr: any = [];
1066
- sourceMap && sourceMap.forEach((value, key) => {
1067
- if (key.concept === concept)
1068
- arr.push({ key, value });
1069
- });
1070
- return arr;
1135
+ const arr: any = [];
1136
+ sourceMap &&
1137
+ sourceMap.forEach((value, key) => {
1138
+ if (key.concept === concept) arr.push({ key, value });
1139
+ });
1140
+ return arr;
1141
+ }
1142
+
1143
+ get isTreeLeaf() {
1144
+ if (
1145
+ this.concept === 'EntityProperty' ||
1146
+ this.concept === 'InterfaceParam' ||
1147
+ this.concept === 'Param' ||
1148
+ this.concept === 'Return' ||
1149
+ this.concept === 'StructureProperty' ||
1150
+ this.concept === 'Variable'
1151
+ ) {
1152
+ if ((this as any).typeAnnotation || (this.__TypeAnnotation && this.parentKey === 'virtualParams')) {
1153
+ return !this.hasChildren;
1154
+ }
1155
+ return true;
1071
1156
  }
1072
- get isTreeLeaf() {
1073
- if (this.concept === 'EntityProperty' || this.concept === 'InterfaceParam' || this.concept === 'Param'
1074
- || this.concept === 'Return' || this.concept === 'StructureProperty' || this.concept === 'Variable') {
1075
- if ((this as any).typeAnnotation || (this.__TypeAnnotation && this.parentKey === 'virtualParams')) {
1076
- return !this.hasChildren;
1077
- } else {
1078
- return true;
1079
- }
1080
- }
1081
- return false;
1157
+ return false;
1158
+ }
1159
+
1160
+ get hasChildren() {
1161
+ const typeAnnotation = (this as any).typeAnnotation || this.__TypeAnnotation;
1162
+ if (typeAnnotation) {
1163
+ const { typeKind, typeNamespace, typeName, properties } = typeAnnotation;
1164
+ if (typeKind === 'reference' || typeKind === 'generic') {
1165
+ if (typeNamespace.endsWith('.enums')) return null;
1166
+ return [{}];
1167
+ }
1168
+ if (typeNamespace === 'nasl.core' && ['String', 'Text', 'Email'].includes(typeName)) {
1169
+ return [{}];
1170
+ }
1171
+ if (typeKind === 'anonymousStructure' && properties?.length) {
1172
+ return [{}];
1173
+ }
1174
+ return null;
1082
1175
  }
1083
- get hasChildren() {
1084
- const typeAnnotation = (this as any).typeAnnotation || this.__TypeAnnotation;
1085
- if (typeAnnotation) {
1086
- const { typeKind, typeNamespace, typeName, properties } = typeAnnotation;
1087
- if (typeKind === 'reference' || typeKind === 'generic') {
1088
- if (typeNamespace.endsWith('.enums'))
1089
- return null;
1090
- return [{}];
1091
- } else if (typeNamespace === 'nasl.core' && ['String', 'Text', 'Email'].includes(typeName)) {
1092
- return [{}];
1093
- } else if (typeKind === 'anonymousStructure' && properties?.length) {
1094
- return [{}];
1095
- }
1096
- return null;
1097
- }
1098
- return null;
1176
+ return null;
1177
+ }
1178
+
1179
+ /** 收集特定类型的子节点 */
1180
+ collectNodes(concept: SynatxNodeConcept): void;
1181
+ /** 收集判定为真的子节点 */
1182
+ collectNodes(pre: (node: SynatxNode) => boolean): void;
1183
+ collectNodes(input: SynatxNodeConcept | ((node: SynatxNode) => boolean)) {
1184
+ const pre = typeof input === 'string' ? (node: SynatxNode) => node.concept === input : input;
1185
+ const nodes: SynatxNode[] = [];
1186
+ const self = this as unknown as SynatxNode;
1187
+
1188
+ if (pre(self)) {
1189
+ nodes.push(self);
1099
1190
  }
1100
1191
 
1101
- /** 收集特定类型的子节点 */
1102
- collectNodes(concept: SynatxNodeConcept): void;
1103
- /** 收集判定为真的子节点 */
1104
- collectNodes(pre: (node: SynatxNode) => boolean): void;
1105
- collectNodes(input: SynatxNodeConcept | ((node: SynatxNode) => boolean)) {
1106
- const pre = typeof input === 'string' ? (node: SynatxNode) => node.concept === input : input;
1107
- const nodes: SynatxNode[] = [];
1108
- const self = this as unknown as SynatxNode;
1109
-
1110
- if (pre(self)) {
1111
- nodes.push(self);
1112
- }
1192
+ this.traverseChildren((current) => {
1193
+ if (pre(current)) {
1194
+ nodes.push(current);
1195
+ }
1196
+ });
1113
1197
 
1114
- this.traverseChildren((current) => {
1115
- if (pre(current)) {
1116
- nodes.push(current);
1117
- }
1118
- });
1119
-
1120
- return nodes;
1121
- }
1198
+ return nodes;
1199
+ }
1122
1200
  }
1123
1201
 
1124
1202
  export default BaseNode;