@lcap/nasl 1.0.0-alpha.8 → 1.0.1

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 (460) hide show
  1. package/out/automate/engine/index.d.ts +3 -0
  2. package/out/automate/engine/index.js +414 -0
  3. package/out/automate/engine/index.js.map +1 -0
  4. package/out/automate/engine/operators.d.ts +13 -0
  5. package/out/automate/engine/operators.js +63 -0
  6. package/out/automate/engine/operators.js.map +1 -0
  7. package/out/automate/engine/uniqueName.d.ts +6 -0
  8. package/out/automate/engine/uniqueName.js +39 -0
  9. package/out/automate/engine/uniqueName.js.map +1 -0
  10. package/out/automate/engine/utils.d.ts +24 -0
  11. package/out/automate/engine/utils.js +363 -0
  12. package/out/automate/engine/utils.js.map +1 -0
  13. package/out/common/BaseNode.d.ts +20 -0
  14. package/out/common/BaseNode.js +219 -81
  15. package/out/common/BaseNode.js.map +1 -1
  16. package/out/concepts/App__.d.ts +18 -1
  17. package/out/concepts/App__.js +84 -44
  18. package/out/concepts/App__.js.map +1 -1
  19. package/out/concepts/Argument__.d.ts +5 -1
  20. package/out/concepts/Argument__.js +21 -3
  21. package/out/concepts/Argument__.js.map +1 -1
  22. package/out/concepts/Assignee__.d.ts +190 -0
  23. package/out/concepts/Assignee__.js +264 -0
  24. package/out/concepts/Assignee__.js.map +1 -0
  25. package/out/concepts/Assignment__.js +5 -0
  26. package/out/concepts/Assignment__.js.map +1 -1
  27. package/out/concepts/BinaryExpression__.js +8 -7
  28. package/out/concepts/BinaryExpression__.js.map +1 -1
  29. package/out/concepts/BindAttribute__.d.ts +19 -0
  30. package/out/concepts/BindAttribute__.js +55 -10
  31. package/out/concepts/BindAttribute__.js.map +1 -1
  32. package/out/concepts/BindDirective__.js +23 -3
  33. package/out/concepts/BindDirective__.js.map +1 -1
  34. package/out/concepts/BindEvent__.d.ts +2 -2
  35. package/out/concepts/BindEvent__.js +67 -34
  36. package/out/concepts/BindEvent__.js.map +1 -1
  37. package/out/concepts/BooleanLiteral__.d.ts +2 -0
  38. package/out/concepts/BooleanLiteral__.js +10 -0
  39. package/out/concepts/BooleanLiteral__.js.map +1 -1
  40. package/out/concepts/CallFunction__.js +57 -23
  41. package/out/concepts/CallFunction__.js.map +1 -1
  42. package/out/concepts/CallInterface__.d.ts +5 -0
  43. package/out/concepts/CallInterface__.js +238 -31
  44. package/out/concepts/CallInterface__.js.map +1 -1
  45. package/out/concepts/CallLogic__.d.ts +4 -4
  46. package/out/concepts/CallLogic__.js +107 -50
  47. package/out/concepts/CallLogic__.js.map +1 -1
  48. package/out/concepts/CallQueryComponent__.d.ts +7 -1
  49. package/out/concepts/CallQueryComponent__.js +45 -26
  50. package/out/concepts/CallQueryComponent__.js.map +1 -1
  51. package/out/concepts/Comment__.js +6 -2
  52. package/out/concepts/Comment__.js.map +1 -1
  53. package/out/concepts/CompletionProperty__.d.ts +3 -1
  54. package/out/concepts/CompletionProperty__.js +2 -0
  55. package/out/concepts/CompletionProperty__.js.map +1 -1
  56. package/out/concepts/ConfigGroup__.js +3 -3
  57. package/out/concepts/ConfigGroup__.js.map +1 -1
  58. package/out/concepts/ConfigProperty__.js +3 -3
  59. package/out/concepts/ConfigProperty__.js.map +1 -1
  60. package/out/concepts/Configuration__.js +3 -3
  61. package/out/concepts/Configuration__.js.map +1 -1
  62. package/out/concepts/Constant__.d.ts +1 -0
  63. package/out/concepts/Constant__.js +14 -0
  64. package/out/concepts/Constant__.js.map +1 -1
  65. package/out/concepts/Destination__.d.ts +12 -0
  66. package/out/concepts/Destination__.js +98 -19
  67. package/out/concepts/Destination__.js.map +1 -1
  68. package/out/concepts/End__.js +9 -1
  69. package/out/concepts/End__.js.map +1 -1
  70. package/out/concepts/EntityProperty__.d.ts +11 -0
  71. package/out/concepts/EntityProperty__.js +73 -5
  72. package/out/concepts/EntityProperty__.js.map +1 -1
  73. package/out/concepts/Entity__.d.ts +4 -4
  74. package/out/concepts/Entity__.js +30 -20
  75. package/out/concepts/Entity__.js.map +1 -1
  76. package/out/concepts/Enum__.d.ts +4 -0
  77. package/out/concepts/Enum__.js +18 -10
  78. package/out/concepts/Enum__.js.map +1 -1
  79. package/out/concepts/Event__.js +3 -3
  80. package/out/concepts/Event__.js.map +1 -1
  81. package/out/concepts/ForEachStatement__.d.ts +1 -1
  82. package/out/concepts/ForEachStatement__.js +11 -15
  83. package/out/concepts/ForEachStatement__.js.map +1 -1
  84. package/out/concepts/Function__.js +13 -13
  85. package/out/concepts/Function__.js.map +1 -1
  86. package/out/concepts/Identifier__.d.ts +3 -0
  87. package/out/concepts/Identifier__.js +76 -29
  88. package/out/concepts/Identifier__.js.map +1 -1
  89. package/out/concepts/IfStatement__.js +4 -4
  90. package/out/concepts/IfStatement__.js.map +1 -1
  91. package/out/concepts/InterfaceParam__.d.ts +6 -4
  92. package/out/concepts/InterfaceParam__.js +52 -19
  93. package/out/concepts/InterfaceParam__.js.map +1 -1
  94. package/out/concepts/Interface__.d.ts +42 -30
  95. package/out/concepts/Interface__.js +133 -17
  96. package/out/concepts/Interface__.js.map +1 -1
  97. package/out/concepts/JSBlock__.d.ts +1 -0
  98. package/out/concepts/JSBlock__.js +3 -0
  99. package/out/concepts/JSBlock__.js.map +1 -1
  100. package/out/concepts/LogicItem__.d.ts +2 -1
  101. package/out/concepts/LogicItem__.js +14 -0
  102. package/out/concepts/LogicItem__.js.map +1 -1
  103. package/out/concepts/Logic__.d.ts +20 -1
  104. package/out/concepts/Logic__.js +194 -37
  105. package/out/concepts/Logic__.js.map +1 -1
  106. package/out/concepts/MemberExpression__.d.ts +2 -0
  107. package/out/concepts/MemberExpression__.js +49 -13
  108. package/out/concepts/MemberExpression__.js.map +1 -1
  109. package/out/concepts/Module__.d.ts +126 -120
  110. package/out/concepts/Module__.js +36 -26
  111. package/out/concepts/Module__.js.map +1 -1
  112. package/out/concepts/Namespace__.d.ts +5 -1
  113. package/out/concepts/Namespace__.js +48 -37
  114. package/out/concepts/Namespace__.js.map +1 -1
  115. package/out/concepts/NullLiteral__.d.ts +3 -0
  116. package/out/concepts/NullLiteral__.js +11 -1
  117. package/out/concepts/NullLiteral__.js.map +1 -1
  118. package/out/concepts/NumericLiteral__.d.ts +1 -1
  119. package/out/concepts/NumericLiteral__.js +17 -6
  120. package/out/concepts/NumericLiteral__.js.map +1 -1
  121. package/out/concepts/Param__.d.ts +7 -3
  122. package/out/concepts/Param__.js +57 -28
  123. package/out/concepts/Param__.js.map +1 -1
  124. package/out/concepts/ProcessComponent__.js +6 -6
  125. package/out/concepts/ProcessComponent__.js.map +1 -1
  126. package/out/concepts/ProcessElement__.d.ts +0 -4
  127. package/out/concepts/ProcessElement__.js +117 -54
  128. package/out/concepts/ProcessElement__.js.map +1 -1
  129. package/out/concepts/ProcessOutcome__.js +1 -1
  130. package/out/concepts/ProcessOutcome__.js.map +1 -1
  131. package/out/concepts/Process__.d.ts +7 -1
  132. package/out/concepts/Process__.js +81 -85
  133. package/out/concepts/Process__.js.map +1 -1
  134. package/out/concepts/QueryAggregateExpression__.js +1 -1
  135. package/out/concepts/QueryAggregateExpression__.js.map +1 -1
  136. package/out/concepts/QueryFromExpression__.js +2 -2
  137. package/out/concepts/QueryFromExpression__.js.map +1 -1
  138. package/out/concepts/QueryJoinExpression__.js +5 -5
  139. package/out/concepts/QueryJoinExpression__.js.map +1 -1
  140. package/out/concepts/QueryLimitExpression__.js +2 -2
  141. package/out/concepts/QueryLimitExpression__.js.map +1 -1
  142. package/out/concepts/QuerySelectExpression__.js +3 -3
  143. package/out/concepts/QuerySelectExpression__.js.map +1 -1
  144. package/out/concepts/Return__.d.ts +4 -1
  145. package/out/concepts/Return__.js +67 -21
  146. package/out/concepts/Return__.js.map +1 -1
  147. package/out/concepts/Role__.d.ts +4 -0
  148. package/out/concepts/Role__.js +13 -4
  149. package/out/concepts/Role__.js.map +1 -1
  150. package/out/concepts/SqlQueryComponent__.js +2 -2
  151. package/out/concepts/SqlQueryComponent__.js.map +1 -1
  152. package/out/concepts/StringLiteral__.d.ts +1 -1
  153. package/out/concepts/StringLiteral__.js +21 -31
  154. package/out/concepts/StringLiteral__.js.map +1 -1
  155. package/out/concepts/StructureProperty__.d.ts +5 -4
  156. package/out/concepts/StructureProperty__.js +55 -26
  157. package/out/concepts/StructureProperty__.js.map +1 -1
  158. package/out/concepts/Structure__.d.ts +44 -30
  159. package/out/concepts/Structure__.js +44 -12
  160. package/out/concepts/Structure__.js.map +1 -1
  161. package/out/concepts/SwitchCase__.js +4 -4
  162. package/out/concepts/SwitchCase__.js.map +1 -1
  163. package/out/concepts/SwitchStatement__.js +2 -2
  164. package/out/concepts/SwitchStatement__.js.map +1 -1
  165. package/out/concepts/TypeAnnotation__.d.ts +5 -5
  166. package/out/concepts/TypeAnnotation__.js +74 -20
  167. package/out/concepts/TypeAnnotation__.js.map +1 -1
  168. package/out/concepts/UnaryExpression__.js +10 -8
  169. package/out/concepts/UnaryExpression__.js.map +1 -1
  170. package/out/concepts/Unparsed__.js +1 -1
  171. package/out/concepts/Unparsed__.js.map +1 -1
  172. package/out/concepts/ValidationRule__.d.ts +1 -0
  173. package/out/concepts/ValidationRule__.js +48 -13
  174. package/out/concepts/ValidationRule__.js.map +1 -1
  175. package/out/concepts/Variable__.d.ts +10 -1
  176. package/out/concepts/Variable__.js +70 -18
  177. package/out/concepts/Variable__.js.map +1 -1
  178. package/out/concepts/ViewComponent__.js +15 -15
  179. package/out/concepts/ViewComponent__.js.map +1 -1
  180. package/out/concepts/ViewElement__.d.ts +17 -11
  181. package/out/concepts/ViewElement__.js +302 -204
  182. package/out/concepts/ViewElement__.js.map +1 -1
  183. package/out/concepts/View__.d.ts +12 -11
  184. package/out/concepts/View__.js +109 -98
  185. package/out/concepts/View__.js.map +1 -1
  186. package/out/concepts/WhileStatement__.js +3 -3
  187. package/out/concepts/WhileStatement__.js.map +1 -1
  188. package/out/concepts/basics/stdlib/index.js +4 -1
  189. package/out/concepts/basics/stdlib/index.js.map +1 -1
  190. package/out/concepts/basics/stdlib/{nasl.validate.d.ts → nasl.auth.d.ts} +0 -0
  191. package/out/concepts/basics/stdlib/nasl.auth.js +30 -0
  192. package/out/concepts/basics/stdlib/nasl.auth.js.map +1 -0
  193. package/out/concepts/basics/stdlib/nasl.browser copy.d.ts +3 -0
  194. package/out/concepts/basics/stdlib/nasl.browser copy.js +70 -0
  195. package/out/concepts/basics/stdlib/nasl.browser copy.js.map +1 -0
  196. package/out/concepts/basics/stdlib/nasl.browser.d.ts +3 -0
  197. package/out/concepts/basics/stdlib/nasl.browser.js +41 -0
  198. package/out/concepts/basics/stdlib/nasl.browser.js.map +1 -0
  199. package/out/concepts/basics/stdlib/nasl.configuration.d.ts +3 -0
  200. package/out/concepts/basics/stdlib/nasl.configuration.js +25 -0
  201. package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -0
  202. package/out/concepts/basics/stdlib/nasl.ui.js +20 -0
  203. package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
  204. package/out/concepts/basics/stdlib/nasl.util.js +149 -13
  205. package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
  206. package/out/concepts/basics/stdlib/nasl.validation.js +54 -20
  207. package/out/concepts/basics/stdlib/nasl.validation.js.map +1 -1
  208. package/out/concepts/basics/types/coreTypeList.js +11 -10
  209. package/out/concepts/basics/types/coreTypeList.js.map +1 -1
  210. package/out/concepts/index__.d.ts +1 -0
  211. package/out/concepts/index__.js +1 -0
  212. package/out/concepts/index__.js.map +1 -1
  213. package/out/config.d.ts +1 -2
  214. package/out/config.js +1 -2
  215. package/out/config.js.map +1 -1
  216. package/out/enums/KEYWORDS.d.ts +3 -0
  217. package/out/enums/KEYWORDS.js +1206 -0
  218. package/out/enums/KEYWORDS.js.map +1 -0
  219. package/out/enums/LEVEL_NAME_MAP.d.ts +26 -0
  220. package/out/enums/LEVEL_NAME_MAP.js +30 -0
  221. package/out/enums/LEVEL_NAME_MAP.js.map +1 -0
  222. package/out/eventBus.d.ts +3 -0
  223. package/out/eventBus.js +7 -0
  224. package/out/eventBus.js.map +1 -0
  225. package/out/generator/genBundleFiles.d.ts +7 -2
  226. package/out/generator/genBundleFiles.js +168 -27
  227. package/out/generator/genBundleFiles.js.map +1 -1
  228. package/out/generator/genMetaData.d.ts +20 -20
  229. package/out/generator/genMetaData.js +50 -15
  230. package/out/generator/genMetaData.js.map +1 -1
  231. package/out/index.d.ts +2 -0
  232. package/out/index.js +2 -0
  233. package/out/index.js.map +1 -1
  234. package/out/manager/diagnostic.d.ts +1 -1
  235. package/out/server/createUiTs.d.ts +1 -0
  236. package/out/server/createUiTs.js +49 -5
  237. package/out/server/createUiTs.js.map +1 -1
  238. package/out/server/entity2LogicNamespace.js +38 -23
  239. package/out/server/entity2LogicNamespace.js.map +1 -1
  240. package/out/server/getExtensionModules.js +2 -0
  241. package/out/server/getExtensionModules.js.map +1 -1
  242. package/out/server/getFunctions.d.ts +1 -0
  243. package/out/server/getFunctions.js +7 -1
  244. package/out/server/getFunctions.js.map +1 -1
  245. package/out/server/getLogics.js +63 -18
  246. package/out/server/getLogics.js.map +1 -1
  247. package/out/server/getMemberIdentifier.d.ts +16 -1
  248. package/out/server/getMemberIdentifier.js +279 -36
  249. package/out/server/getMemberIdentifier.js.map +1 -1
  250. package/out/server/getProcesses.d.ts +6 -1
  251. package/out/server/getProcesses.js +243 -1
  252. package/out/server/getProcesses.js.map +1 -1
  253. package/out/server/getScope.d.ts +12 -0
  254. package/out/server/getScope.js +57 -0
  255. package/out/server/getScope.js.map +1 -0
  256. package/out/server/index.js +4 -0
  257. package/out/server/index.js.map +1 -1
  258. package/out/server/naslServer.d.ts +30 -53
  259. package/out/server/naslServer.js +721 -381
  260. package/out/server/naslServer.js.map +1 -1
  261. package/out/server/process2LogicNamespace.d.ts +10 -0
  262. package/out/server/process2LogicNamespace.js +29 -1
  263. package/out/server/process2LogicNamespace.js.map +1 -1
  264. package/out/server/translator.d.ts +22 -3
  265. package/out/server/translator.js +367 -123
  266. package/out/server/translator.js.map +1 -1
  267. package/out/service/creator/add.configs.d.ts +1 -0
  268. package/out/service/creator/add.configs.js +68 -0
  269. package/out/service/creator/add.configs.js.map +1 -0
  270. package/out/service/creator/errHandles.d.ts +18 -0
  271. package/out/service/creator/errHandles.js +60 -0
  272. package/out/service/creator/errHandles.js.map +1 -0
  273. package/out/service/creator/index.d.ts +1 -0
  274. package/out/service/creator/index.js +72 -0
  275. package/out/service/creator/index.js.map +1 -0
  276. package/out/service/storage/api.d.ts +18 -0
  277. package/out/service/storage/api.js +17 -0
  278. package/out/service/storage/api.js.map +1 -0
  279. package/out/service/storage/init.js +213 -37
  280. package/out/service/storage/init.js.map +1 -1
  281. package/out/service/storage/service.d.ts +2 -0
  282. package/out/service/storage/service.js +10 -0
  283. package/out/service/storage/service.js.map +1 -0
  284. package/out/service/storage/storagePoint.d.ts +1 -14
  285. package/out/service/storage/storagePoint.js +16 -16
  286. package/out/service/storage/storagePoint.js.map +1 -1
  287. package/out/templator/genCreateBlock.js +6 -6
  288. package/out/templator/genCreateBlock.js.map +1 -1
  289. package/out/templator/genCurdEditMultipleKeyBlock.js +13 -17
  290. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  291. package/out/templator/genCurdMultipleKeyBlock.js +11 -11
  292. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  293. package/out/templator/genEditTableBlock.js +5 -5
  294. package/out/templator/genEditTableBlock.js.map +1 -1
  295. package/out/templator/genEnumSelectBlock.js +2 -2
  296. package/out/templator/genEnumSelectBlock.js.map +1 -1
  297. package/out/templator/genGetBlock.js +5 -3
  298. package/out/templator/genGetBlock.js.map +1 -1
  299. package/out/templator/genGridViewBlock.d.ts +3 -1
  300. package/out/templator/genGridViewBlock.js +61 -6
  301. package/out/templator/genGridViewBlock.js.map +1 -1
  302. package/out/templator/genQueryComponent.d.ts +2 -0
  303. package/out/templator/genQueryComponent.js +27 -14
  304. package/out/templator/genQueryComponent.js.map +1 -1
  305. package/out/templator/genTableBlock.d.ts +1 -1
  306. package/out/templator/genTableBlock.js +4 -5
  307. package/out/templator/genTableBlock.js.map +1 -1
  308. package/out/templator/genUpdateBlock.js +9 -10
  309. package/out/templator/genUpdateBlock.js.map +1 -1
  310. package/out/templator/utils.d.ts +13 -4
  311. package/out/templator/utils.js +8 -4
  312. package/out/templator/utils.js.map +1 -1
  313. package/out/test/fixtures/env.js +0 -1
  314. package/out/test/fixtures/env.js.map +1 -1
  315. package/out/test/integration/connect-file copy.d.ts +1 -0
  316. package/out/test/integration/connect-file copy.js +50 -0
  317. package/out/test/integration/connect-file copy.js.map +1 -0
  318. package/out/test/integration/node-nasl-server.d.ts +1 -0
  319. package/out/test/integration/node-nasl-server.js +41 -0
  320. package/out/test/integration/node-nasl-server.js.map +1 -0
  321. package/out/test/units/page/Element.spec.js +3 -3
  322. package/out/test/units/page/Element.spec.js.map +1 -1
  323. package/out/test/units/temp/temp.spec.js +1 -1
  324. package/out/test/units/temp/temp.spec.js.map +1 -1
  325. package/out/utils/index.d.ts +6 -0
  326. package/out/utils/index.js +25 -1
  327. package/out/utils/index.js.map +1 -1
  328. package/out/utils/string.d.ts +1 -1
  329. package/out/utils/string.js +38 -9
  330. package/out/utils/string.js.map +1 -1
  331. package/package.json +2 -1
  332. package/src/automate/engine/index.js +97 -118
  333. package/src/automate/engine/operators.js +63 -0
  334. package/src/automate/engine/uniqueName.js +36 -0
  335. package/src/automate/engine/utils.js +49 -19
  336. package/src/common/BaseNode.ts +223 -87
  337. package/src/concepts/App__.ts +86 -46
  338. package/src/concepts/Argument__.ts +23 -3
  339. package/src/concepts/Assignee__.ts +437 -0
  340. package/src/concepts/Assignment__.ts +4 -1
  341. package/src/concepts/BinaryExpression__.ts +9 -7
  342. package/src/concepts/BindAttribute__.ts +69 -9
  343. package/src/concepts/BindDirective__.ts +22 -3
  344. package/src/concepts/BindEvent__.ts +67 -23
  345. package/src/concepts/BooleanLiteral__.ts +8 -0
  346. package/src/concepts/CallFunction__.ts +58 -25
  347. package/src/concepts/CallInterface__.ts +236 -26
  348. package/src/concepts/CallLogic__.ts +111 -52
  349. package/src/concepts/CallQueryComponent__.ts +36 -21
  350. package/src/concepts/Comment__.ts +6 -2
  351. package/src/concepts/CompletionProperty__.ts +5 -1
  352. package/src/concepts/ConfigGroup__.ts +3 -3
  353. package/src/concepts/ConfigProperty__.ts +3 -3
  354. package/src/concepts/Configuration__.ts +3 -3
  355. package/src/concepts/Constant__.ts +12 -0
  356. package/src/concepts/Destination__.ts +106 -18
  357. package/src/concepts/End__.ts +8 -1
  358. package/src/concepts/EntityProperty__.ts +69 -5
  359. package/src/concepts/Entity__.ts +33 -28
  360. package/src/concepts/Enum__.ts +16 -11
  361. package/src/concepts/Event__.ts +3 -3
  362. package/src/concepts/ForEachStatement__.ts +16 -21
  363. package/src/concepts/Function__.ts +13 -13
  364. package/src/concepts/Identifier__.ts +82 -32
  365. package/src/concepts/IfStatement__.ts +4 -4
  366. package/src/concepts/InterfaceParam__.ts +49 -27
  367. package/src/concepts/Interface__.ts +130 -16
  368. package/src/concepts/JSBlock__.ts +4 -0
  369. package/src/concepts/LogicItem__.ts +16 -1
  370. package/src/concepts/Logic__.ts +201 -39
  371. package/src/concepts/MemberExpression__.ts +58 -15
  372. package/src/concepts/Module__.ts +35 -24
  373. package/src/concepts/Namespace__.ts +49 -37
  374. package/src/concepts/NullLiteral__.ts +8 -1
  375. package/src/concepts/NumericLiteral__.ts +17 -6
  376. package/src/concepts/Param__.ts +54 -28
  377. package/src/concepts/ProcessComponent__.ts +6 -6
  378. package/src/concepts/ProcessElement__.ts +143 -44
  379. package/src/concepts/ProcessOutcome__.ts +1 -1
  380. package/src/concepts/Process__.ts +85 -98
  381. package/src/concepts/QueryAggregateExpression__.ts +1 -1
  382. package/src/concepts/QueryFromExpression__.ts +2 -2
  383. package/src/concepts/QueryJoinExpression__.ts +5 -5
  384. package/src/concepts/QueryLimitExpression__.ts +2 -2
  385. package/src/concepts/QuerySelectExpression__.ts +3 -3
  386. package/src/concepts/Return__.ts +60 -29
  387. package/src/concepts/Role__.ts +11 -4
  388. package/src/concepts/SqlQueryComponent__.ts +2 -2
  389. package/src/concepts/StringLiteral__.ts +20 -31
  390. package/src/concepts/StructureProperty__.ts +50 -33
  391. package/src/concepts/Structure__.ts +32 -10
  392. package/src/concepts/SwitchCase__.ts +4 -4
  393. package/src/concepts/SwitchStatement__.ts +2 -2
  394. package/src/concepts/TypeAnnotation__.ts +59 -16
  395. package/src/concepts/UnaryExpression__.ts +10 -8
  396. package/src/concepts/Unparsed__.ts +1 -1
  397. package/src/concepts/ValidationRule__.ts +44 -14
  398. package/src/concepts/Variable__.ts +67 -25
  399. package/src/concepts/ViewComponent__.ts +15 -15
  400. package/src/concepts/ViewElement__.ts +380 -264
  401. package/src/concepts/View__.ts +139 -94
  402. package/src/concepts/WhileStatement__.ts +4 -4
  403. package/src/concepts/basics/stdlib/index.ts +4 -2
  404. package/src/concepts/basics/stdlib/nasl.auth.ts +26 -0
  405. package/src/concepts/basics/stdlib/nasl.browser.ts +37 -0
  406. package/src/concepts/basics/stdlib/nasl.configuration.ts +21 -0
  407. package/src/concepts/basics/stdlib/nasl.ui.ts +20 -1
  408. package/src/concepts/basics/stdlib/nasl.util.ts +151 -13
  409. package/src/concepts/basics/stdlib/nasl.validation.ts +45 -11
  410. package/src/concepts/basics/types/coreTypeList.ts +11 -10
  411. package/src/concepts/index__.ts +1 -0
  412. package/src/config.ts +1 -2
  413. package/src/enums/KEYWORDS.ts +1204 -0
  414. package/src/{terms → enums}/LEVEL_NAME_MAP.ts +0 -0
  415. package/src/eventBus.ts +5 -0
  416. package/src/generator/genBundleFiles.ts +182 -30
  417. package/src/generator/genMetaData.ts +72 -21
  418. package/src/index.ts +2 -0
  419. package/src/manager/diagnostic.ts +1 -1
  420. package/src/server/createUiTs.ts +50 -8
  421. package/src/server/entity2LogicNamespace.ts +41 -25
  422. package/src/server/getExtensionModules.ts +2 -0
  423. package/src/server/getFunctions.ts +6 -0
  424. package/src/server/getLogics.ts +66 -19
  425. package/src/server/getMemberIdentifier.ts +275 -46
  426. package/src/server/getProcesses.ts +248 -4
  427. package/src/server/getScope.ts +62 -0
  428. package/src/server/index.ts +12 -1
  429. package/src/server/naslServer.ts +715 -398
  430. package/src/server/process2LogicNamespace.ts +30 -2
  431. package/src/server/translator.ts +423 -128
  432. package/src/service/config/index.js +1 -1
  433. package/src/service/creator/errHandles.js +5 -2
  434. package/src/service/creator/index.js +0 -6
  435. package/src/service/storage/api.js +14 -0
  436. package/src/service/storage/init.ts +217 -47
  437. package/src/service/storage/service.ts +6 -0
  438. package/src/service/storage/storagePoint.ts +16 -16
  439. package/src/templator/genCreateBlock.ts +6 -6
  440. package/src/templator/genCurdEditMultipleKeyBlock.ts +29 -30
  441. package/src/templator/genCurdMultipleKeyBlock.ts +11 -11
  442. package/src/templator/genEditTableBlock.ts +5 -5
  443. package/src/templator/genEnumSelectBlock.ts +2 -2
  444. package/src/templator/genGetBlock.ts +6 -8
  445. package/src/templator/genGridViewBlock.ts +59 -9
  446. package/src/templator/genQueryComponent.ts +39 -28
  447. package/src/templator/genTableBlock.ts +5 -9
  448. package/src/templator/genUpdateBlock.ts +9 -11
  449. package/src/templator/utils.ts +9 -6
  450. package/src/test/fixtures/env.ts +0 -2
  451. package/src/test/units/page/Element.spec.ts +3 -3
  452. package/src/test/units/temp/temp.spec.ts +1 -1
  453. package/src/utils/index.ts +24 -0
  454. package/src/utils/string.ts +39 -9
  455. package/out/concepts/basics/stdlib/nasl.validate.js +0 -527
  456. package/out/concepts/basics/stdlib/nasl.validate.js.map +0 -1
  457. package/out/data/Module.d.ts +0 -34
  458. package/out/data/Module.js +0 -53
  459. package/out/data/Module.js.map +0 -1
  460. 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 [];
345
+ }
346
+ else {
347
+ return [{ title: '基础类型', children: res }];
296
348
  }
297
- // 调整结构
298
- const dataTypeList = [{ title: '基础类型', children: res }];
299
- return dataTypeList;
300
349
  }
301
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;
376
+ }
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;
@@ -692,19 +739,27 @@ const naslServer = {
692
739
  }
693
740
  // 如果节点是MemberExpression表达式
694
741
  if (minRange.node instanceof concepts_1.MemberExpression) {
695
- // 匹配到的内容,当前这一行的内容;
696
- // 因为要用下面的点位信息
697
- const a = record.lineText;
698
- // 之前的内容
699
- const oldValue = minRange.node.getValue();
700
- const index = a.indexOf(oldValue);
701
- const start = record.start.offset - index - 1;
702
- const end = record.end.offset - index - 1;
703
- const newTextValue = oldValue.substring(0, start) + newValue + oldValue.substring(end, oldValue.length);
704
- // MemberExpression可能改的是多层中的某一个
705
- // 倒序, 对比看是哪里发生了修改
706
- // 比较特殊就把新匹配到的值返回内部自己看要改那个地方的值
707
- minRange.newValue = newTextValue;
742
+ // 枚举key的特殊性,因为它不是原来的key+value形式的
743
+ // 是加了中括号啥的,所以直接赋值新值
744
+ if (node instanceof concepts_1.EnumItem) {
745
+ const newTextValue = node.parentNode.name + '.' + newValue;
746
+ minRange.newValue = newTextValue;
747
+ }
748
+ else {
749
+ // 匹配到的内容,当前这一行的内容;
750
+ // 因为要用下面的点位信息
751
+ const a = record.lineText;
752
+ // 之前的内容
753
+ const oldValue = minRange.node.getValue();
754
+ const index = a.indexOf(oldValue);
755
+ const start = record.start.offset - index - 1;
756
+ const end = record.end.offset - index - 1;
757
+ const newTextValue = oldValue.substring(0, start) + newValue + oldValue.substring(end, oldValue.length);
758
+ // MemberExpression可能改的是多层中的某一个
759
+ // 倒序, 对比看是哪里发生了修改
760
+ // 比较特殊就把新匹配到的值返回内部自己看要改那个地方的值
761
+ minRange.newValue = newTextValue;
762
+ }
708
763
  }
709
764
  // 如果是修改实体,引发节点依赖实体发生改变的
710
765
  if (minRange.node instanceof concepts_1.EntityProperty && node instanceof concepts_1.Entity) {
@@ -763,7 +818,13 @@ const naslServer = {
763
818
  // 如果是view也需要加前缀
764
819
  // logic 和 views名称修改 可能会触发bindEvent修改
765
820
  if (minRange.node instanceof concepts_1.BindEvent) {
766
- /**
821
+ // 页面逻辑直接赋值就可以, 因为是相对路径
822
+ if ((node instanceof concepts_1.ViewElement)) {
823
+ minRange.setTypeMethods = 'setCalleeNamespace';
824
+ minRange.newValue = 'elements.' + newValue + '.logics';
825
+ }
826
+ else {
827
+ /**
767
828
  * 如果namespce是 'app.views.Student.views.404.views.505.views.update'
768
829
  * 在ts中会是'app.views.Student.views.$404.views.$505.views.update'
769
830
  * 但是505 要改名为 666 ,要存的是666
@@ -772,26 +833,44 @@ const naslServer = {
772
833
  * 2.在匹配到的内容中取转后的namespace的位置
773
834
  * 3.然后把namespace中的 $替换成 ''
774
835
  */
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;
836
+ const tsCalleeNamespace = minRange.node.tsCalleeNamespace;
837
+ const oldValue = tsCalleeNamespace;
838
+ // 先看下标位置
839
+ const lineText = record.lineText;
840
+ const index = lineText.indexOf(oldValue);
841
+ // 在把开始结束位置的-开始位置,来知道是哪里要替换
842
+ const start = record.start.offset - index - 1;
843
+ const end = record.end.offset - index - 1;
844
+ // 新的完整的value
845
+ if (start > tsCalleeNamespace.length) {
846
+ minRange.setTypeMethods = 'setCalleeName';
847
+ minRange.newValue = newValue;
848
+ }
849
+ else {
850
+ // 新的完整的value
851
+ let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
852
+ minRange.setTypeMethods = 'setCalleeNamespace';
853
+ newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
854
+ minRange.newValue = newTsNameSpace;
855
+ }
856
+ }
857
+ }
858
+ if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
859
+ // 因为view是key value 绑定所以需要重新赋值
860
+ if (node.parentNode instanceof concepts_1.View) {
861
+ const nodeArguments = minRange.node.arguments;
862
+ const findArgument = nodeArguments.find((item) => node.name === item.keyword);
863
+ if (findArgument) {
864
+ minRange.setTypeMethods = 'setArgumentsKeyWord';
865
+ minRange.newValue = {
866
+ findArgument,
867
+ newKeyword: newValue,
868
+ };
869
+ }
788
870
  }
789
871
  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;
872
+ // 如果是修改param查找到Destination就不操作
873
+ return null;
795
874
  }
796
875
  }
797
876
  if (minRange.node instanceof concepts_1.Interface && node instanceof concepts_1.Logic) {
@@ -807,13 +886,33 @@ const naslServer = {
807
886
  const newBindRoles = str.split(',');
808
887
  minRange.newValue = newBindRoles;
809
888
  }
889
+ // 修改枚举值找到了EntityProperty就说明给了默认值
890
+ if (minRange.node instanceof concepts_1.EntityProperty && node instanceof concepts_1.EnumItem) {
891
+ minRange.setTypeMethods = 'setDefaultValue';
892
+ }
893
+ if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.Entity) {
894
+ minRange.setTypeMethods = 'setEntityAsName';
895
+ }
896
+ if ((minRange.node instanceof concepts_1.QueryFromExpression || minRange.node instanceof concepts_1.QueryJoinExpression) && node instanceof concepts_1.Entity) {
897
+ minRange.setTypeMethods = 'setEntityName';
898
+ }
899
+ if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.EntityProperty) {
900
+ minRange.setTypeMethods = 'setPropertyName';
901
+ }
902
+ // 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
903
+ 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)) {
904
+ return null;
905
+ }
906
+ if (minRange.node instanceof concepts_1.Destination && (node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
907
+ return null;
908
+ }
810
909
  // 枚举修改枚举名,比较特殊
811
910
  if (minRange.node instanceof concepts_1.EnumItem && node instanceof concepts_1.Enum) {
812
911
  // 什么都不做,用来跳过修改
813
912
  return null;
814
913
  }
815
- // 如果是修改param查找到logic就不操作
816
- if (minRange.node instanceof concepts_1.Logic && node instanceof concepts_1.Param) {
914
+ // params修改 查找bindevent不需要修改
915
+ if (minRange.node instanceof concepts_1.BindEvent && node instanceof concepts_1.Param) {
817
916
  return null;
818
917
  }
819
918
  // 如果是子页面修改
@@ -821,8 +920,39 @@ const naslServer = {
821
920
  if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.View && minRange.node !== node) {
822
921
  return null;
823
922
  }
923
+ /**
924
+ * 屏蔽组件生成内容块中的变量或者逻辑,出现在表格选择中。在bindAttr中还会有,所以过滤一把
925
+ */
926
+ 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) {
927
+ return null;
928
+ }
929
+ // 修改element引发view改名
930
+ if (node instanceof concepts_1.ViewElement && minRange.node instanceof concepts_1.View) {
931
+ return null;
932
+ }
933
+ // params修改 查找View不需要修改
824
934
  // 逻辑改名,触发了在定义里面的,element定义,的值,直接掠过
825
- if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.Logic) {
935
+ if (minRange.node instanceof concepts_1.View && (node instanceof concepts_1.Logic || node instanceof concepts_1.Param)) {
936
+ /**
937
+ * 这里过滤一下,一些查找引用,重复的内容,直接屏蔽掉,防止操作重复
938
+ * 因为在生成的时候 ,可能弄了一些副作用的引用
939
+ */
940
+ // 本来是想在上面过滤一把的先放到这里匹配这两个的时候 就会找到
941
+ // refsList = refsList.filter((item) => {
942
+ // 屏蔽组件查找查到定义这里,也过滤一下
943
+ // if (item.lineText.includes(': nasl.ui.'))
944
+ // return false;
945
+ // return true;
946
+ // });
947
+ return null;
948
+ }
949
+ /**
950
+ * 理论上 logic setName只能自己触发,别的地方查到引用都不用重命名
951
+ * 流程改名不触发Logic改名
952
+ * 如果是修改param查找到logic就不操作
953
+ * 除非想在内部修改别的内容所以暂时屏蔽掉
954
+ */
955
+ if (minRange.node instanceof concepts_1.Logic && node !== minRange.node) {
826
956
  return null;
827
957
  }
828
958
  }
@@ -839,40 +969,83 @@ const naslServer = {
839
969
  },
840
970
  _addParamsPrepare(node, refsList) {
841
971
  const App = node.rootNode;
842
- const LogicNode = node.parentNode;
972
+ const parantNode = node.parentNode;
843
973
  // 收集修改
844
974
  App.emit('collect:start', {
845
975
  actionMsg: '增加逻辑参数',
846
976
  });
847
977
  node.create({
848
978
  index: 0,
849
- parentNode: LogicNode,
979
+ parentNode: parantNode,
850
980
  parentKey: node.parentKey,
851
981
  });
852
982
  refsList.forEach((record) => {
853
983
  const fileNode = this.file2NodeMap.get(record.file);
854
984
  if (!fileNode)
855
985
  return null;
856
- const minRange = this._findMinRange(record, fileNode.sourceMap);
986
+ const minRange = this._findMinRange(record, fileNode);
857
987
  if (minRange) {
858
988
  // 如果找到节点是callLogic就去更新
859
989
  if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.Param) {
860
- minRange.node.setCalleeArgName(LogicNode);
990
+ minRange.node.setCalleeArgName((parantNode));
991
+ }
992
+ // 如果节点参数增加页面也要更新
993
+ if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
994
+ minRange.node.setViewArgument((parantNode));
861
995
  }
862
996
  }
863
997
  });
864
998
  // 结束修改 ,批量操作
865
999
  App.emit('collect:end');
866
1000
  },
1001
+ // 查找引用
1002
+ async findReferences(node) {
1003
+ let refsList = await naslServer._isHaveRef(node);
1004
+ // 如果查找引用查到自己里面的引用不展示
1005
+ refsList = refsList.filter((item) => {
1006
+ // 自己引用自己的过滤掉
1007
+ // 删除的时候过滤一把组件删除提示
1008
+ // 展示组件自己屏蔽掉
1009
+ return !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.'));
1010
+ });
1011
+ // 最后返回的结果
1012
+ let result = new Map();
1013
+ // 树的构造,key: 一个file的node, 值是 [[logic, params],[logic, returns]]
1014
+ const resMap = new Map();
1015
+ // 普通节点和要输出的节点做一个映射,为了引用地址一样
1016
+ const nodeMap = new Map();
1017
+ try {
1018
+ refsList.forEach((record) => {
1019
+ const fileNode = this.file2NodeMap.get(record.file);
1020
+ if (!fileNode)
1021
+ return;
1022
+ const minRange = this._findMinRange(record, fileNode);
1023
+ // 过滤一把不需要改的信息
1024
+ if (minRange) {
1025
+ // 拼装树
1026
+ naslServer._getTreeMap(minRange, fileNode, resMap, nodeMap);
1027
+ }
1028
+ });
1029
+ console.log(resMap, 'resMap');
1030
+ if (resMap.size > 0) {
1031
+ result = naslServer.handleTreeMap(resMap);
1032
+ }
1033
+ }
1034
+ catch (err) {
1035
+ console.log(err);
1036
+ }
1037
+ console.log(result);
1038
+ return result;
1039
+ },
867
1040
  // 获取节点的上层渲染
868
- _getTreeMap(minRange, fileNode, resMap) {
1041
+ _getTreeMap(minRange, fileNode, resMap, nodeMap) {
869
1042
  const minRangeNode = minRange.node;
870
1043
  let parantNode = minRangeNode;
871
1044
  // 顺序队列
872
1045
  const queue = [];
873
1046
  // 先插入自己,如果没有在往上找,
874
1047
  // 一直到file节点的父级
875
- while (parantNode !== fileNode.parentNode) {
1048
+ while (!(parantNode instanceof concepts_1.App)) {
876
1049
  // 找到上一级 在map对象中构造出他的子集
877
1050
  const currentNode = parantNode;
878
1051
  parantNode = parantNode.parentNode;
@@ -883,7 +1056,9 @@ const naslServer = {
883
1056
  // 排除一些不放入集合的节点
884
1057
  let isNeedPush = true;
885
1058
  // 如果不是ViewElement 或者 Assignment , 或者如果是的话, 排除l-root
886
- if (currentNode instanceof concepts_1.ViewElement && currentNode.tag !== 'l-root')
1059
+ if (currentNode instanceof concepts_1.ViewElement && currentNode.tag === 'l-root')
1060
+ isNeedPush = false;
1061
+ else if (currentNode instanceof concepts_1.Argument)
887
1062
  isNeedPush = false;
888
1063
  else if (currentNode instanceof concepts_1.Assignment)
889
1064
  isNeedPush = false;
@@ -893,13 +1068,11 @@ const naslServer = {
893
1068
  isNeedPush = false;
894
1069
  else if (currentNode instanceof concepts_1.QueryFromExpression)
895
1070
  isNeedPush = false;
896
- else if (currentNode.concept === parantNode.concept)
897
- isNeedPush = false;
1071
+ // 需要放到数组中
898
1072
  if (isNeedPush) {
899
1073
  // 名称
900
- let name = currentNode.name || currentNode.concept;
901
1074
  // 赋值图标
902
- let icon = currentNode.concept && currentNode.concept.replace(/^./, (m) => m.toLowerCase());
1075
+ let icon = '';
903
1076
  if (currentNode instanceof concepts_1.ViewElement)
904
1077
  icon = 'element';
905
1078
  else if (currentNode instanceof concepts_1.BindAttribute)
@@ -908,55 +1081,34 @@ const naslServer = {
908
1081
  icon = 'logicNode';
909
1082
  else if (currentNode instanceof concepts_1.CallLogic) {
910
1083
  icon = 'interface';
911
- name = '调用逻辑';
912
1084
  }
913
- queue.unshift({ name, node: currentNode, expanded: true, icon });
1085
+ // 相同节点使用一个引用
1086
+ if (nodeMap.get(currentNode)) {
1087
+ queue.unshift(nodeMap.get(currentNode));
1088
+ }
1089
+ else {
1090
+ const quoteNode = { node: currentNode, expanded: true, icon };
1091
+ nodeMap.set(currentNode, quoteNode);
1092
+ queue.unshift(quoteNode);
1093
+ }
914
1094
  }
915
1095
  }
916
- const key = fileNode.name;
917
1096
  // 一个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);
1097
+ if (resMap.get(fileNode)) {
1098
+ // 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
1099
+ resMap.get(fileNode).push(queue);
938
1100
  }
939
1101
  else {
940
- resMap[key] = {
941
- queue: queue.length ? [queue] : [],
942
- concept: fileNode.concept,
943
- name: fileNode.name,
944
- node: fileNode,
945
- };
1102
+ resMap.set(fileNode, [queue]);
946
1103
  }
947
1104
  },
948
- handleTreeMap(tree) {
949
- const treeNodeMap = {};
950
- for (const [sub, val] of Object.entries(tree)) {
1105
+ handleTreeMap(resMap) {
1106
+ const treeNodeMap = new Map();
1107
+ resMap.forEach((value, fileNode) => {
951
1108
  // 循环处理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
- }
1109
+ const treeObj = naslServer.handleTreeQueue(value);
1110
+ treeNodeMap.set(fileNode, treeObj);
1111
+ });
960
1112
  return treeNodeMap;
961
1113
  },
962
1114
  /**
@@ -965,30 +1117,27 @@ const naslServer = {
965
1117
  * @param arr 当前页面下的queue的二维数组,一个数组下有多条链路
966
1118
  * @returns 最后要使用到的节点和对应的子集
967
1119
  */
968
- handleTreeQueue(arr) {
969
- const map = {};
1120
+ handleTreeQueue(queueLists) {
1121
+ const map = new Map();
970
1122
  let root = null;
971
- if (!arr.length)
1123
+ if (!queueLists.length)
972
1124
  return;
973
- for (const sub of arr) {
1125
+ for (const queueList of queueLists) {
974
1126
  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] = [];
1127
+ for (const queueItem of queueList) {
1128
+ if (!map.get(queueItem)) {
1129
+ map.set(queueItem, []);
980
1130
  }
981
1131
  if (preNode) {
982
- const preKey = preNode.name;
983
- const find = map[preKey].find((item) => node.name === item.name);
1132
+ const find = map.get(preNode).find((item) => item === queueItem);
984
1133
  if (!find) {
985
- map[preKey].push(node);
1134
+ map.get(preNode).push(queueItem);
986
1135
  }
987
1136
  }
988
1137
  else {
989
- root = node;
1138
+ root = queueItem;
990
1139
  }
991
- preNode = node;
1140
+ preNode = queueItem;
992
1141
  }
993
1142
  }
994
1143
  const children = naslServer._recursionCreateResult(root, map);
@@ -1001,24 +1150,24 @@ const naslServer = {
1001
1150
  * @returns 当前节点,最后输出所有节点
1002
1151
  */
1003
1152
  _recursionCreateResult(root, map) {
1004
- const node = root;
1005
- const rootKey = root.name;
1006
- const children = map[rootKey].map((item) => naslServer._recursionCreateResult(item, map));
1153
+ const children = map.get(root).map((item) => naslServer._recursionCreateResult(item, map));
1007
1154
  if (children && children.length) {
1008
- node.children = children;
1155
+ root.children = children;
1009
1156
  }
1010
- return node;
1157
+ return root;
1011
1158
  },
1012
1159
  /**
1013
1160
  * 获取
1014
1161
  * 当前this上下文 的Source 和 父级文件级别的节点
1015
1162
  */
1016
1163
  getCurrentSource(node) {
1164
+ if (node instanceof concepts_1.App || node instanceof concepts_1.Theme)
1165
+ return { fileNode: null };
1017
1166
  let sourceMap = node.sourceMap;
1018
1167
  let fileNode = node;
1019
1168
  // 如果没有sourceMap,就继续向上找 ,或者到module结束
1020
1169
  // 如果 节点找到 app 或者module 停止
1021
- while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module)) {
1170
+ while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module) && !(fileNode instanceof concepts_1.View)) {
1022
1171
  fileNode = fileNode.parentNode;
1023
1172
  sourceMap = fileNode?.sourceMap;
1024
1173
  }
@@ -1041,7 +1190,6 @@ const naslServer = {
1041
1190
  // 获取element方法的可选值
1042
1191
  getFieldKeySelectCompletion(node, fieldKey) {
1043
1192
  const { currentSource, fileNode } = naslServer.getCurrentSource(node);
1044
- console.log(currentSource);
1045
1193
  if (currentSource && fileNode) {
1046
1194
  return naslServer._getFieldKeySelectCompletion({
1047
1195
  file: fileNode.getEmbeddedFilePath(),
@@ -1090,11 +1238,51 @@ async function handleDelete(fileNode, targetNode, result) {
1090
1238
  }
1091
1239
  // 更新文件之后
1092
1240
  await naslServer.updateFiles({ outputFiles });
1093
- const filesToCheck = new Set();
1094
1241
  newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1095
- console.log('filesToCheck', filesToCheck, filesToCheck.size);
1096
- await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1097
1242
  }
1243
+ concepts_1.BaseNode.prototype.findReadOnlyLogicUsage = function () {
1244
+ let targetNode;
1245
+ if (this.parentNode.concept === 'Namespace' || this.parentNode.parentNode.concept === 'Namespace') {
1246
+ const sourceMap = this.parentNode.concept === 'Namespace' ? this.parentNode.parentNode.sourceMap : this.parentNode.parentNode.parentNode.sourceMap;
1247
+ for (const item of sourceMap) {
1248
+ const logic = item[0];
1249
+ if (this.concept === 'Logic') {
1250
+ if (logic instanceof concepts_1.Logic)
1251
+ if (logic.calleewholeKey === this.calleewholeKey) {
1252
+ targetNode = logic;
1253
+ break;
1254
+ }
1255
+ }
1256
+ else {
1257
+ if (logic instanceof concepts_1.Logic)
1258
+ if (logic.calleewholeKey === this.parentNode.calleewholeKey) {
1259
+ targetNode = logic;
1260
+ break;
1261
+ }
1262
+ }
1263
+ }
1264
+ }
1265
+ else if (this.parentNode.concept === 'Module') {
1266
+ // 父级是模块的还是用它本身去查找引用
1267
+ targetNode = this;
1268
+ }
1269
+ else {
1270
+ const sourceMap = this.parentNode.sourceMap;
1271
+ for (const item of sourceMap) {
1272
+ const logic = item[0];
1273
+ if (logic.getNamespace && logic.getNamespace() === this.getNamespace()) {
1274
+ targetNode = logic;
1275
+ break;
1276
+ }
1277
+ }
1278
+ }
1279
+ try {
1280
+ return naslServer.findReferences(targetNode);
1281
+ }
1282
+ catch (err) {
1283
+ console.log(err);
1284
+ }
1285
+ };
1098
1286
  // 查找引用
1099
1287
  concepts_1.BaseNode.prototype.findUsage = function findUsage() {
1100
1288
  try {
@@ -1151,6 +1339,7 @@ concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, u
1151
1339
  const confirmParms = {
1152
1340
  actionType: 'rename',
1153
1341
  node: this,
1342
+ newValue,
1154
1343
  };
1155
1344
  /**
1156
1345
  * nasl和vue的通信,回退,要触发vue的watch。
@@ -1158,11 +1347,20 @@ concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, u
1158
1347
  * 先修改之
1159
1348
  */
1160
1349
  const closeCallBack = () => {
1161
- const oldValue = this.name;
1162
- this.name = oldValue + ' ';
1163
- setTimeout(() => {
1164
- this.name = oldValue;
1165
- }, 0);
1350
+ if (this.concept === 'EnumItem') {
1351
+ const oldValue = this.value;
1352
+ this.value = oldValue + ' ';
1353
+ setTimeout(() => {
1354
+ this.value = oldValue;
1355
+ }, 0);
1356
+ }
1357
+ else {
1358
+ const oldValue = this.name;
1359
+ this.name = oldValue + ' ';
1360
+ setTimeout(() => {
1361
+ this.name = oldValue;
1362
+ }, 0);
1363
+ }
1166
1364
  };
1167
1365
  updateAll ? callback(true) : (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, callback, closeCallBack);
1168
1366
  return;
@@ -1181,15 +1379,38 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1181
1379
  * 查找这个节点是不是有依赖
1182
1380
  */
1183
1381
  const node = this;
1184
- const refsList = await naslServer._isHaveRef(node);
1185
- // console.log(refsList, 'refsList');
1382
+ let refsList = await naslServer._isHaveRef(node);
1383
+ // 删除的时候过滤一把组件删除提示
1384
+ refsList = refsList.filter((item) => {
1385
+ // 因为ui组件本身会多渲染一次,就先过滤一个
1386
+ return !(item.lineText.includes(': nasl.ui.'));
1387
+ });
1388
+ // 删除参数单独处理
1389
+ if (node instanceof concepts_1.Param) {
1390
+ const methodRefs = [];
1391
+ refsList.forEach((item) => {
1392
+ // 入参查找引用,查到logic 和自己,内容完全一样,就保留一个
1393
+ const find = methodRefs.find((findItem) => item.lineText === findItem.lineText);
1394
+ if (!find) {
1395
+ methodRefs.push(item);
1396
+ }
1397
+ });
1398
+ refsList = methodRefs;
1399
+ }
1400
+ // delete的弹框展示
1186
1401
  const confirmParms = {
1187
1402
  actionType: 'delete',
1188
1403
  tipFlag: false,
1189
1404
  node,
1405
+ icon: 'warning',
1190
1406
  };
1191
1407
  let callback = null;
1192
1408
  if (refsList.length <= 1) {
1409
+ // 页面组件直接删除然后return
1410
+ if (node instanceof concepts_1.ViewElement) {
1411
+ this.delete();
1412
+ return;
1413
+ }
1193
1414
  callback = () => {
1194
1415
  // Structure 和 Interface是内部有delete方法
1195
1416
  if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
@@ -1204,12 +1425,26 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1204
1425
  // 如果有依赖就有一个查找引用提示
1205
1426
  confirmParms.tipFlag = true;
1206
1427
  const node = this;
1428
+ // 删除页面或者流程
1429
+ if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
1430
+ /**
1431
+ * 查找这个页面是不是有依赖
1432
+ */
1433
+ let viewPath = this.getEmbeddedFilePath();
1434
+ viewPath = viewPath.slice(0, viewPath.length - 3);
1435
+ const find = refsList.find((record) => !record.file.includes(viewPath));
1436
+ // 如果没有别的文件的依赖,就直接delete
1437
+ if (!find) {
1438
+ this.delete();
1439
+ return;
1440
+ }
1441
+ }
1207
1442
  callback = () => {
1208
1443
  // removeParam
1209
1444
  // 跟rename 还不太一样,部分修改依赖修改好的值,然后在下面的修改需要把自己传递进去
1210
1445
  if (node instanceof concepts_1.Param) {
1211
1446
  const App = this.rootNode;
1212
- const logicNode = this.parentNode;
1447
+ const parentNode = this.parentNode;
1213
1448
  // 收集修改
1214
1449
  App.emit('collect:start', {
1215
1450
  actionMsg: '删除参数',
@@ -1219,10 +1454,13 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1219
1454
  const fileNode = naslServer.file2NodeMap.get(record.file);
1220
1455
  if (!fileNode)
1221
1456
  return null;
1222
- const minRange = naslServer._findMinRange(record, fileNode.sourceMap);
1457
+ const minRange = naslServer._findMinRange(record, fileNode);
1223
1458
  if (minRange) {
1224
1459
  if (minRange.node instanceof concepts_1.CallLogic) {
1225
- minRange.node.setCalleeArgName(logicNode);
1460
+ minRange.node.setCalleeArgName(parentNode);
1461
+ }
1462
+ if (minRange.node instanceof concepts_1.Destination) {
1463
+ minRange.node.setViewArgument(parentNode);
1226
1464
  }
1227
1465
  }
1228
1466
  });
@@ -1242,7 +1480,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1242
1480
  const fileNode = naslServer.file2NodeMap.get(record.file);
1243
1481
  if (!fileNode)
1244
1482
  return null;
1245
- const minRange = naslServer._findMinRange(record, fileNode.sourceMap);
1483
+ const minRange = naslServer._findMinRange(record, fileNode);
1246
1484
  if (minRange) {
1247
1485
  if (minRange.node instanceof concepts_1.Interface) {
1248
1486
  minRange.node.delete();
@@ -1251,6 +1489,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1251
1489
  });
1252
1490
  // 结束修改 ,批量操作
1253
1491
  App.emit('collect:end');
1492
+ return;
1254
1493
  }
1255
1494
  // 删除权限节点
1256
1495
  if (node instanceof concepts_1.Role) {
@@ -1264,7 +1503,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1264
1503
  const fileNode = naslServer.file2NodeMap.get(record.file);
1265
1504
  if (!fileNode)
1266
1505
  return null;
1267
- const minRange = naslServer._findMinRange(record, fileNode.sourceMap);
1506
+ const minRange = naslServer._findMinRange(record, fileNode);
1268
1507
  if (minRange) {
1269
1508
  if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
1270
1509
  // oldName旧的节点存的值
@@ -1280,6 +1519,10 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1280
1519
  App.emit('collect:end');
1281
1520
  return;
1282
1521
  }
1522
+ // 删除页面或者流程,如果上一步没有return 就说明他是有别的引用的,会有引用弹框
1523
+ if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
1524
+ this.delete();
1525
+ }
1283
1526
  // 其余的都直接调用删除
1284
1527
  // Structure 和 Interface是内部有delete方法
1285
1528
  if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
@@ -1328,18 +1571,21 @@ async function handleChange(fileNode, targetNode, result, action) {
1328
1571
  line: EmbeddedTSFileLineMap[fileNode.concept] ?? 2,
1329
1572
  offset: 6,
1330
1573
  });
1331
- const filesToCheck = new Set();
1332
1574
  newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1333
1575
  // 唤起建立连接弹框
1334
1576
  // 文件级别的建立连接采取提醒
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, () => { });
1577
+ if (action === 'create' && targetNode.__init) {
1578
+ // 清除临时状态, 完成本次创建
1579
+ delete targetNode.__init;
1580
+ if (fileNode === targetNode && filesToCheck.size > 1) {
1581
+ const confirmParms = {
1582
+ actionType: 'createEstablishConnection',
1583
+ node: fileNode,
1584
+ icon: 'success',
1585
+ };
1586
+ (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
1587
+ }
1341
1588
  }
1342
- await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1343
1589
  }
1344
1590
  /**
1345
1591
  * 重命名的更新
@@ -1352,7 +1598,6 @@ async function handleChange(fileNode, targetNode, result, action) {
1352
1598
  async function handleRename(fileNode, targetNode, result, oldFilePath) {
1353
1599
  // rename 场景
1354
1600
  const outputFiles = [{ file: result.filePath, fileContent: result.code }];
1355
- const filesToCheck = new Set();
1356
1601
  // 如果是要修改顶级文件名
1357
1602
  // file节点和当前改得是同一节点
1358
1603
  if (fileNode === targetNode) {
@@ -1383,35 +1628,101 @@ async function handleRename(fileNode, targetNode, result, oldFilePath) {
1383
1628
  });
1384
1629
  // 文件级别重命名,有依赖才唤起弹框
1385
1630
  // 唤起重命名,提示有连接弹框
1386
- if (newRefFileList.size > 1) {
1387
- const confirmParms = {
1388
- actionType: 'renameEstablishConnection',
1389
- node: fileNode,
1390
- };
1391
- (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
1392
- }
1631
+ // 重命名建立连接先不展示弹框了
1632
+ // if (newRefFileList.size > 1) {
1633
+ // const confirmParms = {
1634
+ // actionType: 'renameEstablishConnection',
1635
+ // node: fileNode,
1636
+ // icon: 'success',
1637
+ // };
1638
+ // invokeCommand('tsConfirm.open', confirmParms, () => {});
1639
+ // }
1393
1640
  }
1394
1641
  else {
1395
1642
  // 查一下当前属性依赖的文件
1396
1643
  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));
1644
+ if (currentSource) {
1645
+ const oldRefs = await naslServer.references({
1646
+ file: fileNode.getEmbeddedFilePath(),
1647
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
1648
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
1649
+ });
1650
+ oldRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1651
+ // 更新文件之后
1652
+ await naslServer.updateFiles({ outputFiles });
1653
+ const newRefs2 = await naslServer.references({
1654
+ file: fileNode.getEmbeddedFilePath(),
1655
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
1656
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
1657
+ });
1658
+ newRefs2.refs.forEach((ref) => filesToCheck.add(ref.file));
1659
+ }
1660
+ }
1661
+ }
1662
+ /**
1663
+ * 处理一些节点操作,子节点需要更新并且check的场景
1664
+ * 因为删除,新增父页面,或者重命名会一起
1665
+ * 删除或者新增view而且他有子集 就要执行同样的操作
1666
+ * @param action 当前操作类型
1667
+ * @param fileNode 文件节点
1668
+ * @param targetNode 操作节点 这里要两个相等才会走家去面对哦逻辑
1669
+ * @param oldpath 触发内容的oldpath
1670
+ */
1671
+ async function incidentalAction(action, fileNode, targetNode, oldpath) {
1672
+ if ((action === 'create' || action === 'delete' || (action === 'update' && oldpath)) && fileNode === targetNode) {
1673
+ // 删除或者新增页面
1674
+ if (fileNode instanceof concepts_1.View && fileNode.children?.length) {
1675
+ const fileNodeChildren = fileNode.children;
1676
+ for (let i = 0; i < fileNodeChildren.length; i++) {
1677
+ const fileNodeItem = fileNodeChildren[i];
1678
+ const result = fileNodeItem.toEmbeddedTSFile();
1679
+ if (action === 'create') {
1680
+ await handleChange(fileNodeItem, fileNodeItem, result, action);
1681
+ await incidentalAction(action, fileNodeItem, fileNodeItem);
1682
+ }
1683
+ else if (action === 'delete') {
1684
+ await handleDelete(fileNodeItem, fileNodeItem, result);
1685
+ await incidentalAction(action, fileNodeItem, fileNodeItem);
1686
+ }
1687
+ else if (action === 'update' && oldpath) {
1688
+ const parentPath = oldpath.replace('.ts', '/');
1689
+ const currentOldPath = parentPath + fileNodeItem.name + '.ts';
1690
+ // 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
1691
+ await handleRename(fileNodeItem, fileNodeItem, result, currentOldPath);
1692
+ await incidentalAction(action, fileNodeItem, fileNodeItem, currentOldPath);
1693
+ }
1694
+ }
1695
+ ;
1696
+ }
1697
+ // 删除或新增模块
1698
+ // 需要把下面的哦内容全部都更新一遍
1699
+ if (fileNode instanceof concepts_1.Module) {
1700
+ const module = (targetNode);
1701
+ const results = [];
1702
+ naslServer.contentToFile(module, results);
1703
+ for (let i = 0; i < results.length; i++) {
1704
+ const result = results[i];
1705
+ const node = naslServer.file2NodeMap.get(result.filePath);
1706
+ if (action === 'create') {
1707
+ await handleChange(node, node, result, action);
1708
+ }
1709
+ else {
1710
+ await handleDelete(node, node, result);
1711
+ }
1712
+ }
1713
+ ;
1714
+ // 删除模块通知更新列表
1715
+ if (action === 'delete') {
1716
+ try {
1717
+ // 如果已经
1718
+ (0, common_1.invokeCommand)('module.delete', true);
1719
+ }
1720
+ catch (err) {
1721
+ console.log('module.delete', '组件销毁了,不用唤起了');
1722
+ }
1723
+ }
1724
+ }
1411
1725
  }
1412
- console.log('filesToCheck', filesToCheck, filesToCheck.size);
1413
- await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1414
- // outputFiles.map((file) => file.file));
1415
1726
  }
1416
1727
  async function receiveHandleChange($event) {
1417
1728
  // 行为
@@ -1420,7 +1731,11 @@ async function receiveHandleChange($event) {
1420
1731
  // 当前操作的文件节点
1421
1732
  const { fileNode } = naslServer.getCurrentSource(targetNode);
1422
1733
  // 如果是导入模块就,就引入对应模块,先不处理module和Configuration,下面的内容会自动创建
1423
- if (fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
1734
+ if (!fileNode || fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
1735
+ // module单独处理
1736
+ if (fileNode instanceof concepts_1.Module) {
1737
+ await incidentalAction(action, fileNode, targetNode);
1738
+ }
1424
1739
  return;
1425
1740
  }
1426
1741
  const result = fileNode.toEmbeddedTSFile();
@@ -1438,24 +1753,49 @@ async function receiveHandleChange($event) {
1438
1753
  ]);
1439
1754
  fileNode.sourceMap = result.sourceMap;
1440
1755
  if (action === 'update' || action === 'create') {
1441
- if ($event?.field !== 'name')
1756
+ if ($event?.field !== 'name') {
1442
1757
  await handleChange(fileNode, targetNode, result, action);
1758
+ await incidentalAction(action, fileNode, targetNode);
1759
+ }
1443
1760
  else {
1444
- await handleRename(fileNode, targetNode, result, fileNode.getEmbeddedFilePath($event.oldName));
1761
+ const oldpath = fileNode.getEmbeddedFilePath($event.oldObject.name);
1762
+ await handleRename(fileNode, targetNode, result, oldpath);
1763
+ await incidentalAction(action, fileNode, targetNode, oldpath);
1445
1764
  }
1446
1765
  }
1447
1766
  // 删除
1448
1767
  if (action === 'delete') {
1768
+ await incidentalAction(action, fileNode, targetNode);
1449
1769
  await handleDelete(fileNode, targetNode, result);
1450
1770
  }
1771
+ return true;
1451
1772
  }
1452
1773
  // 监听所有改变操作
1453
1774
  translator_1.embeddedTSEmitter.on('change', ($event) => {
1454
1775
  // 收集到一个行为集合
1455
1776
  const eventValue = $event.value;
1456
- eventValue.forEach((item) => {
1457
- receiveHandleChange(item.originEvent);
1777
+ const stackList = [];
1778
+ eventValue.forEach(async (item) => {
1779
+ stackList.push(item.originEvent);
1458
1780
  });
1781
+ // 异步状态机,一个完成了在执行下一个
1782
+ function next() {
1783
+ const item = stackList.shift();
1784
+ receiveHandleChange(item).then(async () => {
1785
+ if (stackList.length) {
1786
+ next();
1787
+ }
1788
+ else {
1789
+ console.log('filesToCheck', filesToCheck, filesToCheck.size);
1790
+ await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
1791
+ filesToCheck.clear();
1792
+ }
1793
+ });
1794
+ }
1795
+ // 如果有长度开始执行状态机
1796
+ if (stackList.length) {
1797
+ next();
1798
+ }
1459
1799
  });
1460
1800
  naslServer.messager.options.context = naslServer;
1461
1801
  exports.default = naslServer;