@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
@@ -1,18 +1,18 @@
1
+ import { v4 as uuidv4 } from 'uuid';
1
2
  import { TranslatorState, shiftState, withSourceMap, indent } from '../translator';
2
3
  import { ElementToVueOptions } from './ViewElement__';
3
4
  import MemberExpression from './MemberExpression__';
4
5
  import StructureProperty from './StructureProperty__';
5
6
  import App from './App__';
6
7
  import { genHash } from '../generator';
7
- //================================================================================
8
+ //= ===============================================================================
8
9
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
9
10
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
10
- //================================================================================
11
+ //= ===============================================================================
11
12
  import { EventPayload, Params } from '../common/EventEmitter';
12
13
  import { concept, excludedInJSON, property } from '../decorators';
13
14
 
14
15
  import * as utils from '../utils';
15
- import { v4 as uuidv4 } from 'uuid';
16
16
  import BaseNode from '../common/BaseNode';
17
17
  import classMap from '../common/classMap';
18
18
  import TypeAnnotation from './TypeAnnotation__';
@@ -26,1402 +26,1539 @@ import LogicItem from './LogicItem__';
26
26
  */
27
27
  @concept('实体/(匿名)数据结构构造器')
28
28
  export class NewComposite extends LogicItem {
29
- /**
30
- * 产品概念
31
- */
32
- @property()
33
- concept: 'NewComposite' = 'NewComposite';
34
-
35
- /**
36
- * 类型
37
- */
38
- @property('TypeAnnotation')
39
- typeAnnotation: TypeAnnotation = undefined;
40
-
41
- /**
42
- * 左边项
43
- */
44
- @property('Identifier')
45
- properties: Array<Identifier> = [];
46
-
47
- /**
48
- * 右边项
49
- */
50
- @property('SelectMembers')
51
- rights: Array<SelectMembers> = [];
52
-
53
- /**
54
- * 赋值线
55
- */
56
- @property('AssignmentLine')
57
- assignmentLines: Array<AssignmentLine> = [];
58
-
59
- /**
60
- * hideProperties
61
- */
62
- @property()
63
- hideProperties: boolean = false;
64
-
65
- /**
66
- * hideDefaults
67
- */
68
- @property()
69
- hideDefaults: boolean = false;
70
-
71
- /**
72
- * 自动连线
73
- */
74
- @property()
75
- autoConnection: boolean = true;
76
-
77
- /**
78
- * @param source 需要合并的部分参数
79
- */
80
- constructor(source?: Partial<NewComposite>) {
81
- source = Object.assign({}, NewComposite.getDefaultOptions(), source);
82
- super(source);
83
- super.subConstructor(source);
84
- }
85
- getClassName() {
86
- return 'NewComposite';
87
- }
88
-
89
- static from(source: any, parentNode?: any, parentKey?: string): NewComposite {
90
- return super.from(source, parentNode, parentKey) as NewComposite;
91
- }
92
-
93
- /**
94
- * 设置类型
95
- */
96
- setTypeAnnotation(typeAnnotation: TypeAnnotation) {
97
- typeAnnotation._delete();
98
- const relationOptions = { parentNode: this, parentKey: 'typeAnnotation' };
99
- Object.assign(typeAnnotation, relationOptions);
100
- const object = {
101
- typeAnnotation,
102
- };
103
- this.update({
104
- ...object,
105
- });
106
- }
107
-
108
- /**
109
- * 设置左边项
110
- */
111
- setProperties(properties: Array<Identifier>) {
112
- const object = {
113
- properties,
114
- };
115
- this.update({
116
- ...object,
117
- });
118
- }
119
-
120
- /**
121
- * 设置右边项
122
- */
123
- setRights(rights: Array<SelectMembers>) {
124
- const object = {
125
- rights,
126
- };
127
- this.update({
128
- ...object,
129
- });
130
- }
131
-
132
- /**
133
- * 设置赋值线
134
- */
135
- setAssignmentLines(assignmentLines: Array<AssignmentLine>) {
136
- const object = {
137
- assignmentLines,
138
- };
139
- this.update({
140
- ...object,
141
- });
142
- }
143
-
144
- /**
145
- * 设置hideProperties
146
- */
147
- setHideProperties(hideProperties: boolean) {
148
- const object = {
149
- hideProperties,
150
- };
151
- this.update({
152
- ...object,
153
- });
154
- }
155
-
156
- /**
157
- * 设置hideDefaults
158
- */
159
- setHideDefaults(hideDefaults: boolean) {
160
- const object = {
161
- hideDefaults,
162
- };
163
- this.update({
164
- ...object,
165
- });
166
- }
167
-
168
- /**
169
- * 设置自动连线
170
- */
171
- setAutoConnection(autoConnection: boolean) {
172
- const object = {
173
- autoConnection,
174
- };
175
- this.update({
176
- ...object,
177
- });
29
+ /**
30
+ * 产品概念
31
+ */
32
+ @property()
33
+ concept: 'NewComposite' = 'NewComposite';
34
+
35
+ /**
36
+ * 类型
37
+ */
38
+ @property('TypeAnnotation')
39
+ typeAnnotation: TypeAnnotation = undefined;
40
+
41
+ /**
42
+ * 左边项
43
+ */
44
+ @property('Identifier')
45
+ properties: Array<Identifier> = [];
46
+
47
+ /**
48
+ * 右边项
49
+ */
50
+ @property('SelectMembers')
51
+ rights: Array<SelectMembers> = [];
52
+
53
+ /**
54
+ * 赋值线
55
+ */
56
+ @property('AssignmentLine')
57
+ assignmentLines: Array<AssignmentLine> = [];
58
+
59
+ /**
60
+ * hideProperties
61
+ */
62
+ @property()
63
+ hideProperties: boolean = false;
64
+
65
+ /**
66
+ * hideDefaults
67
+ */
68
+ @property()
69
+ hideDefaults: boolean = false;
70
+
71
+ /**
72
+ * 自动连线
73
+ */
74
+ @property()
75
+ autoConnection: boolean = true;
76
+
77
+ /**
78
+ * @param source 需要合并的部分参数
79
+ */
80
+ constructor(source?: Partial<NewComposite>) {
81
+ // @ts-ignore
82
+ source = { ...NewComposite.getDefaultOptions(), ...source };
83
+ super(source);
84
+ super.subConstructor(source);
85
+ }
86
+
87
+ getClassName() {
88
+ return 'NewComposite';
89
+ }
90
+
91
+ static from(source: any, parentNode?: any, parentKey?: string): NewComposite {
92
+ return super.from(source, parentNode, parentKey) as NewComposite;
93
+ }
94
+
95
+ /**
96
+ * 设置类型
97
+ */
98
+ setTypeAnnotation(typeAnnotation: TypeAnnotation) {
99
+ typeAnnotation._delete();
100
+ const relationOptions = { parentNode: this, parentKey: 'typeAnnotation' };
101
+ Object.assign(typeAnnotation, relationOptions);
102
+ const object = {
103
+ typeAnnotation,
104
+ };
105
+ this.update({
106
+ ...object,
107
+ });
108
+ }
109
+
110
+ /**
111
+ * 设置左边项
112
+ */
113
+ setProperties(properties: Array<Identifier>) {
114
+ const object = {
115
+ properties,
116
+ };
117
+ this.update({
118
+ ...object,
119
+ });
120
+ }
121
+
122
+ /**
123
+ * 设置右边项
124
+ */
125
+ setRights(rights: Array<SelectMembers>) {
126
+ const object = {
127
+ rights,
128
+ };
129
+ this.update({
130
+ ...object,
131
+ });
132
+ }
133
+
134
+ /**
135
+ * 设置赋值线
136
+ */
137
+ setAssignmentLines(assignmentLines: Array<AssignmentLine>) {
138
+ const object = {
139
+ assignmentLines,
140
+ };
141
+ this.update({
142
+ ...object,
143
+ });
144
+ }
145
+
146
+ /**
147
+ * 设置hideProperties
148
+ */
149
+ setHideProperties(hideProperties: boolean) {
150
+ const object = {
151
+ hideProperties,
152
+ };
153
+ this.update({
154
+ ...object,
155
+ });
156
+ }
157
+
158
+ /**
159
+ * 设置hideDefaults
160
+ */
161
+ setHideDefaults(hideDefaults: boolean) {
162
+ const object = {
163
+ hideDefaults,
164
+ };
165
+ this.update({
166
+ ...object,
167
+ });
168
+ }
169
+
170
+ /**
171
+ * 设置自动连线
172
+ */
173
+ setAutoConnection(autoConnection: boolean) {
174
+ const object = {
175
+ autoConnection,
176
+ };
177
+ this.update({
178
+ ...object,
179
+ });
180
+ }
181
+
182
+ getIdentifierExistingNames(excludedList: Array<Identifier> = []) {
183
+ const excludedSet = new Set(excludedList);
184
+ return ((this.properties as Identifier[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
185
+ }
186
+
187
+ getIdentifierUniqueName(name = 'identifier1') {
188
+ return utils.unique(name, this.getIdentifierExistingNames(), undefined, false);
189
+ }
190
+
191
+ /**
192
+ * 插入标识符
193
+ * @internal
194
+ * @param name 标识符名称,如果不填会自动生成一个唯一名称
195
+ */
196
+ _insertIdentifierAt(name: string, index: number): Identifier;
197
+
198
+ /**
199
+ * 插入标识符
200
+ * @internal
201
+ * @param identifierOptions 标识符参数
202
+ */
203
+ _insertIdentifierAt(identifierOptions: Partial<Identifier>, index: number): Identifier;
204
+
205
+ /**
206
+ * 插入标识符
207
+ * @internal
208
+ * @param identifier 已有的标识符实例
209
+ */
210
+ _insertIdentifierAt(identifier: Identifier, index: number): Identifier;
211
+
212
+ _insertIdentifierAt(options: string | Partial<Identifier> | Identifier, index: number) {
213
+ const identifierOptions: any = {};
214
+ const relationOptions = { parentNode: this, parentKey: 'properties' };
215
+ let identifier: Identifier;
216
+ if (!options) {
217
+ identifier = Identifier.from(
218
+ {
219
+ ...identifierOptions,
220
+ name: this.getIdentifierUniqueName(),
221
+ },
222
+ this,
223
+ 'properties'
224
+ );
225
+ } else if (typeof options === 'string') {
226
+ identifier = Identifier.from(
227
+ {
228
+ ...identifierOptions,
229
+ name: options,
230
+ },
231
+ this,
232
+ 'properties'
233
+ );
234
+ } else if (options instanceof Identifier) {
235
+ options.ensureDelete(); // 同一实例不支持多处存在
236
+ identifier = options;
237
+ Object.assign(identifier, relationOptions);
238
+ } else {
239
+ identifier = Identifier.from(
240
+ {
241
+ ...identifierOptions,
242
+ ...options,
243
+ },
244
+ this,
245
+ 'properties'
246
+ );
178
247
  }
179
-
180
- getIdentifierExistingNames(excludedList: Array<Identifier> = []) {
181
- const excludedSet = new Set(excludedList);
182
- return ((this.properties as Identifier[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
248
+ this.properties.splice(index, 0, identifier);
249
+ return identifier;
250
+ }
251
+
252
+ /**
253
+ * 插入标识符
254
+ * @param name 标识符名称,如果不填会自动生成一个唯一名称
255
+ */
256
+ insertIdentifierAt(name: string, index: number): Identifier;
257
+
258
+ /**
259
+ * 插入标识符
260
+ * @param identifierOptions 标识符参数
261
+ */
262
+ insertIdentifierAt(identifierOptions: Partial<Identifier>, index: number): Identifier;
263
+
264
+ /**
265
+ * 插入标识符
266
+ * @param identifier 已有的标识符实例
267
+ */
268
+ insertIdentifierAt(identifier: Identifier, index: number): Identifier;
269
+
270
+ insertIdentifierAt(options: string | Partial<Identifier> | Identifier, index: number) {
271
+ const node = this._insertIdentifierAt(options as any, index);
272
+ node.create({
273
+ index,
274
+ parentNode: this,
275
+ parentKey: 'properties',
276
+ });
277
+ return node;
278
+ }
279
+
280
+ /**
281
+ * 添加标识符
282
+ * @internal
283
+ * @param name 标识符名称,如果不填会自动生成一个唯一名称
284
+ */
285
+ _addIdentifier(name?: string): Identifier;
286
+
287
+ /**
288
+ * 添加标识符
289
+ * @internal
290
+ * @param identifierOptions 标识符参数
291
+ */
292
+ _addIdentifier(identifierOptions: Partial<Identifier>): Identifier;
293
+
294
+ /**
295
+ * 添加标识符
296
+ * @internal
297
+ * @param identifier 已有的标识符实例
298
+ */
299
+ _addIdentifier(identifier: Identifier): Identifier;
300
+
301
+ _addIdentifier(options?: string | Partial<Identifier> | Identifier) {
302
+ const index = this.properties.length;
303
+ return this._insertIdentifierAt(options as any, index);
304
+ }
305
+
306
+ /**
307
+ * 添加标识符
308
+ * @internal
309
+ * @param name 标识符名称,如果不填会自动生成一个唯一名称
310
+ */
311
+ addIdentifier(name?: string): Identifier;
312
+
313
+ /**
314
+ * 添加标识符
315
+ * @param identifierOptions 标识符参数
316
+ */
317
+ addIdentifier(identifierOptions: Partial<Identifier>): Identifier;
318
+
319
+ /**
320
+ * 添加标识符
321
+ * @param identifier 已有的标识符实例
322
+ */
323
+ addIdentifier(identifier: Identifier): Identifier;
324
+
325
+ addIdentifier(options?: string | Partial<Identifier> | Identifier) {
326
+ const node = this._addIdentifier(options as any);
327
+ const index = this.properties.indexOf(node);
328
+ node.create({
329
+ index,
330
+ parentNode: this,
331
+ parentKey: 'properties',
332
+ });
333
+ return node;
334
+ }
335
+
336
+ getSelectMembersExistingNames(excludedList: Array<SelectMembers> = []) {
337
+ const excludedSet = new Set(excludedList);
338
+ return ((this.rights as SelectMembers[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
339
+ }
340
+
341
+ getSelectMembersUniqueName(name = 'selectMembers1') {
342
+ return utils.unique(name, this.getSelectMembersExistingNames(), undefined, false);
343
+ }
344
+
345
+ /**
346
+ * 插入选择成员
347
+ * @internal
348
+ * @param name 选择成员名称,如果不填会自动生成一个唯一名称
349
+ */
350
+ _insertSelectMembersAt(name: string, index: number): SelectMembers;
351
+
352
+ /**
353
+ * 插入选择成员
354
+ * @internal
355
+ * @param selectMembersOptions 选择成员参数
356
+ */
357
+ _insertSelectMembersAt(selectMembersOptions: Partial<SelectMembers>, index: number): SelectMembers;
358
+
359
+ /**
360
+ * 插入选择成员
361
+ * @internal
362
+ * @param selectMembers 已有的选择成员实例
363
+ */
364
+ _insertSelectMembersAt(selectMembers: SelectMembers, index: number): SelectMembers;
365
+
366
+ _insertSelectMembersAt(options: string | Partial<SelectMembers> | SelectMembers, index: number) {
367
+ const selectMembersOptions: any = {};
368
+ const relationOptions = { parentNode: this, parentKey: 'rights' };
369
+ let selectMembers: SelectMembers;
370
+ if (!options) {
371
+ selectMembers = SelectMembers.from(
372
+ {
373
+ ...selectMembersOptions,
374
+ name: this.getSelectMembersUniqueName(),
375
+ },
376
+ this,
377
+ 'rights'
378
+ );
379
+ } else if (typeof options === 'string') {
380
+ selectMembers = SelectMembers.from(
381
+ {
382
+ ...selectMembersOptions,
383
+ name: options,
384
+ },
385
+ this,
386
+ 'rights'
387
+ );
388
+ } else if (options instanceof SelectMembers) {
389
+ options.ensureDelete(); // 同一实例不支持多处存在
390
+ selectMembers = options;
391
+ Object.assign(selectMembers, relationOptions);
392
+ } else {
393
+ selectMembers = SelectMembers.from(
394
+ {
395
+ ...selectMembersOptions,
396
+ ...options,
397
+ },
398
+ this,
399
+ 'rights'
400
+ );
183
401
  }
184
- getIdentifierUniqueName(name = 'identifier1') {
185
- return utils.unique(name, this.getIdentifierExistingNames(), undefined, false);
402
+ this.rights.splice(index, 0, selectMembers);
403
+ return selectMembers;
404
+ }
405
+
406
+ /**
407
+ * 插入选择成员
408
+ * @param name 选择成员名称,如果不填会自动生成一个唯一名称
409
+ */
410
+ insertSelectMembersAt(name: string, index: number): SelectMembers;
411
+
412
+ /**
413
+ * 插入选择成员
414
+ * @param selectMembersOptions 选择成员参数
415
+ */
416
+ insertSelectMembersAt(selectMembersOptions: Partial<SelectMembers>, index: number): SelectMembers;
417
+
418
+ /**
419
+ * 插入选择成员
420
+ * @param selectMembers 已有的选择成员实例
421
+ */
422
+ insertSelectMembersAt(selectMembers: SelectMembers, index: number): SelectMembers;
423
+
424
+ insertSelectMembersAt(options: string | Partial<SelectMembers> | SelectMembers, index: number) {
425
+ const node = this._insertSelectMembersAt(options as any, index);
426
+ node.create({
427
+ index,
428
+ parentNode: this,
429
+ parentKey: 'rights',
430
+ });
431
+ return node;
432
+ }
433
+
434
+ /**
435
+ * 添加选择成员
436
+ * @internal
437
+ * @param name 选择成员名称,如果不填会自动生成一个唯一名称
438
+ */
439
+ _addSelectMembers(name?: string): SelectMembers;
440
+
441
+ /**
442
+ * 添加选择成员
443
+ * @internal
444
+ * @param selectMembersOptions 选择成员参数
445
+ */
446
+ _addSelectMembers(selectMembersOptions: Partial<SelectMembers>): SelectMembers;
447
+
448
+ /**
449
+ * 添加选择成员
450
+ * @internal
451
+ * @param selectMembers 已有的选择成员实例
452
+ */
453
+ _addSelectMembers(selectMembers: SelectMembers): SelectMembers;
454
+
455
+ _addSelectMembers(options?: string | Partial<SelectMembers> | SelectMembers) {
456
+ const index = this.rights.length;
457
+ return this._insertSelectMembersAt(options as any, index);
458
+ }
459
+
460
+ /**
461
+ * 添加选择成员
462
+ * @internal
463
+ * @param name 选择成员名称,如果不填会自动生成一个唯一名称
464
+ */
465
+ addSelectMembers(name?: string): SelectMembers;
466
+
467
+ /**
468
+ * 添加选择成员
469
+ * @param selectMembersOptions 选择成员参数
470
+ */
471
+ addSelectMembers(selectMembersOptions: Partial<SelectMembers>): SelectMembers;
472
+
473
+ /**
474
+ * 添加选择成员
475
+ * @param selectMembers 已有的选择成员实例
476
+ */
477
+ addSelectMembers(selectMembers: SelectMembers): SelectMembers;
478
+
479
+ addSelectMembers(options?: string | Partial<SelectMembers> | SelectMembers) {
480
+ const node = this._addSelectMembers(options as any);
481
+ const index = this.rights.indexOf(node);
482
+ node.create({
483
+ index,
484
+ parentNode: this,
485
+ parentKey: 'rights',
486
+ });
487
+ return node;
488
+ }
489
+
490
+ getAssignmentLineExistingNames(excludedList: Array<AssignmentLine> = []) {
491
+ const excludedSet = new Set(excludedList);
492
+ return ((this.assignmentLines as AssignmentLine[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
493
+ }
494
+
495
+ getAssignmentLineUniqueName(name = 'assignmentLine1') {
496
+ return utils.unique(name, this.getAssignmentLineExistingNames(), undefined, false);
497
+ }
498
+
499
+ /**
500
+ * 插入赋值连线
501
+ * @internal
502
+ * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
503
+ */
504
+ _insertAssignmentLineAt(name: string, index: number): AssignmentLine;
505
+
506
+ /**
507
+ * 插入赋值连线
508
+ * @internal
509
+ * @param assignmentLineOptions 赋值连线参数
510
+ */
511
+ _insertAssignmentLineAt(assignmentLineOptions: Partial<AssignmentLine>, index: number): AssignmentLine;
512
+
513
+ /**
514
+ * 插入赋值连线
515
+ * @internal
516
+ * @param assignmentLine 已有的赋值连线实例
517
+ */
518
+ _insertAssignmentLineAt(assignmentLine: AssignmentLine, index: number): AssignmentLine;
519
+
520
+ _insertAssignmentLineAt(options: string | Partial<AssignmentLine> | AssignmentLine, index: number) {
521
+ const assignmentLineOptions: any = {};
522
+ const relationOptions = { parentNode: this, parentKey: 'assignmentLines' };
523
+ let assignmentLine: AssignmentLine;
524
+ if (!options) {
525
+ assignmentLine = AssignmentLine.from(
526
+ {
527
+ ...assignmentLineOptions,
528
+ name: this.getAssignmentLineUniqueName(),
529
+ },
530
+ this,
531
+ 'assignmentLines'
532
+ );
533
+ } else if (typeof options === 'string') {
534
+ assignmentLine = AssignmentLine.from(
535
+ {
536
+ ...assignmentLineOptions,
537
+ name: options,
538
+ },
539
+ this,
540
+ 'assignmentLines'
541
+ );
542
+ } else if (options instanceof AssignmentLine) {
543
+ options.ensureDelete(); // 同一实例不支持多处存在
544
+ assignmentLine = options;
545
+ Object.assign(assignmentLine, relationOptions);
546
+ } else {
547
+ assignmentLine = AssignmentLine.from(
548
+ {
549
+ ...assignmentLineOptions,
550
+ ...options,
551
+ },
552
+ this,
553
+ 'assignmentLines'
554
+ );
186
555
  }
187
-
188
- /**
189
- * 插入标识符
190
- * @internal
191
- * @param name 标识符名称,如果不填会自动生成一个唯一名称
192
- */
193
- _insertIdentifierAt(name: string, index: number): Identifier;
194
-
195
- /**
196
- * 插入标识符
197
- * @internal
198
- * @param identifierOptions 标识符参数
199
- */
200
- _insertIdentifierAt(identifierOptions: Partial<Identifier>, index: number): Identifier;
201
-
202
- /**
203
- * 插入标识符
204
- * @internal
205
- * @param identifier 已有的标识符实例
206
- */
207
- _insertIdentifierAt(identifier: Identifier, index: number): Identifier;
208
-
209
- _insertIdentifierAt(options: string | Partial<Identifier> | Identifier, index: number) {
210
- const identifierOptions: any = {};
211
- const relationOptions = { parentNode: this, parentKey: 'properties' };
212
- let identifier: Identifier;
213
- if (!options) {
214
- identifier = Identifier.from({
215
- ...identifierOptions,
216
- name: this.getIdentifierUniqueName(),
217
- }, this, 'properties');
218
- } else if (typeof options === 'string') {
219
- identifier = Identifier.from({
220
- ...identifierOptions,
221
- name: options,
222
- }, this, 'properties');
223
- } else if (options instanceof Identifier) {
224
- options.ensureDelete(); // 同一实例不支持多处存在
225
- identifier = options;
226
- Object.assign(identifier, relationOptions);
227
- } else {
228
- identifier = Identifier.from({
229
- ...identifierOptions,
230
- ...options,
231
- }, this, 'properties');
232
- }
233
- this.properties.splice(index, 0, identifier);
234
- return identifier;
235
- }
236
-
237
- /**
238
- * 插入标识符
239
- * @param name 标识符名称,如果不填会自动生成一个唯一名称
240
- */
241
- insertIdentifierAt(name: string, index: number): Identifier;
242
-
243
- /**
244
- * 插入标识符
245
- * @param identifierOptions 标识符参数
246
- */
247
- insertIdentifierAt(identifierOptions: Partial<Identifier>, index: number): Identifier;
248
-
249
- /**
250
- * 插入标识符
251
- * @param identifier 已有的标识符实例
252
- */
253
- insertIdentifierAt(identifier: Identifier, index: number): Identifier;
254
-
255
- insertIdentifierAt(options: string | Partial<Identifier> | Identifier, index: number) {
256
- const node = this._insertIdentifierAt(options as any, index);
257
- node.create({
258
- index,
259
- parentNode: this,
260
- parentKey: 'properties',
261
- });
262
- return node;
556
+ this.assignmentLines.splice(index, 0, assignmentLine);
557
+ return assignmentLine;
558
+ }
559
+
560
+ /**
561
+ * 插入赋值连线
562
+ * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
563
+ */
564
+ insertAssignmentLineAt(name: string, index: number): AssignmentLine;
565
+
566
+ /**
567
+ * 插入赋值连线
568
+ * @param assignmentLineOptions 赋值连线参数
569
+ */
570
+ insertAssignmentLineAt(assignmentLineOptions: Partial<AssignmentLine>, index: number): AssignmentLine;
571
+
572
+ /**
573
+ * 插入赋值连线
574
+ * @param assignmentLine 已有的赋值连线实例
575
+ */
576
+ insertAssignmentLineAt(assignmentLine: AssignmentLine, index: number): AssignmentLine;
577
+
578
+ insertAssignmentLineAt(options: string | Partial<AssignmentLine> | AssignmentLine, index: number) {
579
+ const node = this._insertAssignmentLineAt(options as any, index);
580
+ node.create({
581
+ index,
582
+ parentNode: this,
583
+ parentKey: 'assignmentLines',
584
+ });
585
+ return node;
586
+ }
587
+
588
+ /**
589
+ * 添加赋值连线
590
+ * @internal
591
+ * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
592
+ */
593
+ _addAssignmentLine(name?: string): AssignmentLine;
594
+
595
+ /**
596
+ * 添加赋值连线
597
+ * @internal
598
+ * @param assignmentLineOptions 赋值连线参数
599
+ */
600
+ _addAssignmentLine(assignmentLineOptions: Partial<AssignmentLine>): AssignmentLine;
601
+
602
+ /**
603
+ * 添加赋值连线
604
+ * @internal
605
+ * @param assignmentLine 已有的赋值连线实例
606
+ */
607
+ _addAssignmentLine(assignmentLine: AssignmentLine): AssignmentLine;
608
+
609
+ _addAssignmentLine(options?: string | Partial<AssignmentLine> | AssignmentLine) {
610
+ const index = this.assignmentLines.length;
611
+ return this._insertAssignmentLineAt(options as any, index);
612
+ }
613
+
614
+ /**
615
+ * 添加赋值连线
616
+ * @internal
617
+ * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
618
+ */
619
+ addAssignmentLine(name?: string): AssignmentLine;
620
+
621
+ /**
622
+ * 添加赋值连线
623
+ * @param assignmentLineOptions 赋值连线参数
624
+ */
625
+ addAssignmentLine(assignmentLineOptions: Partial<AssignmentLine>): AssignmentLine;
626
+
627
+ /**
628
+ * 添加赋值连线
629
+ * @param assignmentLine 已有的赋值连线实例
630
+ */
631
+ addAssignmentLine(assignmentLine: AssignmentLine): AssignmentLine;
632
+
633
+ addAssignmentLine(options?: string | Partial<AssignmentLine> | AssignmentLine) {
634
+ const node = this._addAssignmentLine(options as any);
635
+ const index = this.assignmentLines.indexOf(node);
636
+ node.create({
637
+ index,
638
+ parentNode: this,
639
+ parentKey: 'assignmentLines',
640
+ });
641
+ return node;
642
+ }
643
+
644
+ /**
645
+ * 删除类型标注
646
+ * @param name 类型标注名称
647
+ */
648
+ removeTypeAnnotation(name: string): void;
649
+
650
+ /**
651
+ * 删除类型标注
652
+ * @param typeAnnotation 已有的类型标注实例
653
+ */
654
+ removeTypeAnnotation(typeAnnotation: TypeAnnotation): void;
655
+
656
+ removeTypeAnnotation(options: string | TypeAnnotation) {
657
+ let typeAnnotation: TypeAnnotation;
658
+ if (typeof options === 'string') {
659
+ typeAnnotation = this.typeAnnotation;
660
+ if (!typeAnnotation) {
661
+ throw new Error(`找不到类型标注 ${options}`);
662
+ }
663
+ } else {
664
+ typeAnnotation = options;
263
665
  }
264
-
265
- /**
266
- * 添加标识符
267
- * @internal
268
- * @param name 标识符名称,如果不填会自动生成一个唯一名称
269
- */
270
- _addIdentifier(name?: string): Identifier;
271
-
272
- /**
273
- * 添加标识符
274
- * @internal
275
- * @param identifierOptions 标识符参数
276
- */
277
- _addIdentifier(identifierOptions: Partial<Identifier>): Identifier;
278
-
279
- /**
280
- * 添加标识符
281
- * @internal
282
- * @param identifier 已有的标识符实例
283
- */
284
- _addIdentifier(identifier: Identifier): Identifier;
285
-
286
- _addIdentifier(options?: string | Partial<Identifier> | Identifier) {
287
- const index = this.properties.length;
288
- return this._insertIdentifierAt(options as any, index);
666
+ return typeAnnotation.delete();
667
+ }
668
+
669
+ __removeTypeAnnotation(typeAnnotation: TypeAnnotation) {
670
+ const { parentKey } = typeAnnotation;
671
+ const params: Params = {
672
+ parentNode: this,
673
+ parentKey,
674
+ index: -1,
675
+ object: null,
676
+ oldObject: typeAnnotation,
677
+ };
678
+ if (parentKey) {
679
+ params.parentKey = parentKey;
680
+ if (Array.isArray((this as any)[parentKey])) {
681
+ const index = (this as any)[parentKey].indexOf(typeAnnotation);
682
+ ~index && (this as any)[parentKey].splice(index, 1);
683
+ params.index = index;
684
+ } else if ((this as any)[parentKey] === typeAnnotation) {
685
+ params.index = 0;
686
+ (this as any)[parentKey] = undefined;
687
+ }
289
688
  }
290
-
291
- /**
292
- * 添加标识符
293
- * @internal
294
- * @param name 标识符名称,如果不填会自动生成一个唯一名称
295
- */
296
- addIdentifier(name?: string): Identifier;
297
-
298
- /**
299
- * 添加标识符
300
- * @param identifierOptions 标识符参数
301
- */
302
- addIdentifier(identifierOptions: Partial<Identifier>): Identifier;
303
-
304
- /**
305
- * 添加标识符
306
- * @param identifier 已有的标识符实例
307
- */
308
- addIdentifier(identifier: Identifier): Identifier;
309
-
310
- addIdentifier(options?: string | Partial<Identifier> | Identifier) {
311
- const node = this._addIdentifier(options as any);
312
- const index = this.properties.indexOf(node);
313
- node.create({
314
- index,
315
- parentNode: this,
316
- parentKey: 'properties',
317
- });
318
- return node;
689
+ return params;
690
+ }
691
+
692
+ /**
693
+ * 删除标识符
694
+ * @param name 标识符名称
695
+ */
696
+ removeIdentifier(name: string): void;
697
+
698
+ /**
699
+ * 删除标识符
700
+ * @param identifier 已有的标识符实例
701
+ */
702
+ removeIdentifier(identifier: Identifier): void;
703
+
704
+ removeIdentifier(options: string | Identifier) {
705
+ let identifier: Identifier;
706
+ if (typeof options === 'string') {
707
+ identifier = (this.properties as Identifier[]).find((item) => item.name === options);
708
+ if (!identifier) {
709
+ throw new Error(`找不到标识符 ${options}`);
710
+ }
711
+ } else {
712
+ identifier = options;
319
713
  }
320
-
321
- getSelectMembersExistingNames(excludedList: Array<SelectMembers> = []) {
322
- const excludedSet = new Set(excludedList);
323
- return ((this.rights as SelectMembers[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
714
+ return identifier.delete();
715
+ }
716
+
717
+ __removeLogicItem(logicItem: LogicItem) {
718
+ const { parentKey } = logicItem;
719
+ const params: Params = {
720
+ parentNode: this,
721
+ parentKey,
722
+ index: -1,
723
+ object: null,
724
+ oldObject: logicItem,
725
+ };
726
+ if (parentKey) {
727
+ params.parentKey = parentKey;
728
+ if (Array.isArray((this as any)[parentKey])) {
729
+ const index = (this as any)[parentKey].indexOf(logicItem);
730
+ ~index && (this as any)[parentKey].splice(index, 1);
731
+ params.index = index;
732
+ } else if ((this as any)[parentKey] === logicItem) {
733
+ params.index = 0;
734
+ (this as any)[parentKey] = undefined;
735
+ }
324
736
  }
325
- getSelectMembersUniqueName(name = 'selectMembers1') {
326
- return utils.unique(name, this.getSelectMembersExistingNames(), undefined, false);
737
+ return params;
738
+ }
739
+
740
+ /**
741
+ * 删除选择成员
742
+ * @param name 选择成员名称
743
+ */
744
+ removeSelectMembers(name: string): void;
745
+
746
+ /**
747
+ * 删除选择成员
748
+ * @param selectMembers 已有的选择成员实例
749
+ */
750
+ removeSelectMembers(selectMembers: SelectMembers): void;
751
+
752
+ removeSelectMembers(options: string | SelectMembers) {
753
+ let selectMembers: SelectMembers;
754
+ if (typeof options === 'string') {
755
+ selectMembers = (this.rights as SelectMembers[]).find((item) => item.name === options);
756
+ if (!selectMembers) {
757
+ throw new Error(`找不到选择成员 ${options}`);
758
+ }
759
+ } else {
760
+ selectMembers = options;
327
761
  }
328
-
329
- /**
330
- * 插入选择成员
331
- * @internal
332
- * @param name 选择成员名称,如果不填会自动生成一个唯一名称
333
- */
334
- _insertSelectMembersAt(name: string, index: number): SelectMembers;
335
-
336
- /**
337
- * 插入选择成员
338
- * @internal
339
- * @param selectMembersOptions 选择成员参数
340
- */
341
- _insertSelectMembersAt(selectMembersOptions: Partial<SelectMembers>, index: number): SelectMembers;
342
-
343
- /**
344
- * 插入选择成员
345
- * @internal
346
- * @param selectMembers 已有的选择成员实例
347
- */
348
- _insertSelectMembersAt(selectMembers: SelectMembers, index: number): SelectMembers;
349
-
350
- _insertSelectMembersAt(options: string | Partial<SelectMembers> | SelectMembers, index: number) {
351
- const selectMembersOptions: any = {};
352
- const relationOptions = { parentNode: this, parentKey: 'rights' };
353
- let selectMembers: SelectMembers;
354
- if (!options) {
355
- selectMembers = SelectMembers.from({
356
- ...selectMembersOptions,
357
- name: this.getSelectMembersUniqueName(),
358
- }, this, 'rights');
359
- } else if (typeof options === 'string') {
360
- selectMembers = SelectMembers.from({
361
- ...selectMembersOptions,
362
- name: options,
363
- }, this, 'rights');
364
- } else if (options instanceof SelectMembers) {
365
- options.ensureDelete(); // 同一实例不支持多处存在
366
- selectMembers = options;
367
- Object.assign(selectMembers, relationOptions);
368
- } else {
369
- selectMembers = SelectMembers.from({
370
- ...selectMembersOptions,
371
- ...options,
372
- }, this, 'rights');
373
- }
374
- this.rights.splice(index, 0, selectMembers);
375
- return selectMembers;
762
+ return selectMembers.delete();
763
+ }
764
+
765
+ __removeSelectMembers(selectMembers: SelectMembers) {
766
+ const { parentKey } = selectMembers;
767
+ const params: Params = {
768
+ parentNode: this,
769
+ parentKey,
770
+ index: -1,
771
+ object: null,
772
+ oldObject: selectMembers,
773
+ };
774
+ if (parentKey) {
775
+ params.parentKey = parentKey;
776
+ if (Array.isArray((this as any)[parentKey])) {
777
+ const index = (this as any)[parentKey].indexOf(selectMembers);
778
+ ~index && (this as any)[parentKey].splice(index, 1);
779
+ params.index = index;
780
+ } else if ((this as any)[parentKey] === selectMembers) {
781
+ params.index = 0;
782
+ (this as any)[parentKey] = undefined;
783
+ }
376
784
  }
377
-
378
- /**
379
- * 插入选择成员
380
- * @param name 选择成员名称,如果不填会自动生成一个唯一名称
381
- */
382
- insertSelectMembersAt(name: string, index: number): SelectMembers;
383
-
384
- /**
385
- * 插入选择成员
386
- * @param selectMembersOptions 选择成员参数
387
- */
388
- insertSelectMembersAt(selectMembersOptions: Partial<SelectMembers>, index: number): SelectMembers;
389
-
390
- /**
391
- * 插入选择成员
392
- * @param selectMembers 已有的选择成员实例
393
- */
394
- insertSelectMembersAt(selectMembers: SelectMembers, index: number): SelectMembers;
395
-
396
- insertSelectMembersAt(options: string | Partial<SelectMembers> | SelectMembers, index: number) {
397
- const node = this._insertSelectMembersAt(options as any, index);
398
- node.create({
399
- index,
400
- parentNode: this,
401
- parentKey: 'rights',
402
- });
403
- return node;
785
+ return params;
786
+ }
787
+
788
+ /**
789
+ * 删除赋值连线
790
+ * @param name 赋值连线名称
791
+ */
792
+ removeAssignmentLine(name: string): void;
793
+
794
+ /**
795
+ * 删除赋值连线
796
+ * @param assignmentLine 已有的赋值连线实例
797
+ */
798
+ removeAssignmentLine(assignmentLine: AssignmentLine): void;
799
+
800
+ removeAssignmentLine(options: string | AssignmentLine) {
801
+ let assignmentLine: AssignmentLine;
802
+ if (typeof options === 'string') {
803
+ assignmentLine = (this.assignmentLines as AssignmentLine[]).find((item) => item.name === options);
804
+ if (!assignmentLine) {
805
+ throw new Error(`找不到赋值连线 ${options}`);
806
+ }
807
+ } else {
808
+ assignmentLine = options;
404
809
  }
405
-
406
- /**
407
- * 添加选择成员
408
- * @internal
409
- * @param name 选择成员名称,如果不填会自动生成一个唯一名称
410
- */
411
- _addSelectMembers(name?: string): SelectMembers;
412
-
413
- /**
414
- * 添加选择成员
415
- * @internal
416
- * @param selectMembersOptions 选择成员参数
417
- */
418
- _addSelectMembers(selectMembersOptions: Partial<SelectMembers>): SelectMembers;
419
-
420
- /**
421
- * 添加选择成员
422
- * @internal
423
- * @param selectMembers 已有的选择成员实例
424
- */
425
- _addSelectMembers(selectMembers: SelectMembers): SelectMembers;
426
-
427
- _addSelectMembers(options?: string | Partial<SelectMembers> | SelectMembers) {
428
- const index = this.rights.length;
429
- return this._insertSelectMembersAt(options as any, index);
810
+ return assignmentLine.delete();
811
+ }
812
+
813
+ __removeAssignmentLine(assignmentLine: AssignmentLine) {
814
+ const { parentKey } = assignmentLine;
815
+ const params: Params = {
816
+ parentNode: this,
817
+ parentKey,
818
+ index: -1,
819
+ object: null,
820
+ oldObject: assignmentLine,
821
+ };
822
+ if (parentKey) {
823
+ params.parentKey = parentKey;
824
+ if (Array.isArray((this as any)[parentKey])) {
825
+ const index = (this as any)[parentKey].indexOf(assignmentLine);
826
+ ~index && (this as any)[parentKey].splice(index, 1);
827
+ params.index = index;
828
+ } else if ((this as any)[parentKey] === assignmentLine) {
829
+ params.index = 0;
830
+ (this as any)[parentKey] = undefined;
831
+ }
430
832
  }
431
-
432
- /**
433
- * 添加选择成员
434
- * @internal
435
- * @param name 选择成员名称,如果不填会自动生成一个唯一名称
436
- */
437
- addSelectMembers(name?: string): SelectMembers;
438
-
439
- /**
440
- * 添加选择成员
441
- * @param selectMembersOptions 选择成员参数
442
- */
443
- addSelectMembers(selectMembersOptions: Partial<SelectMembers>): SelectMembers;
444
-
445
- /**
446
- * 添加选择成员
447
- * @param selectMembers 已有的选择成员实例
448
- */
449
- addSelectMembers(selectMembers: SelectMembers): SelectMembers;
450
-
451
- addSelectMembers(options?: string | Partial<SelectMembers> | SelectMembers) {
452
- const node = this._addSelectMembers(options as any);
453
- const index = this.rights.indexOf(node);
454
- node.create({
455
- index,
456
- parentNode: this,
457
- parentKey: 'rights',
833
+ return params;
834
+ }
835
+
836
+ //= ===============================================================================
837
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
838
+ // 自动生成的代码已结束。下面可以手动编写。
839
+ //= ===============================================================================
840
+ get lines() {
841
+ return this.assignmentLines.length;
842
+ }
843
+
844
+ async newConnection(addRightIndex?: number) {
845
+ const leftLineSet = new Set();
846
+ const lineArr: Array<AssignmentLine> = [];
847
+ // 系统属性不可自动连线
848
+ ['id', 'createdTime', 'updatedTime', 'createdBy', 'updatedBy'].forEach((name) => leftLineSet.add(name));
849
+ // 左边已连线的下标
850
+ this.assignmentLines.forEach((line) => {
851
+ if (line.leftIndex.length > 1) leftLineSet.add(Number(line.leftIndex[1]));
852
+ });
853
+
854
+ const autoConnection = () => {
855
+ const isAnnotation = this.typeAnnotation.typeKind === 'anonymousStructure';
856
+ this.app.emit('collect:start', {
857
+ actionMsg: '自动连线',
858
+ });
859
+ this.properties.forEach((property: Identifier, leftSecondIndex: number) => {
860
+ const leftName = property.name;
861
+ const leftTypeAnnotation = !isAnnotation && property.__TypeAnnotation;
862
+ if (leftLineSet.has(leftSecondIndex) || leftLineSet.has(leftName)) return;
863
+
864
+ this.rights.forEach((selectMember, rightFirstIndex) => {
865
+ const { members, expression } = selectMember;
866
+ if (leftLineSet.has(leftSecondIndex)) return;
867
+ if (addRightIndex !== -1 && addRightIndex !== rightFirstIndex) return;
868
+ // 右侧父节点也不允许自动连线
869
+ const rightLineSet = new Set();
870
+ for (let i = 0; i < members.length - 1; i++) {
871
+ const { completeName } = members[i];
872
+ const preCompleteName = members[i + 1].completeName;
873
+ if (preCompleteName.includes(completeName) && completeName.split('.').length !== preCompleteName.split('.').length) rightLineSet.add(i);
874
+ }
875
+
876
+ if (leftName === expression.name && (isAnnotation || expression.__TypeAnnotation.typeKind === leftTypeAnnotation.typeKind)) {
877
+ const Line: AssignmentLine = new AssignmentLine({
878
+ leftIndex: [0, leftSecondIndex],
879
+ rightIndex: [rightFirstIndex],
880
+ });
881
+ lineArr.push(Line);
882
+ leftLineSet.add(leftSecondIndex);
883
+ return;
884
+ }
885
+ members.forEach((rightMember: any, rightSecondIndex: number) => {
886
+ const rightName = rightMember.property.name;
887
+ if (rightLineSet.has(rightSecondIndex)) return;
888
+
889
+ if (leftName === rightName) {
890
+ const rightTypeAnnotation = rightMember.__TypeAnnotation;
891
+ if (!isAnnotation && leftTypeAnnotation.typeKind !== rightTypeAnnotation.typeKind) return;
892
+ const leftIndex = [0, leftSecondIndex];
893
+ const rightIndex = [rightFirstIndex, rightSecondIndex];
894
+ const Line: AssignmentLine = new AssignmentLine({ leftIndex, rightIndex });
895
+ lineArr.push(Line);
896
+ leftLineSet.add(leftSecondIndex);
897
+ }
898
+ });
458
899
  });
459
- return node;
900
+ });
901
+ lineArr.length && this.setAssignmentLines([...this.assignmentLines, ...lineArr]);
902
+ this.app.emit('collect:end');
903
+ };
904
+
905
+ let count = 0;
906
+ const typeAnnotationEnd = () => {
907
+ const l = this.properties.every((item) => item.__isCorrectTypeAnnotation);
908
+ const r = this.rights.every(
909
+ (right) => right.members.every((item) => item.__isCorrectTypeAnnotation) && right.expression.__isCorrectTypeAnnotation
910
+ );
911
+ count++;
912
+ if (r && l) {
913
+ autoConnection();
914
+ } else if (count <= 10) {
915
+ setTimeout(() => {
916
+ typeAnnotationEnd();
917
+ }, 100);
918
+ }
919
+ };
920
+ typeAnnotationEnd();
921
+ }
922
+
923
+ connection(leftItem: Identifier | TypeAnnotation, rightItem: LogicItem | SelectMembers, rightToLeft: boolean) {
924
+ let newLeftIndex = [0];
925
+ let newRightIndex = [];
926
+ let newLines: Array<AssignmentLine> = [...this.assignmentLines];
927
+ let newProperties = this.properties;
928
+ if (leftItem.concept === 'Identifier') {
929
+ const members = this.properties;
930
+ const secondIndex = members.findIndex((ident: any) => ident === leftItem);
931
+ // 连线左边的坐标。
932
+ newLeftIndex = [0, secondIndex];
933
+ } else {
934
+ newLines = [];
935
+ newProperties = [];
460
936
  }
461
-
462
- getAssignmentLineExistingNames(excludedList: Array<AssignmentLine> = []) {
463
- const excludedSet = new Set(excludedList);
464
- return ((this.assignmentLines as AssignmentLine[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
937
+ if (rightItem.concept === 'SelectMembers') {
938
+ newRightIndex = [this.rights.findIndex((right) => right === rightItem)];
939
+ } else {
940
+ const selectMember = rightItem.getAncestor('SelectMembers');
941
+ const firstIndex = this.rights.findIndex((right) => right === selectMember);
942
+ const secondIndex = this.rights[firstIndex].members.findIndex((exp: any) => exp === rightItem);
943
+ newRightIndex = [firstIndex, secondIndex];
465
944
  }
466
- getAssignmentLineUniqueName(name = 'assignmentLine1') {
467
- return utils.unique(name, this.getAssignmentLineExistingNames(), undefined, false);
945
+ // 左边同一个属性只能有一个连线
946
+ if (rightToLeft) {
947
+ newLines = newLines.filter(({ leftIndex: index }) => !(newLeftIndex[0] === index[0] && newLeftIndex[1] === index[1]));
468
948
  }
469
-
470
- /**
471
- * 插入赋值连线
472
- * @internal
473
- * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
474
- */
475
- _insertAssignmentLineAt(name: string, index: number): AssignmentLine;
476
-
477
- /**
478
- * 插入赋值连线
479
- * @internal
480
- * @param assignmentLineOptions 赋值连线参数
481
- */
482
- _insertAssignmentLineAt(assignmentLineOptions: Partial<AssignmentLine>, index: number): AssignmentLine;
483
-
484
- /**
485
- * 插入赋值连线
486
- * @internal
487
- * @param assignmentLine 已有的赋值连线实例
488
- */
489
- _insertAssignmentLineAt(assignmentLine: AssignmentLine, index: number): AssignmentLine;
490
-
491
- _insertAssignmentLineAt(options: string | Partial<AssignmentLine> | AssignmentLine, index: number) {
492
- const assignmentLineOptions: any = {};
493
- const relationOptions = { parentNode: this, parentKey: 'assignmentLines' };
494
- let assignmentLine: AssignmentLine;
495
- if (!options) {
496
- assignmentLine = AssignmentLine.from({
497
- ...assignmentLineOptions,
498
- name: this.getAssignmentLineUniqueName(),
499
- }, this, 'assignmentLines');
500
- } else if (typeof options === 'string') {
501
- assignmentLine = AssignmentLine.from({
502
- ...assignmentLineOptions,
503
- name: options,
504
- }, this, 'assignmentLines');
505
- } else if (options instanceof AssignmentLine) {
506
- options.ensureDelete(); // 同一实例不支持多处存在
507
- assignmentLine = options;
508
- Object.assign(assignmentLine, relationOptions);
949
+ const Line: AssignmentLine = new AssignmentLine({
950
+ leftIndex: newLeftIndex,
951
+ rightIndex: newRightIndex,
952
+ });
953
+ newLines.push(Line);
954
+
955
+ this.update({
956
+ assignmentLines: newLines,
957
+ properties: newProperties,
958
+ });
959
+ }
960
+
961
+ deleteAssignmentLine(assignmentLine: AssignmentLine) {
962
+ const newLine = this.assignmentLines.filter((line) => line !== assignmentLine);
963
+ this.update({
964
+ assignmentLines: newLine,
965
+ });
966
+ }
967
+
968
+ changeLinesLocation(selectMember: any) {
969
+ if (selectMember.concept !== 'SelectMembers') return;
970
+
971
+ if (this.rights.findIndex((member) => selectMember === member) !== -1) {
972
+ const index = this.rights.findIndex((member) => selectMember === member);
973
+ const newRights = this.rights.filter((member) => selectMember !== member);
974
+ const filterLine = this.assignmentLines.filter((line) => line.rightIndex[0] !== index);
975
+ const newLines: Array<AssignmentLine> = [];
976
+ filterLine.forEach((line) => {
977
+ if (line.rightIndex[0] > index) {
978
+ if (line.rightIndex[1] === undefined) {
979
+ const newLine = { ...line, rightIndex: [line.rightIndex[0] - 1] };
980
+ newLines.push(newLine as AssignmentLine);
981
+ } else {
982
+ const newLine = { ...line, rightIndex: [line.rightIndex[0] - 1, line.rightIndex[1]] };
983
+ newLines.push(newLine as AssignmentLine);
984
+ }
509
985
  } else {
510
- assignmentLine = AssignmentLine.from({
511
- ...assignmentLineOptions,
512
- ...options,
513
- }, this, 'assignmentLines');
986
+ newLines.push(line);
514
987
  }
515
- this.assignmentLines.splice(index, 0, assignmentLine);
516
- return assignmentLine;
988
+ });
989
+ this.update({
990
+ rights: newRights,
991
+ assignmentLines: newLines,
992
+ });
517
993
  }
518
-
519
- /**
520
- * 插入赋值连线
521
- * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
522
- */
523
- insertAssignmentLineAt(name: string, index: number): AssignmentLine;
524
-
525
- /**
526
- * 插入赋值连线
527
- * @param assignmentLineOptions 赋值连线参数
528
- */
529
- insertAssignmentLineAt(assignmentLineOptions: Partial<AssignmentLine>, index: number): AssignmentLine;
530
-
531
- /**
532
- * 插入赋值连线
533
- * @param assignmentLine 已有的赋值连线实例
534
- */
535
- insertAssignmentLineAt(assignmentLine: AssignmentLine, index: number): AssignmentLine;
536
-
537
- insertAssignmentLineAt(options: string | Partial<AssignmentLine> | AssignmentLine, index: number) {
538
- const node = this._insertAssignmentLineAt(options as any, index);
539
- node.create({
540
- index,
541
- parentNode: this,
542
- parentKey: 'assignmentLines',
994
+ }
995
+
996
+ changeMembers(oldNode: any, members: MemberExpression[], keepMembers: any, expression: LogicItem) {
997
+ this.app.emit('collect:start', {
998
+ actionMsg: 'New初始赋值修改变量',
999
+ });
1000
+ const selectMember = oldNode.parentNode;
1001
+ const autoConnectionIndex = this.rights.findIndex((right) => right === selectMember);
1002
+ const newSelectMember = { ...selectMember, expression, members };
1003
+ const splitIndex = this.rights.findIndex((right) => selectMember === right);
1004
+ const newLines: AssignmentLine[] = this.assignmentLines.filter(({ rightIndex }) => rightIndex[0] !== splitIndex);
1005
+ let oldLines: AssignmentLine[] = this.assignmentLines.filter(({ rightIndex }) => rightIndex[0] === splitIndex);
1006
+ // 右侧变量改变后,修改连线
1007
+ members.forEach((item, index) => {
1008
+ if (keepMembers?.has(item.completeName)) {
1009
+ const lines = this.findlines(item, selectMember);
1010
+ lines.forEach((line) => {
1011
+ const newLine = { ...line, rightIndex: [line.rightIndex[0], index] };
1012
+ newLines.push(newLine as AssignmentLine);
1013
+ oldLines = oldLines.filter(({ leftIndex }) => leftIndex[1] !== line.leftIndex[1]);
543
1014
  });
544
- return node;
1015
+ }
1016
+ });
1017
+
1018
+ this.update({
1019
+ assignmentLines: newLines,
1020
+ rights: [...this.rights.slice(0, splitIndex), newSelectMember, ...this.rights.slice(splitIndex + 1, this.rights.length)],
1021
+ });
1022
+ this.autoConnection && this.newConnection(autoConnectionIndex);
1023
+ this.app.emit('collect:end');
1024
+ }
1025
+
1026
+ findlines(member: any, selectMember: any) {
1027
+ const lines: Array<AssignmentLine> = [];
1028
+ // 根节点的情况
1029
+ if (selectMember === this) {
1030
+ if (member === this.typeAnnotation) return this.assignmentLines;
1031
+
1032
+ const index2 = this.properties.findIndex((item: Identifier) => item.completeName === member.completeName);
1033
+ this.assignmentLines.forEach((line) => {
1034
+ if (line.leftIndex[1] === index2) lines.push(line);
1035
+ });
1036
+ } else {
1037
+ const index1 = this.rights.findIndex((right) => right === selectMember);
1038
+ const index2 = selectMember.members.findIndex((item: MemberExpression) => item.completeName === member.completeName);
1039
+ this.assignmentLines.forEach((line) => {
1040
+ if (line.rightIndex[0] === index1 && line.rightIndex[1] === index2) lines.push(line);
1041
+ });
545
1042
  }
1043
+ return lines;
1044
+ }
546
1045
 
547
- /**
548
- * 添加赋值连线
549
- * @internal
550
- * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
551
- */
552
- _addAssignmentLine(name?: string): AssignmentLine;
553
-
554
- /**
555
- * 添加赋值连线
556
- * @internal
557
- * @param assignmentLineOptions 赋值连线参数
558
- */
559
- _addAssignmentLine(assignmentLineOptions: Partial<AssignmentLine>): AssignmentLine;
560
-
561
- /**
562
- * 添加赋值连线
563
- * @internal
564
- * @param assignmentLine 已有的赋值连线实例
565
- */
566
- _addAssignmentLine(assignmentLine: AssignmentLine): AssignmentLine;
567
-
568
- _addAssignmentLine(options?: string | Partial<AssignmentLine> | AssignmentLine) {
569
- const index = this.assignmentLines.length;
570
- return this._insertAssignmentLineAt(options as any, index);
571
- }
1046
+ findMember(arrIndex: Array<number>, place: string) {
1047
+ const [firstIndex, secondIndex] = [arrIndex[0], arrIndex[1]];
572
1048
 
573
- /**
574
- * 添加赋值连线
575
- * @internal
576
- * @param name 赋值连线名称,如果不填会自动生成一个唯一名称
577
- */
578
- addAssignmentLine(name?: string): AssignmentLine;
579
-
580
- /**
581
- * 添加赋值连线
582
- * @param assignmentLineOptions 赋值连线参数
583
- */
584
- addAssignmentLine(assignmentLineOptions: Partial<AssignmentLine>): AssignmentLine;
585
-
586
- /**
587
- * 添加赋值连线
588
- * @param assignmentLine 已有的赋值连线实例
589
- */
590
- addAssignmentLine(assignmentLine: AssignmentLine): AssignmentLine;
591
-
592
- addAssignmentLine(options?: string | Partial<AssignmentLine> | AssignmentLine) {
593
- const node = this._addAssignmentLine(options as any);
594
- const index = this.assignmentLines.indexOf(node);
595
- node.create({
596
- index,
597
- parentNode: this,
598
- parentKey: 'assignmentLines',
599
- });
600
- return node;
1049
+ if (place === 'left') {
1050
+ if (secondIndex === undefined) {
1051
+ return this.typeAnnotation;
1052
+ }
1053
+ return this.properties[secondIndex];
601
1054
  }
602
-
603
- /**
604
- * 删除类型标注
605
- * @param name 类型标注名称
606
- */
607
- removeTypeAnnotation(name: string): void;
608
-
609
- /**
610
- * 删除类型标注
611
- * @param typeAnnotation 已有的类型标注实例
612
- */
613
- removeTypeAnnotation(typeAnnotation: TypeAnnotation): void;
614
-
615
- removeTypeAnnotation(options: string | TypeAnnotation) {
616
- let typeAnnotation: TypeAnnotation;
617
- if (typeof options === 'string') {
618
- typeAnnotation = this.typeAnnotation;
619
- if (!typeAnnotation) {
620
- throw new Error('找不到类型标注 ' + options);
621
- }
622
- } else {
623
- typeAnnotation = options;
624
- }
625
- return typeAnnotation.delete();
1055
+ if (secondIndex === undefined) {
1056
+ return this.rights[firstIndex].expression;
626
1057
  }
627
-
628
- __removeTypeAnnotation(typeAnnotation: TypeAnnotation) {
629
- const parentKey = typeAnnotation.parentKey;
630
- const params: Params = {
631
- parentNode: this,
632
- parentKey,
633
- index: -1,
634
- object: null,
635
- oldObject: typeAnnotation,
636
- };
637
- if (parentKey) {
638
- params.parentKey = parentKey;
639
- if (Array.isArray((this as any)[parentKey])) {
640
- const index = (this as any)[parentKey].indexOf(typeAnnotation);
641
- ~index && (this as any)[parentKey].splice(index, 1);
642
- params.index = index;
643
- } else if ((this as any)[parentKey] === typeAnnotation) {
644
- params.index = 0;
645
- (this as any)[parentKey] = undefined;
646
- }
647
- }
648
- return params;
1058
+ return this.rights[firstIndex].members[secondIndex];
1059
+ }
1060
+
1061
+ toUI(state?: TranslatorState): string {
1062
+ let code = '';
1063
+ const { typeAnnotation } = this;
1064
+ const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1065
+ if (!this.typeAnnotation) return null;
1066
+
1067
+ code += 'await (async () => { \n';
1068
+ if (leftTopIndex !== -1) {
1069
+ const { rightIndex } = this.assignmentLines[leftTopIndex];
1070
+ const obj = rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1071
+ code += `return ${obj};\n`;
1072
+ } else if (typeAnnotation.typeKind !== 'anonymousStructure') {
1073
+ code += `const obj = this.$genInitFromSchema('${typeAnnotation.sortedTypeKey}', this.$utils['New'](${typeAnnotation.toUI(
1074
+ shiftState(state, code, { inline: true })
1075
+ )}));\n`;
1076
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }, index) => {
1077
+ const leftSecondIndex = leftIndex[1];
1078
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1079
+ const leftItem = this.properties[leftSecondIndex];
1080
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1081
+ code += `obj.${leftItem.name} = ${rightItem.toUI(shiftState(state, code, { inline: true }))}`;
1082
+ code += ';\n';
1083
+ });
1084
+ code += 'return obj;\n';
1085
+ } else {
1086
+ code += `const obj = {};\n`;
1087
+ this.properties.forEach((property) => {
1088
+ code += `obj.${property.name} = null;\n`;
1089
+ });
1090
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }, index) => {
1091
+ const leftSecondIndex = leftIndex[1];
1092
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1093
+ const leftItem = this.properties[leftSecondIndex];
1094
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1095
+ code += `obj.${leftItem.name} = ${rightItem.toUI(shiftState(state, code, { inline: true }))}`;
1096
+ code += ';\n';
1097
+ });
1098
+ code += 'return obj;\n';
649
1099
  }
650
-
651
- /**
652
- * 删除标识符
653
- * @param name 标识符名称
654
- */
655
- removeIdentifier(name: string): void;
656
-
657
- /**
658
- * 删除标识符
659
- * @param identifier 已有的标识符实例
660
- */
661
- removeIdentifier(identifier: Identifier): void;
662
-
663
- removeIdentifier(options: string | Identifier) {
664
- let identifier: Identifier;
665
- if (typeof options === 'string') {
666
- identifier = (this.properties as Identifier[]).find((item) => item.name === options);
667
- if (!identifier) {
668
- throw new Error('找不到标识符 ' + options);
669
- }
1100
+ code += '})()';
1101
+ return code;
1102
+ }
1103
+
1104
+ toJS(state?: TranslatorState): string {
1105
+ let code = '';
1106
+ const { typeAnnotation } = this;
1107
+ const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1108
+ if (!this.typeAnnotation) return null;
1109
+
1110
+ code += 'await (async () => { \n';
1111
+ if (leftTopIndex !== -1) {
1112
+ const { rightIndex } = this.assignmentLines[leftTopIndex];
1113
+ const obj = rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1114
+ code += `return ${obj.toJS(shiftState(state, code, { inline: true }))};\n`;
1115
+ } else if (typeAnnotation.typeKind !== 'anonymousStructure') {
1116
+ code += `const obj = this.$genInitFromSchema('${typeAnnotation.sortedTypeKey}', this.$utils['New'](${typeAnnotation.toJS(shiftState(state, code, { inline: true }))}));\n`;
1117
+ const rightMap = new Map();
1118
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1119
+ const rightIndexJson = JSON.stringify(rightIndex);
1120
+ if (rightMap.has(rightIndexJson)) {
1121
+ rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex])
670
1122
  } else {
671
- identifier = options;
1123
+ rightMap.set(rightIndexJson, [leftIndex]);
672
1124
  }
673
- return identifier.delete();
674
- }
675
-
676
- __removeLogicItem(logicItem: LogicItem) {
677
- const parentKey = logicItem.parentKey;
678
- const params: Params = {
679
- parentNode: this,
680
- parentKey,
681
- index: -1,
682
- object: null,
683
- oldObject: logicItem,
684
- };
685
- if (parentKey) {
686
- params.parentKey = parentKey;
687
- if (Array.isArray((this as any)[parentKey])) {
688
- const index = (this as any)[parentKey].indexOf(logicItem);
689
- ~index && (this as any)[parentKey].splice(index, 1);
690
- params.index = index;
691
- } else if ((this as any)[parentKey] === logicItem) {
692
- params.index = 0;
693
- (this as any)[parentKey] = undefined;
694
- }
695
- }
696
- return params;
697
- }
698
-
699
- /**
700
- * 删除选择成员
701
- * @param name 选择成员名称
702
- */
703
- removeSelectMembers(name: string): void;
704
-
705
- /**
706
- * 删除选择成员
707
- * @param selectMembers 已有的选择成员实例
708
- */
709
- removeSelectMembers(selectMembers: SelectMembers): void;
710
-
711
- removeSelectMembers(options: string | SelectMembers) {
712
- let selectMembers: SelectMembers;
713
- if (typeof options === 'string') {
714
- selectMembers = (this.rights as SelectMembers[]).find((item) => item.name === options);
715
- if (!selectMembers) {
716
- throw new Error('找不到选择成员 ' + options);
717
- }
1125
+ });
1126
+ rightMap.forEach((leftIndexs, rightIndexJson) => {
1127
+ const rightIndex = JSON.parse(rightIndexJson) || [];
1128
+ const leftItems = leftIndexs.map((leftIndex: Array<number>) => this.properties[leftIndex[1]]);
1129
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1130
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1131
+ leftItems.forEach((leftItem: Identifier) => {
1132
+ code += `obj.${leftItem.name} = `;
1133
+ })
1134
+ code += `${rightItem.toJS(shiftState(state, code, { inline: true }))}`;
1135
+ code += ';\n';
1136
+ });
1137
+ code += 'return obj;\n';
1138
+ } else {
1139
+ code += `const obj = {};\n`;
1140
+ this.properties.forEach((property) => {
1141
+ code += `obj.${property.name} = null;\n`;
1142
+ });
1143
+ const rightMap = new Map();
1144
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1145
+ const rightIndexJson = JSON.stringify(rightIndex);
1146
+ if (rightMap.has(rightIndexJson)) {
1147
+ rightMap.set(rightIndexJson, [...rightMap.get(rightIndexJson), leftIndex])
718
1148
  } else {
719
- selectMembers = options;
1149
+ rightMap.set(rightIndexJson, [leftIndex]);
720
1150
  }
721
- return selectMembers.delete();
1151
+ });
1152
+ rightMap.forEach((leftIndexs, rightIndexJson) => {
1153
+ const rightIndex = JSON.parse(rightIndexJson) || [];
1154
+ const leftItems = leftIndexs.map((leftIndex: Array<number>) => this.properties[leftIndex[1]]);
1155
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1156
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1157
+ leftItems.forEach((leftItem: Identifier) => {
1158
+ code += `obj.${leftItem.name} = `;
1159
+ })
1160
+ code += `${rightItem.toJS(shiftState(state, code, { inline: true }))}`;
1161
+ code += ';\n';
1162
+ });
1163
+ code += 'return obj;\n';
722
1164
  }
723
-
724
- __removeSelectMembers(selectMembers: SelectMembers) {
725
- const parentKey = selectMembers.parentKey;
726
- const params: Params = {
727
- parentNode: this,
728
- parentKey,
729
- index: -1,
730
- object: null,
731
- oldObject: selectMembers,
732
- };
733
- if (parentKey) {
734
- params.parentKey = parentKey;
735
- if (Array.isArray((this as any)[parentKey])) {
736
- const index = (this as any)[parentKey].indexOf(selectMembers);
737
- ~index && (this as any)[parentKey].splice(index, 1);
738
- params.index = index;
739
- } else if ((this as any)[parentKey] === selectMembers) {
740
- params.index = 0;
741
- (this as any)[parentKey] = undefined;
742
- }
1165
+ code += '})()';
1166
+ return code;
1167
+ }
1168
+
1169
+ @withSourceMap()
1170
+ toEmbeddedTS(state?: TranslatorState): string {
1171
+ const indent0 = indent(state?.tabSize || 0);
1172
+ const indent1 = indent((state?.tabSize || 0) + 1);
1173
+ const indent2 = indent((state?.tabSize || 0) + 2);
1174
+ const indent3 = indent((state?.tabSize || 0) + 3);
1175
+ let code = '';
1176
+ if (!this.typeAnnotation) {
1177
+ code += '__IDENTIFIER__';
1178
+ } else if (this.typeAnnotation.typeKind !== 'anonymousStructure') {
1179
+ const rightMap = new Map();
1180
+ code += `${indent0}(() => { \n`;
1181
+ // 提供sourcemap,获取类型标注和上下文可选变量
1182
+ this.rights.forEach((right) => {
1183
+ code += indent1;
1184
+ rightMap.set(right.expression, right.expression.toEmbeddedTS(shiftState(state, code, { inline: true })));
1185
+ code += rightMap.get(right.expression);
1186
+ code += ';\n';
1187
+ if (right.members?.length) {
1188
+ code += indent2;
743
1189
  }
744
- return params;
745
- }
746
-
747
- /**
748
- * 删除赋值连线
749
- * @param name 赋值连线名称
750
- */
751
- removeAssignmentLine(name: string): void;
752
-
753
- /**
754
- * 删除赋值连线
755
- * @param assignmentLine 已有的赋值连线实例
756
- */
757
- removeAssignmentLine(assignmentLine: AssignmentLine): void;
758
-
759
- removeAssignmentLine(options: string | AssignmentLine) {
760
- let assignmentLine: AssignmentLine;
761
- if (typeof options === 'string') {
762
- assignmentLine = (this.assignmentLines as AssignmentLine[]).find((item) => item.name === options);
763
- if (!assignmentLine) {
764
- throw new Error('找不到赋值连线 ' + options);
765
- }
766
- } else {
767
- assignmentLine = options;
768
- }
769
- return assignmentLine.delete();
770
- }
771
-
772
- __removeAssignmentLine(assignmentLine: AssignmentLine) {
773
- const parentKey = assignmentLine.parentKey;
774
- const params: Params = {
775
- parentNode: this,
776
- parentKey,
777
- index: -1,
778
- object: null,
779
- oldObject: assignmentLine,
780
- };
781
- if (parentKey) {
782
- params.parentKey = parentKey;
783
- if (Array.isArray((this as any)[parentKey])) {
784
- const index = (this as any)[parentKey].indexOf(assignmentLine);
785
- ~index && (this as any)[parentKey].splice(index, 1);
786
- params.index = index;
787
- } else if ((this as any)[parentKey] === assignmentLine) {
788
- params.index = 0;
789
- (this as any)[parentKey] = undefined;
790
- }
791
- }
792
- return params;
793
- }
794
-
795
- //================================================================================
796
- // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
797
- // 自动生成的代码已结束。下面可以手动编写。
798
- //================================================================================
799
- get lines() {
800
- return this.assignmentLines.length;
801
- }
802
-
803
- async newConnection(addRightIndex?: number) {
804
- const leftLineSet = new Set();
805
- const lineArr: Array<AssignmentLine> = [];
806
- // 系统属性不可自动连线
807
- ['id', 'createdTime', 'updatedTime', 'createdBy', 'updatedBy'].forEach((name) => leftLineSet.add(name));
808
- // 左边已连线的下标
809
- this.assignmentLines.forEach((line) => {
810
- if (line.leftIndex.length > 1)
811
- leftLineSet.add(Number(line.leftIndex[1]));
1190
+ right.members.forEach((member) => {
1191
+ rightMap.set(member, member.toEmbeddedTS(shiftState(state, code, { inline: true })));
1192
+ code += rightMap.get(member);
1193
+ code += '; ';
812
1194
  });
813
-
814
- const autoConnection = () => {
815
- const isAnnotation = this.typeAnnotation.typeKind === 'anonymousStructure';
816
- this.app.emit('collect:start', {
817
- actionMsg: '自动连线',
818
- });
819
- this.properties.forEach((property: Identifier, leftSecondIndex: number) => {
820
- const leftName = property.name;
821
- const leftTypeAnnotation = !isAnnotation && property.__TypeAnnotation;
822
- if (leftLineSet.has(leftSecondIndex) || leftLineSet.has(leftName))
823
- return;
824
-
825
- this.rights.forEach((selectMember, rightFirstIndex) => {
826
- const { members, expression } = selectMember;
827
- if (leftLineSet.has(leftSecondIndex))
828
- return;
829
- if (addRightIndex !== -1 && addRightIndex !== rightFirstIndex)
830
- return;
831
- // 右侧父节点也不允许自动连线
832
- const rightLineSet = new Set();
833
- for (let i = 0; i < members.length - 1; i++) {
834
- const completeName = members[i].completeName;
835
- const preCompleteName = members[i + 1].completeName;
836
- if (preCompleteName.includes(completeName) && completeName.split('.').length !== preCompleteName.split('.').length)
837
- rightLineSet.add(i);
838
- }
839
-
840
- if (leftName === expression.name && (isAnnotation || expression.__TypeAnnotation.typeKind === leftTypeAnnotation.typeKind)) {
841
- const Line: AssignmentLine = new AssignmentLine({
842
- leftIndex: [0, leftSecondIndex],
843
- rightIndex: [rightFirstIndex],
844
- });
845
- lineArr.push(Line);
846
- leftLineSet.add(leftSecondIndex);
847
- return;
848
- }
849
- members.forEach((rightMember: any, rightSecondIndex: number) => {
850
- const rightName = rightMember.property.name;
851
- if (rightLineSet.has(rightSecondIndex))
852
- return;
853
-
854
- if (leftName === rightName) {
855
- const rightTypeAnnotation = rightMember.__TypeAnnotation;
856
- if (!isAnnotation && leftTypeAnnotation.typeKind !== rightTypeAnnotation.typeKind)
857
- return;
858
- const leftIndex = [0, leftSecondIndex];
859
- const rightIndex = [rightFirstIndex, rightSecondIndex];
860
- const Line: AssignmentLine = new AssignmentLine({ leftIndex, rightIndex });
861
- lineArr.push(Line);
862
- leftLineSet.add(leftSecondIndex);
863
- }
864
- });
865
- });
866
- });
867
- lineArr.length && this.setAssignmentLines([...this.assignmentLines, ...lineArr]);
868
- this.app.emit('collect:end');
869
- };
870
-
871
- let count = 0;
872
- const typeAnnotationEnd = () => {
873
- const l = this.properties.every((item) => item.__isCorrectTypeAnnotation);
874
- const r = this.rights.every((right) => right.members.every((item) => item.__isCorrectTypeAnnotation) && right.expression.__isCorrectTypeAnnotation);
875
- count++;
876
- if (r && l) {
877
- autoConnection();
878
- } else if (count <= 10) {
879
- setTimeout(() => {
880
- typeAnnotationEnd();
881
- }, 100);
882
- }
883
- };
884
- typeAnnotationEnd();
885
- }
886
-
887
- connection(leftItem: Identifier | TypeAnnotation, rightItem: LogicItem | SelectMembers, rightToLeft: boolean) {
888
- let newLeftIndex = [0];
889
- let newRightIndex = [];
890
- let newLines: Array<AssignmentLine> = [...this.assignmentLines];
891
- let newProperties = this.properties;
892
- if (leftItem.concept === 'Identifier') {
893
- const members = this.properties;
894
- const secondIndex = members.findIndex((ident: any) => ident === leftItem);
895
- // 连线左边的坐标。
896
- newLeftIndex = [0, secondIndex];
897
- } else {
898
- newLines = [];
899
- newProperties = [];
900
- }
901
- if (rightItem.concept === 'SelectMembers') {
902
- newRightIndex = [this.rights.findIndex((right) => right === rightItem)];
903
- } else {
904
- const selectMember = rightItem.getAncestor('SelectMembers');
905
- const firstIndex = this.rights.findIndex((right) => right === selectMember);
906
- const secondIndex = this.rights[firstIndex].members.findIndex((exp: any) => exp === rightItem);
907
- newRightIndex = [firstIndex, secondIndex];
908
- }
909
- // 左边同一个属性只能有一个连线
910
- if (rightToLeft) {
911
- newLines = newLines.filter(({ leftIndex: index }) => !(newLeftIndex[0] === index[0] && newLeftIndex[1] === index[1]));
912
- }
913
- const Line: AssignmentLine = new AssignmentLine({
914
- leftIndex: newLeftIndex,
915
- rightIndex: newRightIndex,
1195
+ code += right.members.length ? '\n' : '';
1196
+ });
1197
+ // 方便ts报错检查
1198
+ code += `${indent1}function __newComposite() {\n`;
1199
+ const { typeAnnotation } = this;
1200
+ if (['nasl.ui', 'nasl.interface', 'nasl.http'].includes(typeAnnotation.typeNamespace) && typeAnnotation.typeKind === 'generic') {
1201
+ code += `${indent2}let __obj = new ${typeAnnotation.typeNamespace}.${typeAnnotation.typeName}`;
1202
+ code += '({';
1203
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1204
+ const leftSecondIndex = leftIndex[1];
1205
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1206
+ const leftItem = this.properties[leftSecondIndex];
1207
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1208
+ const rightTs = rightMap.get(rightItem);
1209
+ code += `${leftItem.toEmbeddedTS(shiftState(state, code, { inline: true }))}:`;
1210
+ code += `${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)},\n `;
916
1211
  });
917
- newLines.push(Line);
918
-
919
- this.update({
920
- assignmentLines: newLines,
921
- properties: newProperties,
1212
+ code += '})\n';
1213
+ } else {
1214
+ code += `${indent2}let __obj = nasl.util.New<`;
1215
+ code += this.typeAnnotation.toEmbeddedTS(shiftState(state, code, { inline: true }));
1216
+ code += `>();\n`;
1217
+ }
1218
+ // 是否是左边的顶层连线
1219
+ const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1220
+ if (leftTopIndex !== -1) {
1221
+ const { rightIndex } = this.assignmentLines[leftTopIndex];
1222
+ const rightExpression =
1223
+ rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1224
+ code += `__obj = ${rightExpression.toEmbeddedTS(shiftState(state, code, { inline: true }))};`;
1225
+ code += '\n';
1226
+ } else {
1227
+ // 左侧properties的identifier的类型标注
1228
+ code += `${indent2}const { `;
1229
+ this.properties.forEach((item, index) => {
1230
+ code += item.toEmbeddedTS(shiftState(state, code, { inline: true }));
1231
+ if (index < this.properties.length - 1) code += ', ';
922
1232
  });
923
- }
924
-
925
- deleteAssignmentLine(assignmentLine: AssignmentLine) {
926
- const newLine = this.assignmentLines.filter((line) => line !== assignmentLine);
927
- this.update({
928
- assignmentLines: newLine,
1233
+ code += ' } = __obj;\n';
1234
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1235
+ const leftSecondIndex = leftIndex[1];
1236
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1237
+ const leftItem = this.properties[leftSecondIndex];
1238
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1239
+ const rightTs = rightMap.get(rightItem);
1240
+ code += `${indent2}nasl.core.compareNew(`;
1241
+ code += `${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)}, `;
1242
+ code += `${leftItem.toEmbeddedTS(shiftState(state, code, { inline: true }))});\n`;
929
1243
  });
930
- }
931
-
932
- changeLinesLocation(selectMember: any) {
933
- if (selectMember.concept !== 'SelectMembers')
934
- return;
935
-
936
- if (this.rights.findIndex((member) => selectMember === member) !== -1) {
937
- const index = this.rights.findIndex((member) => selectMember === member);
938
- const newRights = this.rights.filter((member) => selectMember !== member);
939
- const filterLine = this.assignmentLines.filter((line) => line.rightIndex[0] !== index);
940
- const newLines: Array<AssignmentLine> = [];
941
- filterLine.forEach((line) => {
942
- if (line.rightIndex[0] > index) {
943
- if (line.rightIndex[1] === undefined) {
944
- const newLine = Object.assign({}, line, { rightIndex: [line.rightIndex[0] - 1] });
945
- newLines.push(newLine);
946
- } else {
947
- const newLine = Object.assign({}, line, { rightIndex: [line.rightIndex[0] - 1, line.rightIndex[1]] });
948
- newLines.push(newLine);
949
- }
950
- } else {
951
- newLines.push(line);
952
- }
953
- });
954
- this.update({
955
- rights: newRights,
956
- assignmentLines: newLines,
957
- });
1244
+ }
1245
+ code += `${indent2}return __obj;\n`;
1246
+ code += `${indent1}};\n`;
1247
+
1248
+ code += `${indent1}return __newComposite();\n`;
1249
+ code += `${indent0}})()`;
1250
+ } else {
1251
+ const nameMap = new Map();
1252
+ const rightMap = new Map();
1253
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1254
+ const leftSecondIndex = leftIndex[1];
1255
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1256
+ const leftItem = this.properties[leftSecondIndex];
1257
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1258
+ nameMap.set(leftItem.name, rightItem);
1259
+ rightMap.set(rightItem, null);
1260
+ });
1261
+ code += `${indent0}(() => { \n`;
1262
+ // 提供sourcemap,获取类型标注和上下文可选变量
1263
+ this.rights.forEach((right) => {
1264
+ code += indent1;
1265
+ let ts = right.expression.toEmbeddedTS(shiftState(state, code, { inline: true }));
1266
+ if (rightMap.has(right.expression)) rightMap.set(right.expression, ts);
1267
+ code += ts;
1268
+ code += ';\n';
1269
+ if (right.members?.length) {
1270
+ code += indent2;
958
1271
  }
959
- }
960
-
961
- changeMembers(oldNode:any, members: MemberExpression[], keepMembers: any, expression: LogicItem) {
962
- this.app.emit('collect:start', {
963
- actionMsg: 'New初始赋值修改变量',
964
- });
965
- const selectMember = oldNode.parentNode;
966
- const autoConnectionIndex = this.rights.findIndex((right) => right === selectMember);
967
- const newSelectMember = Object.assign({}, selectMember, { expression, members });
968
- const splitIndex = this.rights.findIndex((right) => selectMember === right);
969
- const newLines: AssignmentLine[] = this.assignmentLines.filter(({ rightIndex }) => rightIndex[0] !== splitIndex);
970
- let oldLines: AssignmentLine[] = this.assignmentLines.filter(({ rightIndex }) => rightIndex[0] === splitIndex);
971
- // 右侧变量改变后,修改连线
972
- members.forEach((item, index) => {
973
- if (keepMembers?.has(item.completeName)) {
974
- const lines = this.findlines(item, selectMember);
975
- lines.forEach((line) => {
976
- const newLine = Object.assign({}, line, { rightIndex: [line.rightIndex[0], index] });
977
- newLines.push(newLine);
978
- oldLines = oldLines.filter(({ leftIndex }) => leftIndex[1] !== line.leftIndex[1]);
979
- });
980
- }
1272
+ right.members.forEach((member) => {
1273
+ ts = member.toEmbeddedTS(shiftState(state, code, { inline: true }));
1274
+ if (rightMap.has(member)) rightMap.set(member, ts);
1275
+ code += ts;
1276
+ code += '; ';
981
1277
  });
982
-
983
- this.update({
984
- assignmentLines: newLines,
985
- rights: [...this.rights.slice(0, splitIndex), newSelectMember, ...this.rights.slice(splitIndex + 1, this.rights.length)],
986
- });
987
- this.autoConnection && this.newConnection(autoConnectionIndex);
988
- this.app.emit('collect:end');
989
- }
990
-
991
- findlines(member: any, selectMember: any) {
992
- const lines: Array<AssignmentLine> = [];
993
- // 根节点的情况
994
- if (selectMember === this) {
995
- if (member === this.typeAnnotation)
996
- return this.assignmentLines;
997
- else {
998
- const index2 = this.properties.findIndex((item: Identifier) => item.completeName === member.completeName);
999
- this.assignmentLines.forEach((line) => {
1000
- if (line.leftIndex[1] === index2)
1001
- lines.push(line);
1002
- });
1003
- }
1004
- } else {
1005
- const index1 = this.rights.findIndex((right) => right === selectMember);
1006
- const index2 = selectMember.members.findIndex((item: MemberExpression) => item.completeName === member.completeName);
1007
- this.assignmentLines.forEach((line) => {
1008
- if (line.rightIndex[0] === index1 && line.rightIndex[1] === index2)
1009
- lines.push(line);
1010
- });
1011
- }
1012
- return lines;
1013
- }
1014
-
1015
- findMember(arrIndex: Array<number>, place: string) {
1016
- const [firstIndex, secondIndex] = [arrIndex[0], arrIndex[1]];
1017
-
1018
- if (place === 'left') {
1019
- if (secondIndex === undefined) {
1020
- return this.typeAnnotation;
1021
- }
1022
- return this.properties[secondIndex];
1023
- } else {
1024
- if (secondIndex === undefined) {
1025
- return this.rights[firstIndex].expression;
1026
- }
1027
- return this.rights[firstIndex].members[secondIndex];
1028
- }
1029
- }
1030
-
1031
- toUI(state?: TranslatorState): string {
1032
- let code = '';
1033
- const typeAnnotation = this.typeAnnotation;
1034
- const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1035
- if (!this.typeAnnotation)
1036
- return null;
1037
-
1038
- code += 'await (async () => { \n';
1039
- if (leftTopIndex !== -1) {
1040
- const rightIndex = this.assignmentLines[leftTopIndex].rightIndex;
1041
- const obj = rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1042
- code += `return ${obj};\n`;
1043
- } else if (typeAnnotation.typeKind !== 'anonymousStructure') {
1044
- code += `const obj = this.$genInitFromSchema('${typeAnnotation.sortedTypeKey}', this.$utils['New'](${typeAnnotation.toUI(shiftState(state, code, { inline: true }))}));\n`;
1045
- this.assignmentLines.forEach(({ leftIndex, rightIndex }, index) => {
1046
- const leftSecondIndex = leftIndex[1];
1047
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1048
- const leftItem = this.properties[leftSecondIndex];
1049
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1050
- code += `obj.${leftItem.name} = ${rightItem.toUI(shiftState(state, code, { inline: true }))}`;
1051
- code += ';\n';
1052
- });
1053
- code += 'return obj;\n';
1054
- } else {
1055
- code += `const obj = {};\n`;
1056
- this.properties.forEach((property) => {
1057
- code += `obj.${property.name} = null;\n`;
1058
- });
1059
- this.assignmentLines.forEach(({ leftIndex, rightIndex }, index) => {
1060
- const leftSecondIndex = leftIndex[1];
1061
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1062
- const leftItem = this.properties[leftSecondIndex];
1063
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1064
- code += `obj.${leftItem.name} = ${rightItem.toUI(shiftState(state, code, { inline: true }))}`;
1065
- code += ';\n';
1066
- });
1067
- code += 'return obj;\n';
1068
- }
1069
- code += '})()';
1070
- return code;
1071
- }
1072
-
1073
- toJS(state?: TranslatorState): string {
1074
- let code = '';
1075
- const typeAnnotation = this.typeAnnotation;
1076
- const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1077
- if (!this.typeAnnotation)
1078
- return null;
1079
-
1080
- code += 'await (async () => { \n';
1081
- if (leftTopIndex !== -1) {
1082
- const rightIndex = this.assignmentLines[leftTopIndex].rightIndex;
1083
- const obj = rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1084
- code += `return ${obj.toJS(shiftState(state, code, { inline: true }))};\n`;
1085
- } else if (typeAnnotation.typeKind !== 'anonymousStructure') {
1086
- code += `const obj = this.$genInitFromSchema('${typeAnnotation.sortedTypeKey}', this.$utils['New'](${typeAnnotation.toJS(shiftState(state, code, { inline: true }))}));\n`;
1087
- this.assignmentLines.forEach(({ leftIndex, rightIndex }, index) => {
1088
- const leftSecondIndex = leftIndex[1];
1089
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1090
- const leftItem = this.properties[leftSecondIndex];
1091
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1092
- code += `obj.${leftItem.name} = ${rightItem.toJS(shiftState(state, code, { inline: true }))}`;
1093
- code += ';\n';
1094
- });
1095
- code += 'return obj;\n';
1278
+ code += right.members.length ? '\n' : '';
1279
+ });
1280
+ // 方便ts报错检查
1281
+ code += `${indent1}function __newComposite() {\n`;
1282
+ this.properties.forEach((property, index) => {
1283
+ const temp = `temp${index}`;
1284
+ const propertyType = this.typeAnnotation.properties[index]?.typeAnnotation;
1285
+ const { name } = property;
1286
+ const rightItem = nameMap.get(name);
1287
+ const ts = rightMap.get(rightItem);
1288
+ if (ts !== undefined) {
1289
+ if (['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts)) {
1290
+ code += `${indent2}let ${temp}: void = null; `;
1291
+ } else {
1292
+ code += `${indent2}let ${temp}${ts === 'null' ? ':void' : ''} = ${ts}; `;
1293
+ }
1294
+ code += `const `;
1295
+ code += `${property.toEmbeddedTS(shiftState(state, code, { inline: true }))}: `;
1296
+ code += propertyType
1297
+ ? propertyType.toEmbeddedTS(shiftState(state, code, { inline: true }))
1298
+ : `nasl.core.Incompatible<typeof ${temp}, void>`;
1299
+ code += ` = ${temp};\n`;
1300
+ } else if (propertyType) {
1301
+ code += `${indent2}let ${property.name}: `;
1302
+ code += `${propertyType.toEmbeddedTS(shiftState(state, code, { inline: true }))}; `;
1303
+ code += `<`;
1304
+ code += `${property.toEmbeddedTS(shiftState(state, code, { inline: true }))}`;
1305
+ code += `>${property.name};\n`;
1096
1306
  } else {
1097
- code += `const obj = {};\n`;
1098
- this.properties.forEach((property) => {
1099
- code += `obj.${property.name} = null;\n`;
1100
- });
1101
- this.assignmentLines.forEach(({ leftIndex, rightIndex }, index) => {
1102
- const leftSecondIndex = leftIndex[1];
1103
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1104
- const leftItem = this.properties[leftSecondIndex];
1105
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1106
- code += `obj.${leftItem.name} = ${rightItem.toJS(shiftState(state, code, { inline: true }))}`;
1107
- code += ';\n';
1108
- });
1109
- code += 'return obj;\n';
1307
+ code += `${indent2}const `;
1308
+ code += property.toEmbeddedTS(shiftState(state, code, { inline: true }));
1309
+ code += ';\n';
1110
1310
  }
1111
- code += '})()';
1112
- return code;
1311
+ });
1312
+ code += `${indent2}return {\n`;
1313
+ this.properties.forEach((property) => {
1314
+ code += `${indent3}${property.name},\n`;
1315
+ });
1316
+ code += `${indent3}__name: "AStructure_${genHash(JSON.stringify(this))}" as const,\n`;
1317
+ code += `${indent2}}\n`;
1318
+
1319
+ code += `${indent1}};\n`;
1320
+
1321
+ code += `${indent1}return __newComposite();\n`;
1322
+ code += `${indent0}})()`;
1113
1323
  }
1114
-
1115
- @withSourceMap()
1116
- toEmbeddedTS(state?: TranslatorState): string {
1117
- const indent0 = indent((state?.tabSize || 0));
1118
- const indent1 = indent((state?.tabSize || 0) + 1);
1119
- const indent2 = indent((state?.tabSize || 0) + 2);
1120
- const indent3 = indent((state?.tabSize || 0) + 3);
1121
- let code = '';
1122
- if (!this.typeAnnotation) {
1123
- code += '__IDENTIFIER__';
1124
- } else if (this.typeAnnotation.typeKind !== 'anonymousStructure') {
1125
- const rightMap = new Map();
1126
- code += `${indent0}(() => { \n`;
1127
- // 提供sourcemap,获取类型标注和上下文可选变量
1128
- this.rights.forEach((right) => {
1129
- code += indent1;
1130
- rightMap.set(right.expression, right.expression.toEmbeddedTS(shiftState(state, code, { inline: true })));
1131
- code += rightMap.get(right.expression);
1132
- code += ';\n';
1133
- if (right.members?.length) {
1134
- code += indent2;
1135
- }
1136
- right.members.forEach((member) => {
1137
- rightMap.set(member, member.toEmbeddedTS(shiftState(state, code, { inline: true })));
1138
- code += rightMap.get(member);
1139
- code += '; ';
1140
- });
1141
- code += right.members.length ? '\n' : '';
1142
- });
1143
- // 方便ts报错检查
1144
- code += `${indent1}function __newComposite() {\n`;
1145
- const { typeAnnotation } = this;
1146
- if (['nasl.ui', 'nasl.interface', 'nasl.http'].includes(typeAnnotation.typeNamespace) && typeAnnotation.typeKind === 'generic') {
1147
- code += `${indent2}let __obj = new ${typeAnnotation.typeNamespace}.${typeAnnotation.typeName}`;
1148
- code += '({';
1149
- this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1150
- const leftSecondIndex = leftIndex[1];
1151
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1152
- const leftItem = this.properties[leftSecondIndex];
1153
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1154
- const rightTs = rightMap.get(rightItem);
1155
- code += `${leftItem.toEmbeddedTS(shiftState(state, code, { inline: true }))}:`;
1156
- code += `${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)},\n `;
1157
- });
1158
- code += '})\n';
1159
- } else {
1160
- code += `${indent2}let __obj = nasl.util.New<`;
1161
- code += this.typeAnnotation.toEmbeddedTS(shiftState(state, code, { inline: true }));
1162
- code += `>();\n`;
1163
- }
1164
- // 是否是左边的顶层连线
1165
- const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1166
- if (leftTopIndex !== -1) {
1167
- const rightIndex = this.assignmentLines[leftTopIndex].rightIndex;
1168
- const rightExpression = rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1169
- code += `__obj = ${rightExpression.toEmbeddedTS(shiftState(state, code, { inline: true }))};`;
1170
- code += '\n';
1171
- } else {
1172
- // 左侧properties的identifier的类型标注
1173
- code += `${indent2}const { `;
1174
- this.properties.forEach((item, index) => {
1175
- code += item.toEmbeddedTS(shiftState(state, code, { inline: true }));
1176
- if (index < this.properties.length - 1)
1177
- code += ', ';
1178
- });
1179
- code += ' } = __obj;\n';
1180
- this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1181
- const leftSecondIndex = leftIndex[1];
1182
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1183
- const leftItem = this.properties[leftSecondIndex];
1184
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1185
- const rightTs = rightMap.get(rightItem);
1186
- code += `${indent2}nasl.core.compareNew(`;
1187
- code += `${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)}, `;
1188
- code += `${leftItem.toEmbeddedTS(shiftState(state, code, { inline: true }))});\n`;
1189
- });
1190
- }
1191
- code += `${indent2}return __obj;\n`;
1192
- code += `${indent1}};\n`;
1193
-
1194
- code += `${indent1}return __newComposite();\n`;
1195
- code += `${indent0}})()`;
1196
- } else {
1197
- const nameMap = new Map();
1198
- const rightMap = new Map();
1199
- this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1200
- const leftSecondIndex = leftIndex[1];
1201
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1202
- const leftItem = this.properties[leftSecondIndex];
1203
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1204
- nameMap.set(leftItem.name, rightItem);
1205
- rightMap.set(rightItem, null);
1206
- });
1207
- code += `${indent0}(() => { \n`;
1208
- // 提供sourcemap,获取类型标注和上下文可选变量
1209
- this.rights.forEach((right) => {
1210
- code += indent1;
1211
- let ts = right.expression.toEmbeddedTS(shiftState(state, code, { inline: true }));
1212
- if (rightMap.has(right.expression))
1213
- rightMap.set(right.expression, ts);
1214
- code += ts;
1215
- code += ';\n';
1216
- if (right.members?.length) {
1217
- code += indent2;
1218
- }
1219
- right.members.forEach((member) => {
1220
- ts = member.toEmbeddedTS(shiftState(state, code, { inline: true }));
1221
- if (rightMap.has(member))
1222
- rightMap.set(member, ts);
1223
- code += ts;
1224
- code += '; ';
1225
- });
1226
- code += right.members.length ? '\n' : '';
1227
- });
1228
- // 方便ts报错检查
1229
- code += `${indent1}function __newComposite() {\n`;
1230
- this.properties.forEach((property, index) => {
1231
- const temp = `temp${index}`;
1232
- const propertyType = this.typeAnnotation.properties[index]?.typeAnnotation;
1233
- const name = property.name;
1234
- const rightItem = nameMap.get(name);
1235
- const ts = rightMap.get(rightItem);
1236
- if (ts !== undefined) {
1237
- if (['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts)) {
1238
- code += `${indent2}let ${temp}: void = null; `;
1239
- } else {
1240
- code += `${indent2}let ${temp}${ts === 'null' ? ':void' : ''} = ${ts}; `;
1241
- }
1242
- code += `const `;
1243
- code += `${property.toEmbeddedTS(shiftState(state, code, { inline: true }))}: `;
1244
- code += propertyType ? propertyType.toEmbeddedTS(shiftState(state, code, { inline: true })) : `nasl.core.Incompatible<typeof ${temp}, void>`;
1245
- code += ` = ${temp};\n`;
1246
- } else if (propertyType) {
1247
- code += `${indent2}let ${property.name}: `;
1248
- code += `${propertyType.toEmbeddedTS(shiftState(state, code, { inline: true }))}; `;
1249
- code += `<`;
1250
- code += `${property.toEmbeddedTS(shiftState(state, code, { inline: true }))}`;
1251
- code += `>${property.name};\n`;
1252
- } else {
1253
- code += `${indent2}const `;
1254
- code += property.toEmbeddedTS(shiftState(state, code, { inline: true }));
1255
- code += ';\n';
1256
- }
1257
- });
1258
- code += `${indent2}return {\n`;
1259
- this.properties.forEach((property) => {
1260
- code += `${indent3}${property.name},\n`;
1261
- });
1262
- code += `${indent3}__name: "AStructure_${genHash(JSON.stringify(this))}" as const,\n`;
1263
- code += `${indent2}}\n`;
1264
-
1265
- code += `${indent1}};\n`;
1266
-
1267
- code += `${indent1}return __newComposite();\n`;
1268
- code += `${indent0}})()`;
1324
+ return code;
1325
+ }
1326
+
1327
+ @withSourceMap()
1328
+ toNaturalTS(state?: TranslatorState): string {
1329
+ const indent0 = indent((state?.tabSize || 0));
1330
+ const indent1 = indent((state?.tabSize || 0) + 1);
1331
+ const indent2 = indent((state?.tabSize || 0) + 2);
1332
+ let code = '';
1333
+ if (!this.typeAnnotation) {
1334
+ code += '__IDENTIFIER__';
1335
+ } else if (this.typeAnnotation.typeKind !== 'anonymousStructure') {
1336
+ const rightMap = new Map();
1337
+ // 提供sourcemap,获取类型标注和上下文可选变量
1338
+ this.rights.forEach((right) => {
1339
+ code += indent1;
1340
+ rightMap.set(right.expression, right.expression.toNaturalTS(shiftState(state, code, { inline: true })));
1341
+ code += rightMap.get(right.expression);
1342
+ code += ';\n';
1343
+ if (right.members?.length) {
1344
+ code += indent2;
1269
1345
  }
1270
- return code;
1271
- }
1272
-
1273
- getInitCode(state?: TranslatorState): string {
1274
- const indent1 = indent((state?.tabSize || 0) + 1);
1275
- const indent2 = indent((state?.tabSize || 0) + 2);
1276
- const indent3 = indent((state?.tabSize || 0) + 3);
1277
- const indent4 = indent((state?.tabSize || 0) + 4);
1278
- let code = '';
1279
- const nameMap = new Map();
1280
- const rightMap = new Map();
1281
- this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1282
- const leftSecondIndex = leftIndex[1];
1283
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1284
- const leftItem = this.properties[leftSecondIndex];
1285
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1286
- nameMap.set(leftItem.name, rightItem);
1287
- rightMap.set(rightItem, null);
1346
+ right.members.forEach((member) => {
1347
+ rightMap.set(member, member.toNaturalTS(shiftState(state, code, { inline: true })));
1348
+ code += rightMap.get(member);
1349
+ code += '; ';
1288
1350
  });
1289
- code += '(() => { ';
1290
- // 提供sourcemap,获取类型标注和上下文可选变量
1291
- this.rights.forEach((right) => {
1292
- let ts = right.expression.toEmbeddedTS(shiftState(state, code, { inline: true }));
1293
- if (rightMap.has(right.expression))
1294
- rightMap.set(right.expression, ts);
1295
- right.members.forEach((member) => {
1296
- ts = member.toEmbeddedTS(shiftState(state, code, { inline: true }));
1297
- if (rightMap.has(member))
1298
- rightMap.set(member, ts);
1299
- });
1300
- });
1301
- // 方便ts报错检查
1302
- code += 'function __newComposite() { ';
1303
- this.properties.forEach((property, index) => {
1304
- const name = property.name;
1305
- const propertyType = this.typeAnnotation.properties[index]?.typeAnnotation;
1306
- const rightItem = nameMap.get(name);
1307
- const ts = rightMap.get(rightItem);
1308
- if (propertyType) {
1309
- code += `const ${name}: ${propertyType.toEmbeddedTS(shiftState(state, code, { inline: true }))}; `;
1310
- } else if (ts !== undefined) {
1311
- code += `const ${name} = ${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts) ? null : ts}; `;
1312
- } else {
1313
- code += `const ${name}; `;
1314
- }
1315
- });
1316
- code += `\n${indent3}return {\n`;
1317
- this.properties.forEach((property) => {
1318
- code += `${indent4}${property.name},\n`;
1319
- });
1320
- code += `${indent4}__name: "AStructure_${genHash(JSON.stringify(this))}" as const,\n`;
1321
- code += `${indent3}}\n`;
1322
-
1323
- code += `${indent2}};\n`;
1324
-
1325
- code += `${indent2}return __newComposite();\n`;
1326
- code += `${indent1}})()`;
1327
- return code;
1328
- }
1329
- getNewCompositeCode(state?: TranslatorState): string {
1330
- const indent0 = indent((state?.tabSize || 0));
1331
- const indent1 = indent((state?.tabSize || 0) + 1);
1332
- const indent2 = indent((state?.tabSize || 0) + 2);
1333
- const indent3 = indent((state?.tabSize || 0) + 3);
1334
- let code = '';
1335
-
1336
- const rightMap = new Map();
1337
- code += `${indent0}(() => { \n`;
1338
- // 提供sourcemap,获取类型标注和上下文可选变量
1339
- this.rights.forEach((right) => {
1340
- code += indent1;
1341
- rightMap.set(right.expression, right.expression.toEmbeddedTS(shiftState(state, code, { inline: true })));
1342
- // code += rightMap.get(right.expression);
1343
- // code += ';\n';
1344
- if (right.members?.length) {
1345
- code += indent2;
1346
- }
1347
- right.members.forEach((member) => {
1348
- rightMap.set(member, member.toEmbeddedTS(shiftState(state, code, { inline: true })));
1349
- // code += rightMap.get(member);
1350
- // code += '; ';
1351
- });
1352
- // code += right.members.length ? '\n' : '';
1351
+ code += right.members.length ? '\n' : '';
1352
+ });
1353
+ // 方便ts报错检查
1354
+ // 是否是左边的顶层连线
1355
+ const leftTopIndex = this.assignmentLines.findIndex(({ leftIndex }) => leftIndex[1] === undefined);
1356
+ if (leftTopIndex !== -1) {
1357
+ // const rightIndex = this.assignmentLines[leftTopIndex].rightIndex;
1358
+ // const rightExpression = rightIndex[1] !== undefined ? this.rights[rightIndex[0]].members[rightIndex[1]] : this.rights[rightIndex[0]].expression;
1359
+ // code += `__obj = ${rightExpression.toNaturalTS(shiftState(state, code, { inline: true }))};`;
1360
+ // code += '\n';
1361
+ } else {
1362
+ code += `${indent0}new ${this.typeAnnotation.typeName}({\n`;
1363
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1364
+ const leftSecondIndex = leftIndex[1];
1365
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1366
+ const leftItem = this.properties[leftSecondIndex];
1367
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1368
+ const rightTs = rightMap.get(rightItem);
1369
+ code += `${indent1}${leftItem.toNaturalTS(shiftState(state, code, { inline: true }))}: ${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)},\n`;
1353
1370
  });
1354
- // 方便ts报错检查
1355
- code += `${indent1}function __newComposite() {\n`;
1356
- const { typeAnnotation } = this;
1357
- if (['nasl.ui', 'nasl.interface', 'nasl.http'].includes(typeAnnotation.typeNamespace)) {
1358
- code += `${indent2}let __obj = new ${typeAnnotation.typeNamespace}.${typeAnnotation.typeName}`;
1359
- code += '({';
1360
- this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1361
- const leftSecondIndex = leftIndex[1];
1362
- const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1363
- const leftItem = this.properties[leftSecondIndex];
1364
- const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1365
- const rightTs = rightMap.get(rightItem);
1366
- code += `${leftItem.toEmbeddedTS(shiftState(state, code, { inline: true }))}:`;
1367
- code += `${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)},\n `;
1368
- });
1369
- code += '})\n';
1371
+ code += `${indent0}})`;
1372
+ }
1373
+ } else {
1374
+ const nameMap = new Map();
1375
+ const rightMap = new Map();
1376
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1377
+ const leftSecondIndex = leftIndex[1];
1378
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1379
+ const leftItem = this.properties[leftSecondIndex];
1380
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1381
+ nameMap.set(leftItem.name, rightItem);
1382
+ rightMap.set(rightItem, null);
1383
+ });
1384
+ code += `${indent0}{\n`;
1385
+ this.properties.forEach((property, index) => {
1386
+ const temp = `temp${index}`;
1387
+ const propertyType = this.typeAnnotation.properties[index]?.typeAnnotation;
1388
+ const { name } = property;
1389
+ const rightItem = nameMap.get(name);
1390
+ const ts = rightMap.get(rightItem);
1391
+ if (ts !== undefined) {
1392
+ if (['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts)) {
1393
+ code += `${indent1}${temp}: null,\n`;
1394
+ } else {
1395
+ code += `${indent1}${temp}: ${ts},\n`;
1396
+ }
1397
+ } else if (propertyType) {
1398
+ code += `${indent1}${property.name}: ${propertyType.toNaturalTS(shiftState(state, code, { inline: true }))},\n`;
1399
+ } else {
1400
+ code += `${indent1}`;
1401
+ code += property.toNaturalTS(shiftState(state, code, { inline: true }));
1402
+ code += ',\n';
1370
1403
  }
1371
- code += `${indent2}return __obj;\n`;
1372
- code += `${indent1}};\n`;
1373
-
1374
- code += `${indent1}return __newComposite();\n`;
1375
- code += `${indent0}})()`;
1376
- return code;
1377
- }
1378
- __addIdentifier(name: string, typeAnnotation: TypeAnnotation) {
1379
- const newName = name || 'property1';
1380
- const newType = typeAnnotation || null;
1381
- this.app.emit('collect:start', {
1382
- actionMsg: '添加匿名数据结构属性',
1383
- });
1384
- const node = this.addIdentifier({ name: this.getIdentifierUniqueName(newName) });
1385
- const struct = StructureProperty.from({
1386
- name: node.name,
1387
- typeAnnotation: newType,
1388
- });
1389
- this.typeAnnotation.addStructureProperty(struct);
1390
- this.app.emit('collect:end');
1404
+ });
1405
+ code += `${indent0}}`;
1391
1406
  }
1392
-
1393
- __deleteIdentifier(property: Identifier) {
1394
- const index = this.properties.findIndex((p) => p === property);
1395
- const newLines: AssignmentLine[] = [];
1396
- const newProperties = this.typeAnnotation.properties.filter((item) => item.name !== property.name);
1397
- this.assignmentLines.forEach((line) => {
1398
- const { leftIndex } = line;
1399
- if (leftIndex[1] < index) {
1400
- newLines.push(line);
1401
- } else if (leftIndex[1] > index) {
1402
- const newLine = Object.assign({}, line, { leftIndex: [leftIndex[0], leftIndex[1] - 1] });
1403
- newLines.push(newLine);
1404
- }
1405
- });
1406
- this.app.emit('collect:start', {
1407
- actionMsg: '删除匿名数据结属性',
1408
- });
1409
- this.setAssignmentLines(newLines);
1410
- this.typeAnnotation.update({
1411
- properties: newProperties,
1412
- });
1413
- property.delete();
1414
- this.app.emit('collect:end');
1407
+ return code;
1408
+ }
1409
+
1410
+ getInitCode(state?: TranslatorState): string {
1411
+ const indent1 = indent((state?.tabSize || 0) + 1);
1412
+ const indent2 = indent((state?.tabSize || 0) + 2);
1413
+ const indent3 = indent((state?.tabSize || 0) + 3);
1414
+ const indent4 = indent((state?.tabSize || 0) + 4);
1415
+ let code = '';
1416
+ const nameMap = new Map();
1417
+ const rightMap = new Map();
1418
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1419
+ const leftSecondIndex = leftIndex[1];
1420
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1421
+ const leftItem = this.properties[leftSecondIndex];
1422
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1423
+ nameMap.set(leftItem.name, rightItem);
1424
+ rightMap.set(rightItem, null);
1425
+ });
1426
+ code += '(() => { ';
1427
+ // 提供sourcemap,获取类型标注和上下文可选变量
1428
+ this.rights.forEach((right) => {
1429
+ let ts = right.expression.toEmbeddedTS(shiftState(state, code, { inline: true }));
1430
+ if (rightMap.has(right.expression)) rightMap.set(right.expression, ts);
1431
+ right.members.forEach((member) => {
1432
+ ts = member.toEmbeddedTS(shiftState(state, code, { inline: true }));
1433
+ if (rightMap.has(member)) rightMap.set(member, ts);
1434
+ });
1435
+ });
1436
+ // 方便ts报错检查
1437
+ code += 'function __newComposite() { ';
1438
+ this.properties.forEach((property, index) => {
1439
+ const { name } = property;
1440
+ const propertyType = this.typeAnnotation.properties[index]?.typeAnnotation;
1441
+ const rightItem = nameMap.get(name);
1442
+ const ts = rightMap.get(rightItem);
1443
+ if (propertyType) {
1444
+ code += `const ${name}: ${propertyType.toEmbeddedTS(shiftState(state, code, { inline: true }))}; `;
1445
+ } else if (ts !== undefined) {
1446
+ code += `const ${name} = ${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts) ? null : ts}; `;
1447
+ } else {
1448
+ code += `const ${name}; `;
1449
+ }
1450
+ });
1451
+ code += `\n${indent3}return {\n`;
1452
+ this.properties.forEach((property) => {
1453
+ code += `${indent4}${property.name},\n`;
1454
+ });
1455
+ code += `${indent4}__name: "AStructure_${genHash(JSON.stringify(this))}" as const,\n`;
1456
+ code += `${indent3}}\n`;
1457
+
1458
+ code += `${indent2}};\n`;
1459
+
1460
+ code += `${indent2}return __newComposite();\n`;
1461
+ code += `${indent1}})()`;
1462
+ return code;
1463
+ }
1464
+
1465
+ getNewCompositeCode(state?: TranslatorState): string {
1466
+ const indent0 = indent(state?.tabSize || 0);
1467
+ const indent1 = indent((state?.tabSize || 0) + 1);
1468
+ const indent2 = indent((state?.tabSize || 0) + 2);
1469
+ const indent3 = indent((state?.tabSize || 0) + 3);
1470
+ let code = '';
1471
+
1472
+ const rightMap = new Map();
1473
+ code += `${indent0}(() => { \n`;
1474
+ // 提供sourcemap,获取类型标注和上下文可选变量
1475
+ this.rights.forEach((right) => {
1476
+ code += indent1;
1477
+ rightMap.set(right.expression, right.expression.toEmbeddedTS(shiftState(state, code, { inline: true })));
1478
+ // code += rightMap.get(right.expression);
1479
+ // code += ';\n';
1480
+ if (right.members?.length) {
1481
+ code += indent2;
1482
+ }
1483
+ right.members.forEach((member) => {
1484
+ rightMap.set(member, member.toEmbeddedTS(shiftState(state, code, { inline: true })));
1485
+ // code += rightMap.get(member);
1486
+ // code += '; ';
1487
+ });
1488
+ // code += right.members.length ? '\n' : '';
1489
+ });
1490
+ // 方便ts报错检查
1491
+ code += `${indent1}function __newComposite() {\n`;
1492
+ const { typeAnnotation } = this;
1493
+ if (['nasl.ui', 'nasl.interface', 'nasl.http'].includes(typeAnnotation.typeNamespace)) {
1494
+ code += `${indent2}let __obj = new ${typeAnnotation.typeNamespace}.${typeAnnotation.typeName}`;
1495
+ code += '({';
1496
+ this.assignmentLines.forEach(({ leftIndex, rightIndex }) => {
1497
+ const leftSecondIndex = leftIndex[1];
1498
+ const [rightFirst, rightSecond] = [rightIndex[0], rightIndex[1]];
1499
+ const leftItem = this.properties[leftSecondIndex];
1500
+ const rightItem = rightSecond !== undefined ? this.rights[rightFirst].members[rightSecond] : this.rights[rightFirst].expression;
1501
+ const rightTs = rightMap.get(rightItem);
1502
+ code += `${leftItem.toEmbeddedTS(shiftState(state, code, { inline: true }))}:`;
1503
+ code += `${['__IDENTIFIER__', '__IDENTIFIER__()'].includes(rightTs) ? 'null' : rightMap.get(rightItem)},\n `;
1504
+ });
1505
+ code += '})\n';
1415
1506
  }
1416
- //================================================================================
1417
- // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1418
- // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1419
- //================================================================================
1507
+ code += `${indent2}return __obj;\n`;
1508
+ code += `${indent1}};\n`;
1509
+
1510
+ code += `${indent1}return __newComposite();\n`;
1511
+ code += `${indent0}})()`;
1512
+ return code;
1513
+ }
1514
+
1515
+ __addIdentifier(name: string, typeAnnotation: TypeAnnotation) {
1516
+ const newName = name || 'property1';
1517
+ const newType = typeAnnotation || null;
1518
+ this.app.emit('collect:start', {
1519
+ actionMsg: '添加匿名数据结构属性',
1520
+ });
1521
+ const node = this.addIdentifier({ name: this.getIdentifierUniqueName(newName) });
1522
+ const struct = StructureProperty.from({
1523
+ name: node.name,
1524
+ typeAnnotation: newType,
1525
+ });
1526
+ this.typeAnnotation.addStructureProperty(struct);
1527
+ this.app.emit('collect:end');
1528
+ }
1529
+
1530
+ __deleteIdentifier(property: Identifier) {
1531
+ const index = this.properties.findIndex((p) => p === property);
1532
+ const newLines: AssignmentLine[] = [];
1533
+ const newProperties = this.typeAnnotation.properties.filter((item) => item.name !== property.name);
1534
+ this.assignmentLines.forEach((line) => {
1535
+ const { leftIndex } = line;
1536
+ if (leftIndex[1] < index) {
1537
+ newLines.push(line);
1538
+ } else if (leftIndex[1] > index) {
1539
+ const newLine = { ...line, leftIndex: [leftIndex[0], leftIndex[1] - 1] };
1540
+ newLines.push(newLine as AssignmentLine);
1541
+ }
1542
+ });
1543
+ this.app.emit('collect:start', {
1544
+ actionMsg: '删除匿名数据结属性',
1545
+ });
1546
+ this.setAssignmentLines(newLines);
1547
+ this.typeAnnotation.update({
1548
+ properties: newProperties,
1549
+ });
1550
+ property.delete();
1551
+ this.app.emit('collect:end');
1552
+ }
1553
+ //= ===============================================================================
1554
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1555
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1556
+ //= ===============================================================================
1420
1557
  }
1421
1558
 
1422
1559
  classMap.NewComposite = NewComposite;
1423
1560
  export default NewComposite;
1424
- //================================================================================
1561
+ //= ===============================================================================
1425
1562
  // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
1426
1563
  // 自动生成的代码已结束。下面可以手动编写。
1427
- //================================================================================
1564
+ //= ===============================================================================