@lcap/nasl 1.0.0-alpha.9 → 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 +116 -39
  317. package/src/automate/engine/utils.js +49 -19
  318. package/src/common/BaseNode.ts +215 -71
  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 -23
  327. package/src/concepts/BooleanLiteral__.ts +8 -0
  328. package/src/concepts/CallFunction__.ts +38 -21
  329. package/src/concepts/CallInterface__.ts +236 -26
  330. package/src/concepts/CallLogic__.ts +114 -86
  331. package/src/concepts/CallQueryComponent__.ts +23 -15
  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 +101 -17
  339. package/src/concepts/End__.ts +8 -1
  340. package/src/concepts/EntityProperty__.ts +58 -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 +83 -32
  347. package/src/concepts/IfStatement__.ts +4 -4
  348. package/src/concepts/InterfaceParam__.ts +52 -16
  349. package/src/concepts/Interface__.ts +128 -14
  350. package/src/concepts/JSBlock__.ts +4 -0
  351. package/src/concepts/LogicItem__.ts +16 -1
  352. package/src/concepts/Logic__.ts +173 -35
  353. package/src/concepts/MemberExpression__.ts +58 -14
  354. package/src/concepts/Module__.ts +27 -16
  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 +56 -15
  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 -15
  369. package/src/concepts/Role__.ts +5 -4
  370. package/src/concepts/SqlQueryComponent__.ts +2 -2
  371. package/src/concepts/StringLiteral__.ts +20 -31
  372. package/src/concepts/StructureProperty__.ts +50 -18
  373. package/src/concepts/Structure__.ts +30 -8
  374. package/src/concepts/SwitchCase__.ts +4 -4
  375. package/src/concepts/SwitchStatement__.ts +2 -2
  376. package/src/concepts/TypeAnnotation__.ts +58 -15
  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 +63 -14
  381. package/src/concepts/ViewComponent__.ts +10 -10
  382. package/src/concepts/ViewElement__.ts +285 -162
  383. package/src/concepts/View__.ts +116 -70
  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 -11
  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 +182 -30
  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 +45 -7
  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 +233 -63
  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 +685 -387
  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 +198 -45
  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
  }
@@ -1069,16 +1119,20 @@ export class ViewElement extends BaseNode {
1069
1119
  }
1070
1120
 
1071
1121
  haveScope(node: ViewElement): boolean {
1072
- const dataSourcePcList = ['uGallery', 'uTableView', 'uListView', 'uGridView', 'uCalendarView', 'uListComponents', 'uSelect'];
1073
- 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'];
1074
1125
  const dataSourceList = [...dataSourcePcList, ...dataSourceH5List];
1075
1126
  return dataSourceList.includes(node.toHump(node.tag));
1076
1127
  }
1077
1128
  toEmbeddedTSDefinition(state?: TranslatorState): string {
1129
+ // 登录组件不翻译
1130
+ if (this.toHump(this.tag) === 'lcapLogin' || this.staticClass === 'login-form')
1131
+ return '';
1078
1132
  let code = '';
1079
1133
  // formItem的单独处理
1080
1134
  if (this.tag === 'u-form-item') {
1081
- 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)}`;
1082
1136
  if (Array.isArray(this.children) && this.children.length) {
1083
1137
  const tag = this.children[0].tag;
1084
1138
  if (tag === 'u-input') {
@@ -1089,7 +1143,7 @@ export class ViewElement extends BaseNode {
1089
1143
  code += '<nasl.core.Any>';
1090
1144
  }
1091
1145
  }
1092
- code += '> null,\n';
1146
+ code += ';\n';
1093
1147
  }
1094
1148
  if (this.haveScope(this)) {
1095
1149
  let genericType = 'any';
@@ -1109,7 +1163,11 @@ export class ViewElement extends BaseNode {
1109
1163
  while (!haveScopeFlag && parentNode.concept !== 'View') {
1110
1164
  if (this.haveScope(parentNode as ViewElement)) {
1111
1165
  // type d = nasl.ui.GetItemTypeFromDataSource<typeof listStructure>['tableRelation']
1112
- const tsArr = expressionTs.split('.');
1166
+ const tsArr = expressionTs.replace('scope.item.', '').split('.');
1167
+ let itemStr = '';
1168
+ tsArr.forEach((item) => {
1169
+ itemStr += `['${item}']`;
1170
+ });
1113
1171
  const parentbindAttrs = (parentNode as ViewElement).bindAttrs;
1114
1172
  if (parentbindAttrs && parentbindAttrs.length) {
1115
1173
  const parentAttr = parentbindAttrs.find((item) => item.name === 'data-source');
@@ -1117,7 +1175,7 @@ export class ViewElement extends BaseNode {
1117
1175
  let parentExpressionTs = parentAttr.expression.toEmbeddedTS(shiftState(state, code));
1118
1176
  parentExpressionTs = parentExpressionTs.replaceAll(' ', '');
1119
1177
  // 如果是逻辑就推导出逻辑类型
1120
- genericType = `nasl.ui.GetItemTypeFromDataSource<nasl.ui.GetItemTypeFromDataSource<typeof ${parentExpressionTs}>['${tsArr[tsArr.length - 1]}']>`;
1178
+ genericType = `nasl.ui.GetItemTypeFromDataSource<nasl.ui.GetItemTypeFromDataSource<typeof ${parentExpressionTs}>${itemStr}>`;
1121
1179
  }
1122
1180
  }
1123
1181
  haveScopeFlag = true;
@@ -1127,9 +1185,9 @@ export class ViewElement extends BaseNode {
1127
1185
  }
1128
1186
  }
1129
1187
  }
1130
- 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`;
1131
1189
  } else {
1132
- 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`;
1133
1191
  }
1134
1192
  if (Array.isArray(this.children)) {
1135
1193
  this.children.forEach((element) => {
@@ -1140,13 +1198,15 @@ export class ViewElement extends BaseNode {
1140
1198
  }
1141
1199
  @withSourceMap()
1142
1200
  toEmbeddedTS(state?: TranslatorState, parentLevel?: number): string {
1201
+ if (this.toHump(this.tag) === 'lcapLogin' || this.staticClass === 'login-form')
1202
+ return '';
1143
1203
  function chineseTsName(name: string) {
1144
1204
  let tsName = name;
1205
+ // 匹配所有特殊字符都转为_
1206
+ tsName = tsName.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '_');
1145
1207
  if (/^\d/.test(tsName)) {
1146
1208
  tsName = '$' + tsName;
1147
1209
  }
1148
- // 匹配所有特殊字符都转为_
1149
- tsName = tsName.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '_');
1150
1210
  return tsName;
1151
1211
  }
1152
1212
  let code = `__elements.${this.name} = new nasl.ui.${this.toHump(this.tag)}({\n`;
@@ -1156,7 +1216,7 @@ export class ViewElement extends BaseNode {
1156
1216
  hasAuth = !!this.bindDirectives.filter((directive) => directive.name === 'auth').length;
1157
1217
  }
1158
1218
  // 角色
1159
- if (hasAuth && Array.isArray(this.bindRoles)) {
1219
+ if (Array.isArray(this.bindRoles) && this.bindRoles.length) {
1160
1220
  code += indent(state.tabSize + 2);
1161
1221
  code += 'roles = [\n';
1162
1222
  this.bindRoles.forEach((role) => {
@@ -1203,6 +1263,19 @@ export class ViewElement extends BaseNode {
1203
1263
  tabSize: state.tabSize + 2,
1204
1264
  })) + ',\n';
1205
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,
1277
+ })) + ',\n';
1278
+ }
1206
1279
  });
1207
1280
  code += indent(state.tabSize + 2) + '],\n';
1208
1281
  }
@@ -1230,12 +1303,9 @@ export class ViewElement extends BaseNode {
1230
1303
  return code;
1231
1304
  }
1232
1305
 
1233
- _duplicate(options?: ElementToVueOptions) {
1234
- const code = this.toVue(options);
1235
- const element = ViewElement.fromHTML(code, {
1236
- view: this.view,
1237
- });
1238
- element.deepRenameElements();
1306
+ _duplicate() {
1307
+ const element = ViewElement.from(this.toTemplateJSON());
1308
+ element.deepRenameElements(this);
1239
1309
  return element;
1240
1310
  }
1241
1311
 
@@ -1247,10 +1317,10 @@ export class ViewElement extends BaseNode {
1247
1317
  }
1248
1318
 
1249
1319
  // 递归生成组件名
1250
- public deepRenameElements(): void {
1320
+ public deepRenameElements(node: ViewElement): void {
1251
1321
  return this.traverseChildren((ele: ViewElement) => {
1252
1322
  const tagName = ele.tag.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
1253
- ele.name = this.getViewElementUniqueName(`${tagName}1`);
1323
+ ele.name = node.getViewElementUniqueName(`${tagName}1`);
1254
1324
  });
1255
1325
  }
1256
1326
 
@@ -1290,7 +1360,6 @@ export class ViewElement extends BaseNode {
1290
1360
  concept: 'ValidationRule',
1291
1361
  name: '',
1292
1362
  label: '验证规则',
1293
- folded: true,
1294
1363
  kind: 'Expression',
1295
1364
  calleeNamespace: 'nasl.validation',
1296
1365
  arguments: args,
@@ -1318,13 +1387,13 @@ export class ViewElement extends BaseNode {
1318
1387
  });
1319
1388
  astNode.children = [];
1320
1389
  }
1321
-
1322
1390
  // 将 scopedSlots 合并到 children 中
1323
1391
  if (astNode.scopedSlots) {
1324
1392
  astNode.children = astNode.children || [];
1325
1393
  Object.keys(astNode.scopedSlots).forEach((key) => {
1326
- if (!astNode.children.find((child) => key === (child as compiler.ASTElement).slotTarget))
1394
+ if (!astNode.children.find((child) => key === (child as compiler.ASTElement).slotTarget)) {
1327
1395
  astNode.children.unshift(astNode.scopedSlots[key]);
1396
+ }
1328
1397
  });
1329
1398
  delete astNode.scopedSlots;
1330
1399
  }
@@ -1345,6 +1414,12 @@ export class ViewElement extends BaseNode {
1345
1414
  }
1346
1415
  }
1347
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
+ }
1348
1423
  element = new ViewElement({
1349
1424
  tag: astNode.tag,
1350
1425
  name: astNode.attrsMap.ref || view.getViewElementUniqueName(`${tagName}1`),
@@ -1352,45 +1427,43 @@ export class ViewElement extends BaseNode {
1352
1427
  staticStyle: astNode.attrsMap.style,
1353
1428
  slotTarget: astNode.slotTarget && json5.parse(astNode.slotTarget),
1354
1429
  slotScope: astNode.slotScope === '_empty_' ? '' : astNode.slotScope,
1355
- 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>,
1356
1431
  });
1357
-
1358
- astNode.attrs
1359
- && astNode.attrs.forEach((oldAttr) => {
1360
- let attr: BindAttribute;
1361
- if (oldAttr.value === '""' && (oldAttr as any).end - (oldAttr as any).start === oldAttr.name.length) {
1362
- attr = BindAttribute.from({
1363
- 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',
1364
1445
  name: oldAttr.name,
1365
- value: 'true',
1366
- }, element);
1367
- } else {
1368
- try {
1369
- const tmp = json5.parse(oldAttr.value);
1370
- const source: any = {
1371
- type: typeof tmp === 'string' ? 'string' : 'static',
1372
- name: oldAttr.name,
1373
- value: typeof tmp === 'string' ? tmp : oldAttr.value,
1374
- };
1375
- if (oldAttr.name === 'rules') {
1376
- source.rules = tmp?.split('|').map((ruleStr: string) => this._parseValidationRule(ruleStr.trim()));
1377
- }
1378
- attr = BindAttribute.from(source, element);
1379
- } catch (e) {
1380
- const expression = <any> this._parseExpression(oldAttr.value);
1381
- attr = BindAttribute.from({
1382
- type: 'dynamic',
1383
- name: oldAttr.name,
1384
- value: expression ? '' : oldAttr.value,
1385
- expression,
1386
- }, element);
1387
- if (astNode.attrsMap[`:${attr.name}.sync`]) {
1388
- attr.sync = true;
1389
- }
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;
1390
1462
  }
1391
1463
  }
1392
- element.bindAttrs.push(attr);
1393
- });
1464
+ }
1465
+ element.addBindAttribute(attr);
1466
+ });
1394
1467
 
1395
1468
  // compiler 处理:value.sync 时会加上update:value事件,需要过滤
1396
1469
  astNode.events
@@ -1400,24 +1473,23 @@ export class ViewElement extends BaseNode {
1400
1473
  const oldEvent = astNode.events[name] as compiler.ASTElementHandler;
1401
1474
  const str = oldEvent.value;
1402
1475
  let calleeName = str.split('(')[0];
1403
- const matchArr = str.match(/\(([^)]*)\)/);
1476
+ const matchArr = str.match(/\(([^)]*)\)/) || [];
1404
1477
  let argsStr = '';
1405
- if (matchArr.length >= 2) {
1478
+ if (matchArr?.length >= 2) {
1406
1479
  argsStr = matchArr[1];
1407
1480
  }
1408
1481
  let args: any[] = [];
1409
- if (argsStr) {
1410
- args = argsStr.split(',').map((argStr) => {
1482
+ const argStrs: string[] = argsStr.split(',');
1483
+ args = argStrs
1484
+ .filter((argStr) => !!argStr && argStr !== '_empty_')
1485
+ .map((argStr) => {
1411
1486
  const keyword = argStr.trim().split('.');
1412
1487
  return {
1413
1488
  concept: 'Argument',
1414
1489
  expression: genArgumentMemberExpression(keyword),
1415
1490
  };
1416
1491
  });
1417
- }
1418
- const viewNamespace = view?.getNamespace();
1419
- const viewName = `${view?.name}`;
1420
- let calleeNamespace = `${viewNamespace}.${viewName}.logics`;
1492
+ let calleeNamespace = '';
1421
1493
  if (calleeName) {
1422
1494
  const namespaceArr = calleeName.split('.');
1423
1495
  const start = namespaceArr.shift();
@@ -1426,12 +1498,12 @@ export class ViewElement extends BaseNode {
1426
1498
  calleeName = namespaceArr[1];
1427
1499
  }
1428
1500
  }
1429
- element.bindEvents.push(BindEvent.from({
1501
+ element.addBindEvent(new BindEvent({
1430
1502
  name,
1431
1503
  calleeNamespace,
1432
1504
  calleeName,
1433
1505
  arguments: args,
1434
- }, element));
1506
+ }));
1435
1507
  });
1436
1508
 
1437
1509
  astNode.directives
@@ -1440,73 +1512,65 @@ export class ViewElement extends BaseNode {
1440
1512
  const valueAttr = astNode.attrs && astNode.attrs.find((attr) => attr.name === 'value');
1441
1513
  if (!valueAttr) {
1442
1514
  const expression = <any> this._parseExpression(directive.value);
1443
- element.bindAttrs.push(BindAttribute.from({
1515
+ element.addBindAttribute(new BindAttribute({
1444
1516
  type: 'dynamic',
1445
1517
  name: 'value',
1446
1518
  value: expression ? '' : directive.value,
1447
1519
  expression,
1448
1520
  sync: true,
1449
- }, element));
1521
+ }));
1450
1522
  }
1451
1523
  } else {
1452
1524
  const expression = <any> this._parseExpression(directive.value);
1453
- element.bindDirectives.push(BindDirective.from({
1525
+ element.addBindDirective(new BindDirective({
1454
1526
  type: expression ? 'string' : 'dynamic',
1455
1527
  name: directive.name,
1456
1528
  rawName: directive.rawName,
1457
1529
  value: expression ? '' : directive.value,
1458
1530
  expression,
1459
1531
  arg: directive.arg,
1460
- modifiers: directive.modifiers,
1461
- }, element));
1532
+ // modifiers: directive.modifiers,
1533
+ }));
1462
1534
  }
1463
1535
  });
1464
1536
 
1465
1537
  if (astNode.if) {
1466
- element.bindDirectives.push(BindDirective.from({
1538
+ element.addBindDirective(new BindDirective({
1467
1539
  type: 'dynamic',
1468
1540
  name: 'if',
1469
1541
  rawName: 'v-if',
1470
1542
  value: '',
1471
1543
  expression: <any> this._parseExpression(astNode.if),
1472
- }, element));
1544
+ }));
1473
1545
  }
1474
1546
  } else if (astNode.type === 2) {
1475
- if (config.scope === 'h5') {
1476
- element = new ViewElement({
1477
- tag: 'van-text',
1478
- });
1479
- } else {
1480
- element = new ViewElement({
1481
- tag: 'u-text',
1482
- });
1483
- }
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
+ });
1484
1553
  const value = astNode.text.match(/{{(.*?)}}/)[1].trim();
1485
1554
  const expression = <any> this._parseExpression(value);
1486
- element.bindAttrs.push(new BindAttribute({
1555
+ element.addBindAttribute(new BindAttribute({
1487
1556
  type: 'dynamic',
1488
1557
  name: 'text',
1489
1558
  value: expression ? '' : value,
1490
1559
  expression,
1491
1560
  }));
1492
1561
  } else if (astNode.type === 3) {
1493
- if (config.scope === 'h5') {
1494
- element = new ViewElement({
1495
- tag: 'van-text',
1496
- });
1497
- } else {
1498
- element = new ViewElement({
1499
- tag: 'u-text',
1500
- });
1501
- }
1502
-
1503
- 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({
1504
1569
  name: 'text',
1505
1570
  type: 'string',
1506
1571
  value: astNode.text,
1507
1572
  }));
1508
1573
  }
1509
-
1510
1574
  return element;
1511
1575
  }
1512
1576
 
@@ -1527,24 +1591,14 @@ export class ViewElement extends BaseNode {
1527
1591
  let ast = compiler.compile(html, compilerOptions).ast;
1528
1592
  if (ast.tag === 'template' && !ast.slotTarget)
1529
1593
  ast = ast.children[0] as compiler.ASTElement;
1530
-
1531
- let root: ViewElement;
1532
- utils.traverse((current) => {
1533
- // 处理 scopedSlots;
1534
- if (!current.parent)
1535
- root = this._fromASTNode(current.node, context);
1536
- else
1537
- (current.parent.children as any)[current.index] = this._fromASTNode(current.node, context);
1538
- }, { node: ast });
1539
- return root;
1594
+ return this._fromASTNode(ast, context);
1540
1595
  }
1541
1596
 
1542
1597
  /**
1543
1598
  * 从模板生成规范的 ViewElement 对象
1544
1599
  */
1545
1600
  public static fromHTML(html: string, context?: ParseContext) {
1546
- const element = this.parse(html, context);
1547
- return element;
1601
+ return this.parse(html, context);
1548
1602
  }
1549
1603
 
1550
1604
  /**
@@ -1572,7 +1626,7 @@ export class ViewElement extends BaseNode {
1572
1626
  }
1573
1627
  }
1574
1628
  if ((attr as BindAttribute).type === 'dynamic' && !(element.tag === 'u-cascade-select' && attr.name === 'categories'))
1575
- return defaultResult.replace(/:?(\w+)(?:.*?)="(.*)"/, (m, name, value) => {
1629
+ return defaultResult.replace(/:?([\w-]+)(?:.*?)="(.*)"/, (m, name, value) => {
1576
1630
  try {
1577
1631
  const tempValue = json5.parse(value);
1578
1632
  if (typeof tempValue === 'boolean' || typeof tempValue === 'number') {
@@ -1583,7 +1637,12 @@ export class ViewElement extends BaseNode {
1583
1637
  if (apiOfAttr && !apiOfAttr.type.includes('string'))
1584
1638
  return '';
1585
1639
  }
1586
- return `${name}="{{ ${value.replace(/"/g, "'").replace(/\$utils\['(.+?)'\]/g, '$1')} }}"`;
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} }}"`;
1587
1646
  });
1588
1647
  else
1589
1648
  return defaultResult;
@@ -1595,13 +1654,31 @@ export class ViewElement extends BaseNode {
1595
1654
 
1596
1655
  const api = config.allNodesAPI[el.tag];
1597
1656
  const emptySlot = api && api.slots && api.slots.find((slot) => slot.name === 'default' && slot['empty-background']);
1598
- if (!el.children.length && emptySlot) {
1599
- let addEmpty = true;
1600
- if (el.tag === 'u-grid-view' || el.tag === 'u-list-view' || el.tag === 'van-list-view') {
1601
- const hasDataSource = el.bindAttrs.find((attr) => attr.name === 'data-source');
1602
- 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}"`);
1603
1681
  }
1604
- addEmpty && parts.push(`vusion-empty-background="${emptySlot['empty-background']}"`);
1605
1682
  }
1606
1683
 
1607
1684
  return parts;
@@ -1613,7 +1690,14 @@ export class ViewElement extends BaseNode {
1613
1690
  * 转换成 Vue 的模板格式
1614
1691
  */
1615
1692
  toVue(options?: ElementToVueOptions) {
1616
- 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({
1617
1701
  indentStyle: 'space',
1618
1702
  tabSize: 4,
1619
1703
  indentLevel: 0,
@@ -1621,27 +1705,30 @@ export class ViewElement extends BaseNode {
1621
1705
  nodePathAttr: false,
1622
1706
  getExtraParts: () => [],
1623
1707
  attrFormat: (attr: BindAttribute | BindEvent | BindDirective, element?: ViewElement, defaultResult?: string) => defaultResult,
1624
- }, options);
1625
- const tabString = ' '.repeat(options.tabSize * options.indentLevel);
1626
- 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));
1627
1713
  let shouldIndent = true;
1628
1714
  const content: string = !this.children ? '' : this.children
1629
1715
  .map((element) => {
1630
- const childOptions = Object.assign({}, options);
1716
+ const childOptions = Object.assign({}, newOptions);
1631
1717
  childOptions.indentLevel++;
1632
- return (shouldIndent ? '\n' + insideTabString : '') + element.toVue(childOptions);
1718
+ return (shouldIndent ? '\n' + insideTabString : '') + element?.toVue(childOptions);
1633
1719
  })
1634
1720
  .join('');
1635
- if (!content.length)
1721
+ if (!content.length) {
1636
1722
  shouldIndent = false;
1637
-
1723
+ }
1638
1724
  const parts = [];
1639
- if (options.aslIdAttr) {
1640
- if (options.aslIdAttr === true)
1641
- options.aslIdAttr = 'asl-id';
1642
- 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}"`);
1643
1730
  }
1644
- if (options.nodePathAttr) {
1731
+ if (newOptions.nodePathAttr) {
1645
1732
  // 注入 asl 的 node-path
1646
1733
  parts.push(`vusion-node-path="${this.nodePath}"`);
1647
1734
  }
@@ -1652,11 +1739,10 @@ export class ViewElement extends BaseNode {
1652
1739
  this.staticStyle && parts.push(`style="${this.staticStyle}"`);
1653
1740
 
1654
1741
  [].concat(this.bindAttrs, this.bindDirectives, this.bindEvents).forEach((attr: BindAttribute | BindDirective | BindEvent) => {
1655
- const result = options.attrFormat(attr, this, attr.toVue(options));
1742
+ const result = newOptions.attrFormat(attr, this, attr?.toVue(newOptions));
1656
1743
  result && parts.push(result);
1657
1744
  });
1658
-
1659
- options.getExtraParts(this).forEach((part) => parts.push(part));
1745
+ newOptions.getExtraParts(this).forEach((part) => parts.push(part));
1660
1746
 
1661
1747
  let partsLength = 0;
1662
1748
  let partsString = '';
@@ -1672,6 +1758,43 @@ export class ViewElement extends BaseNode {
1672
1758
  return `<${this.tag}${partsString.length ? partsString : ''}>` + content + (shouldIndent ? '\n' + tabString : '') + `</${this.tag}>`;
1673
1759
  }
1674
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
+
1675
1798
  //================================================================================
1676
1799
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
1677
1800
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓