@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
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.translateDiagnosticMessage = exports.transformType = void 0;
7
6
  /// #if process.env.NODE_ENV
8
7
  // import Worker from '../../../ts-worker/dist/bundle.js';
9
8
  /// #else
@@ -12,9 +11,8 @@ exports.translateDiagnosticMessage = exports.transformType = void 0;
12
11
  const Messager_1 = __importDefault(require("../common/Messager"));
13
12
  const concepts_1 = require("../concepts");
14
13
  const translator_1 = require("../translator");
14
+ const storage_1 = __importDefault(require("../service/storage"));
15
15
  const translator_2 = require("./translator");
16
- Object.defineProperty(exports, "transformType", { enumerable: true, get: function () { return translator_2.transformType; } });
17
- Object.defineProperty(exports, "translateDiagnosticMessage", { enumerable: true, get: function () { return translator_2.translateDiagnosticMessage; } });
18
16
  const common_1 = require("../common");
19
17
  const diagnostic_1 = __importDefault(require("../manager/diagnostic"));
20
18
  const createUiTs_1 = __importDefault(require("./createUiTs"));
@@ -22,6 +20,8 @@ const coreTypeList_1 = require("../concepts/basics/types/coreTypeList");
22
20
  const EmbeddedTSFileLineMap = {
23
21
  Entity: 3,
24
22
  };
23
+ // 要Check的文件
24
+ const filesToCheck = new Set();
25
25
  const worker = new Worker('/ts-worker.js');
26
26
  const messager = new Messager_1.default({
27
27
  protocol: 'ts-worker',
@@ -49,82 +49,130 @@ const naslServer = {
49
49
  return this.messager.requestCommand('start');
50
50
  },
51
51
  async createUiTs(allComponent) {
52
- const { code, elementsLogic } = await (0, createUiTs_1.default)(allComponent);
52
+ const { code, elementsLogic, naslStdlibMap } = await (0, createUiTs_1.default)(allComponent);
53
53
  // 放入生產的uits文件
54
54
  await naslServer.addFile({
55
55
  file: 'nasl.ui.definition.ts',
56
56
  fileContent: code,
57
57
  });
58
+ Object.keys(naslStdlibMap).forEach(async (libFileName) => {
59
+ await naslServer.addFile({
60
+ file: '/' + libFileName,
61
+ fileContent: naslStdlibMap[libFileName],
62
+ });
63
+ });
58
64
  naslServer.elementsLogic = elementsLogic;
59
65
  // 全部文件加载完毕开始初始化
60
66
  await naslServer.getDiagnosticRecordsAndPushAll();
61
67
  },
62
68
  contentToFile(module, results) {
63
69
  module.structures.forEach((structure) => {
64
- const result = structure.toEmbeddedTSFile();
65
- results.push(result);
66
- // sourceMap都存在目录级别内容下,在页面层级下去找
67
- structure.sourceMap = result.sourceMap;
68
- this.file2NodeMap.set(result.filePath, structure);
70
+ try {
71
+ const result = structure.toEmbeddedTSFile();
72
+ results.push(result);
73
+ // sourceMap都存在目录级别内容下,在页面层级下去找
74
+ structure.sourceMap = result.sourceMap;
75
+ this.file2NodeMap.set(result.filePath, structure);
76
+ }
77
+ catch (err) {
78
+ console.log(err);
79
+ }
69
80
  });
70
81
  module.entities.forEach((entity) => {
71
- const result = entity.toEmbeddedTSFile();
72
- results.push(result);
73
- // sourceMap都存在目录级别内容下,在页面层级下去找
74
- entity.sourceMap = result.sourceMap;
75
- this.file2NodeMap.set(result.filePath, entity);
82
+ try {
83
+ const result = entity.toEmbeddedTSFile();
84
+ results.push(result);
85
+ // sourceMap都存在目录级别内容下,在页面层级下去找
86
+ entity.sourceMap = result.sourceMap;
87
+ this.file2NodeMap.set(result.filePath, entity);
88
+ }
89
+ catch (err) {
90
+ console.log(err);
91
+ }
76
92
  });
77
93
  module.interfaces.forEach((_interface) => {
78
- const result = _interface.toEmbeddedTSFile();
79
- results.push(result);
80
- // sourceMap都存在目录级别内容下,在页面层级下去找
81
- _interface.sourceMap = result.sourceMap;
82
- this.file2NodeMap.set(result.filePath, _interface);
94
+ try {
95
+ const result = _interface.toEmbeddedTSFile();
96
+ results.push(result);
97
+ // sourceMap都存在目录级别内容下,在页面层级下去找
98
+ _interface.sourceMap = result.sourceMap;
99
+ this.file2NodeMap.set(result.filePath, _interface);
100
+ }
101
+ catch (err) {
102
+ console.log(err);
103
+ }
83
104
  });
84
105
  module.enums.forEach((_enum) => {
85
- const result = _enum.toEmbeddedTSFile();
86
- results.push(result);
87
- // sourceMap都存在目录级别内容下,在页面层级下去找
88
- _enum.sourceMap = result.sourceMap;
89
- this.file2NodeMap.set(result.filePath, _enum);
106
+ try {
107
+ const result = _enum.toEmbeddedTSFile();
108
+ results.push(result);
109
+ // sourceMap都存在目录级别内容下,在页面层级下去找
110
+ _enum.sourceMap = result.sourceMap;
111
+ this.file2NodeMap.set(result.filePath, _enum);
112
+ }
113
+ catch (err) {
114
+ console.log(err);
115
+ }
90
116
  });
91
117
  module.logics.forEach((logic) => {
92
- if (!(logic instanceof concepts_1.Logic))
93
- return;
94
- const result = logic.toEmbeddedTSFile();
95
- results.push(result);
96
- logic.sourceMap = result.sourceMap;
97
- this.file2NodeMap.set(result.filePath, logic);
118
+ try {
119
+ if (!(logic instanceof concepts_1.Logic))
120
+ return;
121
+ const result = logic.toEmbeddedTSFile();
122
+ results.push(result);
123
+ logic.sourceMap = result.sourceMap;
124
+ this.file2NodeMap.set(result.filePath, logic);
125
+ }
126
+ catch (err) {
127
+ console.log(err);
128
+ }
98
129
  });
99
130
  // view的生成
100
131
  naslServer.view2TSFile(module.views, results);
101
132
  module.processes.forEach((process) => {
102
- const result = process.toEmbeddedTSFile();
103
- results.push(result);
104
- process.sourceMap = result.sourceMap;
105
- this.file2NodeMap.set(result.filePath, process);
133
+ try {
134
+ const result = process.toEmbeddedTSFile();
135
+ results.push(result);
136
+ process.sourceMap = result.sourceMap;
137
+ this.file2NodeMap.set(result.filePath, process);
138
+ }
139
+ catch (err) {
140
+ console.log(err);
141
+ }
106
142
  });
107
143
  if (module instanceof concepts_1.App) {
108
144
  module.roles.forEach((role) => {
109
- const result = role.toEmbeddedTSFile();
110
- results.push(result);
111
- // sourceMap都存在目录级别内容下,在页面层级下去找
112
- role.sourceMap = result.sourceMap;
113
- this.file2NodeMap.set(result.filePath, role);
145
+ try {
146
+ const result = role.toEmbeddedTSFile();
147
+ results.push(result);
148
+ // sourceMap都存在目录级别内容下,在页面层级下去找
149
+ role.sourceMap = result.sourceMap;
150
+ this.file2NodeMap.set(result.filePath, role);
151
+ }
152
+ catch (err) {
153
+ console.log(err);
154
+ }
114
155
  });
115
156
  }
116
157
  },
117
158
  view2TSFile(viewsChildren, results) {
118
- // 子页面
119
- viewsChildren.forEach((view) => {
120
- const result = view.toEmbeddedTSFile();
121
- results.push(result);
122
- view.sourceMap = result.sourceMap;
123
- this.file2NodeMap.set(result.filePath, view);
124
- if (view.children.length) {
125
- naslServer.view2TSFile(view.children, results);
126
- }
127
- });
159
+ // 如果有子页面
160
+ if (viewsChildren && viewsChildren.length) {
161
+ viewsChildren.forEach((view) => {
162
+ try {
163
+ const result = view.toEmbeddedTSFile();
164
+ results.push(result);
165
+ view.sourceMap = result.sourceMap;
166
+ this.file2NodeMap.set(result.filePath, view);
167
+ if (view.children.length) {
168
+ naslServer.view2TSFile(view.children, results);
169
+ }
170
+ }
171
+ catch (err) {
172
+ console.log(err);
173
+ }
174
+ });
175
+ }
128
176
  },
129
177
  async openApp(app) {
130
178
  const results = [];
@@ -154,20 +202,16 @@ const naslServer = {
154
202
  callback();
155
203
  });
156
204
  },
157
- async importModule(module) {
158
- const results = [];
159
- try {
160
- naslServer.contentToFile(module, results);
161
- }
162
- catch (err) {
163
- console.log(err);
164
- }
165
- const files = results.map((result) => ({
166
- file: result.filePath,
167
- fileContent: result.code,
168
- }));
169
- await this.writeFiles(files);
170
- this._debugInFileStorage(module.parentNode, files);
205
+ async refreshApp(app) {
206
+ // 清除所有问题
207
+ diagnostic_1.default.clear();
208
+ await naslServer.deleteDirectoryFiles({ directoryName: '/embedded' });
209
+ // 清楚check count的数量
210
+ await this.messager.requestCommand('_clearTimeout');
211
+ // 重新加载app下内容
212
+ await naslServer.openApp(app);
213
+ // 重新check一遍所有内容
214
+ await naslServer.getDiagnosticRecordsAndPushAll();
171
215
  },
172
216
  /**
173
217
  * 初始化之前添加文件
@@ -182,14 +226,6 @@ const naslServer = {
182
226
  writeFiles(files) {
183
227
  return this.messager.requestCommand('writeFiles', files);
184
228
  },
185
- /**
186
- * 新增或修改文件
187
- * @param {*} files
188
- * @returns
189
- */
190
- outputFiles(files) {
191
- return this.messager.requestCommand('outputFiles', files);
192
- },
193
229
  /**
194
230
  * 新增、修改
195
231
  * 删除文件 文件用修改内容为空模拟,防止报错
@@ -198,15 +234,25 @@ const naslServer = {
198
234
  updateFiles(args) {
199
235
  return this.messager.requestCommand('updateFiles', args);
200
236
  },
237
+ /**
238
+ * 清除一个目录下的所有文件
239
+ */
240
+ deleteDirectoryFiles(args) {
241
+ return this.messager.requestCommand('deleteDirectoryFiles', args);
242
+ },
201
243
  _debugInFileStorage(node, openFiles) {
202
- // let app = node;
203
- // if (node.concept !== 'App') {
204
- // app = (node as any).rootNode || (node as any).app;
205
- // }
206
- // return Promise.all(openFiles.map(async (file) => {
207
- // const res = await axios.post('/api/App/debugEmbedded?id=' + app.id, file);
208
- // return res.data;
209
- // }));
244
+ /// #if process.env.NODE_ENV === 'development'
245
+ let app = node;
246
+ if (node.concept !== 'App') {
247
+ app = node.rootNode || node.app;
248
+ }
249
+ return Promise.all(openFiles.map(async (file) => {
250
+ const res = await storage_1.default.post('/api/App/debugEmbedded?id=' + app.id, file);
251
+ return res.data;
252
+ })).catch((e) => {
253
+ console.error(e);
254
+ });
255
+ /// #endif
210
256
  },
211
257
  open() {
212
258
  return this.messager.requestCommand('open');
@@ -220,7 +266,7 @@ const naslServer = {
220
266
  async references(args) {
221
267
  return (await this.messager.requestCommand('references', args))?.response;
222
268
  },
223
- getValueSelectCompletion(node, value) {
269
+ getValueSelectCompletion(node, value, noFilterList) {
224
270
  const { currentSource, fileNode } = naslServer.getCurrentSource(node);
225
271
  // console.log(currentSource, fileNode);
226
272
  if (currentSource && fileNode) {
@@ -231,6 +277,7 @@ const naslServer = {
231
277
  offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
232
278
  },
233
279
  value,
280
+ noFilterList,
234
281
  });
235
282
  }
236
283
  else {
@@ -247,7 +294,10 @@ const naslServer = {
247
294
  const types = reg.exec(displayString);
248
295
  // 取出提示的类型,组成是数组
249
296
  const typeList = types[1].split(' | ').map((item) => {
250
- if (item.includes(' ')) {
297
+ if (/\<([^()]+)\>/g.exec(item)) {
298
+ return item;
299
+ }
300
+ else if (item.includes(' ')) {
251
301
  const strs = item.split(' ');
252
302
  const type = strs[strs.length - 1];
253
303
  return type;
@@ -264,8 +314,7 @@ const naslServer = {
264
314
  return typeList;
265
315
  },
266
316
  async getTypeQuickinfo(node) {
267
- console.log(node);
268
- if (node instanceof concepts_1.Identifier) {
317
+ if (node && node instanceof concepts_1.BaseNode) {
269
318
  const callFunction = node.parentNode.parentNode;
270
319
  /**
271
320
  * currentSource callFunction 的节点,要去到当前节点的位置
@@ -287,23 +336,51 @@ const naslServer = {
287
336
  if (typeAnnotation) {
288
337
  res.push(typeAnnotation);
289
338
  }
290
- else if (type === 'unknown') {
339
+ else if (type === 'unknown' || type === 'never') {
291
340
  return null;
292
341
  }
293
342
  });
294
343
  if (!res.length) {
295
- res = coreTypeList_1.primitiveTypeList;
344
+ return [];
296
345
  }
297
- // 调整结构
298
- const dataTypeList = [{ title: '基础类型', children: res }];
299
- return dataTypeList;
346
+ else {
347
+ return [{ title: '基础类型', children: res }];
348
+ }
349
+ }
350
+ }
351
+ else {
352
+ // 字符串 和 inter
353
+ return [{ title: '基础类型', children: [coreTypeList_1.primitiveTypeList[4]] }];
354
+ }
355
+ },
356
+ async getDataSchemaType(node) {
357
+ if (!(node instanceof concepts_1.ViewElement))
358
+ return;
359
+ const { currentSource, fileNode } = naslServer.getCurrentSource(node);
360
+ const quickInfo = await naslServer._getTypeQuickinfo({
361
+ file: fileNode.getEmbeddedFilePath(),
362
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
363
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character) + `__elements.`.length,
364
+ });
365
+ if (quickInfo.responseRequired) {
366
+ const displayString = quickInfo?.response?.displayString || '';
367
+ const flag = displayString.includes('<') && displayString.includes('>');
368
+ if (flag) {
369
+ let str = '';
370
+ const types = naslServer.getDisplayString2Type(displayString);
371
+ if (Array.isArray(types) && types.length) {
372
+ const type = types[0];
373
+ str = type === 'any' || type === 'unknown' || type === 'never' ? '' : type;
374
+ }
375
+ return str;
300
376
  }
301
377
  }
378
+ return '';
302
379
  },
303
380
  _getTypeQuickinfo(args) {
304
381
  return this.messager.requestCommand('quickInfo', args);
305
382
  },
306
- getSelectNextCompletion(node) {
383
+ getSelectNextCompletion(node, noFilterList) {
307
384
  const { currentSource, fileNode } = naslServer.getCurrentSource(node);
308
385
  // console.log(currentSource, fileNode);
309
386
  if (currentSource && fileNode) {
@@ -313,6 +390,7 @@ const naslServer = {
313
390
  line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
314
391
  offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
315
392
  },
393
+ noFilterList,
316
394
  });
317
395
  }
318
396
  else {
@@ -344,7 +422,7 @@ const naslServer = {
344
422
  });
345
423
  // 语义诊断
346
424
  record.semanticDiagnostics = record.semanticDiagnostics
347
- .map((diag) => this._resolveDiagnostic(diag, node.sourceMap))
425
+ .map((diag) => this._resolveDiagnostic(diag, node))
348
426
  .filter((diag) => !!diag);
349
427
  // 建议诊断
350
428
  // 实体下的建议不用展示,因为都是平台自己写的逻辑
@@ -367,8 +445,8 @@ const naslServer = {
367
445
  });
368
446
  return records;
369
447
  },
370
- _resolveDiagnostic(diagnostic, sourceMap) {
371
- const minRange = this._findMinRange(diagnostic, sourceMap);
448
+ _resolveDiagnostic(diagnostic, fileNode) {
449
+ const minRange = this._findMinRange(diagnostic, fileNode);
372
450
  const tsErrorDetail = {
373
451
  severity: diagnostic.category === 'error' ? 'error' : 'warning',
374
452
  message: (0, translator_2.translateDiagnosticMessage)(diagnostic.text),
@@ -376,9 +454,8 @@ const naslServer = {
376
454
  originalDiagnostic: diagnostic,
377
455
  };
378
456
  if (minRange) {
379
- // let message = this.translateDiagnosticMessage(diagnostic.text);
380
457
  // 节点的error要置为true
381
- return naslServer._diagnosticSpecialTreatment(minRange, tsErrorDetail);
458
+ return (0, translator_2.naslNodeTranslateMessage)(minRange, tsErrorDetail);
382
459
  }
383
460
  else {
384
461
  // 没找到节点, 先把问题暴露出来
@@ -388,46 +465,9 @@ const naslServer = {
388
465
  };
389
466
  }
390
467
  },
391
- /**
392
- * 处理一些边界情况
393
- * @param minRange
394
- * @param tsErrorDetail 报错具体信息
395
- * @returns
396
- */
397
- _diagnosticSpecialTreatment(minRange, tsErrorDetail) {
398
- const text = tsErrorDetail.originalDiagnostic.text;
399
- // 有一些节点报错信息不向外暴露,缺失一些原生标签等等的展示
400
- if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
401
- if (text.startsWith(`'nasl.ui' has no exported member named `)) {
402
- return null;
403
- }
404
- else if (text.startsWith(`Property '`) && text.includes(`does not exist on type 'typeof ui'.`)) {
405
- return null;
406
- }
407
- else if (text.startsWith(`Namespace 'nasl.ui' has no exported member `)) {
408
- return null;
409
- }
410
- }
411
- if (/Expected (.+?) arguments, but got (.+?)./.exec(text)) {
412
- // bindevent本身现在就不传参数
413
- if (minRange.node instanceof concepts_1.BindEvent) {
414
- return null;
415
- }
416
- // 因为缺少参数时候有可能有特殊情况,因为原本少的多了就会找到 callLogic上,
417
- // 但是只少一个的时候就会找到准确的Argument上 需要特殊处理, ui层就可以统一处理
418
- if (minRange.node instanceof concepts_1.Argument) {
419
- minRange.node = minRange.node.parentNode;
420
- }
421
- }
422
- minRange.node.tsErrorDetail = tsErrorDetail;
423
- return {
424
- id: minRange.node.id,
425
- node: minRange.node,
426
- ...tsErrorDetail,
427
- };
428
- },
429
- _findMinRange(diagnostic, sourceMap) {
468
+ _findMinRange(diagnostic, fileNode) {
430
469
  let minRange;
470
+ const sourceMap = fileNode.sourceMap;
431
471
  for (const [node, item] of sourceMap.entries()) {
432
472
  /**
433
473
  * 当前内容的开始行 <= 诊断开始的行 &&
@@ -457,49 +497,16 @@ const naslServer = {
457
497
  }
458
498
  }
459
499
  if (!minRange) {
500
+ if (fileNode instanceof concepts_1.View) {
501
+ return { node: fileNode, item: sourceMap.get(fileNode) };
502
+ }
460
503
  console.log(diagnostic, 'diagnostic');
461
504
  console.log(sourceMap, 'sourceMap');
462
505
  console.log(minRange, '需要特殊看下,为什么没找到内容-------------');
463
506
  }
464
507
  return minRange;
465
508
  },
466
- // 查找引用
467
- async findReferences(node) {
468
- console.log(node);
469
- const refsList = await naslServer._isHaveRef(node, true);
470
- console.log(refsList, 'refsList');
471
- // refsList = refsList.filter((item) =>
472
- // // 不是创建者
473
- // item.isDefinition !== true);
474
- let result = {};
475
- const resMap = {};
476
- try {
477
- refsList.forEach((record) => {
478
- const fileNode = this.file2NodeMap.get(record.file);
479
- if (!fileNode)
480
- return;
481
- const minRange = this._findMinRange(record, fileNode.sourceMap);
482
- // 过滤一把不需要改的信息
483
- if (minRange) {
484
- // 如果查找引用查到自己里面的引用不展示
485
- // 因为view生成的特殊性
486
- if (minRange.node === node || (minRange.node instanceof concepts_1.View && node instanceof concepts_1.View)) {
487
- return;
488
- }
489
- // 拼装树
490
- naslServer._getTreeMap(minRange, fileNode, resMap);
491
- }
492
- });
493
- console.log(resMap, 'resMap');
494
- result = naslServer.handleTreeMap(resMap);
495
- }
496
- catch (err) {
497
- console.log(err);
498
- }
499
- console.log(result);
500
- return result;
501
- },
502
- async _isHaveRef(node, isFind = false) {
509
+ async _isHaveRef(node) {
503
510
  const { currentSource, fileNode } = naslServer.getCurrentSource(node);
504
511
  let refsList = [];
505
512
  /**
@@ -513,13 +520,34 @@ const naslServer = {
513
520
  });
514
521
  refsList = [...newRefs.refs];
515
522
  }
523
+ else {
524
+ if (node instanceof concepts_1.Module) {
525
+ const lists = node.logics || node.structures || node.enums;
526
+ const moduleName = fileNode.getEmbeddedFilePath();
527
+ if (lists.length) {
528
+ const item = lists[0];
529
+ const { fileNode } = naslServer.getCurrentSource(item);
530
+ const newRefs = await naslServer.references({
531
+ file: fileNode.getEmbeddedFilePath(),
532
+ line: 1,
533
+ offset: 22, //固定的位置,module的位置信息
534
+ });
535
+ refsList = newRefs.refs.filter((item) => !item.file.startsWith(moduleName));
536
+ // 多塞一个 ,删除的时候就有值了, 上面过滤了之后可能是空的
537
+ refsList.unshift(newRefs.refs[0]);
538
+ }
539
+ }
540
+ }
516
541
  // 如果是entity就需要在单独,查一边来修改名字
517
542
  if (node instanceof concepts_1.Entity) {
518
543
  // 过滤一把不需要改的信息
519
- refsList = refsList.filter((item) =>
544
+ refsList = refsList.filter((item) => fileNode.getEmbeddedFilePath() !== item.file || item.isDefinition === true);
520
545
  // 不再当前文件里
521
546
  // 或者在当前列表但是位置小于entity的结束位置
522
- fileNode.getEmbeddedFilePath() !== item.file);
547
+ }
548
+ if (node instanceof concepts_1.Return) {
549
+ // 过滤一下最后出去的值
550
+ refsList = refsList.filter((item) => !item.lineText.includes('return '));
523
551
  }
524
552
  // 如果是参数, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来
525
553
  if (node instanceof concepts_1.Param && node.parentNode instanceof concepts_1.Logic) {
@@ -532,8 +560,8 @@ const naslServer = {
532
560
  });
533
561
  refsList = [...refsList, ...parentRefs.refs];
534
562
  }
535
- // 如果是参数, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来
536
- if (node instanceof concepts_1.Param && node.parentNode instanceof concepts_1.View && isFind) {
563
+ // 如果是参数修改, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来d
564
+ if (node instanceof concepts_1.Param && node.parentNode instanceof concepts_1.View) {
537
565
  const viewNode = node.parentNode;
538
566
  const { currentSource } = naslServer.getCurrentSource(viewNode);
539
567
  const code = currentSource.code;
@@ -547,45 +575,53 @@ const naslServer = {
547
575
  refsList = [...refsList, ...filterViewRefs];
548
576
  }
549
577
  /**
578
+ * 暂时不要了, 因为生成的结构发生了变化
550
579
  * view 因为不是嵌套的,所以不能用最前面的变量查找,所以要单独处理一下
551
580
  * 找到第一个 { 之前的变量 进行修改
552
581
  * 如果是VIew的查找,比较特殊,他查的是当前抛出的 {} 大括号前的
553
582
  * 最后一个,因为生成的规则不一样
554
583
  */
555
- if (node instanceof concepts_1.View) {
556
- const code = currentSource.code;
557
- const viewIndex = code.indexOf(' {');
558
- const viewRefs = await naslServer.references({
559
- file: fileNode.getEmbeddedFilePath(),
560
- line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
561
- offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character + viewIndex),
562
- });
563
- refsList = [...viewRefs.refs];
564
- }
584
+ // if (node instanceof View) {
585
+ // const code = currentSource.code;
586
+ // const viewIndex = code.indexOf(' {');
587
+ // const viewRefs = await naslServer.references({
588
+ // file: (fileNode as FileNode).getEmbeddedFilePath(),
589
+ // line: lsp2tspNumber(currentSource.range.start.line),
590
+ // offset: lsp2tspNumber(currentSource.range.start.character + viewIndex),
591
+ // });
592
+ // refsList = [...viewRefs.refs];
593
+ // }
565
594
  /**
566
595
  * elements 需要查的是__elements.后面的那个内容,过滤两个为了生成内容的节点
567
596
  */
568
597
  if (node instanceof concepts_1.ViewElement) {
569
- const code = currentSource.code;
570
- const prefix = '__elements.';
571
- const prefixIndex = code.indexOf(prefix) !== -1 ? code.indexOf(prefix) : 0;
572
- const methodsNameIndex = prefixIndex + prefix.length;
573
- const methods = await naslServer.references({
574
- file: fileNode.getEmbeddedFilePath(),
575
- line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
576
- offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character + methodsNameIndex),
577
- });
578
- const methodRefs = methods.refs.filter((item) => {
579
- if (item.lineText.includes('__elements.') && item.lineText.includes('new nasl.ui.')) {
580
- return false;
581
- }
582
- if (item.lineText.includes(': <nasl.ui.')) {
583
- return false;
584
- }
585
- return true;
586
- });
587
- refsList = [...methodRefs];
598
+ if (currentSource) {
599
+ const code = currentSource.code;
600
+ const prefix = '__elements.';
601
+ const prefixIndex = code.indexOf(prefix) !== -1 ? code.indexOf(prefix) : 0;
602
+ const methodsNameIndex = prefixIndex + prefix.length;
603
+ const methods = await naslServer.references({
604
+ file: fileNode.getEmbeddedFilePath(),
605
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
606
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character + methodsNameIndex),
607
+ });
608
+ const methodRefs = [];
609
+ methods.refs.forEach((item) => {
610
+ // 定义里的格式,在删除的时候留下来占位
611
+ // 重命名的时候会过滤
612
+ // 这里只过滤 __elements.button = new nasl.ui.Button<any>这种格式
613
+ // if (item.lineText.includes('__elements.') && item.lineText.includes('new nasl.ui.'))
614
+ // return false;
615
+ // 处理声明组件名可能重复的问题, 查找引用不提示
616
+ const find = methodRefs.find((findItem) => item.lineText === findItem.lineText && item.lineText.includes(': nasl.ui.'));
617
+ if (!find) {
618
+ methodRefs.push(item);
619
+ }
620
+ });
621
+ refsList = [...methodRefs];
622
+ }
588
623
  }
624
+ console.log(refsList, 'refsList');
589
625
  return refsList;
590
626
  },
591
627
  /**
@@ -603,13 +639,17 @@ const naslServer = {
603
639
  const fileNode = this.file2NodeMap.get(record.file);
604
640
  if (!fileNode)
605
641
  return null;
606
- const minRange = this._findMinRange(record, fileNode.sourceMap);
642
+ const minRange = this._findMinRange(record, fileNode);
607
643
  if (minRange) {
608
644
  // 如果节点是TypeAnnotation类型,
609
645
  // 很复杂,可能是多级嵌套结构
610
646
  // 不一定只修改typeName
611
647
  if (minRange.node instanceof concepts_1.TypeAnnotation) {
612
648
  // console.log(record);
649
+ // 如果是fake的逻辑,内部的重命名都不需要修改
650
+ // if ((minRange.node?.parentNode as any).logic && (minRange.node?.parentNode as any).logic?.fake) {
651
+ // return null;
652
+ // }
613
653
  minRange.setTypeMethods = 'setTypeName';
614
654
  }
615
655
  // 如果节点是logic修改引发calllogic修改
@@ -617,11 +657,11 @@ const naslServer = {
617
657
  minRange.setTypeMethods = 'setCalleeName';
618
658
  }
619
659
  if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.ViewElement) {
620
- minRange.setTypeMethods = 'setCalleeName';
660
+ minRange.setTypeMethods = 'setCalleeNamespace';
621
661
  minRange.newValue = 'elements.' + newValue + '.logics';
622
662
  }
623
663
  // 如果节点是实体修改引发calllogic修改
624
- if (minRange.node instanceof concepts_1.CallLogic && (node instanceof concepts_1.Entity || node instanceof concepts_1.View)) {
664
+ if (minRange.node instanceof concepts_1.CallLogic && (node instanceof concepts_1.Entity || node instanceof concepts_1.View || node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
625
665
  // 匹配到的内容,当前这一行的内容;
626
666
  // 因为要用下面的点位信息
627
667
  /**
@@ -643,27 +683,29 @@ const naslServer = {
643
683
  const end = record.end.offset - index - 1;
644
684
  // 新的完整的value
645
685
  let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
646
- newTsNameSpace = newTsNameSpace.replace(/.$/g, '.');
686
+ newTsNameSpace = newTsNameSpace.replace(/.\$/g, '.');
647
687
  minRange.setTypeMethods = 'setCalleeNamespace';
648
688
  minRange.newValue = newTsNameSpace;
649
689
  }
650
690
  // 如果参数修改影响了 callLogic
651
691
  if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.Param) {
692
+ return null;
652
693
  // 逻辑第几个位置发生修改,对应的calllogic对应位置的内容要进行修改
653
- const nodeArguments = minRange.node.arguments;
654
- const LogicNode = node.parentNode;
655
- const paramIndex = LogicNode.params.findIndex((param) => param === node);
656
- console.log(node, nodeArguments);
657
- if (paramIndex !== -1) {
658
- minRange.setTypeMethods = 'setArgumentName';
659
- minRange.newValue = {
660
- argument: nodeArguments[paramIndex],
661
- newKeyword: newValue,
662
- };
663
- }
664
- else {
665
- return null;
666
- }
694
+ // minRange.setTypeMethods = 'setArgumentName';
695
+ // const nodeArguments = minRange.node.arguments;
696
+ // minRange.newValue = [...nodeArguments];
697
+ // const LogicNode = node.parentNode;
698
+ // const paramIndex = (LogicNode as Logic).params.findIndex((param) => param === node);
699
+ // console.log(node, nodeArguments);
700
+ // if (paramIndex !== -1) {
701
+ // minRange.setTypeMethods = 'setArgumentName';
702
+ // minRange.newValue = {
703
+ // argument: nodeArguments[paramIndex],
704
+ // newKeyword: newValue,
705
+ // };
706
+ // } else {
707
+ // return null;
708
+ // }
667
709
  }
668
710
  // 如果节点是Identifier表达式
669
711
  if (minRange.node instanceof concepts_1.Identifier) {
@@ -685,6 +727,11 @@ const naslServer = {
685
727
  minRange.newValue = newTextValue;
686
728
  }
687
729
  }
730
+ // 如果是枚举修改,枚举的值刚好在Identifier 中选了 就修改值
731
+ if (minRange.node instanceof concepts_1.Identifier && node instanceof concepts_1.Enum) {
732
+ minRange.newValue = newValue;
733
+ minRange.setTypeMethods = 'setName';
734
+ }
688
735
  // 如果修改逻辑,改到了Identifier表达式,只能说明是在属性里有使用了
689
736
  if (minRange.node instanceof concepts_1.Identifier && node instanceof concepts_1.Logic) {
690
737
  minRange.newValue = newValue;
@@ -763,7 +810,13 @@ const naslServer = {
763
810
  // 如果是view也需要加前缀
764
811
  // logic 和 views名称修改 可能会触发bindEvent修改
765
812
  if (minRange.node instanceof concepts_1.BindEvent) {
766
- /**
813
+ // 页面逻辑直接赋值就可以, 因为是相对路径
814
+ if ((node instanceof concepts_1.ViewElement)) {
815
+ minRange.setTypeMethods = 'setCalleeNamespace';
816
+ minRange.newValue = 'elements.' + newValue + '.logics';
817
+ }
818
+ else {
819
+ /**
767
820
  * 如果namespce是 'app.views.Student.views.404.views.505.views.update'
768
821
  * 在ts中会是'app.views.Student.views.$404.views.$505.views.update'
769
822
  * 但是505 要改名为 666 ,要存的是666
@@ -772,26 +825,44 @@ const naslServer = {
772
825
  * 2.在匹配到的内容中取转后的namespace的位置
773
826
  * 3.然后把namespace中的 $替换成 ''
774
827
  */
775
- const tsCalleeNamespace = minRange.node.tsCalleeNamespace;
776
- const tsName = minRange.node.tsName;
777
- const oldValue = tsCalleeNamespace + '.' + tsName;
778
- // 先看下标位置
779
- const lineText = record.lineText;
780
- const index = lineText.indexOf(oldValue);
781
- // 在把开始结束位置的-开始位置,来知道是哪里要替换
782
- const start = record.start.offset - index - 1;
783
- const end = record.end.offset - index - 1;
784
- // 新的完整的value
785
- if (start > tsCalleeNamespace.length) {
786
- minRange.setTypeMethods = 'setCalleeName';
787
- minRange.newValue = newValue;
828
+ const tsCalleeNamespace = minRange.node.tsCalleeNamespace;
829
+ const oldValue = tsCalleeNamespace;
830
+ // 先看下标位置
831
+ const lineText = record.lineText;
832
+ const index = lineText.indexOf(oldValue);
833
+ // 在把开始结束位置的-开始位置,来知道是哪里要替换
834
+ const start = record.start.offset - index - 1;
835
+ const end = record.end.offset - index - 1;
836
+ // 新的完整的value
837
+ if (start > tsCalleeNamespace.length) {
838
+ minRange.setTypeMethods = 'setCalleeName';
839
+ minRange.newValue = newValue;
840
+ }
841
+ else {
842
+ // 新的完整的value
843
+ let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
844
+ minRange.setTypeMethods = 'setCalleeNamespace';
845
+ newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
846
+ minRange.newValue = newTsNameSpace;
847
+ }
848
+ }
849
+ }
850
+ if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
851
+ // 因为view是key value 绑定所以需要重新赋值
852
+ if (node.parentNode instanceof concepts_1.View) {
853
+ const nodeArguments = minRange.node.arguments;
854
+ const findArgument = nodeArguments.find((item) => node.name === item.keyword);
855
+ if (findArgument) {
856
+ minRange.setTypeMethods = 'setArgumentsKeyWord';
857
+ minRange.newValue = {
858
+ findArgument,
859
+ newKeyword: newValue,
860
+ };
861
+ }
788
862
  }
789
863
  else {
790
- // 新的完整的value
791
- let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
792
- minRange.setTypeMethods = 'setCalleeNamespace';
793
- newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
794
- minRange.newValue = newTsNameSpace;
864
+ // 如果是修改param查找到Destination就不操作
865
+ return null;
795
866
  }
796
867
  }
797
868
  if (minRange.node instanceof concepts_1.Interface && node instanceof concepts_1.Logic) {
@@ -807,13 +878,29 @@ const naslServer = {
807
878
  const newBindRoles = str.split(',');
808
879
  minRange.newValue = newBindRoles;
809
880
  }
881
+ if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.Entity) {
882
+ minRange.setTypeMethods = 'setEntityAsName';
883
+ }
884
+ if ((minRange.node instanceof concepts_1.QueryFromExpression || minRange.node instanceof concepts_1.QueryJoinExpression) && node instanceof concepts_1.Entity) {
885
+ minRange.setTypeMethods = 'setEntityName';
886
+ }
887
+ if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.EntityProperty) {
888
+ minRange.setTypeMethods = 'setPropertyName';
889
+ }
890
+ // 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
891
+ if ((minRange.node instanceof concepts_1.Param || minRange.node instanceof concepts_1.Variable || minRange.node instanceof concepts_1.Return) && (node instanceof concepts_1.Entity || node instanceof concepts_1.Enum || node instanceof concepts_1.Structure)) {
892
+ return null;
893
+ }
894
+ if (minRange.node instanceof concepts_1.Destination && (node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
895
+ return null;
896
+ }
810
897
  // 枚举修改枚举名,比较特殊
811
898
  if (minRange.node instanceof concepts_1.EnumItem && node instanceof concepts_1.Enum) {
812
899
  // 什么都不做,用来跳过修改
813
900
  return null;
814
901
  }
815
- // 如果是修改param查找到logic就不操作
816
- if (minRange.node instanceof concepts_1.Logic && node instanceof concepts_1.Param) {
902
+ // params修改 查找bindevent不需要修改
903
+ if (minRange.node instanceof concepts_1.BindEvent && node instanceof concepts_1.Param) {
817
904
  return null;
818
905
  }
819
906
  // 如果是子页面修改
@@ -821,8 +908,39 @@ const naslServer = {
821
908
  if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.View && minRange.node !== node) {
822
909
  return null;
823
910
  }
911
+ /**
912
+ * 屏蔽组件生成内容块中的变量或者逻辑,出现在表格选择中。在bindAttr中还会有,所以过滤一把
913
+ */
914
+ if ((minRange.node instanceof concepts_1.Identifier || minRange.node instanceof concepts_1.MemberExpression) && node instanceof concepts_1.Param && minRange.node.parentNode instanceof concepts_1.BindAttribute) {
915
+ return null;
916
+ }
917
+ // 修改element引发view改名
918
+ if (node instanceof concepts_1.ViewElement && minRange.node instanceof concepts_1.View) {
919
+ return null;
920
+ }
921
+ // params修改 查找View不需要修改
824
922
  // 逻辑改名,触发了在定义里面的,element定义,的值,直接掠过
825
- if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.Logic) {
923
+ if (minRange.node instanceof concepts_1.View && (node instanceof concepts_1.Logic || node instanceof concepts_1.Param)) {
924
+ /**
925
+ * 这里过滤一下,一些查找引用,重复的内容,直接屏蔽掉,防止操作重复
926
+ * 因为在生成的时候 ,可能弄了一些副作用的引用
927
+ */
928
+ // 本来是想在上面过滤一把的先放到这里匹配这两个的时候 就会找到
929
+ // refsList = refsList.filter((item) => {
930
+ // 屏蔽组件查找查到定义这里,也过滤一下
931
+ // if (item.lineText.includes(': nasl.ui.'))
932
+ // return false;
933
+ // return true;
934
+ // });
935
+ return null;
936
+ }
937
+ /**
938
+ * 理论上 logic setName只能自己触发,别的地方查到引用都不用重命名
939
+ * 流程改名不触发Logic改名
940
+ * 如果是修改param查找到logic就不操作
941
+ * 除非想在内部修改别的内容所以暂时屏蔽掉
942
+ */
943
+ if (minRange.node instanceof concepts_1.Logic && node !== minRange.node) {
826
944
  return null;
827
945
  }
828
946
  }
@@ -839,40 +957,83 @@ const naslServer = {
839
957
  },
840
958
  _addParamsPrepare(node, refsList) {
841
959
  const App = node.rootNode;
842
- const LogicNode = node.parentNode;
960
+ const parantNode = node.parentNode;
843
961
  // 收集修改
844
962
  App.emit('collect:start', {
845
963
  actionMsg: '增加逻辑参数',
846
964
  });
847
965
  node.create({
848
966
  index: 0,
849
- parentNode: LogicNode,
967
+ parentNode: parantNode,
850
968
  parentKey: node.parentKey,
851
969
  });
852
970
  refsList.forEach((record) => {
853
971
  const fileNode = this.file2NodeMap.get(record.file);
854
972
  if (!fileNode)
855
973
  return null;
856
- const minRange = this._findMinRange(record, fileNode.sourceMap);
974
+ const minRange = this._findMinRange(record, fileNode);
857
975
  if (minRange) {
858
976
  // 如果找到节点是callLogic就去更新
859
977
  if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.Param) {
860
- minRange.node.setCalleeArgName(LogicNode);
978
+ minRange.node.setCalleeArgName((parantNode));
979
+ }
980
+ // 如果节点参数增加页面也要更新
981
+ if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
982
+ minRange.node.setViewArgument((parantNode));
861
983
  }
862
984
  }
863
985
  });
864
986
  // 结束修改 ,批量操作
865
987
  App.emit('collect:end');
866
988
  },
989
+ // 查找引用
990
+ async findReferences(node) {
991
+ let refsList = await naslServer._isHaveRef(node);
992
+ // 如果查找引用查到自己里面的引用不展示
993
+ refsList = refsList.filter((item) => {
994
+ // 自己引用自己的过滤掉
995
+ // 删除的时候过滤一把组件删除提示
996
+ // 展示组件自己屏蔽掉
997
+ return !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.'));
998
+ });
999
+ // 最后返回的结果
1000
+ let result = new Map();
1001
+ // 树的构造,key: 一个file的node, 值是 [[logic, params],[logic, returns]]
1002
+ const resMap = new Map();
1003
+ // 普通节点和要输出的节点做一个映射,为了引用地址一样
1004
+ const nodeMap = new Map();
1005
+ try {
1006
+ refsList.forEach((record) => {
1007
+ const fileNode = this.file2NodeMap.get(record.file);
1008
+ if (!fileNode)
1009
+ return;
1010
+ const minRange = this._findMinRange(record, fileNode);
1011
+ // 过滤一把不需要改的信息
1012
+ if (minRange) {
1013
+ // 拼装树
1014
+ naslServer._getTreeMap(minRange, fileNode, resMap, nodeMap);
1015
+ }
1016
+ });
1017
+ console.log(resMap, 'resMap');
1018
+ if (resMap.size > 0) {
1019
+ result = naslServer.handleTreeMap(resMap);
1020
+ }
1021
+ }
1022
+ catch (err) {
1023
+ console.log(err);
1024
+ }
1025
+ console.log(result);
1026
+ return result;
1027
+ },
867
1028
  // 获取节点的上层渲染
868
- _getTreeMap(minRange, fileNode, resMap) {
1029
+ _getTreeMap(minRange, fileNode, resMap, nodeMap) {
869
1030
  const minRangeNode = minRange.node;
870
1031
  let parantNode = minRangeNode;
871
1032
  // 顺序队列
872
1033
  const queue = [];
873
1034
  // 先插入自己,如果没有在往上找,
874
1035
  // 一直到file节点的父级
875
- while (parantNode !== fileNode.parentNode) {
1036
+ while (!(parantNode instanceof concepts_1.App)) {
876
1037
  // 找到上一级 在map对象中构造出他的子集
877
1038
  const currentNode = parantNode;
878
1039
  parantNode = parantNode.parentNode;
@@ -883,7 +1044,9 @@ const naslServer = {
883
1044
  // 排除一些不放入集合的节点
884
1045
  let isNeedPush = true;
885
1046
  // 如果不是ViewElement 或者 Assignment , 或者如果是的话, 排除l-root
886
- if (currentNode instanceof concepts_1.ViewElement && currentNode.tag !== 'l-root')
1047
+ if (currentNode instanceof concepts_1.ViewElement && currentNode.tag === 'l-root')
1048
+ isNeedPush = false;
1049
+ else if (currentNode instanceof concepts_1.Argument)
887
1050
  isNeedPush = false;
888
1051
  else if (currentNode instanceof concepts_1.Assignment)
889
1052
  isNeedPush = false;
@@ -893,13 +1056,11 @@ const naslServer = {
893
1056
  isNeedPush = false;
894
1057
  else if (currentNode instanceof concepts_1.QueryFromExpression)
895
1058
  isNeedPush = false;
896
- else if (currentNode.concept === parantNode.concept)
897
- isNeedPush = false;
1059
+ // 需要放到数组中
898
1060
  if (isNeedPush) {
899
1061
  // 名称
900
- let name = currentNode.name || currentNode.concept;
901
1062
  // 赋值图标
902
- let icon = currentNode.concept && currentNode.concept.replace(/^./, (m) => m.toLowerCase());
1063
+ let icon = '';
903
1064
  if (currentNode instanceof concepts_1.ViewElement)
904
1065
  icon = 'element';
905
1066
  else if (currentNode instanceof concepts_1.BindAttribute)
@@ -908,55 +1069,34 @@ const naslServer = {
908
1069
  icon = 'logicNode';
909
1070
  else if (currentNode instanceof concepts_1.CallLogic) {
910
1071
  icon = 'interface';
911
- name = '调用逻辑';
912
1072
  }
913
- queue.unshift({ name, node: currentNode, expanded: true, icon });
1073
+ // 相同节点使用一个引用
1074
+ if (nodeMap.get(currentNode)) {
1075
+ queue.unshift(nodeMap.get(currentNode));
1076
+ }
1077
+ else {
1078
+ const quoteNode = { node: currentNode, expanded: true, icon };
1079
+ nodeMap.set(currentNode, quoteNode);
1080
+ queue.unshift(quoteNode);
1081
+ }
914
1082
  }
915
1083
  }
916
- const key = fileNode.name;
917
1084
  // 一个logic 或者 view可能会有多个顺序队列
918
- if (resMap[key]) {
919
- // // 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
920
- // let equalFlag = false;
921
- // const queues = resMap[key].queue;
922
- // queues.forEach((item) => {
923
- // if (item.length === queue.length) {
924
- // let equalIndex = 0;
925
- // item.forEach((queueItem, index) => {
926
- // if (queueItem.name === queue[index].name)
927
- // equalIndex++;
928
- // });
929
- // console.log(equalIndex)
930
- // if (equalIndex === queue.length)
931
- // equalFlag = true;
932
- // }
933
- // });
934
- // // 如果有值就return
935
- // if (equalFlag)
936
- // return;
937
- queue.length && resMap[key].queue.push(queue);
1085
+ if (resMap.get(fileNode)) {
1086
+ // 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
1087
+ resMap.get(fileNode).push(queue);
938
1088
  }
939
1089
  else {
940
- resMap[key] = {
941
- queue: queue.length ? [queue] : [],
942
- concept: fileNode.concept,
943
- name: fileNode.name,
944
- node: fileNode,
945
- };
1090
+ resMap.set(fileNode, [queue]);
946
1091
  }
947
1092
  },
948
- handleTreeMap(tree) {
949
- const treeNodeMap = {};
950
- for (const [sub, val] of Object.entries(tree)) {
1093
+ handleTreeMap(resMap) {
1094
+ const treeNodeMap = new Map();
1095
+ resMap.forEach((value, fileNode) => {
951
1096
  // 循环处理tree的queue
952
- const treeObj = naslServer.handleTreeQueue(val.queue);
953
- if (treeNodeMap[val.concept]) {
954
- treeNodeMap[val.concept].push(treeObj);
955
- }
956
- else {
957
- treeNodeMap[val.concept] = [treeObj];
958
- }
959
- }
1097
+ const treeObj = naslServer.handleTreeQueue(value);
1098
+ treeNodeMap.set(fileNode, treeObj);
1099
+ });
960
1100
  return treeNodeMap;
961
1101
  },
962
1102
  /**
@@ -965,30 +1105,27 @@ const naslServer = {
965
1105
  * @param arr 当前页面下的queue的二维数组,一个数组下有多条链路
966
1106
  * @returns 最后要使用到的节点和对应的子集
967
1107
  */
968
- handleTreeQueue(arr) {
969
- const map = {};
1108
+ handleTreeQueue(queueLists) {
1109
+ const map = new Map();
970
1110
  let root = null;
971
- if (!arr.length)
1111
+ if (!queueLists.length)
972
1112
  return;
973
- for (const sub of arr) {
1113
+ for (const queueList of queueLists) {
974
1114
  let preNode = null;
975
- for (const item of sub) {
976
- const node = item;
977
- const key = item.name;
978
- if (!map[key]) {
979
- map[key] = [];
1115
+ for (const queueItem of queueList) {
1116
+ if (!map.get(queueItem)) {
1117
+ map.set(queueItem, []);
980
1118
  }
981
1119
  if (preNode) {
982
- const preKey = preNode.name;
983
- const find = map[preKey].find((item) => node.name === item.name);
1120
+ const find = map.get(preNode).find((item) => item === queueItem);
984
1121
  if (!find) {
985
- map[preKey].push(node);
1122
+ map.get(preNode).push(queueItem);
986
1123
  }
987
1124
  }
988
1125
  else {
989
- root = node;
1126
+ root = queueItem;
990
1127
  }
991
- preNode = node;
1128
+ preNode = queueItem;
992
1129
  }
993
1130
  }
994
1131
  const children = naslServer._recursionCreateResult(root, map);
@@ -1001,24 +1138,24 @@ const naslServer = {
1001
1138
  * @returns 当前节点,最后输出所有节点
1002
1139
  */
1003
1140
  _recursionCreateResult(root, map) {
1004
- const node = root;
1005
- const rootKey = root.name;
1006
- const children = map[rootKey].map((item) => naslServer._recursionCreateResult(item, map));
1141
+ const children = map.get(root).map((item) => naslServer._recursionCreateResult(item, map));
1007
1142
  if (children && children.length) {
1008
- node.children = children;
1143
+ root.children = children;
1009
1144
  }
1010
- return node;
1145
+ return root;
1011
1146
  },
1012
1147
  /**
1013
1148
  * 获取
1014
1149
  * 当前this上下文 的Source 和 父级文件级别的节点
1015
1150
  */
1016
1151
  getCurrentSource(node) {
1152
+ if (node instanceof concepts_1.App || node instanceof concepts_1.Theme)
1153
+ return { fileNode: null };
1017
1154
  let sourceMap = node.sourceMap;
1018
1155
  let fileNode = node;
1019
1156
  // 如果没有sourceMap,就继续向上找 ,或者到module结束
1020
1157
  // 如果 节点找到 app 或者module 停止
1021
- while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module)) {
1158
+ while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module) && !(fileNode instanceof concepts_1.View)) {
1022
1159
  fileNode = fileNode.parentNode;
1023
1160
  sourceMap = fileNode?.sourceMap;
1024
1161
  }
@@ -1041,7 +1178,6 @@ const naslServer = {
1041
1178
  // 获取element方法的可选值
1042
1179
  getFieldKeySelectCompletion(node, fieldKey) {
1043
1180
  const { currentSource, fileNode } = naslServer.getCurrentSource(node);
1044
- console.log(currentSource);
1045
1181
  if (currentSource && fileNode) {
1046
1182
  return naslServer._getFieldKeySelectCompletion({
1047
1183
  file: fileNode.getEmbeddedFilePath(),
@@ -1090,11 +1226,51 @@ async function handleDelete(fileNode, targetNode, result) {
1090
1226
  }
1091
1227
  // 更新文件之后
1092
1228
  await naslServer.updateFiles({ outputFiles });
1093
- const filesToCheck = new Set();
1094
1229
  newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1095
- console.log('filesToCheck', filesToCheck, filesToCheck.size);
1096
- await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1097
1230
  }
1231
+ concepts_1.BaseNode.prototype.findReadOnlyLogicUsage = function () {
1232
+ let targetNode;
1233
+ if (this.parentNode.concept === 'Namespace' || this.parentNode.parentNode.concept === 'Namespace') {
1234
+ const sourceMap = this.parentNode.concept === 'Namespace' ? this.parentNode.parentNode.sourceMap : this.parentNode.parentNode.parentNode.sourceMap;
1235
+ for (const item of sourceMap) {
1236
+ const logic = item[0];
1237
+ if (this.concept === 'Logic') {
1238
+ if (logic instanceof concepts_1.Logic)
1239
+ if (logic.calleewholeKey === this.calleewholeKey) {
1240
+ targetNode = logic;
1241
+ break;
1242
+ }
1243
+ }
1244
+ else {
1245
+ if (logic instanceof concepts_1.Logic)
1246
+ if (logic.calleewholeKey === this.parentNode.calleewholeKey) {
1247
+ targetNode = logic;
1248
+ break;
1249
+ }
1250
+ }
1251
+ }
1252
+ }
1253
+ else if (this.parentNode.concept === 'Module') {
1254
+ // 父级是模块的还是用它本身去查找引用
1255
+ targetNode = this;
1256
+ }
1257
+ else {
1258
+ const sourceMap = this.parentNode.sourceMap;
1259
+ for (const item of sourceMap) {
1260
+ const logic = item[0];
1261
+ if (logic.getNamespace && logic.getNamespace() === this.getNamespace()) {
1262
+ targetNode = logic;
1263
+ break;
1264
+ }
1265
+ }
1266
+ }
1267
+ try {
1268
+ return naslServer.findReferences(targetNode);
1269
+ }
1270
+ catch (err) {
1271
+ console.log(err);
1272
+ }
1273
+ };
1098
1274
  // 查找引用
1099
1275
  concepts_1.BaseNode.prototype.findUsage = function findUsage() {
1100
1276
  try {
@@ -1151,6 +1327,7 @@ concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, u
1151
1327
  const confirmParms = {
1152
1328
  actionType: 'rename',
1153
1329
  node: this,
1330
+ newValue,
1154
1331
  };
1155
1332
  /**
1156
1333
  * nasl和vue的通信,回退,要触发vue的watch。
@@ -1181,15 +1358,38 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1181
1358
  * 查找这个节点是不是有依赖
1182
1359
  */
1183
1360
  const node = this;
1184
- const refsList = await naslServer._isHaveRef(node);
1185
- // console.log(refsList, 'refsList');
1361
+ let refsList = await naslServer._isHaveRef(node);
1362
+ // 删除的时候过滤一把组件删除提示
1363
+ refsList = refsList.filter((item) => {
1364
+ // 因为ui组件本身会多渲染一次,就先过滤一个
1365
+ return !(item.lineText.includes(': nasl.ui.'));
1366
+ });
1367
+ // 删除参数单独处理
1368
+ if (node instanceof concepts_1.Param) {
1369
+ const methodRefs = [];
1370
+ refsList.forEach((item) => {
1371
+ // 入参查找引用,查到logic 和自己,内容完全一样,就保留一个
1372
+ const find = methodRefs.find((findItem) => item.lineText === findItem.lineText);
1373
+ if (!find) {
1374
+ methodRefs.push(item);
1375
+ }
1376
+ });
1377
+ refsList = methodRefs;
1378
+ }
1379
+ // delete的弹框展示
1186
1380
  const confirmParms = {
1187
1381
  actionType: 'delete',
1188
1382
  tipFlag: false,
1189
1383
  node,
1384
+ icon: 'warning',
1190
1385
  };
1191
1386
  let callback = null;
1192
1387
  if (refsList.length <= 1) {
1388
+ // 页面组件直接删除然后return
1389
+ if (node instanceof concepts_1.ViewElement) {
1390
+ this.delete();
1391
+ return;
1392
+ }
1193
1393
  callback = () => {
1194
1394
  // Structure 和 Interface是内部有delete方法
1195
1395
  if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
@@ -1204,12 +1404,26 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1204
1404
  // 如果有依赖就有一个查找引用提示
1205
1405
  confirmParms.tipFlag = true;
1206
1406
  const node = this;
1407
+ // 删除页面或者流程
1408
+ if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
1409
+ /**
1410
+ * 查找这个页面是不是有依赖
1411
+ */
1412
+ let viewPath = this.getEmbeddedFilePath();
1413
+ viewPath = viewPath.slice(0, viewPath.length - 3);
1414
+ const find = refsList.find((record) => !record.file.includes(viewPath));
1415
+ // 如果没有别的文件的依赖,就直接delete
1416
+ if (!find) {
1417
+ this.delete();
1418
+ return;
1419
+ }
1420
+ }
1207
1421
  callback = () => {
1208
1422
  // removeParam
1209
1423
  // 跟rename 还不太一样,部分修改依赖修改好的值,然后在下面的修改需要把自己传递进去
1210
1424
  if (node instanceof concepts_1.Param) {
1211
1425
  const App = this.rootNode;
1212
- const logicNode = this.parentNode;
1426
+ const parentNode = this.parentNode;
1213
1427
  // 收集修改
1214
1428
  App.emit('collect:start', {
1215
1429
  actionMsg: '删除参数',
@@ -1219,10 +1433,13 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1219
1433
  const fileNode = naslServer.file2NodeMap.get(record.file);
1220
1434
  if (!fileNode)
1221
1435
  return null;
1222
- const minRange = naslServer._findMinRange(record, fileNode.sourceMap);
1436
+ const minRange = naslServer._findMinRange(record, fileNode);
1223
1437
  if (minRange) {
1224
1438
  if (minRange.node instanceof concepts_1.CallLogic) {
1225
- minRange.node.setCalleeArgName(logicNode);
1439
+ minRange.node.setCalleeArgName(parentNode);
1440
+ }
1441
+ if (minRange.node instanceof concepts_1.Destination) {
1442
+ minRange.node.setViewArgument(parentNode);
1226
1443
  }
1227
1444
  }
1228
1445
  });
@@ -1242,7 +1459,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1242
1459
  const fileNode = naslServer.file2NodeMap.get(record.file);
1243
1460
  if (!fileNode)
1244
1461
  return null;
1245
- const minRange = naslServer._findMinRange(record, fileNode.sourceMap);
1462
+ const minRange = naslServer._findMinRange(record, fileNode);
1246
1463
  if (minRange) {
1247
1464
  if (minRange.node instanceof concepts_1.Interface) {
1248
1465
  minRange.node.delete();
@@ -1251,6 +1468,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1251
1468
  });
1252
1469
  // 结束修改 ,批量操作
1253
1470
  App.emit('collect:end');
1471
+ return;
1254
1472
  }
1255
1473
  // 删除权限节点
1256
1474
  if (node instanceof concepts_1.Role) {
@@ -1264,7 +1482,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1264
1482
  const fileNode = naslServer.file2NodeMap.get(record.file);
1265
1483
  if (!fileNode)
1266
1484
  return null;
1267
- const minRange = naslServer._findMinRange(record, fileNode.sourceMap);
1485
+ const minRange = naslServer._findMinRange(record, fileNode);
1268
1486
  if (minRange) {
1269
1487
  if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
1270
1488
  // oldName旧的节点存的值
@@ -1280,6 +1498,10 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1280
1498
  App.emit('collect:end');
1281
1499
  return;
1282
1500
  }
1501
+ // 删除页面或者流程,如果上一步没有return 就说明他是有别的引用的,会有引用弹框
1502
+ if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
1503
+ this.delete();
1504
+ }
1283
1505
  // 其余的都直接调用删除
1284
1506
  // Structure 和 Interface是内部有delete方法
1285
1507
  if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
@@ -1328,18 +1550,21 @@ async function handleChange(fileNode, targetNode, result, action) {
1328
1550
  line: EmbeddedTSFileLineMap[fileNode.concept] ?? 2,
1329
1551
  offset: 6,
1330
1552
  });
1331
- const filesToCheck = new Set();
1332
1553
  newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1333
1554
  // 唤起建立连接弹框
1334
1555
  // 文件级别的建立连接采取提醒
1335
- if (fileNode === targetNode && action === 'create' && filesToCheck.size > 1) {
1336
- const confirmParms = {
1337
- actionType: 'createEstablishConnection',
1338
- node: fileNode,
1339
- };
1340
- (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
1556
+ if (action === 'create' && targetNode.__init) {
1557
+ // 清除临时状态, 完成本次创建
1558
+ delete targetNode.__init;
1559
+ if (fileNode === targetNode && filesToCheck.size > 1) {
1560
+ const confirmParms = {
1561
+ actionType: 'createEstablishConnection',
1562
+ node: fileNode,
1563
+ icon: 'success',
1564
+ };
1565
+ (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
1566
+ }
1341
1567
  }
1342
- await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1343
1568
  }
1344
1569
  /**
1345
1570
  * 重命名的更新
@@ -1352,7 +1577,6 @@ async function handleChange(fileNode, targetNode, result, action) {
1352
1577
  async function handleRename(fileNode, targetNode, result, oldFilePath) {
1353
1578
  // rename 场景
1354
1579
  const outputFiles = [{ file: result.filePath, fileContent: result.code }];
1355
- const filesToCheck = new Set();
1356
1580
  // 如果是要修改顶级文件名
1357
1581
  // file节点和当前改得是同一节点
1358
1582
  if (fileNode === targetNode) {
@@ -1383,35 +1607,101 @@ async function handleRename(fileNode, targetNode, result, oldFilePath) {
1383
1607
  });
1384
1608
  // 文件级别重命名,有依赖才唤起弹框
1385
1609
  // 唤起重命名,提示有连接弹框
1386
- if (newRefFileList.size > 1) {
1387
- const confirmParms = {
1388
- actionType: 'renameEstablishConnection',
1389
- node: fileNode,
1390
- };
1391
- (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
1392
- }
1610
+ // 重命名建立连接先不展示弹框了
1611
+ // if (newRefFileList.size > 1) {
1612
+ // const confirmParms = {
1613
+ // actionType: 'renameEstablishConnection',
1614
+ // node: fileNode,
1615
+ // icon: 'success',
1616
+ // };
1617
+ // invokeCommand('tsConfirm.open', confirmParms, () => {});
1618
+ // }
1393
1619
  }
1394
1620
  else {
1395
1621
  // 查一下当前属性依赖的文件
1396
1622
  const { currentSource, fileNode } = naslServer.getCurrentSource(targetNode);
1397
- const oldRefs = await naslServer.references({
1398
- file: fileNode.getEmbeddedFilePath(),
1399
- line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
1400
- offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
1401
- });
1402
- oldRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1403
- // 更新文件之后
1404
- await naslServer.updateFiles({ outputFiles });
1405
- const newRefs2 = await naslServer.references({
1406
- file: fileNode.getEmbeddedFilePath(),
1407
- line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
1408
- offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
1409
- });
1410
- newRefs2.refs.forEach((ref) => filesToCheck.add(ref.file));
1623
+ if (currentSource) {
1624
+ const oldRefs = await naslServer.references({
1625
+ file: fileNode.getEmbeddedFilePath(),
1626
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
1627
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
1628
+ });
1629
+ oldRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1630
+ // 更新文件之后
1631
+ await naslServer.updateFiles({ outputFiles });
1632
+ const newRefs2 = await naslServer.references({
1633
+ file: fileNode.getEmbeddedFilePath(),
1634
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
1635
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
1636
+ });
1637
+ newRefs2.refs.forEach((ref) => filesToCheck.add(ref.file));
1638
+ }
1639
+ }
1640
+ }
1641
+ /**
1642
+ * 处理一些节点操作,子节点需要更新并且check的场景
1643
+ * 因为删除,新增父页面,或者重命名会一起
1644
+ * 删除或者新增view而且他有子集 就要执行同样的操作
1645
+ * @param action 当前操作类型
1646
+ * @param fileNode 文件节点
1647
+ * @param targetNode 操作节点 这里要两个相等才会走家去面对哦逻辑
1648
+ * @param oldpath 触发内容的oldpath
1649
+ */
1650
+ async function incidentalAction(action, fileNode, targetNode, oldpath) {
1651
+ if ((action === 'create' || action === 'delete' || (action === 'update' && oldpath)) && fileNode === targetNode) {
1652
+ // 删除或者新增页面
1653
+ if (fileNode instanceof concepts_1.View && fileNode.children?.length) {
1654
+ const fileNodeChildren = fileNode.children;
1655
+ for (let i = 0; i < fileNodeChildren.length; i++) {
1656
+ const fileNodeItem = fileNodeChildren[i];
1657
+ const result = fileNodeItem.toEmbeddedTSFile();
1658
+ if (action === 'create') {
1659
+ await handleChange(fileNodeItem, fileNodeItem, result, action);
1660
+ await incidentalAction(action, fileNodeItem, fileNodeItem);
1661
+ }
1662
+ else if (action === 'delete') {
1663
+ await handleDelete(fileNodeItem, fileNodeItem, result);
1664
+ await incidentalAction(action, fileNodeItem, fileNodeItem);
1665
+ }
1666
+ else if (action === 'update' && oldpath) {
1667
+ const parentPath = oldpath.replace('.ts', '/');
1668
+ const currentOldPath = parentPath + fileNodeItem.name + '.ts';
1669
+ // 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
1670
+ await handleRename(fileNodeItem, fileNodeItem, result, currentOldPath);
1671
+ await incidentalAction(action, fileNodeItem, fileNodeItem, currentOldPath);
1672
+ }
1673
+ }
1674
+ ;
1675
+ }
1676
+ // 删除或新增模块
1677
+ // 需要把下面的哦内容全部都更新一遍
1678
+ if (fileNode instanceof concepts_1.Module) {
1679
+ const module = (targetNode);
1680
+ const results = [];
1681
+ naslServer.contentToFile(module, results);
1682
+ for (let i = 0; i < results.length; i++) {
1683
+ const result = results[i];
1684
+ const node = naslServer.file2NodeMap.get(result.filePath);
1685
+ if (action === 'create') {
1686
+ await handleChange(node, node, result, action);
1687
+ }
1688
+ else {
1689
+ await handleDelete(node, node, result);
1690
+ }
1691
+ }
1692
+ ;
1693
+ // 删除模块通知更新列表
1694
+ if (action === 'delete') {
1695
+ try {
1696
+ // 如果已经
1697
+ (0, common_1.invokeCommand)('module.delete', true);
1698
+ }
1699
+ catch (err) {
1700
+ console.log('module.delete', '组件销毁了,不用唤起了');
1701
+ }
1702
+ }
1703
+ }
1411
1704
  }
1412
- console.log('filesToCheck', filesToCheck, filesToCheck.size);
1413
- await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1414
- // outputFiles.map((file) => file.file));
1415
1705
  }
1416
1706
  async function receiveHandleChange($event) {
1417
1707
  // 行为
@@ -1420,7 +1710,11 @@ async function receiveHandleChange($event) {
1420
1710
  // 当前操作的文件节点
1421
1711
  const { fileNode } = naslServer.getCurrentSource(targetNode);
1422
1712
  // 如果是导入模块就,就引入对应模块,先不处理module和Configuration,下面的内容会自动创建
1423
- if (fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
1713
+ if (!fileNode || fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
1714
+ // module单独处理
1715
+ if (fileNode instanceof concepts_1.Module) {
1716
+ await incidentalAction(action, fileNode, targetNode);
1717
+ }
1424
1718
  return;
1425
1719
  }
1426
1720
  const result = fileNode.toEmbeddedTSFile();
@@ -1438,24 +1732,49 @@ async function receiveHandleChange($event) {
1438
1732
  ]);
1439
1733
  fileNode.sourceMap = result.sourceMap;
1440
1734
  if (action === 'update' || action === 'create') {
1441
- if ($event?.field !== 'name')
1735
+ if ($event?.field !== 'name') {
1442
1736
  await handleChange(fileNode, targetNode, result, action);
1737
+ await incidentalAction(action, fileNode, targetNode);
1738
+ }
1443
1739
  else {
1444
- await handleRename(fileNode, targetNode, result, fileNode.getEmbeddedFilePath($event.oldName));
1740
+ const oldpath = fileNode.getEmbeddedFilePath($event.oldObject.name);
1741
+ await handleRename(fileNode, targetNode, result, oldpath);
1742
+ await incidentalAction(action, fileNode, targetNode, oldpath);
1445
1743
  }
1446
1744
  }
1447
1745
  // 删除
1448
1746
  if (action === 'delete') {
1747
+ await incidentalAction(action, fileNode, targetNode);
1449
1748
  await handleDelete(fileNode, targetNode, result);
1450
1749
  }
1750
+ return true;
1451
1751
  }
1452
1752
  // 监听所有改变操作
1453
1753
  translator_1.embeddedTSEmitter.on('change', ($event) => {
1454
1754
  // 收集到一个行为集合
1455
1755
  const eventValue = $event.value;
1456
- eventValue.forEach((item) => {
1457
- receiveHandleChange(item.originEvent);
1756
+ const stackList = [];
1757
+ eventValue.forEach(async (item) => {
1758
+ stackList.push(item.originEvent);
1458
1759
  });
1760
+ // 异步状态机,一个完成了在执行下一个
1761
+ function next() {
1762
+ const item = stackList.shift();
1763
+ receiveHandleChange(item).then(async () => {
1764
+ if (stackList.length) {
1765
+ next();
1766
+ }
1767
+ else {
1768
+ console.log('filesToCheck', filesToCheck, filesToCheck.size);
1769
+ await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1770
+ filesToCheck.clear();
1771
+ }
1772
+ });
1773
+ }
1774
+ // 如果有长度开始执行状态机
1775
+ if (stackList.length) {
1776
+ next();
1777
+ }
1459
1778
  });
1460
1779
  naslServer.messager.options.context = naslServer;
1461
1780
  exports.default = naslServer;