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