@lcap/nasl 1.0.0-alpha.7 → 1.0.0

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 (441) hide show
  1. package/out/automate/engine/index.d.ts +3 -0
  2. package/out/automate/engine/index.js +513 -0
  3. package/out/automate/engine/index.js.map +1 -0
  4. package/out/automate/engine/utils.d.ts +24 -0
  5. package/out/automate/engine/utils.js +363 -0
  6. package/out/automate/engine/utils.js.map +1 -0
  7. package/out/common/BaseNode.d.ts +20 -0
  8. package/out/common/BaseNode.js +219 -81
  9. package/out/common/BaseNode.js.map +1 -1
  10. package/out/concepts/App__.d.ts +18 -1
  11. package/out/concepts/App__.js +75 -35
  12. package/out/concepts/App__.js.map +1 -1
  13. package/out/concepts/Argument__.d.ts +5 -1
  14. package/out/concepts/Argument__.js +21 -3
  15. package/out/concepts/Argument__.js.map +1 -1
  16. package/out/concepts/Assignee__.d.ts +190 -0
  17. package/out/concepts/Assignee__.js +264 -0
  18. package/out/concepts/Assignee__.js.map +1 -0
  19. package/out/concepts/Assignment__.js +5 -0
  20. package/out/concepts/Assignment__.js.map +1 -1
  21. package/out/concepts/BinaryExpression__.js +8 -7
  22. package/out/concepts/BinaryExpression__.js.map +1 -1
  23. package/out/concepts/BindAttribute__.d.ts +19 -0
  24. package/out/concepts/BindAttribute__.js +54 -9
  25. package/out/concepts/BindAttribute__.js.map +1 -1
  26. package/out/concepts/BindDirective__.js +22 -2
  27. package/out/concepts/BindDirective__.js.map +1 -1
  28. package/out/concepts/BindEvent__.d.ts +2 -2
  29. package/out/concepts/BindEvent__.js +67 -34
  30. package/out/concepts/BindEvent__.js.map +1 -1
  31. package/out/concepts/BooleanLiteral__.d.ts +2 -0
  32. package/out/concepts/BooleanLiteral__.js +10 -0
  33. package/out/concepts/BooleanLiteral__.js.map +1 -1
  34. package/out/concepts/CallFunction__.js +41 -23
  35. package/out/concepts/CallFunction__.js.map +1 -1
  36. package/out/concepts/CallInterface__.d.ts +5 -0
  37. package/out/concepts/CallInterface__.js +238 -31
  38. package/out/concepts/CallInterface__.js.map +1 -1
  39. package/out/concepts/CallLogic__.d.ts +4 -4
  40. package/out/concepts/CallLogic__.js +110 -53
  41. package/out/concepts/CallLogic__.js.map +1 -1
  42. package/out/concepts/CallQueryComponent__.d.ts +7 -1
  43. package/out/concepts/CallQueryComponent__.js +44 -25
  44. package/out/concepts/CallQueryComponent__.js.map +1 -1
  45. package/out/concepts/Comment__.js +6 -2
  46. package/out/concepts/Comment__.js.map +1 -1
  47. package/out/concepts/CompletionProperty__.d.ts +3 -1
  48. package/out/concepts/CompletionProperty__.js +2 -0
  49. package/out/concepts/CompletionProperty__.js.map +1 -1
  50. package/out/concepts/ConfigGroup__.js +2 -2
  51. package/out/concepts/ConfigGroup__.js.map +1 -1
  52. package/out/concepts/ConfigProperty__.js +2 -2
  53. package/out/concepts/ConfigProperty__.js.map +1 -1
  54. package/out/concepts/Configuration__.js +2 -2
  55. package/out/concepts/Configuration__.js.map +1 -1
  56. package/out/concepts/Constant__.d.ts +1 -0
  57. package/out/concepts/Constant__.js +14 -0
  58. package/out/concepts/Constant__.js.map +1 -1
  59. package/out/concepts/Destination__.d.ts +12 -0
  60. package/out/concepts/Destination__.js +94 -18
  61. package/out/concepts/Destination__.js.map +1 -1
  62. package/out/concepts/End__.js +9 -1
  63. package/out/concepts/End__.js.map +1 -1
  64. package/out/concepts/EntityProperty__.d.ts +11 -0
  65. package/out/concepts/EntityProperty__.js +73 -5
  66. package/out/concepts/EntityProperty__.js.map +1 -1
  67. package/out/concepts/Entity__.d.ts +4 -1
  68. package/out/concepts/Entity__.js +37 -15
  69. package/out/concepts/Entity__.js.map +1 -1
  70. package/out/concepts/Enum__.d.ts +4 -0
  71. package/out/concepts/Enum__.js +18 -10
  72. package/out/concepts/Enum__.js.map +1 -1
  73. package/out/concepts/Event__.js +2 -2
  74. package/out/concepts/Event__.js.map +1 -1
  75. package/out/concepts/ForEachStatement__.js +9 -13
  76. package/out/concepts/ForEachStatement__.js.map +1 -1
  77. package/out/concepts/Function__.js +9 -9
  78. package/out/concepts/Function__.js.map +1 -1
  79. package/out/concepts/Identifier__.d.ts +3 -0
  80. package/out/concepts/Identifier__.js +76 -29
  81. package/out/concepts/Identifier__.js.map +1 -1
  82. package/out/concepts/IfStatement__.js +4 -4
  83. package/out/concepts/IfStatement__.js.map +1 -1
  84. package/out/concepts/InterfaceParam__.d.ts +6 -4
  85. package/out/concepts/InterfaceParam__.js +52 -19
  86. package/out/concepts/InterfaceParam__.js.map +1 -1
  87. package/out/concepts/Interface__.d.ts +42 -30
  88. package/out/concepts/Interface__.js +131 -15
  89. package/out/concepts/Interface__.js.map +1 -1
  90. package/out/concepts/JSBlock__.d.ts +1 -0
  91. package/out/concepts/JSBlock__.js +3 -0
  92. package/out/concepts/JSBlock__.js.map +1 -1
  93. package/out/concepts/LogicItem__.d.ts +2 -1
  94. package/out/concepts/LogicItem__.js +14 -0
  95. package/out/concepts/LogicItem__.js.map +1 -1
  96. package/out/concepts/Logic__.d.ts +16 -1
  97. package/out/concepts/Logic__.js +176 -33
  98. package/out/concepts/Logic__.js.map +1 -1
  99. package/out/concepts/MemberExpression__.d.ts +2 -0
  100. package/out/concepts/MemberExpression__.js +49 -12
  101. package/out/concepts/MemberExpression__.js.map +1 -1
  102. package/out/concepts/Module__.d.ts +126 -120
  103. package/out/concepts/Module__.js +28 -18
  104. package/out/concepts/Module__.js.map +1 -1
  105. package/out/concepts/Namespace__.d.ts +5 -1
  106. package/out/concepts/Namespace__.js +36 -25
  107. package/out/concepts/Namespace__.js.map +1 -1
  108. package/out/concepts/NullLiteral__.d.ts +3 -0
  109. package/out/concepts/NullLiteral__.js +11 -1
  110. package/out/concepts/NullLiteral__.js.map +1 -1
  111. package/out/concepts/NumericLiteral__.d.ts +1 -1
  112. package/out/concepts/NumericLiteral__.js +17 -6
  113. package/out/concepts/NumericLiteral__.js.map +1 -1
  114. package/out/concepts/Param__.d.ts +7 -3
  115. package/out/concepts/Param__.js +57 -28
  116. package/out/concepts/Param__.js.map +1 -1
  117. package/out/concepts/ProcessComponent__.js +4 -4
  118. package/out/concepts/ProcessComponent__.js.map +1 -1
  119. package/out/concepts/ProcessElement__.d.ts +0 -4
  120. package/out/concepts/ProcessElement__.js +112 -49
  121. package/out/concepts/ProcessElement__.js.map +1 -1
  122. package/out/concepts/ProcessOutcome__.js +1 -1
  123. package/out/concepts/ProcessOutcome__.js.map +1 -1
  124. package/out/concepts/Process__.d.ts +7 -1
  125. package/out/concepts/Process__.js +77 -81
  126. package/out/concepts/Process__.js.map +1 -1
  127. package/out/concepts/QueryAggregateExpression__.js +1 -1
  128. package/out/concepts/QueryAggregateExpression__.js.map +1 -1
  129. package/out/concepts/QueryFromExpression__.js +2 -2
  130. package/out/concepts/QueryFromExpression__.js.map +1 -1
  131. package/out/concepts/QueryJoinExpression__.js +4 -4
  132. package/out/concepts/QueryJoinExpression__.js.map +1 -1
  133. package/out/concepts/QueryLimitExpression__.js +3 -3
  134. package/out/concepts/QueryLimitExpression__.js.map +1 -1
  135. package/out/concepts/QuerySelectExpression__.js +2 -2
  136. package/out/concepts/QuerySelectExpression__.js.map +1 -1
  137. package/out/concepts/Return__.d.ts +4 -1
  138. package/out/concepts/Return__.js +67 -21
  139. package/out/concepts/Return__.js.map +1 -1
  140. package/out/concepts/Role__.d.ts +4 -0
  141. package/out/concepts/Role__.js +13 -4
  142. package/out/concepts/Role__.js.map +1 -1
  143. package/out/concepts/SqlQueryComponent__.js +2 -2
  144. package/out/concepts/SqlQueryComponent__.js.map +1 -1
  145. package/out/concepts/StringLiteral__.d.ts +1 -1
  146. package/out/concepts/StringLiteral__.js +21 -31
  147. package/out/concepts/StringLiteral__.js.map +1 -1
  148. package/out/concepts/StructureProperty__.d.ts +5 -4
  149. package/out/concepts/StructureProperty__.js +55 -26
  150. package/out/concepts/StructureProperty__.js.map +1 -1
  151. package/out/concepts/Structure__.d.ts +44 -30
  152. package/out/concepts/Structure__.js +42 -10
  153. package/out/concepts/Structure__.js.map +1 -1
  154. package/out/concepts/SwitchCase__.js +4 -4
  155. package/out/concepts/SwitchCase__.js.map +1 -1
  156. package/out/concepts/SwitchStatement__.js +2 -2
  157. package/out/concepts/SwitchStatement__.js.map +1 -1
  158. package/out/concepts/TypeAnnotation__.d.ts +5 -5
  159. package/out/concepts/TypeAnnotation__.js +74 -20
  160. package/out/concepts/TypeAnnotation__.js.map +1 -1
  161. package/out/concepts/UnaryExpression__.js +10 -8
  162. package/out/concepts/UnaryExpression__.js.map +1 -1
  163. package/out/concepts/Unparsed__.js +1 -1
  164. package/out/concepts/Unparsed__.js.map +1 -1
  165. package/out/concepts/ValidationRule__.d.ts +1 -0
  166. package/out/concepts/ValidationRule__.js +48 -13
  167. package/out/concepts/ValidationRule__.js.map +1 -1
  168. package/out/concepts/Variable__.d.ts +10 -1
  169. package/out/concepts/Variable__.js +70 -18
  170. package/out/concepts/Variable__.js.map +1 -1
  171. package/out/concepts/ViewComponent__.js +10 -10
  172. package/out/concepts/ViewComponent__.js.map +1 -1
  173. package/out/concepts/ViewElement__.d.ts +17 -11
  174. package/out/concepts/ViewElement__.js +299 -201
  175. package/out/concepts/ViewElement__.js.map +1 -1
  176. package/out/concepts/View__.d.ts +12 -13
  177. package/out/concepts/View__.js +106 -103
  178. package/out/concepts/View__.js.map +1 -1
  179. package/out/concepts/WhileStatement__.js +3 -3
  180. package/out/concepts/WhileStatement__.js.map +1 -1
  181. package/out/concepts/basics/stdlib/index.js +4 -1
  182. package/out/concepts/basics/stdlib/index.js.map +1 -1
  183. package/out/concepts/basics/stdlib/{nasl.validate.d.ts → nasl.auth.d.ts} +0 -0
  184. package/out/concepts/basics/stdlib/nasl.auth.js +30 -0
  185. package/out/concepts/basics/stdlib/nasl.auth.js.map +1 -0
  186. package/out/concepts/basics/stdlib/nasl.browser copy.d.ts +3 -0
  187. package/out/concepts/basics/stdlib/nasl.browser copy.js +70 -0
  188. package/out/concepts/basics/stdlib/nasl.browser copy.js.map +1 -0
  189. package/out/concepts/basics/stdlib/nasl.browser.d.ts +3 -0
  190. package/out/concepts/basics/stdlib/nasl.browser.js +41 -0
  191. package/out/concepts/basics/stdlib/nasl.browser.js.map +1 -0
  192. package/out/concepts/basics/stdlib/nasl.configuration.d.ts +3 -0
  193. package/out/concepts/basics/stdlib/nasl.configuration.js +25 -0
  194. package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -0
  195. package/out/concepts/basics/stdlib/nasl.ui.js +20 -0
  196. package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
  197. package/out/concepts/basics/stdlib/nasl.util.js +149 -13
  198. package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
  199. package/out/concepts/basics/stdlib/nasl.validation.js +54 -20
  200. package/out/concepts/basics/stdlib/nasl.validation.js.map +1 -1
  201. package/out/concepts/basics/types/coreTypeList.js +11 -10
  202. package/out/concepts/basics/types/coreTypeList.js.map +1 -1
  203. package/out/concepts/index__.d.ts +1 -0
  204. package/out/concepts/index__.js +1 -0
  205. package/out/concepts/index__.js.map +1 -1
  206. package/out/config.d.ts +1 -2
  207. package/out/config.js +1 -2
  208. package/out/config.js.map +1 -1
  209. package/out/enums/KEYWORDS.d.ts +3 -0
  210. package/out/enums/KEYWORDS.js +1208 -0
  211. package/out/enums/KEYWORDS.js.map +1 -0
  212. package/out/enums/LEVEL_NAME_MAP.d.ts +26 -0
  213. package/out/enums/LEVEL_NAME_MAP.js +30 -0
  214. package/out/enums/LEVEL_NAME_MAP.js.map +1 -0
  215. package/out/eventBus.d.ts +3 -0
  216. package/out/eventBus.js +7 -0
  217. package/out/eventBus.js.map +1 -0
  218. package/out/generator/genBundleFiles.d.ts +7 -2
  219. package/out/generator/genBundleFiles.js +168 -27
  220. package/out/generator/genBundleFiles.js.map +1 -1
  221. package/out/generator/genMetaData.d.ts +20 -20
  222. package/out/generator/genMetaData.js +50 -15
  223. package/out/generator/genMetaData.js.map +1 -1
  224. package/out/index.d.ts +2 -0
  225. package/out/index.js +2 -0
  226. package/out/index.js.map +1 -1
  227. package/out/manager/diagnostic.d.ts +1 -1
  228. package/out/server/createUiTs.d.ts +1 -0
  229. package/out/server/createUiTs.js +49 -5
  230. package/out/server/createUiTs.js.map +1 -1
  231. package/out/server/entity2LogicNamespace.js +38 -23
  232. package/out/server/entity2LogicNamespace.js.map +1 -1
  233. package/out/server/getExtensionModules.js +2 -0
  234. package/out/server/getExtensionModules.js.map +1 -1
  235. package/out/server/getFunctions.d.ts +1 -0
  236. package/out/server/getFunctions.js +7 -1
  237. package/out/server/getFunctions.js.map +1 -1
  238. package/out/server/getLogics.js +63 -18
  239. package/out/server/getLogics.js.map +1 -1
  240. package/out/server/getMemberIdentifier.d.ts +16 -1
  241. package/out/server/getMemberIdentifier.js +279 -36
  242. package/out/server/getMemberIdentifier.js.map +1 -1
  243. package/out/server/getProcesses.d.ts +6 -1
  244. package/out/server/getProcesses.js +243 -1
  245. package/out/server/getProcesses.js.map +1 -1
  246. package/out/server/getScope.d.ts +11 -0
  247. package/out/server/getScope.js +45 -0
  248. package/out/server/getScope.js.map +1 -0
  249. package/out/server/index.js +4 -0
  250. package/out/server/index.js.map +1 -1
  251. package/out/server/naslServer.d.ts +30 -53
  252. package/out/server/naslServer.js +682 -363
  253. package/out/server/naslServer.js.map +1 -1
  254. package/out/server/process2LogicNamespace.d.ts +10 -0
  255. package/out/server/process2LogicNamespace.js +29 -1
  256. package/out/server/process2LogicNamespace.js.map +1 -1
  257. package/out/server/translator.d.ts +22 -3
  258. package/out/server/translator.js +367 -123
  259. package/out/server/translator.js.map +1 -1
  260. package/out/service/creator/add.configs.d.ts +1 -0
  261. package/out/service/creator/add.configs.js +68 -0
  262. package/out/service/creator/add.configs.js.map +1 -0
  263. package/out/service/creator/errHandles.d.ts +18 -0
  264. package/out/service/creator/errHandles.js +60 -0
  265. package/out/service/creator/errHandles.js.map +1 -0
  266. package/out/service/creator/index.d.ts +1 -0
  267. package/out/service/creator/index.js +72 -0
  268. package/out/service/creator/index.js.map +1 -0
  269. package/out/service/storage/api.d.ts +18 -0
  270. package/out/service/storage/api.js +17 -0
  271. package/out/service/storage/api.js.map +1 -0
  272. package/out/service/storage/init.js +200 -37
  273. package/out/service/storage/init.js.map +1 -1
  274. package/out/service/storage/service.d.ts +2 -0
  275. package/out/service/storage/service.js +10 -0
  276. package/out/service/storage/service.js.map +1 -0
  277. package/out/service/storage/storagePoint.d.ts +1 -14
  278. package/out/service/storage/storagePoint.js +16 -16
  279. package/out/service/storage/storagePoint.js.map +1 -1
  280. package/out/templator/genCreateBlock.js +6 -6
  281. package/out/templator/genCreateBlock.js.map +1 -1
  282. package/out/templator/genCurdEditMultipleKeyBlock.js +13 -17
  283. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  284. package/out/templator/genCurdMultipleKeyBlock.js +11 -11
  285. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  286. package/out/templator/genEditTableBlock.js +5 -5
  287. package/out/templator/genEditTableBlock.js.map +1 -1
  288. package/out/templator/genEnumSelectBlock.js +2 -2
  289. package/out/templator/genEnumSelectBlock.js.map +1 -1
  290. package/out/templator/genGetBlock.js +5 -3
  291. package/out/templator/genGetBlock.js.map +1 -1
  292. package/out/templator/genGridViewBlock.d.ts +3 -1
  293. package/out/templator/genGridViewBlock.js +61 -6
  294. package/out/templator/genGridViewBlock.js.map +1 -1
  295. package/out/templator/genQueryComponent.d.ts +2 -0
  296. package/out/templator/genQueryComponent.js +27 -14
  297. package/out/templator/genQueryComponent.js.map +1 -1
  298. package/out/templator/genTableBlock.d.ts +1 -1
  299. package/out/templator/genTableBlock.js +4 -5
  300. package/out/templator/genTableBlock.js.map +1 -1
  301. package/out/templator/genUpdateBlock.js +9 -10
  302. package/out/templator/genUpdateBlock.js.map +1 -1
  303. package/out/templator/utils.d.ts +13 -4
  304. package/out/templator/utils.js +8 -4
  305. package/out/templator/utils.js.map +1 -1
  306. package/out/test/fixtures/env.js +0 -1
  307. package/out/test/fixtures/env.js.map +1 -1
  308. package/out/test/units/page/Element.spec.js +3 -3
  309. package/out/test/units/page/Element.spec.js.map +1 -1
  310. package/out/test/units/temp/temp.spec.js +1 -1
  311. package/out/test/units/temp/temp.spec.js.map +1 -1
  312. package/out/utils/index.d.ts +6 -0
  313. package/out/utils/index.js +20 -1
  314. package/out/utils/index.js.map +1 -1
  315. package/package.json +2 -1
  316. package/src/automate/engine/index.js +118 -38
  317. package/src/automate/engine/utils.js +49 -19
  318. package/src/common/BaseNode.ts +229 -81
  319. package/src/concepts/App__.ts +77 -37
  320. package/src/concepts/Argument__.ts +23 -3
  321. package/src/concepts/Assignee__.ts +437 -0
  322. package/src/concepts/Assignment__.ts +4 -1
  323. package/src/concepts/BinaryExpression__.ts +9 -7
  324. package/src/concepts/BindAttribute__.ts +68 -8
  325. package/src/concepts/BindDirective__.ts +21 -2
  326. package/src/concepts/BindEvent__.ts +67 -35
  327. package/src/concepts/BooleanLiteral__.ts +8 -0
  328. package/src/concepts/CallFunction__.ts +42 -25
  329. package/src/concepts/CallInterface__.ts +236 -26
  330. package/src/concepts/CallLogic__.ts +114 -86
  331. package/src/concepts/CallQueryComponent__.ts +35 -20
  332. package/src/concepts/Comment__.ts +6 -2
  333. package/src/concepts/CompletionProperty__.ts +5 -1
  334. package/src/concepts/ConfigGroup__.ts +2 -2
  335. package/src/concepts/ConfigProperty__.ts +2 -2
  336. package/src/concepts/Configuration__.ts +2 -2
  337. package/src/concepts/Constant__.ts +12 -0
  338. package/src/concepts/Destination__.ts +92 -20
  339. package/src/concepts/End__.ts +8 -1
  340. package/src/concepts/EntityProperty__.ts +69 -5
  341. package/src/concepts/Entity__.ts +40 -23
  342. package/src/concepts/Enum__.ts +16 -11
  343. package/src/concepts/Event__.ts +2 -2
  344. package/src/concepts/ForEachStatement__.ts +14 -19
  345. package/src/concepts/Function__.ts +9 -9
  346. package/src/concepts/Identifier__.ts +82 -33
  347. package/src/concepts/IfStatement__.ts +4 -4
  348. package/src/concepts/InterfaceParam__.ts +51 -21
  349. package/src/concepts/Interface__.ts +166 -46
  350. package/src/concepts/JSBlock__.ts +4 -0
  351. package/src/concepts/LogicItem__.ts +16 -1
  352. package/src/concepts/Logic__.ts +183 -36
  353. package/src/concepts/MemberExpression__.ts +57 -13
  354. package/src/concepts/Module__.ts +176 -140
  355. package/src/concepts/Namespace__.ts +37 -25
  356. package/src/concepts/NullLiteral__.ts +8 -1
  357. package/src/concepts/NumericLiteral__.ts +17 -6
  358. package/src/concepts/Param__.ts +58 -30
  359. package/src/concepts/ProcessComponent__.ts +4 -4
  360. package/src/concepts/ProcessElement__.ts +138 -39
  361. package/src/concepts/ProcessOutcome__.ts +1 -1
  362. package/src/concepts/Process__.ts +81 -94
  363. package/src/concepts/QueryAggregateExpression__.ts +1 -1
  364. package/src/concepts/QueryFromExpression__.ts +2 -2
  365. package/src/concepts/QueryJoinExpression__.ts +4 -4
  366. package/src/concepts/QueryLimitExpression__.ts +3 -12
  367. package/src/concepts/QuerySelectExpression__.ts +2 -2
  368. package/src/concepts/Return__.ts +62 -23
  369. package/src/concepts/Role__.ts +11 -4
  370. package/src/concepts/SqlQueryComponent__.ts +2 -2
  371. package/src/concepts/StringLiteral__.ts +20 -31
  372. package/src/concepts/StructureProperty__.ts +50 -25
  373. package/src/concepts/Structure__.ts +75 -41
  374. package/src/concepts/SwitchCase__.ts +4 -4
  375. package/src/concepts/SwitchStatement__.ts +2 -2
  376. package/src/concepts/TypeAnnotation__.ts +71 -18
  377. package/src/concepts/UnaryExpression__.ts +10 -8
  378. package/src/concepts/Unparsed__.ts +1 -1
  379. package/src/concepts/ValidationRule__.ts +44 -14
  380. package/src/concepts/Variable__.ts +69 -19
  381. package/src/concepts/ViewComponent__.ts +10 -10
  382. package/src/concepts/ViewElement__.ts +297 -199
  383. package/src/concepts/View__.ts +114 -107
  384. package/src/concepts/WhileStatement__.ts +4 -4
  385. package/src/concepts/basics/stdlib/index.ts +4 -2
  386. package/src/concepts/basics/stdlib/nasl.auth.ts +26 -0
  387. package/src/concepts/basics/stdlib/nasl.browser.ts +37 -0
  388. package/src/concepts/basics/stdlib/nasl.configuration.ts +21 -0
  389. package/src/concepts/basics/stdlib/nasl.ui.ts +20 -1
  390. package/src/concepts/basics/stdlib/nasl.util.ts +151 -13
  391. package/src/concepts/basics/stdlib/nasl.validation.ts +45 -11
  392. package/src/concepts/basics/types/coreTypeList.ts +11 -10
  393. package/src/concepts/index__.ts +1 -0
  394. package/src/config.ts +1 -2
  395. package/src/enums/KEYWORDS.ts +1206 -0
  396. package/src/{terms → enums}/LEVEL_NAME_MAP.ts +0 -0
  397. package/src/eventBus.ts +5 -0
  398. package/src/generator/genBundleFiles.ts +192 -40
  399. package/src/generator/genMetaData.ts +72 -21
  400. package/src/index.ts +2 -0
  401. package/src/manager/diagnostic.ts +1 -1
  402. package/src/server/createUiTs.ts +50 -8
  403. package/src/server/entity2LogicNamespace.ts +41 -25
  404. package/src/server/getExtensionModules.ts +2 -0
  405. package/src/server/getFunctions.ts +6 -0
  406. package/src/server/getLogics.ts +66 -19
  407. package/src/server/getMemberIdentifier.ts +276 -39
  408. package/src/server/getProcesses.ts +248 -4
  409. package/src/server/getScope.ts +50 -0
  410. package/src/server/index.ts +12 -1
  411. package/src/server/naslServer.ts +689 -389
  412. package/src/server/process2LogicNamespace.ts +30 -2
  413. package/src/server/translator.ts +423 -128
  414. package/src/service/config/index.js +1 -1
  415. package/src/service/creator/errHandles.js +5 -2
  416. package/src/service/creator/index.js +0 -6
  417. package/src/service/storage/api.js +14 -0
  418. package/src/service/storage/init.ts +204 -47
  419. package/src/service/storage/service.ts +6 -0
  420. package/src/service/storage/storagePoint.ts +16 -16
  421. package/src/templator/genCreateBlock.ts +6 -6
  422. package/src/templator/genCurdEditMultipleKeyBlock.ts +29 -30
  423. package/src/templator/genCurdMultipleKeyBlock.ts +11 -11
  424. package/src/templator/genEditTableBlock.ts +5 -5
  425. package/src/templator/genEnumSelectBlock.ts +2 -2
  426. package/src/templator/genGetBlock.ts +6 -8
  427. package/src/templator/genGridViewBlock.ts +59 -9
  428. package/src/templator/genQueryComponent.ts +39 -28
  429. package/src/templator/genTableBlock.ts +5 -9
  430. package/src/templator/genUpdateBlock.ts +9 -11
  431. package/src/templator/utils.ts +9 -6
  432. package/src/test/fixtures/env.ts +0 -2
  433. package/src/test/units/page/Element.spec.ts +3 -3
  434. package/src/test/units/temp/temp.spec.ts +1 -1
  435. package/src/utils/index.ts +19 -0
  436. package/out/concepts/basics/stdlib/nasl.validate.js +0 -527
  437. package/out/concepts/basics/stdlib/nasl.validate.js.map +0 -1
  438. package/out/data/Module.d.ts +0 -34
  439. package/out/data/Module.js +0 -53
  440. package/out/data/Module.js.map +0 -1
  441. package/src/automate/engine/index.d.ts +0 -3
@@ -46,38 +46,62 @@ export interface ElementToVueOptions {
46
46
  getExtraParts?: (element?: ViewElement) => Array<string>;
47
47
  attrFormat?: (attr: BindAttribute | BindEvent | BindDirective, element?: ViewElement, defaultResult?: string) => string | false;
48
48
  finalCode?: boolean;
49
+ scopeList?: string[];
49
50
  }
50
51
 
51
- function transAstNodeToNaslNode(astNode: any): any {
52
+ function transAstNodeToNaslNode(astNode: any, namespace?: string): any {
52
53
  let node = null;
53
54
  if (astNode.type === 'CallExpression' && astNode.callee.object.name === '$utils') {
54
55
  const calleeName = astNode.callee.property.name || astNode.callee.property.value;
55
- node = {
56
- concept: 'CallFunction',
57
- name: '',
58
- label: '调用逻辑',
59
- kind: 'Expression',
60
- calleeNamespace: 'nasl.util',
61
- calleeName,
62
- arguments: astNode.arguments.map((argument: any) => ({
63
- concept: 'Argument',
56
+
57
+ if (calleeName === 'EnumList') {
58
+ const args = astNode.arguments;
59
+ let name = '';
60
+ let namespace = 'app.enums';
61
+ if (Array.isArray(args)) {
62
+ name = args[0]?.value;
63
+ namespace = args[1]?.value ? args[1]?.value : 'app.enums';
64
+ }
65
+ node = {
66
+ concept: 'Identifier',
67
+ name,
68
+ namespace,
69
+ kind: 'Expression',
70
+ };
71
+ } else {
72
+ node = {
73
+ concept: 'CallFunction',
64
74
  name: '',
65
- kind: 'Statement',
66
- keyword: '',
67
- expression: transAstNodeToNaslNode(Object.assign({}, argument)),
68
- })),
69
- };
75
+ label: '调用内置函数',
76
+ kind: 'Expression',
77
+ calleeNamespace: 'nasl.util',
78
+ calleeName,
79
+ arguments: astNode.arguments.map((argument: any) => ({
80
+ concept: 'Argument',
81
+ name: '',
82
+ kind: 'Statement',
83
+ keyword: '',
84
+ expression: transAstNodeToNaslNode(Object.assign({}, argument)),
85
+ })),
86
+ };
87
+ }
70
88
  } else if (astNode.type === 'MemberExpression') {
71
- node = {
72
- concept: 'MemberExpression',
73
- name: '',
74
- kind: 'Expression',
75
- object: transAstNodeToNaslNode(astNode.object),
76
- property: transAstNodeToNaslNode(astNode.property),
77
- };
89
+ if (astNode.object?.name === '$global') {
90
+ // 目前只有权限相关的
91
+ node = transAstNodeToNaslNode(astNode.property, 'nasl.auth');
92
+ } else {
93
+ node = {
94
+ concept: 'MemberExpression',
95
+ name: '',
96
+ kind: 'Expression',
97
+ object: transAstNodeToNaslNode(astNode.object),
98
+ property: transAstNodeToNaslNode(astNode.property),
99
+ };
100
+ }
78
101
  } else if (astNode.type === 'Identifier') {
79
102
  node = {
80
103
  concept: 'Identifier',
104
+ namespace: namespace || '',
81
105
  name: astNode.name,
82
106
  kind: 'Expression',
83
107
  };
@@ -94,6 +118,17 @@ function transAstNodeToNaslNode(astNode: any): any {
94
118
  name: '',
95
119
  value: astNode.value,
96
120
  };
121
+ } else if (astNode.type === 'UnaryExpression') {
122
+ node = {
123
+ concept: 'UnaryExpression',
124
+ kind: 'Expression',
125
+ name: '',
126
+ operator: astNode.operator,
127
+ argument: transAstNodeToNaslNode(astNode.argument),
128
+ };
129
+ } else {
130
+ node = astNode;
131
+ node.concept = astNode.type;
97
132
  }
98
133
  return node;
99
134
  }
@@ -309,7 +344,7 @@ export class ViewElement extends BaseNode {
309
344
  name: options,
310
345
  }, this, 'bindAttrs');
311
346
  } else if (options instanceof BindAttribute) {
312
- options.delete(); // 同一实例不支持多处存在
347
+ options.ensureDelete(); // 同一实例不支持多处存在
313
348
  bindAttribute = options;
314
349
  Object.assign(bindAttribute, relationOptions);
315
350
  } else {
@@ -397,7 +432,7 @@ export class ViewElement extends BaseNode {
397
432
 
398
433
  addBindAttribute(options?: string | Partial<BindAttribute> | BindAttribute) {
399
434
  const node = this._addBindAttribute(options as any);
400
- const index = this.bindAttrs.length;
435
+ const index = this.bindAttrs.indexOf(node);
401
436
  node.create({
402
437
  index,
403
438
  parentNode: this,
@@ -451,7 +486,7 @@ export class ViewElement extends BaseNode {
451
486
  name: options,
452
487
  }, this, 'bindEvents');
453
488
  } else if (options instanceof BindEvent) {
454
- options.delete(); // 同一实例不支持多处存在
489
+ options.ensureDelete(); // 同一实例不支持多处存在
455
490
  bindEvent = options;
456
491
  Object.assign(bindEvent, relationOptions);
457
492
  } else {
@@ -539,7 +574,7 @@ export class ViewElement extends BaseNode {
539
574
 
540
575
  addBindEvent(options?: string | Partial<BindEvent> | BindEvent) {
541
576
  const node = this._addBindEvent(options as any);
542
- const index = this.bindEvents.length;
577
+ const index = this.bindEvents.indexOf(node);
543
578
  node.create({
544
579
  index,
545
580
  parentNode: this,
@@ -593,7 +628,7 @@ export class ViewElement extends BaseNode {
593
628
  name: options,
594
629
  }, this, 'bindDirectives');
595
630
  } else if (options instanceof BindDirective) {
596
- options.delete(); // 同一实例不支持多处存在
631
+ options.ensureDelete(); // 同一实例不支持多处存在
597
632
  bindDirective = options;
598
633
  Object.assign(bindDirective, relationOptions);
599
634
  } else {
@@ -681,7 +716,7 @@ export class ViewElement extends BaseNode {
681
716
 
682
717
  addBindDirective(options?: string | Partial<BindDirective> | BindDirective) {
683
718
  const node = this._addBindDirective(options as any);
684
- const index = this.bindDirectives.length;
719
+ const index = this.bindDirectives.indexOf(node);
685
720
  node.create({
686
721
  index,
687
722
  parentNode: this,
@@ -731,7 +766,7 @@ export class ViewElement extends BaseNode {
731
766
  name: options,
732
767
  }, this, 'children');
733
768
  } else if (options instanceof ViewElement) {
734
- options.delete(); // 同一实例不支持多处存在
769
+ options.ensureDelete(); // 同一实例不支持多处存在
735
770
  viewElement = options;
736
771
  Object.assign(viewElement, relationOptions);
737
772
  } else {
@@ -819,7 +854,7 @@ export class ViewElement extends BaseNode {
819
854
 
820
855
  addViewElement(options?: string | Partial<ViewElement> | ViewElement) {
821
856
  const node = this._addViewElement(options as any);
822
- const index = this.children.length;
857
+ const index = this.children.indexOf(node);
823
858
  node.create({
824
859
  index,
825
860
  parentNode: this,
@@ -1033,6 +1068,21 @@ export class ViewElement extends BaseNode {
1033
1068
  // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
1034
1069
  // 自动生成的代码已结束。下面可以手动编写。
1035
1070
  //================================================================================
1071
+
1072
+ /* 主页面有没有权限 */
1073
+ get parentAuth() {
1074
+ const _nameSpace = this.view.getNamespace();
1075
+ const mainViewName = _nameSpace.split('.')[2];
1076
+ return this.view.parentNode.concept === 'App' ? this.view.auth : this.app.views.find((item) => item.name === mainViewName)?.auth;
1077
+ }
1078
+
1079
+ /**
1080
+ * 权限领域的资源路径
1081
+ */
1082
+ get authPath() {
1083
+ return `${this.view.path}/${this.name}`;
1084
+ }
1085
+
1036
1086
  getViewElementUniqueName(name = 'viewElement1') {
1037
1087
  return this.view?.getViewElementUniqueName(name);
1038
1088
  }
@@ -1064,48 +1114,25 @@ export class ViewElement extends BaseNode {
1064
1114
  return this.bindAttrs.find((bindAttr) => bindAttr.name === name);
1065
1115
  }
1066
1116
 
1067
- /**
1068
- * 角色
1069
- */
1070
- @property()
1071
- roles: Array<{
1072
- namespace: string;
1073
- name: string;
1074
- }> = [];
1075
-
1076
- toggleRole(role: Role) {
1077
- const index = this.roles.findIndex((roleItem) => roleItem.name === role.name);
1078
- const roles = [...this.roles];
1079
- if (index !== -1) {
1080
- roles.splice(index, 1);
1081
- } else {
1082
- roles.push({
1083
- namespace: role.getNamespace(),
1084
- name: role.name,
1085
- });
1086
- }
1087
- const object = {
1088
- roles,
1089
- };
1090
- this.update({
1091
- ...object,
1092
- });
1093
- }
1094
1117
  toHump(name: string): string {
1095
1118
  return name.replace(/\-(\w)/g, (all, letter) => letter.toUpperCase());
1096
1119
  }
1097
1120
 
1098
1121
  haveScope(node: ViewElement): boolean {
1099
- const dataSourcePcList = ['uGallery', 'uTableView', 'uListView', 'uGridView', 'uCalendarView', 'uListComponents', 'uSelect'];
1100
- const dataSourceH5List = ['vanListView', 'vanForComponents', 'lcapEchartsLine', 'lcapEchartsBar', 'lcapEchartsPie'];
1122
+ // uGallery 没有子集不需要scope
1123
+ const dataSourcePcList = ['uTableView', 'uListView', 'uGridView', 'uCalendarView', 'uListComponents', 'uSelect'];
1124
+ const dataSourceH5List = ['vanRadioGroup', 'vanCheckboxGroup', 'vanListView', 'vanGridView', 'vanForComponents', 'lcapEchartsLine', 'lcapEchartsBar', 'lcapEchartsPie'];
1101
1125
  const dataSourceList = [...dataSourcePcList, ...dataSourceH5List];
1102
1126
  return dataSourceList.includes(node.toHump(node.tag));
1103
1127
  }
1104
1128
  toEmbeddedTSDefinition(state?: TranslatorState): string {
1129
+ // 登录组件不翻译
1130
+ if (this.toHump(this.tag) === 'lcapLogin' || this.staticClass === 'login-form')
1131
+ return '';
1105
1132
  let code = '';
1106
1133
  // formItem的单独处理
1107
1134
  if (this.tag === 'u-form-item') {
1108
- code = indent(state.tabSize) + `${this.name}: <nasl.ui.${this.toHump(this.tag)}`;
1135
+ code = indent(state.tabSize) + `${this.name}: nasl.ui.${this.toHump(this.tag)}`;
1109
1136
  if (Array.isArray(this.children) && this.children.length) {
1110
1137
  const tag = this.children[0].tag;
1111
1138
  if (tag === 'u-input') {
@@ -1116,7 +1143,7 @@ export class ViewElement extends BaseNode {
1116
1143
  code += '<nasl.core.Any>';
1117
1144
  }
1118
1145
  }
1119
- code += '> null,\n';
1146
+ code += ';\n';
1120
1147
  }
1121
1148
  if (this.haveScope(this)) {
1122
1149
  let genericType = 'any';
@@ -1134,9 +1161,13 @@ export class ViewElement extends BaseNode {
1134
1161
  let parentNode = this.parentNode;
1135
1162
  let haveScopeFlag = false;
1136
1163
  while (!haveScopeFlag && parentNode.concept !== 'View') {
1137
- if (this.haveScope((parentNode) as ViewElement)) {
1164
+ if (this.haveScope(parentNode as ViewElement)) {
1138
1165
  // type d = nasl.ui.GetItemTypeFromDataSource<typeof listStructure>['tableRelation']
1139
- const tsArr = expressionTs.split('.');
1166
+ const tsArr = expressionTs.replace('scope.item.', '').split('.');
1167
+ let itemStr = '';
1168
+ tsArr.forEach((item) => {
1169
+ itemStr += `['${item}']`;
1170
+ });
1140
1171
  const parentbindAttrs = (parentNode as ViewElement).bindAttrs;
1141
1172
  if (parentbindAttrs && parentbindAttrs.length) {
1142
1173
  const parentAttr = parentbindAttrs.find((item) => item.name === 'data-source');
@@ -1144,7 +1175,7 @@ export class ViewElement extends BaseNode {
1144
1175
  let parentExpressionTs = parentAttr.expression.toEmbeddedTS(shiftState(state, code));
1145
1176
  parentExpressionTs = parentExpressionTs.replaceAll(' ', '');
1146
1177
  // 如果是逻辑就推导出逻辑类型
1147
- genericType = `nasl.ui.GetItemTypeFromDataSource<nasl.ui.GetItemTypeFromDataSource<typeof ${parentExpressionTs}>['${tsArr[tsArr.length - 1]}']>`;
1178
+ genericType = `nasl.ui.GetItemTypeFromDataSource<nasl.ui.GetItemTypeFromDataSource<typeof ${parentExpressionTs}>${itemStr}>`;
1148
1179
  }
1149
1180
  }
1150
1181
  haveScopeFlag = true;
@@ -1154,9 +1185,9 @@ export class ViewElement extends BaseNode {
1154
1185
  }
1155
1186
  }
1156
1187
  }
1157
- code += indent(state.tabSize) + `${this.name}: <nasl.ui.${this.toHump(this.tag)}<${genericType}>> null,\n`;
1188
+ code += indent(state.tabSize) + `${this.name}: nasl.ui.${this.toHump(this.tag)}<${genericType}>;\n`;
1158
1189
  } else {
1159
- code = indent(state.tabSize) + `${this.name}: <nasl.ui.${this.toHump(this.tag)}<any>> null,\n`;
1190
+ code = indent(state.tabSize) + `${this.name}: nasl.ui.${this.toHump(this.tag)}<any>;\n`;
1160
1191
  }
1161
1192
  if (Array.isArray(this.children)) {
1162
1193
  this.children.forEach((element) => {
@@ -1167,13 +1198,15 @@ export class ViewElement extends BaseNode {
1167
1198
  }
1168
1199
  @withSourceMap()
1169
1200
  toEmbeddedTS(state?: TranslatorState, parentLevel?: number): string {
1201
+ if (this.toHump(this.tag) === 'lcapLogin' || this.staticClass === 'login-form')
1202
+ return '';
1170
1203
  function chineseTsName(name: string) {
1171
1204
  let tsName = name;
1205
+ // 匹配所有特殊字符都转为_
1206
+ tsName = tsName.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '_');
1172
1207
  if (/^\d/.test(tsName)) {
1173
1208
  tsName = '$' + tsName;
1174
1209
  }
1175
- // 匹配所有特殊字符都转为_
1176
- tsName = tsName.replace(/\W/g, '_');
1177
1210
  return tsName;
1178
1211
  }
1179
1212
  let code = `__elements.${this.name} = new nasl.ui.${this.toHump(this.tag)}({\n`;
@@ -1183,7 +1216,7 @@ export class ViewElement extends BaseNode {
1183
1216
  hasAuth = !!this.bindDirectives.filter((directive) => directive.name === 'auth').length;
1184
1217
  }
1185
1218
  // 角色
1186
- if (hasAuth && Array.isArray(this.bindRoles)) {
1219
+ if (Array.isArray(this.bindRoles) && this.bindRoles.length) {
1187
1220
  code += indent(state.tabSize + 2);
1188
1221
  code += 'roles = [\n';
1189
1222
  this.bindRoles.forEach((role) => {
@@ -1221,25 +1254,40 @@ export class ViewElement extends BaseNode {
1221
1254
  if (Array.isArray(this.children)) {
1222
1255
  code += indent(state.tabSize + 1);
1223
1256
 
1224
- let levelIndex = parentLevel || 0;
1225
- if (this.haveScope(this)) {
1226
- code += `slotDefault: (scope${levelIndex || ''})=> [\n`;
1227
- levelIndex++;
1228
- } else {
1229
- code += `slotDefault: ()=> [\n`;
1230
- }
1231
1257
  if (Array.isArray(this.bindAttrs)) {
1232
- code += indent(state.tabSize + 2) + `() => [\n`;
1258
+ code += `bindAttr: () => [\n`;
1233
1259
  this.bindAttrs.forEach((attr) => {
1234
1260
  if (attr.expression) {
1235
1261
  code
1236
1262
  += attr.expression.toEmbeddedTS(shiftState(state, code, {
1237
- tabSize: state.tabSize + 3,
1263
+ tabSize: state.tabSize + 2,
1264
+ })) + ',\n';
1265
+ }
1266
+ if (Array.isArray(attr.rules) && attr.rules.length) {
1267
+ attr.rules.forEach((item) => {
1268
+ code += item.toEmbeddedTS(shiftState(state, code)) + ',\n';
1269
+ });
1270
+ }
1271
+ });
1272
+ this.bindDirectives.forEach((directive) => {
1273
+ if (directive.expression) {
1274
+ code
1275
+ += directive.expression.toEmbeddedTS(shiftState(state, code, {
1276
+ tabSize: state.tabSize + 2,
1238
1277
  })) + ',\n';
1239
1278
  }
1240
1279
  });
1241
1280
  code += indent(state.tabSize + 2) + '],\n';
1242
1281
  }
1282
+
1283
+ let levelIndex = parentLevel || 0;
1284
+ if (this.haveScope(this)) {
1285
+ code += `slotDefault: (scope)=> [\n`;
1286
+ levelIndex++;
1287
+ } else {
1288
+ code += `slotDefault: ()=> [\n`;
1289
+ }
1290
+
1243
1291
  this.children.forEach((element) => {
1244
1292
  code += element.toEmbeddedTS(shiftState(state, code, {
1245
1293
  tabSize: state.tabSize + 2,
@@ -1255,12 +1303,9 @@ export class ViewElement extends BaseNode {
1255
1303
  return code;
1256
1304
  }
1257
1305
 
1258
- _duplicate(options?: ElementToVueOptions) {
1259
- const code = this.toVue(options);
1260
- const element = ViewElement.fromHTML(code, {
1261
- view: this.view,
1262
- });
1263
- element.deepRenameElements();
1306
+ _duplicate() {
1307
+ const element = ViewElement.from(this.toTemplateJSON());
1308
+ element.deepRenameElements(this);
1264
1309
  return element;
1265
1310
  }
1266
1311
 
@@ -1272,10 +1317,10 @@ export class ViewElement extends BaseNode {
1272
1317
  }
1273
1318
 
1274
1319
  // 递归生成组件名
1275
- public deepRenameElements(): void {
1320
+ public deepRenameElements(node: ViewElement): void {
1276
1321
  return this.traverseChildren((ele: ViewElement) => {
1277
1322
  const tagName = ele.tag.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
1278
- ele.name = this.getViewElementUniqueName(`${tagName}1`);
1323
+ ele.name = node.getViewElementUniqueName(`${tagName}1`);
1279
1324
  });
1280
1325
  }
1281
1326
 
@@ -1315,7 +1360,6 @@ export class ViewElement extends BaseNode {
1315
1360
  concept: 'ValidationRule',
1316
1361
  name: '',
1317
1362
  label: '验证规则',
1318
- folded: true,
1319
1363
  kind: 'Expression',
1320
1364
  calleeNamespace: 'nasl.validation',
1321
1365
  arguments: args,
@@ -1343,13 +1387,13 @@ export class ViewElement extends BaseNode {
1343
1387
  });
1344
1388
  astNode.children = [];
1345
1389
  }
1346
-
1347
1390
  // 将 scopedSlots 合并到 children 中
1348
1391
  if (astNode.scopedSlots) {
1349
1392
  astNode.children = astNode.children || [];
1350
1393
  Object.keys(astNode.scopedSlots).forEach((key) => {
1351
- if (!astNode.children.find((child) => key === (child as compiler.ASTElement).slotTarget))
1394
+ if (!astNode.children.find((child) => key === (child as compiler.ASTElement).slotTarget)) {
1352
1395
  astNode.children.unshift(astNode.scopedSlots[key]);
1396
+ }
1353
1397
  });
1354
1398
  delete astNode.scopedSlots;
1355
1399
  }
@@ -1370,6 +1414,12 @@ export class ViewElement extends BaseNode {
1370
1414
  }
1371
1415
  }
1372
1416
  const tagName = astNode.tag.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
1417
+ let newContext: any = {};
1418
+ if (context) {
1419
+ newContext = {
1420
+ ...context,
1421
+ };
1422
+ }
1373
1423
  element = new ViewElement({
1374
1424
  tag: astNode.tag,
1375
1425
  name: astNode.attrsMap.ref || view.getViewElementUniqueName(`${tagName}1`),
@@ -1377,45 +1427,43 @@ export class ViewElement extends BaseNode {
1377
1427
  staticStyle: astNode.attrsMap.style,
1378
1428
  slotTarget: astNode.slotTarget && json5.parse(astNode.slotTarget),
1379
1429
  slotScope: astNode.slotScope === '_empty_' ? '' : astNode.slotScope,
1380
- children: astNode.children.map((item) => this._fromASTNode(item as compiler.ASTElement, context)) as unknown as Array<ViewElement>,
1430
+ children: astNode.children.map((item) => this._fromASTNode(item as compiler.ASTElement, newContext)) as unknown as Array<ViewElement>,
1381
1431
  });
1382
-
1383
- astNode.attrs
1384
- && astNode.attrs.forEach((oldAttr) => {
1385
- let attr: BindAttribute;
1386
- if (oldAttr.value === '""' && (oldAttr as any).end - (oldAttr as any).start === oldAttr.name.length) {
1387
- attr = BindAttribute.from({
1388
- type: 'static',
1432
+ astNode?.attrs?.forEach((oldAttr) => {
1433
+ let attr: BindAttribute;
1434
+ if (oldAttr.value === '""' && (oldAttr as any).end - (oldAttr as any).start === oldAttr.name.length) {
1435
+ attr = new BindAttribute({
1436
+ type: 'static',
1437
+ name: oldAttr.name,
1438
+ value: 'true',
1439
+ });
1440
+ } else {
1441
+ try {
1442
+ const tmp = json5.parse(oldAttr.value);
1443
+ const source: any = {
1444
+ type: typeof tmp === 'string' ? 'string' : 'static',
1389
1445
  name: oldAttr.name,
1390
- value: 'true',
1391
- }, element);
1392
- } else {
1393
- try {
1394
- const tmp = json5.parse(oldAttr.value);
1395
- const source: any = {
1396
- type: typeof tmp === 'string' ? 'string' : 'static',
1397
- name: oldAttr.name,
1398
- value: typeof tmp === 'string' ? tmp : oldAttr.value,
1399
- };
1400
- if (oldAttr.name === 'rules') {
1401
- source.rules = tmp?.split('|').map((ruleStr: string) => this._parseValidationRule(ruleStr.trim()));
1402
- }
1403
- attr = BindAttribute.from(source, element);
1404
- } catch (e) {
1405
- const expression = <any> this._parseExpression(oldAttr.value);
1406
- attr = BindAttribute.from({
1407
- type: 'dynamic',
1408
- name: oldAttr.name,
1409
- value: expression ? '' : oldAttr.value,
1410
- expression,
1411
- }, element);
1412
- if (astNode.attrsMap[`:${attr.name}.sync`]) {
1413
- attr.sync = true;
1414
- }
1446
+ value: typeof tmp === 'string' ? tmp : oldAttr.value,
1447
+ };
1448
+ if (oldAttr.name === 'rules') {
1449
+ source.rules = tmp?.split('|').map((ruleStr: string) => this._parseValidationRule(ruleStr.trim()));
1450
+ }
1451
+ attr = new BindAttribute(source);
1452
+ } catch (e) {
1453
+ const expression = <any> this._parseExpression(oldAttr.value);
1454
+ attr = new BindAttribute({
1455
+ type: 'dynamic',
1456
+ name: oldAttr.name,
1457
+ value: expression ? '' : oldAttr.value,
1458
+ expression,
1459
+ });
1460
+ if (astNode.attrsMap[`:${attr.name}.sync`]) {
1461
+ attr.sync = true;
1415
1462
  }
1416
1463
  }
1417
- element.bindAttrs.push(attr);
1418
- });
1464
+ }
1465
+ element.addBindAttribute(attr);
1466
+ });
1419
1467
 
1420
1468
  // compiler 处理:value.sync 时会加上update:value事件,需要过滤
1421
1469
  astNode.events
@@ -1425,24 +1473,23 @@ export class ViewElement extends BaseNode {
1425
1473
  const oldEvent = astNode.events[name] as compiler.ASTElementHandler;
1426
1474
  const str = oldEvent.value;
1427
1475
  let calleeName = str.split('(')[0];
1428
- const matchArr = str.match(/\(([^)]*)\)/);
1476
+ const matchArr = str.match(/\(([^)]*)\)/) || [];
1429
1477
  let argsStr = '';
1430
- if (matchArr.length >= 2) {
1478
+ if (matchArr?.length >= 2) {
1431
1479
  argsStr = matchArr[1];
1432
1480
  }
1433
1481
  let args: any[] = [];
1434
- if (argsStr) {
1435
- args = argsStr.split(',').map((argStr) => {
1482
+ const argStrs: string[] = argsStr.split(',');
1483
+ args = argStrs
1484
+ .filter((argStr) => !!argStr && argStr !== '_empty_')
1485
+ .map((argStr) => {
1436
1486
  const keyword = argStr.trim().split('.');
1437
1487
  return {
1438
1488
  concept: 'Argument',
1439
1489
  expression: genArgumentMemberExpression(keyword),
1440
1490
  };
1441
1491
  });
1442
- }
1443
- const viewNamespace = view?.getNamespace();
1444
- const viewName = `${view?.name}`;
1445
- let calleeNamespace = `${viewNamespace}.${viewName}.logics`;
1492
+ let calleeNamespace = '';
1446
1493
  if (calleeName) {
1447
1494
  const namespaceArr = calleeName.split('.');
1448
1495
  const start = namespaceArr.shift();
@@ -1451,12 +1498,12 @@ export class ViewElement extends BaseNode {
1451
1498
  calleeName = namespaceArr[1];
1452
1499
  }
1453
1500
  }
1454
- element.bindEvents.push(BindEvent.from({
1501
+ element.addBindEvent(new BindEvent({
1455
1502
  name,
1456
1503
  calleeNamespace,
1457
1504
  calleeName,
1458
1505
  arguments: args,
1459
- }, element));
1506
+ }));
1460
1507
  });
1461
1508
 
1462
1509
  astNode.directives
@@ -1465,73 +1512,65 @@ export class ViewElement extends BaseNode {
1465
1512
  const valueAttr = astNode.attrs && astNode.attrs.find((attr) => attr.name === 'value');
1466
1513
  if (!valueAttr) {
1467
1514
  const expression = <any> this._parseExpression(directive.value);
1468
- element.bindAttrs.push(BindAttribute.from({
1515
+ element.addBindAttribute(new BindAttribute({
1469
1516
  type: 'dynamic',
1470
1517
  name: 'value',
1471
1518
  value: expression ? '' : directive.value,
1472
1519
  expression,
1473
1520
  sync: true,
1474
- }, element));
1521
+ }));
1475
1522
  }
1476
1523
  } else {
1477
1524
  const expression = <any> this._parseExpression(directive.value);
1478
- element.bindDirectives.push(BindDirective.from({
1525
+ element.addBindDirective(new BindDirective({
1479
1526
  type: expression ? 'string' : 'dynamic',
1480
1527
  name: directive.name,
1481
1528
  rawName: directive.rawName,
1482
1529
  value: expression ? '' : directive.value,
1483
1530
  expression,
1484
1531
  arg: directive.arg,
1485
- modifiers: directive.modifiers,
1486
- }, element));
1532
+ // modifiers: directive.modifiers,
1533
+ }));
1487
1534
  }
1488
1535
  });
1489
1536
 
1490
1537
  if (astNode.if) {
1491
- element.bindDirectives.push(BindDirective.from({
1538
+ element.addBindDirective(new BindDirective({
1492
1539
  type: 'dynamic',
1493
1540
  name: 'if',
1494
1541
  rawName: 'v-if',
1495
1542
  value: '',
1496
1543
  expression: <any> this._parseExpression(astNode.if),
1497
- }, element));
1544
+ }));
1498
1545
  }
1499
1546
  } else if (astNode.type === 2) {
1500
- if (config.scope === 'h5') {
1501
- element = new ViewElement({
1502
- tag: 'van-text',
1503
- });
1504
- } else {
1505
- element = new ViewElement({
1506
- tag: 'u-text',
1507
- });
1508
- }
1547
+ const tagName = config.scope === 'h5' ? 'van-text' : 'u-text';
1548
+ const baseName = tagName.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
1549
+ element = new ViewElement({
1550
+ tag: tagName,
1551
+ name: view.getViewElementUniqueName(`${baseName}1`),
1552
+ });
1509
1553
  const value = astNode.text.match(/{{(.*?)}}/)[1].trim();
1510
1554
  const expression = <any> this._parseExpression(value);
1511
- element.bindAttrs.push(new BindAttribute({
1555
+ element.addBindAttribute(new BindAttribute({
1512
1556
  type: 'dynamic',
1513
1557
  name: 'text',
1514
1558
  value: expression ? '' : value,
1515
1559
  expression,
1516
1560
  }));
1517
1561
  } else if (astNode.type === 3) {
1518
- if (config.scope === 'h5') {
1519
- element = new ViewElement({
1520
- tag: 'van-text',
1521
- });
1522
- } else {
1523
- element = new ViewElement({
1524
- tag: 'u-text',
1525
- });
1526
- }
1527
-
1528
- element.bindAttrs.push(new BindAttribute({
1562
+ const tagName = config.scope === 'h5' ? 'van-text' : 'u-text';
1563
+ const baseName = tagName.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
1564
+ element = new ViewElement({
1565
+ tag: tagName,
1566
+ name: view.getViewElementUniqueName(`${baseName}1`),
1567
+ });
1568
+ element.addBindAttribute(new BindAttribute({
1529
1569
  name: 'text',
1530
1570
  type: 'string',
1531
1571
  value: astNode.text,
1532
1572
  }));
1533
1573
  }
1534
-
1535
1574
  return element;
1536
1575
  }
1537
1576
 
@@ -1552,24 +1591,14 @@ export class ViewElement extends BaseNode {
1552
1591
  let ast = compiler.compile(html, compilerOptions).ast;
1553
1592
  if (ast.tag === 'template' && !ast.slotTarget)
1554
1593
  ast = ast.children[0] as compiler.ASTElement;
1555
-
1556
- let root: ViewElement;
1557
- utils.traverse((current) => {
1558
- // 处理 scopedSlots;
1559
- if (!current.parent)
1560
- root = this._fromASTNode(current.node, context);
1561
- else
1562
- (current.parent.children as any)[current.index] = this._fromASTNode(current.node, context);
1563
- }, { node: ast });
1564
- return root;
1594
+ return this._fromASTNode(ast, context);
1565
1595
  }
1566
1596
 
1567
1597
  /**
1568
1598
  * 从模板生成规范的 ViewElement 对象
1569
1599
  */
1570
1600
  public static fromHTML(html: string, context?: ParseContext) {
1571
- const element = this.parse(html, context);
1572
- return element;
1601
+ return this.parse(html, context);
1573
1602
  }
1574
1603
 
1575
1604
  /**
@@ -1597,7 +1626,7 @@ export class ViewElement extends BaseNode {
1597
1626
  }
1598
1627
  }
1599
1628
  if ((attr as BindAttribute).type === 'dynamic' && !(element.tag === 'u-cascade-select' && attr.name === 'categories'))
1600
- return defaultResult.replace(/:?(\w+)(?:.*?)="(.*)"/, (m, name, value) => {
1629
+ return defaultResult.replace(/:?([\w-]+)(?:.*?)="(.*)"/, (m, name, value) => {
1601
1630
  try {
1602
1631
  const tempValue = json5.parse(value);
1603
1632
  if (typeof tempValue === 'boolean' || typeof tempValue === 'number') {
@@ -1608,7 +1637,12 @@ export class ViewElement extends BaseNode {
1608
1637
  if (apiOfAttr && !apiOfAttr.type.includes('string'))
1609
1638
  return '';
1610
1639
  }
1611
- return `${name}="{{ ${value.replace(/"/g, "'")} }}"`;
1640
+ value = value
1641
+ .replace(/"/g, "'")
1642
+ .replace(/\$utils\['(.+?)'\]/g, '$1')
1643
+ .replace(/\$refs./g, 'elements.')
1644
+ .replace(/\$global./g, 'nasl.auth.');
1645
+ return `${name}="{{ ${value} }}"`;
1612
1646
  });
1613
1647
  else
1614
1648
  return defaultResult;
@@ -1620,13 +1654,31 @@ export class ViewElement extends BaseNode {
1620
1654
 
1621
1655
  const api = config.allNodesAPI[el.tag];
1622
1656
  const emptySlot = api && api.slots && api.slots.find((slot) => slot.name === 'default' && slot['empty-background']);
1623
- if (!el.children.length && emptySlot) {
1624
- let addEmpty = true;
1625
- if (el.tag === 'u-grid-view' || el.tag === 'u-list-view' || el.tag === 'van-list-view') {
1626
- const hasDataSource = el.bindAttrs.find((attr) => attr.name === 'data-source');
1627
- addEmpty = !hasDataSource;
1657
+ const hasSupport = api && api.slots && api.slots.some((slot) => slot.support);
1658
+ if (emptySlot || hasSupport) {
1659
+ let childEmpty = !el.children.length;
1660
+ const defaultSlot = el.children.find((elem) => elem.tag === 'template' && elem.slotTarget === 'default');
1661
+ if (defaultSlot) {
1662
+ childEmpty = !defaultSlot.children.length;
1663
+ }
1664
+ if (childEmpty) {
1665
+ let addEmpty = true;
1666
+ if (el.tag === 'u-grid-view' || el.tag === 'u-list-view' || el.tag === 'van-list-view' || el.tag === 'van-grid-view') {
1667
+ const hasDataSource = el.bindAttrs.find((attr) => attr.name === 'data-source');
1668
+ addEmpty = !hasDataSource;
1669
+ }
1670
+ if (el.tag === 'u-crumb') {
1671
+ const attrList = el.bindAttrs;
1672
+ const hasAuto = attrList.some((attr) => attr.name === 'auto' && String(attr.value) === 'true');
1673
+ if (hasAuto)
1674
+ addEmpty = false;
1675
+ }
1676
+ if (['u-select', 'u-dropdown', 'u-panel'].includes(el.tag)) {
1677
+ addEmpty = false;
1678
+ }
1679
+ const background = (emptySlot && emptySlot['empty-background']) || (hasSupport ? 'add-sub' : '');
1680
+ addEmpty && parts.push(`vusion-empty-background="${background}"`);
1628
1681
  }
1629
- addEmpty && parts.push(`vusion-empty-background="${emptySlot['empty-background']}"`);
1630
1682
  }
1631
1683
 
1632
1684
  return parts;
@@ -1638,7 +1690,14 @@ export class ViewElement extends BaseNode {
1638
1690
  * 转换成 Vue 的模板格式
1639
1691
  */
1640
1692
  toVue(options?: ElementToVueOptions) {
1641
- options = Object.assign({
1693
+ let scopeList: string[] = [];
1694
+ if (Array.isArray(options?.scopeList)) {
1695
+ scopeList = [...options?.scopeList];
1696
+ }
1697
+ if (this.slotScope) {
1698
+ scopeList.unshift(this.slotScope);
1699
+ }
1700
+ const newOptions: ElementToVueOptions = Object.assign({
1642
1701
  indentStyle: 'space',
1643
1702
  tabSize: 4,
1644
1703
  indentLevel: 0,
@@ -1646,27 +1705,30 @@ export class ViewElement extends BaseNode {
1646
1705
  nodePathAttr: false,
1647
1706
  getExtraParts: () => [],
1648
1707
  attrFormat: (attr: BindAttribute | BindEvent | BindDirective, element?: ViewElement, defaultResult?: string) => defaultResult,
1649
- }, options);
1650
- const tabString = ' '.repeat(options.tabSize * options.indentLevel);
1651
- const insideTabString = ' '.repeat(options.tabSize * (options.indentLevel + 1));
1708
+ }, options, {
1709
+ scopeList,
1710
+ });
1711
+ const tabString = ' '.repeat(newOptions.tabSize * newOptions.indentLevel);
1712
+ const insideTabString = ' '.repeat(newOptions.tabSize * (newOptions.indentLevel + 1));
1652
1713
  let shouldIndent = true;
1653
1714
  const content: string = !this.children ? '' : this.children
1654
1715
  .map((element) => {
1655
- const childOptions = Object.assign({}, options);
1716
+ const childOptions = Object.assign({}, newOptions);
1656
1717
  childOptions.indentLevel++;
1657
- return (shouldIndent ? '\n' + insideTabString : '') + element.toVue(childOptions);
1718
+ return (shouldIndent ? '\n' + insideTabString : '') + element?.toVue(childOptions);
1658
1719
  })
1659
1720
  .join('');
1660
- if (!content.length)
1721
+ if (!content.length) {
1661
1722
  shouldIndent = false;
1662
-
1723
+ }
1663
1724
  const parts = [];
1664
- if (options.aslIdAttr) {
1665
- if (options.aslIdAttr === true)
1666
- options.aslIdAttr = 'asl-id';
1667
- parts.push(`${options.aslIdAttr}="${this.id}"`);
1725
+ if (newOptions.aslIdAttr) {
1726
+ if (newOptions.aslIdAttr === true) {
1727
+ newOptions.aslIdAttr = 'asl-id';
1728
+ }
1729
+ parts.push(`${newOptions.aslIdAttr}="${this.id}"`);
1668
1730
  }
1669
- if (options.nodePathAttr) {
1731
+ if (newOptions.nodePathAttr) {
1670
1732
  // 注入 asl 的 node-path
1671
1733
  parts.push(`vusion-node-path="${this.nodePath}"`);
1672
1734
  }
@@ -1677,11 +1739,10 @@ export class ViewElement extends BaseNode {
1677
1739
  this.staticStyle && parts.push(`style="${this.staticStyle}"`);
1678
1740
 
1679
1741
  [].concat(this.bindAttrs, this.bindDirectives, this.bindEvents).forEach((attr: BindAttribute | BindDirective | BindEvent) => {
1680
- const result = options.attrFormat(attr, this, attr.toVue(options));
1742
+ const result = newOptions.attrFormat(attr, this, attr?.toVue(newOptions));
1681
1743
  result && parts.push(result);
1682
1744
  });
1683
-
1684
- options.getExtraParts(this).forEach((part) => parts.push(part));
1745
+ newOptions.getExtraParts(this).forEach((part) => parts.push(part));
1685
1746
 
1686
1747
  let partsLength = 0;
1687
1748
  let partsString = '';
@@ -1697,6 +1758,43 @@ export class ViewElement extends BaseNode {
1697
1758
  return `<${this.tag}${partsString.length ? partsString : ''}>` + content + (shouldIndent ? '\n' + tabString : '') + `</${this.tag}>`;
1698
1759
  }
1699
1760
 
1761
+ /**
1762
+ * 从父级删除该节点
1763
+ * @internal
1764
+ */
1765
+ delete() {
1766
+ super.delete();
1767
+ if (this.parentNode) {
1768
+ this.traverseChildren((ele: ViewElement) => {
1769
+ (this.view as any)?.removeExistingViewElement(ele);
1770
+ });
1771
+ }
1772
+ }
1773
+
1774
+ findElementByName(name: string): ViewElement {
1775
+ return utils.traverse((current) => {
1776
+ if (current.node.name === name)
1777
+ return current.node;
1778
+ }, { node: this });
1779
+ }
1780
+
1781
+ findElementByTag(tag: string): ViewElement {
1782
+ return utils.traverse((current) => {
1783
+ if (current.node.tag === tag)
1784
+ return current.node;
1785
+ }, { node: this });
1786
+ }
1787
+
1788
+ findElementByAttr(name: string, value: string): ViewElement {
1789
+ return utils.traverse((current) => {
1790
+ if (current.node.bindAttrs.some((attr) => attr.name === name && attr.value === value))
1791
+ return current.node;
1792
+ }, { node: this });
1793
+ }
1794
+
1795
+ @excludedInJSON()
1796
+ computedStyle: object = {};
1797
+
1700
1798
  //================================================================================
1701
1799
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1702
1800
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓