@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,76 +1,89 @@
1
+ import { v4 as uuidv4 } from 'uuid';
1
2
  import App from './App__';
2
3
  import Structure from './Structure__';
3
4
  import { TranslatorState, shiftState, withSourceMap } from '../translator';
4
5
  import { genHash } from '../generator';
5
6
  import { firstUpperCase } from '../utils/string';
6
7
 
8
+ //= ===============================================================================
9
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
10
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
11
+ //= ===============================================================================
12
+ import { EventPayload, Params } from '../common/EventEmitter';
13
+ import { concept, excludedInJSON, property } from '../decorators';
14
+
15
+ import * as utils from '../utils';
16
+ import BaseNode from '../common/BaseNode';
17
+ import classMap from '../common/classMap';
18
+ import StructureProperty from './StructureProperty__';
19
+
7
20
  export enum PRIMITIVE_TYPE {
8
- Boolean = 'Boolean',
9
- Integer = 'Integer',
10
- Long = 'Long',
11
- Double = 'Double',
12
- Decimal = 'Decimal',
13
- String = 'String',
14
- Text = 'Text',
15
- Binary = 'Binary',
16
- Date = 'Date',
17
- Time = 'Time',
18
- DateTime = 'DateTime',
19
- Email = 'Email',
20
- Union = 'Union',
21
- Null = 'Null'
21
+ Boolean = 'Boolean',
22
+ Integer = 'Integer',
23
+ Long = 'Long',
24
+ Double = 'Double',
25
+ Decimal = 'Decimal',
26
+ String = 'String',
27
+ Text = 'Text',
28
+ Binary = 'Binary',
29
+ Date = 'Date',
30
+ Time = 'Time',
31
+ DateTime = 'DateTime',
32
+ Email = 'Email',
33
+ Union = 'Union',
34
+ Null = 'Null',
22
35
  }
23
36
 
24
37
  export const PRIMITIVE_TITLE: Record<string, string> = {
25
- Boolean: '布尔值',
26
- Integer: '整数',
27
- Long: '整数',
28
- Double: '小数',
29
- Decimal: '小数',
30
- String: '文本',
31
- Text: '长文本',
32
- Binary: '二进制流',
33
- Date: '日期',
34
- Time: '时间',
35
- DateTime: '日期时间',
36
- Email: '电子邮箱',
37
- Union: '联合类型',
38
+ Boolean: '布尔值',
39
+ Integer: '整数',
40
+ Long: '整数',
41
+ Double: '小数',
42
+ Decimal: '小数',
43
+ String: '文本',
44
+ Text: '长文本',
45
+ Binary: '二进制流',
46
+ Date: '日期',
47
+ Time: '时间',
48
+ DateTime: '日期时间',
49
+ Email: '电子邮箱',
50
+ Union: '联合类型',
38
51
  };
39
52
 
40
53
  export const OLD_PRIMITIVE_TITLE: Record<string, string> = {
41
- Boolean: '布尔值',
42
- Integer: '整数',
43
- Long: '长整数',
44
- Double: '小数',
45
- Decimal: '精准小数',
46
- String: '字符串',
47
- Text: '长文本',
48
- Binary: '二进制流',
49
- Date: '日期',
50
- Time: '时间',
51
- DateTime: '日期时间',
52
- Email: '电子邮箱',
53
- Union: '联合类型',
54
+ Boolean: '布尔值',
55
+ Integer: '整数',
56
+ Long: '长整数',
57
+ Double: '小数',
58
+ Decimal: '精准小数',
59
+ String: '字符串',
60
+ Text: '长文本',
61
+ Binary: '二进制流',
62
+ Date: '日期',
63
+ Time: '时间',
64
+ DateTime: '日期时间',
65
+ Email: '电子邮箱',
66
+ Union: '联合类型',
54
67
  };
55
68
 
56
69
  export const PRIMITIVE_DESC: Record<string, string> = {
57
- Integer: '可表示最大长度约 10 个数字的正负整数(将被删除)',
58
- Double: '小数,有效数字约 16 个左右(将被删除)',
59
- Text: '底层与String相同,可存储更长的内容(将被删除)',
60
- Binary: '用于二进制流的存储',
61
- Email: '表示一个邮箱,底层与String相同(将被删除)',
62
- Boolean: '包含真(true)、假(false)两个值',
63
- Long: '可表示最大长度约 19 个数字的正负整数',
64
- Decimal: '可表示 31 个有效数字以内的小数',
65
- String: '表示汉语、英语、数字等文本内容',
66
- Date: '通常用于仅日期处理和数据存储',
67
- Time: '通常用于仅时间处理和数据存储',
68
- DateTime: '通常用于日期和时间的处理和数据存储',
70
+ Integer: '可表示最大长度约 10 个数字的正负整数(将被删除)',
71
+ Double: '小数,有效数字约 16 个左右(将被删除)',
72
+ Text: '底层与String相同,可存储更长的内容(将被删除)',
73
+ Binary: '用于二进制流的存储',
74
+ Email: '表示一个邮箱,底层与String相同(将被删除)',
75
+ Boolean: '包含真(true)、假(false)两个值',
76
+ Long: '可表示最大长度约 19 个数字的正负整数',
77
+ Decimal: '可表示 31 个有效数字以内的小数',
78
+ String: '表示汉语、英语、数字等文本内容',
79
+ Date: '通常用于仅日期处理和数据存储',
80
+ Time: '通常用于仅时间处理和数据存储',
81
+ DateTime: '通常用于日期和时间的处理和数据存储',
69
82
  };
70
83
 
71
84
  export const GENERIC_DESC: Record<string, string> = {
72
- List: 'T类型的数据构成的列表',
73
- Map: '从K类型到V类型的映射',
85
+ List: 'T类型的数据构成的列表',
86
+ Map: '从K类型到V类型的映射',
74
87
  };
75
88
 
76
89
  /**
@@ -79,1036 +92,1061 @@ export const GENERIC_DESC: Record<string, string> = {
79
92
  * @returns
80
93
  */
81
94
  export function isUnion(typeAnnotation: TypeAnnotation): boolean {
82
- return typeAnnotation
83
- && typeAnnotation.typeKind === 'union'
84
- && typeAnnotation.typeNamespace === 'nasl.core'
85
- && typeAnnotation.typeName === 'Union';
95
+ return typeAnnotation && typeAnnotation.typeKind === 'union' && typeAnnotation.typeNamespace === 'nasl.core' && typeAnnotation.typeName === 'Union';
86
96
  }
87
97
 
88
- //================================================================================
89
- // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
90
- // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
91
- //================================================================================
92
- import { EventPayload, Params } from '../common/EventEmitter';
93
- import { concept, excludedInJSON, property } from '../decorators';
94
-
95
- import * as utils from '../utils';
96
- import { v4 as uuidv4 } from 'uuid';
97
- import BaseNode from '../common/BaseNode';
98
- import classMap from '../common/classMap';
99
- import StructureProperty from './StructureProperty__';
100
-
101
98
  /**
102
99
  * 类型标注
103
100
  */
104
101
  @concept('类型标注')
105
102
  export class TypeAnnotation extends BaseNode {
106
- /**
107
- * 产品概念
108
- */
109
- @property()
110
- concept: 'TypeAnnotation' = 'TypeAnnotation';
111
-
112
- /**
113
- * 类型种类
114
- */
115
- @property()
116
- typeKind: 'primitive' | 'reference' | 'generic' | 'typeParam' | 'function' | 'union' | 'anonymousStructure' = undefined;
117
-
118
- /**
119
- * 类型命名空间
120
- */
121
- @property()
122
- typeNamespace?: string = undefined;
123
-
124
- /**
125
- * 类型名称
126
- */
127
- @property()
128
- typeName: string = undefined;
129
-
130
- /**
131
- * 类型参数
132
- */
133
- @property('TypeAnnotation')
134
- typeArguments?: Array<TypeAnnotation> = null;
135
-
136
- /**
137
- * 返回类型
138
- */
139
- @property('TypeAnnotation')
140
- returnType?: Array<TypeAnnotation> = null;
141
-
142
- /**
143
- * 是否是推断出来的
144
- */
145
- @property()
146
- inferred?: boolean = undefined;
147
-
148
- /**
149
- * 匿名数据结构属性
150
- */
151
- @property('StructureProperty')
152
- properties?: Array<StructureProperty> = null;
153
-
154
- /**
155
- * 规则对象
156
- */
157
- @property()
158
- ruleMap: Object = undefined;
159
-
160
-
161
-
162
- /**
163
- * @param source 需要合并的部分参数
164
- */
165
- constructor(source?: Partial<TypeAnnotation>) {
166
- source = Object.assign({}, TypeAnnotation.getDefaultOptions(), source);
167
- super(source);
168
- super.subConstructor(source);
103
+ /**
104
+ * 产品概念
105
+ */
106
+ @property()
107
+ concept: 'TypeAnnotation' = 'TypeAnnotation';
108
+
109
+ /**
110
+ * 类型种类
111
+ */
112
+ @property()
113
+ typeKind: 'primitive' | 'reference' | 'generic' | 'typeParam' | 'function' | 'union' | 'anonymousStructure' = undefined;
114
+
115
+ /**
116
+ * 类型命名空间
117
+ */
118
+ @property()
119
+ typeNamespace?: string = undefined;
120
+
121
+ /**
122
+ * 类型名称
123
+ */
124
+ @property()
125
+ typeName: string = undefined;
126
+
127
+ /**
128
+ * 类型参数
129
+ */
130
+ @property('TypeAnnotation')
131
+ typeArguments?: Array<TypeAnnotation> = null;
132
+
133
+ /**
134
+ * 返回类型
135
+ */
136
+ @property('TypeAnnotation')
137
+ returnType?: Array<TypeAnnotation> = null;
138
+
139
+ /**
140
+ * 是否是推断出来的
141
+ */
142
+ @property()
143
+ inferred?: boolean = undefined;
144
+
145
+ /**
146
+ * 匿名数据结构属性
147
+ */
148
+ @property('StructureProperty')
149
+ properties?: Array<StructureProperty> = null;
150
+
151
+ /**
152
+ * 规则对象
153
+ */
154
+ @property()
155
+ ruleMap: Object = undefined;
156
+
157
+ /**
158
+ * @param source 需要合并的部分参数
159
+ */
160
+ constructor(source?: Partial<TypeAnnotation>) {
161
+ // @ts-ignore
162
+ source = { ...TypeAnnotation.getDefaultOptions(), ...source };
163
+ super(source);
164
+ super.subConstructor(source);
165
+ }
166
+
167
+ getClassName() {
168
+ return 'TypeAnnotation';
169
+ }
170
+
171
+ static from(source: any, parentNode?: any, parentKey?: string): TypeAnnotation {
172
+ return super.from(source, parentNode, parentKey) as TypeAnnotation;
173
+ }
174
+
175
+ /**
176
+ * 从父级删除该节点
177
+ * @internal
178
+ */
179
+ _delete() {
180
+ let params: Params = null;
181
+ if (this.parentNode) {
182
+ params = (this.parentNode as any)?.__removeTypeAnnotation?.(this);
169
183
  }
170
- getClassName() {
171
- return 'TypeAnnotation';
184
+ return params;
185
+ }
186
+
187
+ /**
188
+ * 设置规则对象
189
+ */
190
+ setRuleMap(ruleMap: Object) {
191
+ const object = {
192
+ ruleMap,
193
+ };
194
+ this.update({
195
+ ...object,
196
+ });
197
+ }
198
+
199
+ /**
200
+ * 插入类型标注
201
+ * @internal
202
+ * @param typeAnnotationOptions 类型标注参数
203
+ */
204
+ _insertTypeAnnotationInTypeArgumentsAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
205
+
206
+ /**
207
+ * 插入类型标注
208
+ * @internal
209
+ * @param typeAnnotation 已有的类型标注实例
210
+ */
211
+ _insertTypeAnnotationInTypeArgumentsAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
212
+
213
+ _insertTypeAnnotationInTypeArgumentsAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
214
+ const typeAnnotationOptions: any = {};
215
+ const relationOptions = { parentNode: this, parentKey: 'typeArguments' };
216
+ let typeAnnotation: TypeAnnotation;
217
+ if (options instanceof TypeAnnotation) {
218
+ options.ensureDelete(); // 同一实例不支持多处存在
219
+ typeAnnotation = options;
220
+ Object.assign(typeAnnotation, relationOptions);
221
+ } else {
222
+ typeAnnotation = TypeAnnotation.from(
223
+ {
224
+ ...typeAnnotationOptions,
225
+ ...options,
226
+ },
227
+ this,
228
+ 'typeArguments'
229
+ );
172
230
  }
173
-
174
- static from(source: any, parentNode?: any, parentKey?: string): TypeAnnotation {
175
- return super.from(source, parentNode, parentKey) as TypeAnnotation;
231
+ this.typeArguments.splice(index, 0, typeAnnotation);
232
+ return typeAnnotation;
233
+ }
234
+
235
+ /**
236
+ * 插入类型标注
237
+ * @param typeAnnotationOptions 类型标注参数
238
+ */
239
+ insertTypeAnnotationInTypeArgumentsAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
240
+
241
+ /**
242
+ * 插入类型标注
243
+ * @param typeAnnotation 已有的类型标注实例
244
+ */
245
+ insertTypeAnnotationInTypeArgumentsAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
246
+
247
+ insertTypeAnnotationInTypeArgumentsAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
248
+ const node = this._insertTypeAnnotationInTypeArgumentsAt(options as any, index);
249
+ node.create({
250
+ index,
251
+ parentNode: this,
252
+ parentKey: 'typeArguments',
253
+ });
254
+ return node;
255
+ }
256
+
257
+ /**
258
+ * 添加类型标注
259
+ * @internal
260
+ * @param typeAnnotationOptions 类型标注参数
261
+ */
262
+ _addTypeAnnotationInTypeArguments(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
263
+
264
+ /**
265
+ * 添加类型标注
266
+ * @internal
267
+ * @param typeAnnotation 已有的类型标注实例
268
+ */
269
+ _addTypeAnnotationInTypeArguments(typeAnnotation: TypeAnnotation): TypeAnnotation;
270
+
271
+ _addTypeAnnotationInTypeArguments(options?: Partial<TypeAnnotation> | TypeAnnotation) {
272
+ const index = this.typeArguments.length;
273
+ return this._insertTypeAnnotationInTypeArgumentsAt(options as any, index);
274
+ }
275
+
276
+ /**
277
+ * 添加类型标注
278
+ * @param typeAnnotationOptions 类型标注参数
279
+ */
280
+ addTypeAnnotationInTypeArguments(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
281
+
282
+ /**
283
+ * 添加类型标注
284
+ * @param typeAnnotation 已有的类型标注实例
285
+ */
286
+ addTypeAnnotationInTypeArguments(typeAnnotation: TypeAnnotation): TypeAnnotation;
287
+
288
+ addTypeAnnotationInTypeArguments(options?: Partial<TypeAnnotation> | TypeAnnotation) {
289
+ const node = this._addTypeAnnotationInTypeArguments(options as any);
290
+ const index = this.typeArguments.indexOf(node);
291
+ node.create({
292
+ index,
293
+ parentNode: this,
294
+ parentKey: 'typeArguments',
295
+ });
296
+ return node;
297
+ }
298
+
299
+ /**
300
+ * 插入类型标注
301
+ * @internal
302
+ * @param typeAnnotationOptions 类型标注参数
303
+ */
304
+ _insertTypeAnnotationInReturnTypeAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
305
+
306
+ /**
307
+ * 插入类型标注
308
+ * @internal
309
+ * @param typeAnnotation 已有的类型标注实例
310
+ */
311
+ _insertTypeAnnotationInReturnTypeAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
312
+
313
+ _insertTypeAnnotationInReturnTypeAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
314
+ const typeAnnotationOptions: any = {};
315
+ const relationOptions = { parentNode: this, parentKey: 'returnType' };
316
+ let typeAnnotation: TypeAnnotation;
317
+ if (options instanceof TypeAnnotation) {
318
+ options.ensureDelete(); // 同一实例不支持多处存在
319
+ typeAnnotation = options;
320
+ Object.assign(typeAnnotation, relationOptions);
321
+ } else {
322
+ typeAnnotation = TypeAnnotation.from(
323
+ {
324
+ ...typeAnnotationOptions,
325
+ ...options,
326
+ },
327
+ this,
328
+ 'returnType'
329
+ );
176
330
  }
177
-
178
- /**
179
- * 从父级删除该节点
180
- * @internal
181
- */
182
- _delete() {
183
- let params: Params = null;
184
- if (this.parentNode) {
185
- params = (this.parentNode as any)?.__removeTypeAnnotation?.(this);
186
- }
187
- return params;
331
+ this.returnType.splice(index, 0, typeAnnotation);
332
+ return typeAnnotation;
333
+ }
334
+
335
+ /**
336
+ * 插入类型标注
337
+ * @param typeAnnotationOptions 类型标注参数
338
+ */
339
+ insertTypeAnnotationInReturnTypeAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
340
+
341
+ /**
342
+ * 插入类型标注
343
+ * @param typeAnnotation 已有的类型标注实例
344
+ */
345
+ insertTypeAnnotationInReturnTypeAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
346
+
347
+ insertTypeAnnotationInReturnTypeAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
348
+ const node = this._insertTypeAnnotationInReturnTypeAt(options as any, index);
349
+ node.create({
350
+ index,
351
+ parentNode: this,
352
+ parentKey: 'returnType',
353
+ });
354
+ return node;
355
+ }
356
+
357
+ /**
358
+ * 添加类型标注
359
+ * @internal
360
+ * @param typeAnnotationOptions 类型标注参数
361
+ */
362
+ _addTypeAnnotationInReturnType(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
363
+
364
+ /**
365
+ * 添加类型标注
366
+ * @internal
367
+ * @param typeAnnotation 已有的类型标注实例
368
+ */
369
+ _addTypeAnnotationInReturnType(typeAnnotation: TypeAnnotation): TypeAnnotation;
370
+
371
+ _addTypeAnnotationInReturnType(options?: Partial<TypeAnnotation> | TypeAnnotation) {
372
+ const index = this.returnType.length;
373
+ return this._insertTypeAnnotationInReturnTypeAt(options as any, index);
374
+ }
375
+
376
+ /**
377
+ * 添加类型标注
378
+ * @param typeAnnotationOptions 类型标注参数
379
+ */
380
+ addTypeAnnotationInReturnType(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
381
+
382
+ /**
383
+ * 添加类型标注
384
+ * @param typeAnnotation 已有的类型标注实例
385
+ */
386
+ addTypeAnnotationInReturnType(typeAnnotation: TypeAnnotation): TypeAnnotation;
387
+
388
+ addTypeAnnotationInReturnType(options?: Partial<TypeAnnotation> | TypeAnnotation) {
389
+ const node = this._addTypeAnnotationInReturnType(options as any);
390
+ const index = this.returnType.indexOf(node);
391
+ node.create({
392
+ index,
393
+ parentNode: this,
394
+ parentKey: 'returnType',
395
+ });
396
+ return node;
397
+ }
398
+
399
+ /**
400
+ * 插入数据结构属性
401
+ * @internal
402
+ * @param structurePropertyOptions 数据结构属性参数
403
+ */
404
+ _insertStructurePropertyAt(structurePropertyOptions: Partial<StructureProperty>, index: number): StructureProperty;
405
+
406
+ /**
407
+ * 插入数据结构属性
408
+ * @internal
409
+ * @param structureProperty 已有的数据结构属性实例
410
+ */
411
+ _insertStructurePropertyAt(structureProperty: StructureProperty, index: number): StructureProperty;
412
+
413
+ _insertStructurePropertyAt(options: Partial<StructureProperty> | StructureProperty, index: number) {
414
+ const structurePropertyOptions: any = {};
415
+ const relationOptions = { parentNode: this, parentKey: 'properties' };
416
+ let structureProperty: StructureProperty;
417
+ if (options instanceof StructureProperty) {
418
+ options.ensureDelete(); // 同一实例不支持多处存在
419
+ structureProperty = options;
420
+ Object.assign(structureProperty, relationOptions);
421
+ } else {
422
+ structureProperty = StructureProperty.from(
423
+ {
424
+ ...structurePropertyOptions,
425
+ ...options,
426
+ },
427
+ this,
428
+ 'properties'
429
+ );
188
430
  }
189
- /**
190
- * 设置规则对象
191
- */
192
- setRuleMap(ruleMap: Object) {
193
- const object = {
194
- ruleMap,
195
- };
196
- this.update({
197
- ...object,
198
- });
431
+ this.properties.splice(index, 0, structureProperty);
432
+ return structureProperty;
433
+ }
434
+
435
+ /**
436
+ * 插入数据结构属性
437
+ * @param structurePropertyOptions 数据结构属性参数
438
+ */
439
+ insertStructurePropertyAt(structurePropertyOptions: Partial<StructureProperty>, index: number): StructureProperty;
440
+
441
+ /**
442
+ * 插入数据结构属性
443
+ * @param structureProperty 已有的数据结构属性实例
444
+ */
445
+ insertStructurePropertyAt(structureProperty: StructureProperty, index: number): StructureProperty;
446
+
447
+ insertStructurePropertyAt(options: Partial<StructureProperty> | StructureProperty, index: number) {
448
+ const node = this._insertStructurePropertyAt(options as any, index);
449
+ node.create({
450
+ index,
451
+ parentNode: this,
452
+ parentKey: 'properties',
453
+ });
454
+ return node;
455
+ }
456
+
457
+ /**
458
+ * 添加数据结构属性
459
+ * @internal
460
+ * @param structurePropertyOptions 数据结构属性参数
461
+ */
462
+ _addStructureProperty(structurePropertyOptions: Partial<StructureProperty>): StructureProperty;
463
+
464
+ /**
465
+ * 添加数据结构属性
466
+ * @internal
467
+ * @param structureProperty 已有的数据结构属性实例
468
+ */
469
+ _addStructureProperty(structureProperty: StructureProperty): StructureProperty;
470
+
471
+ _addStructureProperty(options?: Partial<StructureProperty> | StructureProperty) {
472
+ const index = this.properties.length;
473
+ return this._insertStructurePropertyAt(options as any, index);
474
+ }
475
+
476
+ /**
477
+ * 添加数据结构属性
478
+ * @param structurePropertyOptions 数据结构属性参数
479
+ */
480
+ addStructureProperty(structurePropertyOptions: Partial<StructureProperty>): StructureProperty;
481
+
482
+ /**
483
+ * 添加数据结构属性
484
+ * @param structureProperty 已有的数据结构属性实例
485
+ */
486
+ addStructureProperty(structureProperty: StructureProperty): StructureProperty;
487
+
488
+ addStructureProperty(options?: Partial<StructureProperty> | StructureProperty) {
489
+ const node = this._addStructureProperty(options as any);
490
+ const index = this.properties.indexOf(node);
491
+ node.create({
492
+ index,
493
+ parentNode: this,
494
+ parentKey: 'properties',
495
+ });
496
+ return node;
497
+ }
498
+
499
+ /**
500
+ * 删除类型标注
501
+ * @param typeAnnotation 已有的类型标注实例
502
+ */
503
+ removeTypeAnnotationInTypeArguments(typeAnnotation: TypeAnnotation): void;
504
+
505
+ removeTypeAnnotationInTypeArguments(options: TypeAnnotation) {
506
+ const typeAnnotation: TypeAnnotation = options;
507
+ return typeAnnotation.delete();
508
+ }
509
+
510
+ /**
511
+ * 删除类型标注
512
+ * @param typeAnnotation 已有的类型标注实例
513
+ */
514
+ removeTypeAnnotationInReturnType(typeAnnotation: TypeAnnotation): void;
515
+
516
+ removeTypeAnnotationInReturnType(options: TypeAnnotation) {
517
+ const typeAnnotation: TypeAnnotation = options;
518
+ return typeAnnotation.delete();
519
+ }
520
+
521
+ __removeTypeAnnotation(typeAnnotation: TypeAnnotation) {
522
+ const { parentKey } = typeAnnotation;
523
+ const params: Params = {
524
+ parentNode: this,
525
+ parentKey,
526
+ index: -1,
527
+ object: null,
528
+ oldObject: typeAnnotation,
529
+ };
530
+ if (parentKey) {
531
+ params.parentKey = parentKey;
532
+ if (Array.isArray((this as any)[parentKey])) {
533
+ const index = (this as any)[parentKey].indexOf(typeAnnotation);
534
+ ~index && (this as any)[parentKey].splice(index, 1);
535
+ params.index = index;
536
+ } else if ((this as any)[parentKey] === typeAnnotation) {
537
+ params.index = 0;
538
+ (this as any)[parentKey] = undefined;
539
+ }
199
540
  }
200
-
201
-
202
-
203
-
204
-
205
- /**
206
- * 插入类型标注
207
- * @internal
208
- * @param typeAnnotationOptions 类型标注参数
209
- */
210
- _insertTypeAnnotationInTypeArgumentsAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
211
-
212
- /**
213
- * 插入类型标注
214
- * @internal
215
- * @param typeAnnotation 已有的类型标注实例
216
- */
217
- _insertTypeAnnotationInTypeArgumentsAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
218
-
219
- _insertTypeAnnotationInTypeArgumentsAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
220
- const typeAnnotationOptions: any = {};
221
- const relationOptions = { parentNode: this, parentKey: 'typeArguments' };
222
- let typeAnnotation: TypeAnnotation;
223
- if (options instanceof TypeAnnotation) {
224
- options.ensureDelete(); // 同一实例不支持多处存在
225
- typeAnnotation = options;
226
- Object.assign(typeAnnotation, relationOptions);
227
- } else {
228
- typeAnnotation = TypeAnnotation.from({
229
- ...typeAnnotationOptions,
230
- ...options,
231
- }, this, 'typeArguments');
541
+ return params;
542
+ }
543
+
544
+ /**
545
+ * 删除数据结构属性
546
+ * @param structureProperty 已有的数据结构属性实例
547
+ */
548
+ removeStructureProperty(structureProperty: StructureProperty): void;
549
+
550
+ removeStructureProperty(options: StructureProperty) {
551
+ const structureProperty: StructureProperty = options;
552
+ return structureProperty.delete();
553
+ }
554
+
555
+ __removeStructureProperty(structureProperty: StructureProperty) {
556
+ const { parentKey } = structureProperty;
557
+ const params: Params = {
558
+ parentNode: this,
559
+ parentKey,
560
+ index: -1,
561
+ object: null,
562
+ oldObject: structureProperty,
563
+ };
564
+ if (parentKey) {
565
+ params.parentKey = parentKey;
566
+ if (Array.isArray((this as any)[parentKey])) {
567
+ const index = (this as any)[parentKey].indexOf(structureProperty);
568
+ ~index && (this as any)[parentKey].splice(index, 1);
569
+ params.index = index;
570
+ } else if ((this as any)[parentKey] === structureProperty) {
571
+ params.index = 0;
572
+ (this as any)[parentKey] = undefined;
573
+ }
574
+ }
575
+ return params;
576
+ }
577
+
578
+ //= ===============================================================================
579
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
580
+ // 自动生成的代码已结束。下面可以手动编写。
581
+ //= ===============================================================================
582
+
583
+ toUI(state?: TranslatorState): string {
584
+ return this.headTitle;
585
+ }
586
+
587
+ traverse(
588
+ callback: (arg: TypeAnnotation) => void,
589
+ enter: (arg: TypeAnnotation) => void,
590
+ leave: (arg: TypeAnnotation) => void,
591
+ onJoin: (arg: TypeAnnotation, arg2: TypeAnnotation) => void
592
+ ) {
593
+ enter(this);
594
+ callback(this);
595
+ if (this.typeArguments && ['generic', 'union'].includes(this.typeKind)) {
596
+ const l = this.typeArguments.length;
597
+ this.typeArguments.forEach((arg, idx) => {
598
+ arg.traverse(callback, enter, leave, onJoin);
599
+ if (idx < l - 1) {
600
+ onJoin(this, arg);
232
601
  }
233
- this.typeArguments.splice(index, 0, typeAnnotation);
234
- return typeAnnotation;
602
+ });
235
603
  }
604
+ leave(this);
605
+ }
236
606
 
237
-
238
-
239
- /**
240
- * 插入类型标注
241
- * @param typeAnnotationOptions 类型标注参数
242
- */
243
- insertTypeAnnotationInTypeArgumentsAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
244
-
245
- /**
246
- * 插入类型标注
247
- * @param typeAnnotation 已有的类型标注实例
248
- */
249
- insertTypeAnnotationInTypeArgumentsAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
250
-
251
- insertTypeAnnotationInTypeArgumentsAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
252
- const node = this._insertTypeAnnotationInTypeArgumentsAt(options as any, index);
253
- node.create({
254
- index,
255
- parentNode: this,
256
- parentKey: 'typeArguments',
257
- });
258
- return node;
607
+ get typeKey(): string {
608
+ if (this.typeKind === 'primitive' || this.typeKind === 'reference') {
609
+ return `${this.typeNamespace}.${this.typeName}`;
259
610
  }
260
-
261
-
262
-
263
- /**
264
- * 添加类型标注
265
- * @internal
266
- * @param typeAnnotationOptions 类型标注参数
267
- */
268
- _addTypeAnnotationInTypeArguments(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
269
-
270
- /**
271
- * 添加类型标注
272
- * @internal
273
- * @param typeAnnotation 已有的类型标注实例
274
- */
275
- _addTypeAnnotationInTypeArguments(typeAnnotation: TypeAnnotation): TypeAnnotation;
276
-
277
- _addTypeAnnotationInTypeArguments(options?: Partial<TypeAnnotation> | TypeAnnotation) {
278
- const index = this.typeArguments.length;
279
- return this._insertTypeAnnotationInTypeArgumentsAt(options as any, index);
611
+ if (this.typeKind === 'generic') {
612
+ return `${this.typeNamespace}.${this.typeName}<${(this.typeArguments || []).map((arg) => arg.typeKey)}>`;
280
613
  }
281
-
282
-
283
-
284
- /**
285
- * 添加类型标注
286
- * @param typeAnnotationOptions 类型标注参数
287
- */
288
- addTypeAnnotationInTypeArguments(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
289
-
290
- /**
291
- * 添加类型标注
292
- * @param typeAnnotation 已有的类型标注实例
293
- */
294
- addTypeAnnotationInTypeArguments(typeAnnotation: TypeAnnotation): TypeAnnotation;
295
-
296
- addTypeAnnotationInTypeArguments(options?: Partial<TypeAnnotation> | TypeAnnotation) {
297
- const node = this._addTypeAnnotationInTypeArguments(options as any);
298
- const index = this.typeArguments.indexOf(node);
299
- node.create({
300
- index,
301
- parentNode: this,
302
- parentKey: 'typeArguments',
303
- });
304
- return node;
614
+ if (this.typeKind === 'anonymousStructure') {
615
+ return `{ ${this.properties.map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation ? typeAnnotation.typeKey : '未知'}`).join(', ')} }`;
305
616
  }
306
-
307
-
308
-
309
- /**
310
- * 插入类型标注
311
- * @internal
312
- * @param typeAnnotationOptions 类型标注参数
313
- */
314
- _insertTypeAnnotationInReturnTypeAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
315
-
316
- /**
317
- * 插入类型标注
318
- * @internal
319
- * @param typeAnnotation 已有的类型标注实例
320
- */
321
- _insertTypeAnnotationInReturnTypeAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
322
-
323
- _insertTypeAnnotationInReturnTypeAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
324
- const typeAnnotationOptions: any = {};
325
- const relationOptions = { parentNode: this, parentKey: 'returnType' };
326
- let typeAnnotation: TypeAnnotation;
327
- if (options instanceof TypeAnnotation) {
328
- options.ensureDelete(); // 同一实例不支持多处存在
329
- typeAnnotation = options;
330
- Object.assign(typeAnnotation, relationOptions);
331
- } else {
332
- typeAnnotation = TypeAnnotation.from({
333
- ...typeAnnotationOptions,
334
- ...options,
335
- }, this, 'returnType');
336
- }
337
- this.returnType.splice(index, 0, typeAnnotation);
338
- return typeAnnotation;
617
+ if (this.typeKind === 'union') {
618
+ return `${this.typeArguments.map((arg) => arg.typeKey).join(' | ')}`;
339
619
  }
340
-
341
-
342
-
343
- /**
344
- * 插入类型标注
345
- * @param typeAnnotationOptions 类型标注参数
346
- */
347
- insertTypeAnnotationInReturnTypeAt(typeAnnotationOptions: Partial<TypeAnnotation>, index: number): TypeAnnotation;
348
-
349
- /**
350
- * 插入类型标注
351
- * @param typeAnnotation 已有的类型标注实例
352
- */
353
- insertTypeAnnotationInReturnTypeAt(typeAnnotation: TypeAnnotation, index: number): TypeAnnotation;
354
-
355
- insertTypeAnnotationInReturnTypeAt(options: Partial<TypeAnnotation> | TypeAnnotation, index: number) {
356
- const node = this._insertTypeAnnotationInReturnTypeAt(options as any, index);
357
- node.create({
358
- index,
359
- parentNode: this,
360
- parentKey: 'returnType',
361
- });
362
- return node;
620
+ return this.typeName;
621
+ }
622
+
623
+ // 排过序的类型标识
624
+ get sortedTypeKey(): string {
625
+ if (this.typeKind === 'anonymousStructure') {
626
+ // 按匿名数据结构的key排序
627
+ return `{${[...this.properties]
628
+ .sort(({ name: name1 }, { name: name2 }) => (name1 > name2 ? 1 : -1))
629
+ .map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation ? typeAnnotation.sortedTypeKey : '未知'}`)
630
+ .join(', ')}}`;
363
631
  }
364
-
365
-
366
-
367
- /**
368
- * 添加类型标注
369
- * @internal
370
- * @param typeAnnotationOptions 类型标注参数
371
- */
372
- _addTypeAnnotationInReturnType(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
373
-
374
- /**
375
- * 添加类型标注
376
- * @internal
377
- * @param typeAnnotation 已有的类型标注实例
378
- */
379
- _addTypeAnnotationInReturnType(typeAnnotation: TypeAnnotation): TypeAnnotation;
380
-
381
- _addTypeAnnotationInReturnType(options?: Partial<TypeAnnotation> | TypeAnnotation) {
382
- const index = this.returnType.length;
383
- return this._insertTypeAnnotationInReturnTypeAt(options as any, index);
632
+ if (this.typeKind === 'union') {
633
+ // 按返回的每个具体项排序
634
+ return `${this.typeArguments
635
+ .map((arg) => arg.sortedTypeKey)
636
+ .sort((name1, name2) => (name1 > name2 ? 1 : -1))
637
+ .join(' | ')}`;
384
638
  }
385
-
386
-
387
-
388
- /**
389
- * 添加类型标注
390
- * @param typeAnnotationOptions 类型标注参数
391
- */
392
- addTypeAnnotationInReturnType(typeAnnotationOptions: Partial<TypeAnnotation>): TypeAnnotation;
393
-
394
- /**
395
- * 添加类型标注
396
- * @param typeAnnotation 已有的类型标注实例
397
- */
398
- addTypeAnnotationInReturnType(typeAnnotation: TypeAnnotation): TypeAnnotation;
399
-
400
- addTypeAnnotationInReturnType(options?: Partial<TypeAnnotation> | TypeAnnotation) {
401
- const node = this._addTypeAnnotationInReturnType(options as any);
402
- const index = this.returnType.indexOf(node);
403
- node.create({
404
- index,
405
- parentNode: this,
406
- parentKey: 'returnType',
407
- });
408
- return node;
639
+ const typeArr = [];
640
+ if (this.typeNamespace) {
641
+ typeArr.push(this.typeNamespace);
409
642
  }
410
-
411
-
412
-
413
-
414
-
415
-
416
- /**
417
- * 插入数据结构属性
418
- * @internal
419
- * @param structurePropertyOptions 数据结构属性参数
420
- */
421
- _insertStructurePropertyAt(structurePropertyOptions: Partial<StructureProperty>, index: number): StructureProperty;
422
-
423
- /**
424
- * 插入数据结构属性
425
- * @internal
426
- * @param structureProperty 已有的数据结构属性实例
427
- */
428
- _insertStructurePropertyAt(structureProperty: StructureProperty, index: number): StructureProperty;
429
-
430
- _insertStructurePropertyAt(options: Partial<StructureProperty> | StructureProperty, index: number) {
431
- const structurePropertyOptions: any = {};
432
- const relationOptions = { parentNode: this, parentKey: 'properties' };
433
- let structureProperty: StructureProperty;
434
- if (options instanceof StructureProperty) {
435
- options.ensureDelete(); // 同一实例不支持多处存在
436
- structureProperty = options;
437
- Object.assign(structureProperty, relationOptions);
438
- } else {
439
- structureProperty = StructureProperty.from({
440
- ...structurePropertyOptions,
441
- ...options,
442
- }, this, 'properties');
643
+ if (this.typeName) {
644
+ typeArr.push(this.typeName);
645
+ }
646
+ const typeKey = typeArr.join('.');
647
+ if (this.typeKind === 'generic') {
648
+ let code = typeKey;
649
+ code += '<';
650
+ if (Array.isArray(this.typeArguments) && this.typeArguments.length) {
651
+ // 必须按typeArguments定义的顺序,否则实参位置不对
652
+ code += `${(this.typeArguments || []).map((arg) => arg.sortedTypeKey).join(', ')}`;
653
+ }
654
+ code += '>';
655
+ return code;
656
+ }
657
+ return typeKey;
658
+ }
659
+
660
+ /**
661
+ * 用于展示的 type 标题
662
+ */
663
+ get headTitle(): string {
664
+ if (this.typeKind === 'primitive') {
665
+ if (this.typeName === 'Long') {
666
+ return `Integer ${PRIMITIVE_TITLE[this.typeName] || ''}`;
667
+ }
668
+ return `${this.typeName} ${PRIMITIVE_TITLE[this.typeName] || ''}`;
669
+ }
670
+ if (this.typeKind === 'reference') {
671
+ const typeNamespace = this?.typeNamespace;
672
+ let typeTitle = this.typeName;
673
+ if (typeNamespace && this.rootNode) {
674
+ const entity = (this.rootNode as any).findNodeByCompleteName?.([typeNamespace, this?.typeName].join('.'));
675
+ if (entity?.concept === 'Entity') {
676
+ const dataSourceName = entity.dataSource?.name;
677
+ if (dataSourceName) {
678
+ typeTitle += `(${dataSourceName})`;
679
+ }
443
680
  }
444
- this.properties.splice(index, 0, structureProperty);
445
- return structureProperty;
681
+ }
682
+ return typeTitle;
446
683
  }
447
-
448
-
449
-
450
- /**
451
- * 插入数据结构属性
452
- * @param structurePropertyOptions 数据结构属性参数
453
- */
454
- insertStructurePropertyAt(structurePropertyOptions: Partial<StructureProperty>, index: number): StructureProperty;
455
-
456
- /**
457
- * 插入数据结构属性
458
- * @param structureProperty 已有的数据结构属性实例
459
- */
460
- insertStructurePropertyAt(structureProperty: StructureProperty, index: number): StructureProperty;
461
-
462
- insertStructurePropertyAt(options: Partial<StructureProperty> | StructureProperty, index: number) {
463
- const node = this._insertStructurePropertyAt(options as any, index);
464
- node.create({
465
- index,
466
- parentNode: this,
467
- parentKey: 'properties',
468
- });
469
- return node;
684
+ if (this.typeKind === 'generic') {
685
+ if (this.typeArguments && this.typeArguments.length)
686
+ return `${this.typeName}<${(this.typeArguments || []).map((arg) => arg.headTitle || arg.name || 'T').join(', ')}>`;
687
+ return this.typeName;
470
688
  }
471
-
472
-
473
-
474
- /**
475
- * 添加数据结构属性
476
- * @internal
477
- * @param structurePropertyOptions 数据结构属性参数
478
- */
479
- _addStructureProperty(structurePropertyOptions: Partial<StructureProperty>): StructureProperty;
480
-
481
- /**
482
- * 添加数据结构属性
483
- * @internal
484
- * @param structureProperty 已有的数据结构属性实例
485
- */
486
- _addStructureProperty(structureProperty: StructureProperty): StructureProperty;
487
-
488
- _addStructureProperty(options?: Partial<StructureProperty> | StructureProperty) {
489
- const index = this.properties.length;
490
- return this._insertStructurePropertyAt(options as any, index);
689
+ if (this.typeKind === 'anonymousStructure') {
690
+ return `{ ${this.properties?.map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation.headTitle}`).join(', ')} }`;
491
691
  }
492
-
493
-
494
-
495
- /**
496
- * 添加数据结构属性
497
- * @param structurePropertyOptions 数据结构属性参数
498
- */
499
- addStructureProperty(structurePropertyOptions: Partial<StructureProperty>): StructureProperty;
500
-
501
- /**
502
- * 添加数据结构属性
503
- * @param structureProperty 已有的数据结构属性实例
504
- */
505
- addStructureProperty(structureProperty: StructureProperty): StructureProperty;
506
-
507
- addStructureProperty(options?: Partial<StructureProperty> | StructureProperty) {
508
- const node = this._addStructureProperty(options as any);
509
- const index = this.properties.indexOf(node);
510
- node.create({
511
- index,
512
- parentNode: this,
513
- parentKey: 'properties',
514
- });
515
- return node;
692
+ if (this.typeKind === 'union') {
693
+ return `${this.typeArguments.map((arg) => arg.typeTitle || arg.name).join(' 或 ')}`;
516
694
  }
517
-
518
-
519
-
520
-
521
- /**
522
- * 删除类型标注
523
- * @param typeAnnotation 已有的类型标注实例
524
- */
525
- removeTypeAnnotationInTypeArguments(typeAnnotation: TypeAnnotation): void;
526
-
527
- removeTypeAnnotationInTypeArguments(options: TypeAnnotation) {
528
- const typeAnnotation: TypeAnnotation = options;
529
- return typeAnnotation.delete();
695
+ return this.typeName;
696
+ }
697
+
698
+ /**
699
+ * 用于展示的 type 标题
700
+ */
701
+ get typeTitle(): string {
702
+ if (this.typeKind === 'primitive') {
703
+ if (this.typeName === 'Long') {
704
+ return `Integer ${PRIMITIVE_TITLE[this.typeName] || ''}`;
705
+ }
706
+ return `${this.typeName} ${PRIMITIVE_TITLE[this.typeName] || ''}`;
530
707
  }
531
-
532
-
533
-
534
- /**
535
- * 删除类型标注
536
- * @param typeAnnotation 已有的类型标注实例
537
- */
538
- removeTypeAnnotationInReturnType(typeAnnotation: TypeAnnotation): void;
539
-
540
- removeTypeAnnotationInReturnType(options: TypeAnnotation) {
541
- const typeAnnotation: TypeAnnotation = options;
542
- return typeAnnotation.delete();
708
+ if (this.typeKind === 'reference') {
709
+ return this.typeName;
543
710
  }
544
-
545
- __removeTypeAnnotation(typeAnnotation: TypeAnnotation) {
546
- const parentKey = typeAnnotation.parentKey;
547
- const params: Params = {
548
- parentNode: this,
549
- parentKey,
550
- index: -1,
551
- object: null,
552
- oldObject: typeAnnotation,
553
- };
554
- if (parentKey) {
555
- params.parentKey = parentKey;
556
- if (Array.isArray((this as any)[parentKey])) {
557
- const index = (this as any)[parentKey].indexOf(typeAnnotation);
558
- ~index && (this as any)[parentKey].splice(index, 1);
559
- params.index = index;
560
- } else if ((this as any)[parentKey] === typeAnnotation) {
561
- params.index = 0;
562
- (this as any)[parentKey] = undefined;
563
- }
564
- }
565
- return params;
711
+ if (this.typeKind === 'generic') {
712
+ return `${this.typeName}<${!this.typeArguments.length ? 'T' : this.typeArguments.map((arg) => arg.typeTitle || arg.name || 'T').join(', ')}>`;
566
713
  }
567
-
568
- /**
569
- * 删除数据结构属性
570
- * @param structureProperty 已有的数据结构属性实例
571
- */
572
- removeStructureProperty(structureProperty: StructureProperty): void;
573
-
574
- removeStructureProperty(options: StructureProperty) {
575
- const structureProperty: StructureProperty = options;
576
- return structureProperty.delete();
714
+ if (this.typeKind === 'anonymousStructure') {
715
+ return `{ ${this.properties?.map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation ? typeAnnotation.typeTitle : '未知'}`).join(', ')} }`;
577
716
  }
578
-
579
- __removeStructureProperty(structureProperty: StructureProperty) {
580
- const parentKey = structureProperty.parentKey;
581
- const params: Params = {
582
- parentNode: this,
583
- parentKey,
584
- index: -1,
585
- object: null,
586
- oldObject: structureProperty,
587
- };
588
- if (parentKey) {
589
- params.parentKey = parentKey;
590
- if (Array.isArray((this as any)[parentKey])) {
591
- const index = (this as any)[parentKey].indexOf(structureProperty);
592
- ~index && (this as any)[parentKey].splice(index, 1);
593
- params.index = index;
594
- } else if ((this as any)[parentKey] === structureProperty) {
595
- params.index = 0;
596
- (this as any)[parentKey] = undefined;
597
- }
598
- }
599
- return params;
717
+ if (this.typeKind === 'union') {
718
+ return `${this.typeArguments.map((arg) => arg.typeTitle || arg.name).join(' 或 ')}`;
600
719
  }
601
-
602
- //================================================================================
603
- // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
604
- // 自动生成的代码已结束。下面可以手动编写。
605
- //================================================================================
606
-
607
- toUI(state?: TranslatorState): string {
608
- return this.headTitle;
720
+ return this.typeName;
721
+ }
722
+
723
+ /**
724
+ * 用于展示的 无中文的精简type标题
725
+ */
726
+ get typeInlineTitle(): string {
727
+ if (this.typeKind === 'primitive') {
728
+ if (this.typeName === 'Long') {
729
+ return 'Integer';
730
+ }
731
+ return this.typeName;
609
732
  }
610
-
611
- traverse(callback: (arg: TypeAnnotation) => void,
612
- enter: (arg: TypeAnnotation) => void,
613
- leave: (arg: TypeAnnotation) => void,
614
- onJoin: (arg: TypeAnnotation, arg2: TypeAnnotation) => void) {
615
- enter(this);
616
- callback(this);
617
- if (this.typeArguments && ['generic', 'union'].includes(this.typeKind)) {
618
- const l = this.typeArguments.length;
619
- this.typeArguments.forEach((arg, idx) => {
620
- arg.traverse(callback, enter, leave, onJoin);
621
- if (idx < l - 1) {
622
- onJoin(this, arg);
623
- }
624
- });
625
- }
626
- leave(this);
733
+ if (this.typeKind === 'reference') {
734
+ return this.typeName;
627
735
  }
628
-
629
- get typeKey(): string {
630
- if (this.typeKind === 'primitive' || this.typeKind === 'reference') {
631
- return `${this.typeNamespace}.${this.typeName}`;
632
- } else if (this.typeKind === 'generic') {
633
- return `${this.typeNamespace}.${this.typeName}<${(this.typeArguments || []).map((arg) => arg.typeKey)}>`;
634
- } else if (this.typeKind === 'anonymousStructure') {
635
- return `{ ${this.properties.map(({ name, typeAnnotation }) =>
636
- (`${name}: ${typeAnnotation ? typeAnnotation.typeKey : '未知'}`)).join(', ')} }`;
637
- } else if (this.typeKind === 'union') {
638
- return `${this.typeArguments.map((arg) => arg.typeKey).join(' | ')}`;
639
- } else {
640
- return this.typeName;
641
- }
736
+ if (this.typeKind === 'generic') {
737
+ return `${this.typeName}<${!this.typeArguments.length ? 'T' : this.typeArguments.map((arg) => arg.typeInlineTitle || arg.name || 'T').join(', ')
738
+ }>`;
642
739
  }
643
-
644
- // 排过序的类型标识
645
- get sortedTypeKey(): string {
646
- if (this.typeKind === 'anonymousStructure') {
647
- // 按匿名数据结构的key排序
648
- return `{${[...this.properties].sort(({ name: name1 }, { name: name2 }) => name1 > name2 ? 1 : -1).map(({ name, typeAnnotation }) =>
649
- (`${name}: ${typeAnnotation ? typeAnnotation.sortedTypeKey : '未知'}`)).join(', ')}}`;
650
- } else if (this.typeKind === 'union') {
651
- // 按返回的每个具体项排序
652
- return `${this.typeArguments.map((arg) => arg.sortedTypeKey).sort((name1, name2) => name1 > name2 ? 1 : -1).join(' | ')}`;
653
- }
654
- const typeArr = [];
655
- if (this.typeNamespace) {
656
- typeArr.push(this.typeNamespace);
657
- }
658
- if (this.typeName) {
659
- typeArr.push(this.typeName);
660
- }
661
- const typeKey = typeArr.join('.');
662
- if (this.typeKind === 'generic') {
663
- let code = typeKey;
664
- code += '<';
665
- if (Array.isArray(this.typeArguments) && this.typeArguments.length) {
666
- // 必须按typeArguments定义的顺序,否则实参位置不对
667
- code += `${(this.typeArguments || []).map((arg) => arg.sortedTypeKey).join(', ')}`;
668
- }
669
- code += '>';
670
- return code;
671
- }
672
- return typeKey;
740
+ if (this.typeKind === 'anonymousStructure') {
741
+ return `{ ${this.properties
742
+ ?.map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation ? typeAnnotation.typeInlineTitle : '未知'}`)
743
+ .join(', ')} }`;
673
744
  }
674
-
675
- /**
676
- * 用于展示的 type 标题
677
- */
678
- get headTitle(): string {
679
- if (this.typeKind === 'primitive') {
680
- if (this.typeName === 'Long') {
681
- return `Integer ${PRIMITIVE_TITLE[this.typeName] || ''}`;
682
- }
683
- return `${this.typeName} ${PRIMITIVE_TITLE[this.typeName] || ''}`;
684
- } else if (this.typeKind === 'reference') {
685
- const typeNamespace = this?.typeNamespace;
686
- let typeTitle = this.typeName;
687
- if (typeNamespace && this.rootNode) {
688
- const entity = (this.rootNode as any).findNodeByCompleteName?.([typeNamespace, this?.typeName].join('.'));
689
- if (entity?.concept === 'Entity') {
690
- const dataSourceName = entity.dataSource?.name;
691
- if (dataSourceName) {
692
- typeTitle += `(${dataSourceName})`;
693
- }
694
- }
695
- }
696
- return typeTitle;
697
- } else if (this.typeKind === 'generic') {
698
- if (this.typeArguments && this.typeArguments.length)
699
- return `${this.typeName}<${(this.typeArguments || []).map((arg) => arg.headTitle || arg.name || 'T').join(', ')}>`;
700
- else
701
- return this.typeName;
702
- } else if (this.typeKind === 'anonymousStructure') {
703
- return `{ ${this.properties?.map(({ name, typeAnnotation }) =>
704
- (`${name}: ${typeAnnotation.headTitle}`)).join(', ')} }`;
705
- } else if (this.typeKind === 'union') {
706
- return `${this.typeArguments.map((arg) => arg.typeTitle || arg.name).join(' 或 ')}`;
707
- } else {
708
- return this.typeName;
709
- }
745
+ if (this.typeKind === 'union') {
746
+ return `${this.typeArguments.map((arg) => arg.typeInlineTitle || arg.name).join(' 或 ')}`;
710
747
  }
711
-
712
- /**
713
- * 用于展示的 type 标题
714
- */
715
- get typeTitle(): string {
716
- if (this.typeKind === 'primitive') {
717
- if (this.typeName === 'Long') {
718
- return `Integer ${PRIMITIVE_TITLE[this.typeName] || ''}`;
719
- }
720
- return `${this.typeName} ${PRIMITIVE_TITLE[this.typeName] || ''}`;
721
- } else if (this.typeKind === 'reference') {
722
- return this.typeName;
723
- } else if (this.typeKind === 'generic') {
724
- return `${this.typeName}<${!this.typeArguments.length ? 'T' : this.typeArguments.map((arg) => arg.typeTitle || arg.name || 'T').join(', ')}>`;
725
- } else if (this.typeKind === 'anonymousStructure') {
726
- return `{ ${this.properties?.map(({ name, typeAnnotation }) =>
727
- (`${name}: ${typeAnnotation ? typeAnnotation.typeTitle : '未知'}`)).join(', ')} }`;
728
- } else if (this.typeKind === 'union') {
729
- return `${this.typeArguments.map((arg) => arg.typeTitle || arg.name).join(' 或 ')}`;
730
- } else {
731
- return this.typeName;
732
- }
748
+ return this.typeName;
749
+ }
750
+
751
+ /**
752
+ * 用于展示的 纯中文的type 标题
753
+ */
754
+ get typeChineseTitle(): string {
755
+ if (this.typeKind === 'primitive') {
756
+ return `${PRIMITIVE_TITLE[this.typeName] || ''}`;
733
757
  }
734
-
735
- /**
736
- * 用于展示的 无中文的精简type标题
737
- */
738
- get typeInlineTitle(): string {
739
- if (this.typeKind === 'primitive') {
740
- if (this.typeName === 'Long') {
741
- return 'Integer';
742
- }
743
- return this.typeName;
744
- } else if (this.typeKind === 'reference') {
745
- return this.typeName;
746
- } else if (this.typeKind === 'generic') {
747
- return `${this.typeName}<${!this.typeArguments.length ? 'T' : this.typeArguments.map((arg) => arg.typeInlineTitle || arg.name || 'T').join(', ')}>`;
748
- } else if (this.typeKind === 'anonymousStructure') {
749
- return `{ ${this.properties?.map(({ name, typeAnnotation }) =>
750
- (`${name}: ${typeAnnotation ? typeAnnotation.typeInlineTitle : '未知'}`)).join(', ')} }`;
751
- } else if (this.typeKind === 'union') {
752
- return `${this.typeArguments.map((arg) => arg.typeInlineTitle || arg.name).join(' 或 ')}`;
758
+ if (this.typeKind === 'reference') {
759
+ return this.typeName;
760
+ }
761
+ if (this.typeKind === 'generic') {
762
+ return `${this.typeName}<${this.typeArguments.map((arg) => arg.typeChineseTitle || arg.name || 'T').join(', ')}>`;
763
+ }
764
+ if (this.typeKind === 'anonymousStructure') {
765
+ return `{ ${this.properties
766
+ ?.map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation ? typeAnnotation.typeChineseTitle : '未知'}`)
767
+ .join(', ')} }`;
768
+ }
769
+ if (this.typeKind === 'union') {
770
+ return `${this.typeArguments.map((arg) => arg.typeChineseTitle || arg.name).join('')}`;
771
+ }
772
+ return this.typeName;
773
+ }
774
+
775
+ get typeTitleList() {
776
+ const typeTitleList: any[] = [];
777
+ if (this.typeKind === 'anonymousStructure') {
778
+ typeTitleList.push({ key: '{' });
779
+ const length = this.properties?.length;
780
+ this.properties?.forEach(({ name, typeAnnotation }, index) => {
781
+ if (index === length - 1) {
782
+ typeTitleList.push({ key: name, value: `${typeAnnotation ? typeAnnotation.typeTitle : '未知'}` });
753
783
  } else {
754
- return this.typeName;
784
+ typeTitleList.push({ key: name, value: `${typeAnnotation ? typeAnnotation.typeTitle : '未知'}`, dot: ',' });
755
785
  }
756
- }
757
-
758
- /**
759
- * 用于展示的 纯中文的type 标题
760
- */
761
- get typeChineseTitle(): string {
762
- if (this.typeKind === 'primitive') {
763
- return `${PRIMITIVE_TITLE[this.typeName] || ''}`;
764
- } else if (this.typeKind === 'reference') {
765
- return this.typeName;
766
- } else if (this.typeKind === 'generic') {
767
- return `${this.typeName}<${this.typeArguments.map((arg) => arg.typeChineseTitle || arg.name || 'T').join(', ')}>`;
768
- } else if (this.typeKind === 'anonymousStructure') {
769
- return `{ ${this.properties?.map(({ name, typeAnnotation }) =>
770
- (`${name}: ${typeAnnotation ? typeAnnotation.typeChineseTitle : '未知'}`)).join(', ')} }`;
771
- } else if (this.typeKind === 'union') {
772
- return `${this.typeArguments.map((arg) => arg.typeChineseTitle || arg.name).join(' 或 ')}`;
786
+ });
787
+ typeTitleList.push({ key: '}' });
788
+ } else if (this.typeName === 'List' && this.typeArguments?.length) {
789
+ if (this.typeArguments.every((item) => item.typeKind !== 'anonymousStructure')) {
790
+ typeTitleList.push({ key: this.typeTitle });
791
+ } else {
792
+ const propsTypeList = [].concat(...this.typeArguments.map((arg) => arg.typeTitleList));
793
+ if (propsTypeList[0]?.key === '{') {
794
+ propsTypeList[0].key = 'List<{';
773
795
  } else {
774
- return this.typeName;
796
+ typeTitleList.push({ key: 'List<' });
775
797
  }
776
- }
777
-
778
- get typeTitleList() {
779
- const typeTitleList: any[] = [];
780
- if (this.typeKind === 'anonymousStructure') {
781
- typeTitleList.push({ key: '{' });
782
- const length = this.properties?.length;
783
- this.properties?.forEach(({ name, typeAnnotation }, index) => {
784
- if (index === length - 1) {
785
- typeTitleList.push({ key: name, value: `${typeAnnotation ? typeAnnotation.typeTitle : '未知'}` });
786
- } else {
787
- typeTitleList.push({ key: name, value: `${typeAnnotation ? typeAnnotation.typeTitle : '未知'}`, dot: ',' });
788
- }
789
- });
790
- typeTitleList.push({ key: '}' });
791
- } else if (this.typeName === 'List' && this.typeArguments?.length) {
792
- if (this.typeArguments.every((item) => item.typeKind !== 'anonymousStructure')) {
793
- typeTitleList.push({ key: this.typeTitle });
794
- } else {
795
- const propsTypeList = [].concat(...this.typeArguments.map((arg) => arg.typeTitleList));
796
- if (propsTypeList[0]?.key === '{') {
797
- propsTypeList[0].key = 'List<{';
798
- } else {
799
- typeTitleList.push({ key: 'List<' });
800
- }
801
- typeTitleList.push(...propsTypeList);
802
- if (propsTypeList[propsTypeList.length - 1]?.key === '}') {
803
- propsTypeList[propsTypeList.length - 1].key = '}>';
804
- } else {
805
- typeTitleList.push({ key: '>' });
806
- }
807
- }
798
+ typeTitleList.push(...propsTypeList);
799
+ if (propsTypeList[propsTypeList.length - 1]?.key === '}') {
800
+ propsTypeList[propsTypeList.length - 1].key = '}>';
808
801
  } else {
809
- typeTitleList.push({ key: this.typeTitle });
802
+ typeTitleList.push({ key: '>' });
810
803
  }
811
- return typeTitleList;
804
+ }
805
+ } else {
806
+ typeTitleList.push({ key: this.typeTitle });
812
807
  }
808
+ return typeTitleList;
809
+ }
813
810
 
814
- static createPrimitive(typeName: string, source?: Partial<TypeAnnotation>) {
815
- if ((PRIMITIVE_TYPE as any)[typeName]) {
816
- return this.from(Object.assign({
817
- typeKind: typeName === 'Union' ? 'union' : 'primitive',
818
- typeName,
819
- typeNamespace: 'nasl.core',
820
- }, source));
821
- }
811
+ static createPrimitive(typeName: string, source?: Partial<TypeAnnotation>) {
812
+ if ((PRIMITIVE_TYPE as any)[typeName]) {
813
+ return this.from({ typeKind: typeName === 'Union' ? 'union' : 'primitive', typeName, typeNamespace: 'nasl.core', ...source });
822
814
  }
823
-
824
- static createReference(typeName: string, source?: Partial<TypeAnnotation>) {
825
- return this.from(Object.assign({
826
- typeKind: 'reference',
827
- typeName,
828
- typeNamespace: 'nasl.core',
829
- }, source));
815
+ }
816
+
817
+ static createReference(typeName: string, source?: Partial<TypeAnnotation>) {
818
+ return this.from({ typeKind: 'reference', typeName, typeNamespace: 'nasl.core', ...source });
819
+ }
820
+
821
+ static createGeneric(typeName: string, source?: Partial<TypeAnnotation>) {
822
+ return this.from({ typeKind: 'generic', typeName, typeNamespace: 'nasl.collection', ...source });
823
+ }
824
+
825
+ static createTypeParam(typeName: string, source?: Partial<TypeAnnotation>) {
826
+ return this.from({ typeKind: 'typeParam', typeName, ...source });
827
+ }
828
+
829
+ static createTypeAnonymousStructure(properties: Array<StructureProperty>, source?: Partial<TypeAnnotation>) {
830
+ return this.from({ typeKind: 'anonymousStructure', properties, ...source });
831
+ }
832
+
833
+ /**
834
+ * 设置类型属性名称
835
+ */
836
+ setTypeName(typeName: string) {
837
+ const object = {
838
+ typeName,
839
+ };
840
+ this.update({
841
+ ...object,
842
+ });
843
+ }
844
+
845
+ /**
846
+ * 设置类型属性名称
847
+ */
848
+ setTypeNamespace(typeNamespace: string) {
849
+ const object = {
850
+ typeNamespace,
851
+ };
852
+ this.update({
853
+ ...object,
854
+ });
855
+ }
856
+
857
+ get tsCalleeNamespace() {
858
+ if (this.typeNamespace) {
859
+ let tsCalleeNamespace = this.typeNamespace;
860
+ tsCalleeNamespace = tsCalleeNamespace.replace(/\.[0-9]/g, (m) => m.replace('.', '.$'));
861
+ tsCalleeNamespace = tsCalleeNamespace.replace(/-/g, '_');
862
+ return tsCalleeNamespace;
830
863
  }
831
-
832
- static createGeneric(typeName: string, source?: Partial<TypeAnnotation>) {
833
- return this.from(Object.assign({
834
- typeKind: 'generic',
835
- typeName,
836
- typeNamespace: 'nasl.collection',
837
- }, source));
864
+ return '';
865
+ }
866
+
867
+ toVue(state?: TranslatorState): string {
868
+ return JSON.stringify(this);
869
+ }
870
+
871
+ toJS(state?: TranslatorState): string {
872
+ return JSON.stringify(this);
873
+ }
874
+
875
+ @withSourceMap()
876
+ toEmbeddedTS(state?: TranslatorState): string {
877
+ if (this.typeKind === 'primitive' || this.typeKind === 'reference') {
878
+ if (this.typeKind === 'reference' && this.typeNamespace && this.typeNamespace.endsWith('enums')) {
879
+ return `${this.tsCalleeNamespace}.${this.typeName}`;
880
+ }
881
+ return `${this.tsCalleeNamespace}.${this.typeName}`;
838
882
  }
839
-
840
- static createTypeParam(typeName: string, source?: Partial<TypeAnnotation>) {
841
- return this.from(Object.assign({
842
- typeKind: 'typeParam',
843
- typeName,
844
- }, source));
883
+ if (this.typeKind === 'generic') {
884
+ let code = `${this.tsCalleeNamespace}.${this.typeName}<`;
885
+ (this.typeArguments || []).forEach((arg, index) => {
886
+ code += arg.toEmbeddedTS(shiftState(state, code, { inline: true }));
887
+ if (index !== this.typeArguments.length - 1) code += ', ';
888
+ });
889
+ code += '>';
890
+ return code;
845
891
  }
846
-
847
- static createTypeAnonymousStructure(properties: Array<StructureProperty>, source?: Partial<TypeAnnotation>) {
848
- return this.from(Object.assign({
849
- typeKind: 'anonymousStructure',
850
- properties,
851
- }, source));
892
+ if (this.typeKind === 'union') {
893
+ let code = '';
894
+ (this.typeArguments || []).forEach((arg, index) => {
895
+ code += arg.toEmbeddedTS(shiftState(state, code, { inline: true }));
896
+ if (index !== this.typeArguments.length - 1) code += ' | ';
897
+ });
898
+ return code;
852
899
  }
853
- /**
854
- * 设置类型属性名称
855
- */
856
- setTypeName(typeName: string) {
857
- const object = {
858
- typeName,
859
- };
860
- this.update({
861
- ...object,
862
- });
900
+ if (this.typeKind === 'anonymousStructure') {
901
+ let code = `{ `;
902
+ (this.properties || []).forEach((property, i) => {
903
+ code += `${property.name}: `;
904
+ code += `${property.typeAnnotation
905
+ ? property.typeAnnotation.toEmbeddedTS(shiftState(state, code, { inline: true, tabSize: (state?.tabSize || 0) + 1 }))
906
+ : '`未知`'
907
+ }`;
908
+ code += ', ';
909
+ });
910
+ code += `__name: "AStructure_${this.hash}" `;
911
+ code += ' }';
912
+ return code;
863
913
  }
864
-
865
- /**
866
- * 设置类型属性名称
867
- */
868
- setTypeNamespace(typeNamespace: string) {
869
- const object = {
870
- typeNamespace,
871
- };
872
- this.update({
873
- ...object,
874
- });
914
+ if (this.tsCalleeNamespace && this.typeName) {
915
+ return `${this.tsCalleeNamespace}.${this.typeName}`;
875
916
  }
876
-
877
- get tsCalleeNamespace() {
878
- if (this.typeNamespace) {
879
- let tsCalleeNamespace = this.typeNamespace;
880
- tsCalleeNamespace = tsCalleeNamespace.replace(/\.[0-9]/g, (m) => m.replace('.', '.$'));
881
- tsCalleeNamespace = tsCalleeNamespace.replace(/-/g, '_');
882
- return tsCalleeNamespace;
883
- }
884
- return '';
917
+ if (this.typeName) {
918
+ return this.typeName;
885
919
  }
886
-
887
- toVue(state?: TranslatorState): string {
888
- return JSON.stringify(this);
920
+ return '__IDENTIFIER__';
921
+ }
922
+
923
+ @withSourceMap()
924
+ toNaturalTS(state?: TranslatorState): string {
925
+ if (this.typeKind === 'primitive' || this.typeKind === 'reference') {
926
+ if (this.typeKind === 'reference' && this.typeNamespace && this.typeNamespace.endsWith('enums')) {
927
+ return this.tsCalleeNamespace.startsWith('nasl.ui') ? `${this.tsCalleeNamespace}.${this.typeName}` : `${this.typeName}`;
928
+ }
929
+ return this.tsCalleeNamespace.startsWith('nasl.ui') ? `${this.tsCalleeNamespace}.${this.typeName}` : `${this.typeName}`;
889
930
  }
890
-
891
- toJS(state?: TranslatorState): string {
892
- return JSON.stringify(this);
931
+ if (this.typeKind === 'generic') {
932
+ let code = `${this.typeName}<`;
933
+ (this.typeArguments || []).forEach((arg, index) => {
934
+ code += arg.toNaturalTS(shiftState(state, code, { inline: true }));
935
+ if (index !== this.typeArguments.length - 1)
936
+ code += ', ';
937
+ });
938
+ code += '>';
939
+ return code;
893
940
  }
894
-
895
- @withSourceMap()
896
- toEmbeddedTS(state?: TranslatorState): string {
897
- if (this.typeKind === 'primitive' || this.typeKind === 'reference') {
898
- if (this.typeKind === 'reference' && this.typeNamespace && this.typeNamespace.endsWith('enums')) {
899
- return `${this.tsCalleeNamespace}.${this.typeName}`;
900
- }
901
- return `${this.tsCalleeNamespace}.${this.typeName}`;
902
- } else if (this.typeKind === 'generic') {
903
- let code = `${this.tsCalleeNamespace}.${this.typeName}<`;
904
- (this.typeArguments || []).forEach((arg, index) => {
905
- code += arg.toEmbeddedTS(shiftState(state, code, { inline: true }));
906
- if (index !== this.typeArguments.length - 1)
907
- code += ', ';
908
- });
909
- code += '>';
910
- return code;
911
- } else if (this.typeKind === 'union') {
912
- let code = '';
913
- (this.typeArguments || []).forEach((arg, index) => {
914
- code += arg.toEmbeddedTS(shiftState(state, code, { inline: true }));
915
- if (index !== this.typeArguments.length - 1)
916
- code += ' | ';
917
- });
918
- return code;
919
- } else if (this.typeKind === 'anonymousStructure') {
920
- let code = `{ `;
921
- (this.properties || []).forEach((property, i) => {
922
- code += `${property.name}: `;
923
- code += `${property.typeAnnotation ? property.typeAnnotation.toEmbeddedTS(shiftState(state, code, { inline: true, tabSize: (state?.tabSize || 0) + 1 })) : '`未知`'}`;
924
- code += ', ';
925
- });
926
- code += `__name: "AStructure_${this.hash}" `;
927
- code += ' }';
928
- return code;
929
- } else {
930
- if (this.tsCalleeNamespace && this.typeName) {
931
- return `${this.tsCalleeNamespace}.${this.typeName}`;
932
- } else if (this.typeName) {
933
- return this.typeName;
934
- } else {
935
- return '__IDENTIFIER__';
936
- }
937
- }
941
+ if (this.typeKind === 'union') {
942
+ let code = '';
943
+ (this.typeArguments || []).forEach((arg, index) => {
944
+ code += arg.toNaturalTS(shiftState(state, code, { inline: true }));
945
+ if (index !== this.typeArguments.length - 1)
946
+ code += ' | ';
947
+ });
948
+ return code;
938
949
  }
939
-
940
- /**
941
- * 用于标准化数据结构,便于计算 anonymousStructure __name
942
- */
943
- get anonymousStructureTypeDesc(): string {
944
- if (this.typeKind === 'generic') {
945
- return `${this.typeName}<${this.typeArguments.map((arg) => arg.anonymousStructureTypeDesc || arg.name || 'T').join(', ')}>`;
946
- } else if (this.typeKind === 'anonymousStructure') {
947
- return `{ ${[...this.properties].sort(({ name: aName }, { name: bName }) => {
948
- if (aName > bName)
949
- return 1;
950
- return aName < bName ? -1 : 0;
951
- }).map(({ name, typeAnnotation }) =>
952
- (`${name}: ${typeAnnotation ? typeAnnotation.anonymousStructureTypeDesc : '未知'}`)).join(', ')} }`;
953
- } else {
954
- return this.typeName;
955
- }
950
+ if (this.typeKind === 'anonymousStructure') {
951
+ let code = `{ `;
952
+ (this.properties || []).forEach((property, i) => {
953
+ code += `${property.name}: `;
954
+ code += `${property.typeAnnotation.toNaturalTS(shiftState(state, code, { inline: true, tabSize: state.tabSize + 1 }))}`;
955
+ code += i < this.properties?.length - 1 ? ', ' : ' }';
956
+ });
957
+ return code;
956
958
  }
957
-
958
- /**
959
- * hash 用于比较 anonymousStructure 是否相同
960
- */
961
- get hash(): string {
962
- return genHash(this.anonymousStructureTypeDesc);
959
+ if (this.tsCalleeNamespace && this.typeName) {
960
+ return `${this.typeName}`;
963
961
  }
964
-
965
- getDefaultValue(value: string) {
966
- let code = '';
967
- if (this.typeKind === 'primitive') {
968
- if (this.typeName === 'String') {
969
- code = ` new nasl.core.String("${value}") `;
970
- } else {
971
- if (['Text'].includes(this.typeName)) {
972
- code = ` new ${this.typeNamespace}.${this.typeName}("${value}")`;
973
- } else if (['Boolean'].includes(this.typeName)) {
974
- code = value;
975
- } else {
976
- code = ` new ${this.typeNamespace}.${this.typeName}(${value})`;
977
- }
978
- }
979
- } else {
980
- code = ` ${this.typeNamespace}.${this.typeName}['${value}']`;
981
- }
982
-
983
- return code;
962
+ if (this.typeName) {
963
+ return this.typeName;
964
+ }
965
+ return '__IDENTIFIER__';
966
+ }
967
+
968
+ /**
969
+ * 用于标准化数据结构,便于计算 anonymousStructure 的 __name
970
+ */
971
+ get anonymousStructureTypeDesc(): string {
972
+ if (this.typeKind === 'generic') {
973
+ return `${this.typeName}<${this.typeArguments.map((arg) => arg.anonymousStructureTypeDesc || arg.name || 'T').join(', ')}>`;
974
+ }
975
+ if (this.typeKind === 'anonymousStructure') {
976
+ return `{ ${[...this.properties]
977
+ .sort(({ name: aName }, { name: bName }) => {
978
+ if (aName > bName) return 1;
979
+ return aName < bName ? -1 : 0;
980
+ })
981
+ .map(({ name, typeAnnotation }) => `${name}: ${typeAnnotation ? typeAnnotation.anonymousStructureTypeDesc : '未知'}`)
982
+ .join(', ')} }`;
983
+ }
984
+ return this.typeName;
985
+ }
986
+
987
+ /**
988
+ * hash 用于比较 anonymousStructure 是否相同
989
+ */
990
+ get hash(): string {
991
+ return genHash(this.anonymousStructureTypeDesc);
992
+ }
993
+
994
+ getDefaultValue(value: string) {
995
+ let code = '';
996
+ if (this.typeKind === 'primitive') {
997
+ if (this.typeName === 'String') {
998
+ code = ` new nasl.core.String("${value}") `;
999
+ } else if (['Text'].includes(this.typeName)) {
1000
+ code = ` new ${this.typeNamespace}.${this.typeName}("${value}")`;
1001
+ } else if (['Boolean'].includes(this.typeName)) {
1002
+ code = value;
1003
+ } else {
1004
+ code = ` new ${this.typeNamespace}.${this.typeName}(${value})`;
1005
+ }
1006
+ } else {
1007
+ code = ` ${this.typeNamespace}.${this.typeName}['${value}']`;
984
1008
  }
985
1009
 
986
- /**
987
- *
988
- * @param code 233
989
- *
990
- */
991
- static recognize(code: string | number): TypeAnnotation {
992
- if (typeof code === 'string') {
993
- const EmailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
994
- const TimeReg = /^(\d{1,2})(:\d{1,2})?:(\d{1,2})$/;
995
- const DateReg = /^\d{1,4}(\/|-)\d{1,2}(\/|-)\d{1,2}$/;
996
- const DateTimeReg = /^\d{1,4}(\/|-)\d{1,2}(\/|-)\d{1,2}\s(\d{1,2})(:\d{1,2})?:(\d{1,2})$/;
997
- const BooleanReg = /(false|true|\u662f|\u5426)/i;
998
- if (EmailReg.test(code)) {
999
- return this.createPrimitive('String');
1000
- } else if (TimeReg.test(code)) {
1001
- return this.createPrimitive('Time');
1002
- } else if (BooleanReg.test(code)) {
1003
- return this.createPrimitive('Boolean');
1004
- } else if (DateReg.test(code)) {
1005
- return this.createPrimitive('Date');
1006
- } else if (DateTimeReg.test(code)) {
1007
- return this.createPrimitive('DateTime');
1008
- } else if (!isNaN(Number(code))) {
1009
- if (code.indexOf('.') !== -1) {
1010
- return this.createPrimitive('Decimal');
1011
- // return this.createPrimitive('Decimal');
1012
- }
1013
- if (code.length > 8) {
1014
- return this.createPrimitive('Long');
1015
- }
1016
- return this.createPrimitive('Long');
1017
- } else if (code.length > 255) {
1018
- return this.createPrimitive('String');
1019
- }
1020
- return this.createPrimitive('String');
1021
- } else {
1022
- return this.createPrimitive('Long');
1010
+ return code;
1011
+ }
1012
+
1013
+ /**
1014
+ *
1015
+ * @param code 233
1016
+ *
1017
+ */
1018
+ static recognize(code: string | number): TypeAnnotation {
1019
+ if (typeof code === 'string') {
1020
+ const EmailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
1021
+ const TimeReg = /^(\d{1,2})(:\d{1,2})?:(\d{1,2})$/;
1022
+ const DateReg = /^\d{1,4}(\/|-)\d{1,2}(\/|-)\d{1,2}$/;
1023
+ const DateTimeReg = /^\d{1,4}(\/|-)\d{1,2}(\/|-)\d{1,2}\s(\d{1,2})(:\d{1,2})?:(\d{1,2})$/;
1024
+ const BooleanReg = /(false|true|\u662f|\u5426)/i;
1025
+ if (EmailReg.test(code)) {
1026
+ return this.createPrimitive('String');
1027
+ }
1028
+ if (TimeReg.test(code)) {
1029
+ return this.createPrimitive('Time');
1030
+ }
1031
+ if (BooleanReg.test(code)) {
1032
+ return this.createPrimitive('Boolean');
1033
+ }
1034
+ if (DateReg.test(code)) {
1035
+ return this.createPrimitive('Date');
1036
+ }
1037
+ if (DateTimeReg.test(code)) {
1038
+ return this.createPrimitive('DateTime');
1039
+ }
1040
+ if (!isNaN(Number(code))) {
1041
+ if (code.indexOf('.') !== -1) {
1042
+ return this.createPrimitive('Decimal');
1043
+ // return this.createPrimitive('Decimal');
1023
1044
  }
1024
- }
1025
- // 增加插入泛型子类型
1026
- typeArgumentsPush(typeItem: TypeAnnotation) {
1027
- if (typeItem instanceof TypeAnnotation) {
1028
- this.typeArguments.push(TypeAnnotation.from(typeItem, {
1029
- parentNode: this,
1030
- parentKey: 'typeArguments',
1031
- }));
1045
+ if (code.length > 8) {
1046
+ return this.createPrimitive('Long');
1032
1047
  }
1048
+ return this.createPrimitive('Long');
1049
+ }
1050
+ if (code.length > 255) {
1051
+ return this.createPrimitive('String');
1052
+ }
1053
+ return this.createPrimitive('String');
1033
1054
  }
1034
-
1035
- // 是否是复合类型 List|Map|entities|structures
1036
- isComplexType() {
1037
- const namespaceType = this.typeNamespace?.split('.').pop();
1038
- return ['Map', 'List'].includes(this.typeName) || (this.typeKind === 'reference' && ['entities', 'structures'].includes(namespaceType));
1055
+ return this.createPrimitive('Long');
1056
+ }
1057
+
1058
+ // 增加插入泛型子类型
1059
+ typeArgumentsPush(typeItem: TypeAnnotation) {
1060
+ if (typeItem instanceof TypeAnnotation) {
1061
+ this.typeArguments.push(
1062
+ TypeAnnotation.from(typeItem, {
1063
+ parentNode: this,
1064
+ parentKey: 'typeArguments',
1065
+ })
1066
+ );
1039
1067
  }
1040
- /* 类型签名 */
1041
- get sign() {
1042
- let str: string = '';
1043
- if (['Map', 'List'].includes(this.typeName)) {
1044
- str += this.typeName + '<';
1045
- (this.typeArguments || []).forEach((item, index) => {
1046
- str += item.sign;
1047
- if (index + 1 !== this.typeArguments.length) {
1048
- str += ',';
1049
- }
1050
- });
1051
- str += '>';
1052
- } else {
1053
- str += this.typeName;
1068
+ }
1069
+
1070
+ // 是否是复合类型 List|Map|entities|structures
1071
+ isComplexType() {
1072
+ const namespaceType = this.typeNamespace?.split('.').pop();
1073
+ return ['Map', 'List'].includes(this.typeName) || (this.typeKind === 'reference' && ['entities', 'structures'].includes(namespaceType));
1074
+ }
1075
+
1076
+ /* 类型签名 */
1077
+ get sign() {
1078
+ let str: string = '';
1079
+ if (['Map', 'List'].includes(this.typeName)) {
1080
+ str += `${this.typeName}<`;
1081
+ (this.typeArguments || []).forEach((item, index) => {
1082
+ str += item.sign;
1083
+ if (index + 1 !== this.typeArguments.length) {
1084
+ str += ',';
1054
1085
  }
1055
- return str;
1086
+ });
1087
+ str += '>';
1088
+ } else {
1089
+ str += this.typeName;
1056
1090
  }
1057
-
1058
- /* 判断2个类型是否一致 */
1059
- isSame(typeAnnotation: TypeAnnotation) {
1060
- typeAnnotation.typeArguments;
1061
- const typeAnnotation1 = this.toJSON();
1062
- const typeAnnotation2 = typeAnnotation.toJSON();
1063
- if (typeAnnotation1.typeArguments) {
1064
- typeAnnotation1.typeArguments = this.sortedTypeKey;
1091
+ return str;
1092
+ }
1093
+
1094
+ /* 判断2个类型是否一致 */
1095
+ isSame(typeAnnotation: TypeAnnotation) {
1096
+ typeAnnotation.typeArguments;
1097
+ const typeAnnotation1 = this.toJSON();
1098
+ const typeAnnotation2 = typeAnnotation.toJSON();
1099
+ if (typeAnnotation1.typeArguments) {
1100
+ typeAnnotation1.typeArguments = this.sortedTypeKey;
1101
+ }
1102
+ if (typeAnnotation2.typeArguments) {
1103
+ typeAnnotation2.typeArguments = typeAnnotation.sortedTypeKey;
1104
+ }
1105
+ return JSON.stringify(typeAnnotation1) === JSON.stringify(typeAnnotation2);
1106
+ }
1107
+
1108
+ // 是否包含系统类型
1109
+ hasSystemType() {
1110
+ const disableTypeNamespaces = ['nasl.ui', 'nasl.auth', 'nasl.http', 'nasl.process'];
1111
+ const traverseChild = (item: TypeAnnotation, cb: (arg: TypeAnnotation) => boolean | void): boolean => {
1112
+ const res = cb(item);
1113
+ if (res === false) return true;
1114
+ if (item && item.concept === 'TypeAnnotation') {
1115
+ if (item.typeKind === 'anonymousStructure') {
1116
+ return item.properties.some((prop) => traverseChild(prop.typeAnnotation, cb));
1065
1117
  }
1066
- if (typeAnnotation2.typeArguments) {
1067
- typeAnnotation2.typeArguments = typeAnnotation.sortedTypeKey;
1118
+ if (item.typeArguments && ['generic', 'union'].includes(item.typeKind)) {
1119
+ return item.typeArguments.some((arg) => traverseChild(arg, cb));
1068
1120
  }
1069
- return JSON.stringify(typeAnnotation1) === JSON.stringify(typeAnnotation2);
1070
- }
1071
-
1072
- // 是否包含系统类型
1073
- hasSystemType() {
1074
- const disableTypeNamespaces = ['nasl.ui', 'nasl.auth', 'nasl.http', 'nasl.process']
1075
- const traverseChild = (item: TypeAnnotation, cb: (arg: TypeAnnotation) => (boolean | void)): boolean => {
1076
- const res = cb(item);
1077
- if (res === false) return true
1078
- if (item && item.concept === 'TypeAnnotation') {
1079
- if (item.typeKind === 'anonymousStructure') {
1080
- return item.properties.some(prop => traverseChild(prop.typeAnnotation, cb))
1081
- } else if (item.typeArguments && ['generic', 'union'].includes(item.typeKind)) {
1082
- return item.typeArguments.some((arg) => traverseChild(arg, cb));
1083
- }
1084
- }
1121
+ }
1122
+ };
1123
+ let result = false;
1124
+ traverseChild(this, (node: TypeAnnotation) => {
1125
+ if (node.typeNamespace?.endsWith('.structures')) {
1126
+ const structure = this.rootNode.findNodeByCompleteName(`${node.typeNamespace}.${node.typeName}`);
1127
+ const res = !structure.properties.some((prop: StructureProperty) => prop.typeAnnotation.hasSystemType());
1128
+ if (res === false) {
1129
+ result = true;
1085
1130
  }
1086
- let result = false
1087
- traverseChild(this, (node: TypeAnnotation) => {
1088
- if (node.typeNamespace?.endsWith('.structures')) {
1089
- const structure = this.rootNode.findNodeByCompleteName(node.typeNamespace + '.' + node.typeName)
1090
- const res = !structure.properties.some((prop: StructureProperty) => prop.typeAnnotation.hasSystemType())
1091
- if (res === false) {
1092
- result = true
1093
- }
1094
- return res
1095
- } else if (disableTypeNamespaces.includes(node.typeNamespace)) {
1096
- result = true
1097
- return false
1098
- }
1099
- })
1100
- return result
1101
- }
1102
-
1103
- //================================================================================
1104
- // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1105
- // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1106
- //================================================================================
1131
+ return res;
1132
+ }
1133
+ if (disableTypeNamespaces.includes(node.typeNamespace)) {
1134
+ result = true;
1135
+ return false;
1136
+ }
1137
+ });
1138
+ return result;
1139
+ }
1140
+
1141
+ //= ===============================================================================
1142
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1143
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
1144
+ //= ===============================================================================
1107
1145
  }
1108
1146
 
1109
1147
  classMap.TypeAnnotation = TypeAnnotation;
1110
1148
  export default TypeAnnotation;
1111
- //================================================================================
1149
+ //= ===============================================================================
1112
1150
  // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
1113
1151
  // 自动生成的代码已结束。下面可以手动编写。
1114
- //================================================================================
1152
+ //= ===============================================================================