@lcap/nasl 1.0.1 → 1.0.2

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 (173) hide show
  1. package/out/automate/engine/utils.js +16 -0
  2. package/out/automate/engine/utils.js.map +1 -1
  3. package/out/common/BaseNode.d.ts +1 -1
  4. package/out/common/BaseNode.js +13 -3
  5. package/out/common/BaseNode.js.map +1 -1
  6. package/out/concepts/App__.d.ts +1 -0
  7. package/out/concepts/App__.js +4 -1
  8. package/out/concepts/App__.js.map +1 -1
  9. package/out/concepts/Assignee__.d.ts +11 -0
  10. package/out/concepts/Assignee__.js +34 -0
  11. package/out/concepts/Assignee__.js.map +1 -1
  12. package/out/concepts/CallFunction__.js +1 -2
  13. package/out/concepts/CallFunction__.js.map +1 -1
  14. package/out/concepts/CallQueryComponent__.d.ts +31 -2
  15. package/out/concepts/CallQueryComponent__.js +286 -51
  16. package/out/concepts/CallQueryComponent__.js.map +1 -1
  17. package/out/concepts/Constant__.js +6 -6
  18. package/out/concepts/Constant__.js.map +1 -1
  19. package/out/concepts/Destination__.js +18 -4
  20. package/out/concepts/Destination__.js.map +1 -1
  21. package/out/concepts/EntityIndex__.js +4 -2
  22. package/out/concepts/EntityIndex__.js.map +1 -1
  23. package/out/concepts/EntityProperty__.js +3 -5
  24. package/out/concepts/EntityProperty__.js.map +1 -1
  25. package/out/concepts/Entity__.d.ts +1 -0
  26. package/out/concepts/Entity__.js +7 -1
  27. package/out/concepts/Entity__.js.map +1 -1
  28. package/out/concepts/Enum__.d.ts +1 -0
  29. package/out/concepts/Enum__.js +6 -2
  30. package/out/concepts/Enum__.js.map +1 -1
  31. package/out/concepts/Identifier__.js +1 -1
  32. package/out/concepts/Identifier__.js.map +1 -1
  33. package/out/concepts/InterfaceParam__.js +9 -4
  34. package/out/concepts/InterfaceParam__.js.map +1 -1
  35. package/out/concepts/Param__.d.ts +1 -1
  36. package/out/concepts/Param__.js +14 -7
  37. package/out/concepts/Param__.js.map +1 -1
  38. package/out/concepts/ProcessElement__.js +8 -2
  39. package/out/concepts/ProcessElement__.js.map +1 -1
  40. package/out/concepts/QueryAggregateExpression__.js +1 -1
  41. package/out/concepts/QueryAggregateExpression__.js.map +1 -1
  42. package/out/concepts/QueryFieldExpression__.d.ts +1 -0
  43. package/out/concepts/QueryFieldExpression__.js +3 -0
  44. package/out/concepts/QueryFieldExpression__.js.map +1 -1
  45. package/out/concepts/QueryGroupByExpression__.d.ts +3 -0
  46. package/out/concepts/QueryGroupByExpression__.js +20 -0
  47. package/out/concepts/QueryGroupByExpression__.js.map +1 -1
  48. package/out/concepts/Return__.d.ts +1 -1
  49. package/out/concepts/Return__.js +15 -10
  50. package/out/concepts/Return__.js.map +1 -1
  51. package/out/concepts/StringLiteral__.js +1 -8
  52. package/out/concepts/StringLiteral__.js.map +1 -1
  53. package/out/concepts/StructureProperty__.js +5 -5
  54. package/out/concepts/StructureProperty__.js.map +1 -1
  55. package/out/concepts/TypeAnnotation__.js +12 -4
  56. package/out/concepts/TypeAnnotation__.js.map +1 -1
  57. package/out/concepts/Variable__.d.ts +1 -1
  58. package/out/concepts/Variable__.js +15 -10
  59. package/out/concepts/Variable__.js.map +1 -1
  60. package/out/concepts/ViewElement__.js +1 -1
  61. package/out/concepts/ViewElement__.js.map +1 -1
  62. package/out/concepts/View__.d.ts +1 -1
  63. package/out/concepts/View__.js +15 -4
  64. package/out/concepts/View__.js.map +1 -1
  65. package/out/concepts/basics/stdlib/nasl.configuration.js +1 -1
  66. package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -1
  67. package/out/concepts/basics/stdlib/nasl.interface.d.ts +2 -0
  68. package/out/concepts/basics/stdlib/nasl.interface.js +4 -4
  69. package/out/concepts/basics/stdlib/nasl.interface.js.map +1 -1
  70. package/out/concepts/basics/stdlib/nasl.util.js +21 -37
  71. package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
  72. package/out/concepts/basics/stdlib/reference2TypeAnnotationList.js +1 -1
  73. package/out/concepts/basics/stdlib/reference2TypeAnnotationList.js.map +1 -1
  74. package/out/concepts/basics/types/index.d.ts +1 -0
  75. package/out/concepts/basics/types/index.js +3 -1
  76. package/out/concepts/basics/types/index.js.map +1 -1
  77. package/out/enums/KEYWORDS.js +0 -7
  78. package/out/enums/KEYWORDS.js.map +1 -1
  79. package/out/manager/diagnostic.d.ts +1 -1
  80. package/out/{test/integration/connect-file copy.d.ts → server/extendBaseNode.d.ts} +0 -0
  81. package/out/server/extendBaseNode.js +323 -0
  82. package/out/server/extendBaseNode.js.map +1 -0
  83. package/out/server/getLogics.js +22 -1
  84. package/out/server/getLogics.js.map +1 -1
  85. package/out/server/getMemberIdentifier.js +47 -2
  86. package/out/server/getMemberIdentifier.js.map +1 -1
  87. package/out/server/getProcesses.d.ts +4 -2
  88. package/out/server/getProcesses.js +160 -20
  89. package/out/server/getProcesses.js.map +1 -1
  90. package/out/server/getScope.d.ts +1 -0
  91. package/out/server/getScope.js +4 -0
  92. package/out/server/getScope.js.map +1 -1
  93. package/out/server/index.d.ts +1 -0
  94. package/out/server/index.js +1 -0
  95. package/out/server/index.js.map +1 -1
  96. package/out/server/naslServer.d.ts +7 -5
  97. package/out/server/naslServer.js +96 -362
  98. package/out/server/naslServer.js.map +1 -1
  99. package/out/server/translator.d.ts +1 -1
  100. package/out/server/translator.js +3 -1
  101. package/out/server/translator.js.map +1 -1
  102. package/out/service/storage/init.js +18 -10
  103. package/out/service/storage/init.js.map +1 -1
  104. package/out/templator/genGetBlock.js +1 -1
  105. package/out/templator/genGetBlock.js.map +1 -1
  106. package/out/templator/genQueryComponent.js +7 -4
  107. package/out/templator/genQueryComponent.js.map +1 -1
  108. package/out/templator/genSelectBlock.js +5 -15
  109. package/out/templator/genSelectBlock.js.map +1 -1
  110. package/out/templator/genUpdateBlock.js +1 -1
  111. package/out/templator/genUpdateBlock.js.map +1 -1
  112. package/out/templator/utils.d.ts +3 -1
  113. package/out/templator/utils.js +2 -1
  114. package/out/templator/utils.js.map +1 -1
  115. package/package.json +1 -2
  116. package/src/automate/engine/utils.js +16 -2
  117. package/src/common/BaseNode.ts +14 -3
  118. package/src/concepts/App__.ts +6 -39
  119. package/src/concepts/Assignee__.ts +30 -0
  120. package/src/concepts/CallFunction__.ts +1 -2
  121. package/src/concepts/CallQueryComponent__.ts +294 -54
  122. package/src/concepts/Constant__.ts +6 -6
  123. package/src/concepts/Destination__.ts +18 -20
  124. package/src/concepts/EntityIndex__.ts +4 -2
  125. package/src/concepts/EntityProperty__.ts +3 -5
  126. package/src/concepts/Entity__.ts +15 -3
  127. package/src/concepts/Enum__.ts +7 -15
  128. package/src/concepts/Identifier__.ts +1 -10
  129. package/src/concepts/InterfaceParam__.ts +9 -4
  130. package/src/concepts/Param__.ts +14 -7
  131. package/src/concepts/ProcessElement__.ts +9 -3
  132. package/src/concepts/QueryAggregateExpression__.ts +1 -1
  133. package/src/concepts/QueryFieldExpression__.ts +4 -0
  134. package/src/concepts/QueryGroupByExpression__.ts +23 -0
  135. package/src/concepts/Return__.ts +15 -10
  136. package/src/concepts/StringLiteral__.ts +1 -8
  137. package/src/concepts/StructureProperty__.ts +5 -5
  138. package/src/concepts/TypeAnnotation__.ts +12 -4
  139. package/src/concepts/Variable__.ts +15 -10
  140. package/src/concepts/ViewElement__.ts +2 -2
  141. package/src/concepts/View__.ts +16 -4
  142. package/src/concepts/basics/stdlib/nasl.configuration.ts +1 -1
  143. package/src/concepts/basics/stdlib/nasl.interface.ts +1 -1
  144. package/src/concepts/basics/stdlib/nasl.util.ts +21 -37
  145. package/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts +1 -1
  146. package/src/concepts/basics/types/index.ts +1 -0
  147. package/src/enums/KEYWORDS.ts +0 -7
  148. package/src/manager/diagnostic.ts +1 -1
  149. package/src/server/extendBaseNode.ts +318 -0
  150. package/src/server/getLogics.ts +22 -1
  151. package/src/server/getMemberIdentifier.ts +49 -2
  152. package/src/server/getProcesses.ts +170 -21
  153. package/src/server/getScope.ts +5 -0
  154. package/src/server/index.ts +1 -0
  155. package/src/server/naslServer.ts +100 -355
  156. package/src/server/translator.ts +3 -1
  157. package/src/service/storage/init.ts +18 -11
  158. package/src/templator/genGetBlock.ts +1 -1
  159. package/src/templator/genQueryComponent.ts +7 -4
  160. package/src/templator/genSelectBlock.ts +5 -15
  161. package/src/templator/genUpdateBlock.ts +1 -1
  162. package/src/templator/utils.ts +3 -0
  163. package/out/concepts/basics/stdlib/nasl.browser copy.d.ts +0 -3
  164. package/out/concepts/basics/stdlib/nasl.browser copy.js +0 -70
  165. package/out/concepts/basics/stdlib/nasl.browser copy.js.map +0 -1
  166. package/out/terms/LEVEL_NAME_MAP.d.ts +0 -26
  167. package/out/terms/LEVEL_NAME_MAP.js +0 -30
  168. package/out/terms/LEVEL_NAME_MAP.js.map +0 -1
  169. package/out/test/integration/connect-file copy.js +0 -50
  170. package/out/test/integration/connect-file copy.js.map +0 -1
  171. package/out/test/integration/node-nasl-server.d.ts +0 -1
  172. package/out/test/integration/node-nasl-server.js +0 -41
  173. package/out/test/integration/node-nasl-server.js.map +0 -1
@@ -17,6 +17,7 @@ const common_1 = require("../common");
17
17
  const diagnostic_1 = __importDefault(require("../manager/diagnostic"));
18
18
  const createUiTs_1 = __importDefault(require("./createUiTs"));
19
19
  const coreTypeList_1 = require("../concepts/basics/types/coreTypeList");
20
+ const utils_1 = require("../utils");
20
21
  const EmbeddedTSFileLineMap = {
21
22
  Entity: 3,
22
23
  };
@@ -322,31 +323,38 @@ const naslServer = {
322
323
  * fileNode
323
324
  */
324
325
  const { currentSource, fileNode } = naslServer.getCurrentSource(callFunction);
325
- const quickInfo = await naslServer._getTypeQuickinfo({
326
- file: fileNode.getEmbeddedFilePath(),
327
- line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
328
- offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character) + `nasl.util.C`.length,
329
- });
330
- if (quickInfo.responseRequired) {
331
- const displayString = quickInfo?.response?.displayString || '';
332
- const typeList = naslServer.getDisplayString2Type(displayString);
333
- let res = [];
334
- typeList.forEach((type) => {
335
- const typeAnnotation = coreTypeList_1.primitiveTypeList.find((typeAnnotation) => typeAnnotation.typeName === type);
336
- if (typeAnnotation) {
337
- res.push(typeAnnotation);
326
+ try {
327
+ const quickInfo = await naslServer._getTypeQuickinfo({
328
+ file: fileNode.getEmbeddedFilePath(),
329
+ line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
330
+ offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character) + `nasl.util.C`.length,
331
+ });
332
+ if (quickInfo.responseRequired) {
333
+ const displayString = quickInfo?.response?.displayString || '';
334
+ const typeList = naslServer.getDisplayString2Type(displayString);
335
+ const res = [];
336
+ typeList.forEach((type) => {
337
+ const typeAnnotation = coreTypeList_1.primitiveTypeList.find((typeAnnotation) => typeAnnotation.typeName === type);
338
+ if (typeAnnotation) {
339
+ res.push(typeAnnotation);
340
+ }
341
+ else if (type === 'unknown' || type === 'never') {
342
+ return null;
343
+ }
344
+ });
345
+ if (!res.length) {
346
+ return [];
338
347
  }
339
- else if (type === 'unknown' || type === 'never') {
340
- return null;
348
+ else {
349
+ return [{ title: '基础类型', children: res }];
341
350
  }
342
- });
343
- if (!res.length) {
344
- return [];
345
- }
346
- else {
347
- return [{ title: '基础类型', children: res }];
348
351
  }
349
352
  }
353
+ catch (err) {
354
+ console.log(err);
355
+ // 如果有异常就先放开全部可选,兜底逻辑
356
+ return [];
357
+ }
350
358
  }
351
359
  else {
352
360
  // 字符串 和 inter
@@ -424,6 +432,7 @@ const naslServer = {
424
432
  record.semanticDiagnostics = record.semanticDiagnostics
425
433
  .map((diag) => this._resolveDiagnostic(diag, node))
426
434
  .filter((diag) => !!diag);
435
+ record.semanticDiagnostics.push(...this._attachDiagnostics(node));
427
436
  // 建议诊断
428
437
  // 实体下的建议不用展示,因为都是平台自己写的逻辑
429
438
  // if (node instanceof Entity) {
@@ -445,6 +454,28 @@ const naslServer = {
445
454
  });
446
455
  return records;
447
456
  },
457
+ _attachDiagnostics(fileNode) {
458
+ const diagnostics = [];
459
+ if (fileNode instanceof concepts_1.View) {
460
+ (0, utils_1.traverse)((current) => {
461
+ if (current.node.tag) {
462
+ current.node.bindAttrs.forEach((bindAttr) => {
463
+ if ((bindAttr.model || bindAttr.sync)
464
+ && bindAttr.expression && bindAttr.expression.concept !== 'Identifier' && bindAttr.expression.concept !== 'MemberExpression') {
465
+ const diagnostic = {
466
+ node: bindAttr,
467
+ severity: 'error',
468
+ message: '页面元素双向绑定:只允许绑定可赋值的变量和字段。',
469
+ };
470
+ bindAttr.tsErrorDetail = diagnostic;
471
+ diagnostics.push(diagnostic);
472
+ }
473
+ });
474
+ }
475
+ }, { node: { children: fileNode.elements } });
476
+ }
477
+ return diagnostics;
478
+ },
448
479
  _resolveDiagnostic(diagnostic, fileNode) {
449
480
  const minRange = this._findMinRange(diagnostic, fileNode);
450
481
  const tsErrorDetail = {
@@ -893,12 +924,18 @@ const naslServer = {
893
924
  if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.Entity) {
894
925
  minRange.setTypeMethods = 'setEntityAsName';
895
926
  }
927
+ if (minRange.node instanceof concepts_1.QueryGroupByExpression && node instanceof concepts_1.Entity) {
928
+ minRange.setTypeMethods = 'setEntityAsName';
929
+ }
896
930
  if ((minRange.node instanceof concepts_1.QueryFromExpression || minRange.node instanceof concepts_1.QueryJoinExpression) && node instanceof concepts_1.Entity) {
897
931
  minRange.setTypeMethods = 'setEntityName';
898
932
  }
899
933
  if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.EntityProperty) {
900
934
  minRange.setTypeMethods = 'setPropertyName';
901
935
  }
936
+ if (minRange.node instanceof concepts_1.QueryGroupByExpression && node instanceof concepts_1.EntityProperty) {
937
+ minRange.setTypeMethods = 'setPropertyName';
938
+ }
902
939
  // 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
903
940
  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
941
  return null;
@@ -906,6 +943,9 @@ const naslServer = {
906
943
  if (minRange.node instanceof concepts_1.Destination && (node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
907
944
  return null;
908
945
  }
946
+ if (minRange.node instanceof concepts_1.Assignee && (node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
947
+ return null;
948
+ }
909
949
  // 枚举修改枚举名,比较特殊
910
950
  if (minRange.node instanceof concepts_1.EnumItem && node instanceof concepts_1.Enum) {
911
951
  // 什么都不做,用来跳过修改
@@ -967,18 +1007,9 @@ const naslServer = {
967
1007
  console.log(result);
968
1008
  return result;
969
1009
  },
970
- _addParamsPrepare(node, refsList) {
971
- const App = node.rootNode;
972
- const parantNode = node.parentNode;
973
- // 收集修改
974
- App.emit('collect:start', {
975
- actionMsg: '增加逻辑参数',
976
- });
977
- node.create({
978
- index: 0,
979
- parentNode: parantNode,
980
- parentKey: node.parentKey,
981
- });
1010
+ // 增加参数的副作用,用于更新logic和view
1011
+ _addParamsEffect(refsList, node) {
1012
+ const parantNode = node?.parentNode;
982
1013
  refsList.forEach((record) => {
983
1014
  const fileNode = this.file2NodeMap.get(record.file);
984
1015
  if (!fileNode)
@@ -995,19 +1026,37 @@ const naslServer = {
995
1026
  }
996
1027
  }
997
1028
  });
998
- // 结束修改 ,批量操作
999
- App.emit('collect:end');
1029
+ },
1030
+ _addParamsPrepare(node, refsList, needAdd) {
1031
+ if (needAdd) {
1032
+ const App = node?.rootNode;
1033
+ const parantNode = node?.parentNode;
1034
+ // 收集修改
1035
+ App.emit('collect:start', {
1036
+ actionMsg: '增加逻辑参数',
1037
+ });
1038
+ node.create({
1039
+ index: 0,
1040
+ parentNode: parantNode,
1041
+ parentKey: node.parentKey,
1042
+ });
1043
+ naslServer._addParamsEffect(refsList, (node));
1044
+ // 结束修改 ,批量操作
1045
+ App.emit('collect:end');
1046
+ return node;
1047
+ }
1048
+ naslServer._addParamsEffect(refsList, (node));
1049
+ return node;
1000
1050
  },
1001
1051
  // 查找引用
1002
1052
  async findReferences(node) {
1003
1053
  let refsList = await naslServer._isHaveRef(node);
1004
1054
  // 如果查找引用查到自己里面的引用不展示
1005
- refsList = refsList.filter((item) => {
1006
- // 自己引用自己的过滤掉
1007
- // 删除的时候过滤一把组件删除提示
1008
- // 展示组件自己屏蔽掉
1009
- return !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.'));
1010
- });
1055
+ refsList = refsList.filter((item) =>
1056
+ // 自己引用自己的过滤掉
1057
+ // 删除的时候过滤一把组件删除提示
1058
+ // 展示组件自己屏蔽掉
1059
+ !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.')));
1011
1060
  // 最后返回的结果
1012
1061
  let result = new Map();
1013
1062
  // 树的构造,key: 一个file的node, 值是 [[logic, params],[logic, returns]]
@@ -1040,14 +1089,15 @@ const naslServer = {
1040
1089
  // 获取节点的上层渲染
1041
1090
  _getTreeMap(minRange, fileNode, resMap, nodeMap) {
1042
1091
  const minRangeNode = minRange.node;
1043
- let parantNode = minRangeNode;
1092
+ let currentNode = minRangeNode;
1093
+ let parantNode = currentNode.parentNode;
1044
1094
  // 顺序队列
1045
1095
  const queue = [];
1046
1096
  // 先插入自己,如果没有在往上找,
1047
1097
  // 一直到file节点的父级
1048
1098
  while (!(parantNode instanceof concepts_1.App)) {
1049
1099
  // 找到上一级 在map对象中构造出他的子集
1050
- const currentNode = parantNode;
1100
+ currentNode = parantNode;
1051
1101
  parantNode = parantNode.parentNode;
1052
1102
  // 如果第一次就塞入子集和父节点,以后就只用父节点了
1053
1103
  // 因为部分节点没有name,先过滤掉
@@ -1094,12 +1144,12 @@ const naslServer = {
1094
1144
  }
1095
1145
  }
1096
1146
  // 一个logic 或者 view可能会有多个顺序队列
1097
- if (resMap.get(fileNode)) {
1147
+ if (resMap.get(currentNode)) {
1098
1148
  // 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
1099
- resMap.get(fileNode).push(queue);
1149
+ resMap.get(currentNode).push(queue);
1100
1150
  }
1101
1151
  else {
1102
- resMap.set(fileNode, [queue]);
1152
+ resMap.set(currentNode, [queue]);
1103
1153
  }
1104
1154
  },
1105
1155
  handleTreeMap(resMap) {
@@ -1240,320 +1290,6 @@ async function handleDelete(fileNode, targetNode, result) {
1240
1290
  await naslServer.updateFiles({ outputFiles });
1241
1291
  newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
1242
1292
  }
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
- };
1286
- // 查找引用
1287
- concepts_1.BaseNode.prototype.findUsage = function findUsage() {
1288
- try {
1289
- return naslServer.findReferences(this);
1290
- }
1291
- catch (err) {
1292
- console.log(err);
1293
- }
1294
- };
1295
- concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, updateAll = false) {
1296
- console.log(newValue);
1297
- console.log(this);
1298
- try {
1299
- /**
1300
- * 查找这个节点是不是有依赖
1301
- */
1302
- const refsList = await naslServer._isHaveRef(this);
1303
- // 是不是有引用有的话,就返回
1304
- /**
1305
- * @param this 当前重命名的节点
1306
- * @param newValue 传递过来的新值,给MemberExpression用的比较特殊
1307
- * 而且,这个新值不一定会用到,MemberExpression在批量更新的时候,可以取到新的value, 这里需要位置信息防止 a.a.a.a 中的一个a发生修改
1308
- * @returns 找到的引用
1309
- */
1310
- const res = naslServer._renamePrepare(this, refsList, newValue);
1311
- if (res.length <= 1) {
1312
- this.setName(newValue);
1313
- }
1314
- else {
1315
- const callback = (value) => {
1316
- if (value) {
1317
- const App = this.rootNode;
1318
- // 收集修改
1319
- App.emit('collect:start', {
1320
- actionMsg: '重命名并更新引用',
1321
- });
1322
- res.forEach((item) => {
1323
- const itemNode = item.node;
1324
- if (item.newValue) {
1325
- // 如果有指定的修改方法,就用那个,没有就修改名字
1326
- item.setTypeMethods ? itemNode[item.setTypeMethods](item.newValue) : itemNode.setName?.(item.newValue);
1327
- }
1328
- else {
1329
- item.setTypeMethods ? itemNode[item.setTypeMethods](newValue) : itemNode.setName?.(newValue);
1330
- }
1331
- });
1332
- // 结束修改 ,批量操作
1333
- App.emit('collect:end');
1334
- }
1335
- else {
1336
- this.setName(newValue);
1337
- }
1338
- };
1339
- const confirmParms = {
1340
- actionType: 'rename',
1341
- node: this,
1342
- newValue,
1343
- };
1344
- /**
1345
- * nasl和vue的通信,回退,要触发vue的watch。
1346
- * 因为如果没修改的话nasl不会修改view,就不会通知到页面改成旧值
1347
- * 先修改之
1348
- */
1349
- const closeCallBack = () => {
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
- }
1364
- };
1365
- updateAll ? callback(true) : (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, callback, closeCallBack);
1366
- return;
1367
- }
1368
- }
1369
- catch (err) {
1370
- console.log(err);
1371
- }
1372
- };
1373
- /**
1374
- * 准备删除
1375
- */
1376
- concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
1377
- try {
1378
- /**
1379
- * 查找这个节点是不是有依赖
1380
- */
1381
- const node = this;
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的弹框展示
1401
- const confirmParms = {
1402
- actionType: 'delete',
1403
- tipFlag: false,
1404
- node,
1405
- icon: 'warning',
1406
- };
1407
- let callback = null;
1408
- if (refsList.length <= 1) {
1409
- // 页面组件直接删除然后return
1410
- if (node instanceof concepts_1.ViewElement) {
1411
- this.delete();
1412
- return;
1413
- }
1414
- callback = () => {
1415
- // Structure 和 Interface是内部有delete方法
1416
- if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
1417
- this.deleteLogincAndModule();
1418
- }
1419
- else {
1420
- this.delete();
1421
- }
1422
- };
1423
- }
1424
- else {
1425
- // 如果有依赖就有一个查找引用提示
1426
- confirmParms.tipFlag = true;
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
- }
1442
- callback = () => {
1443
- // removeParam
1444
- // 跟rename 还不太一样,部分修改依赖修改好的值,然后在下面的修改需要把自己传递进去
1445
- if (node instanceof concepts_1.Param) {
1446
- const App = this.rootNode;
1447
- const parentNode = this.parentNode;
1448
- // 收集修改
1449
- App.emit('collect:start', {
1450
- actionMsg: '删除参数',
1451
- });
1452
- this.delete();
1453
- refsList.forEach((record) => {
1454
- const fileNode = naslServer.file2NodeMap.get(record.file);
1455
- if (!fileNode)
1456
- return null;
1457
- const minRange = naslServer._findMinRange(record, fileNode);
1458
- if (minRange) {
1459
- if (minRange.node instanceof concepts_1.CallLogic) {
1460
- minRange.node.setCalleeArgName(parentNode);
1461
- }
1462
- if (minRange.node instanceof concepts_1.Destination) {
1463
- minRange.node.setViewArgument(parentNode);
1464
- }
1465
- }
1466
- });
1467
- // 结束修改 ,批量操作
1468
- App.emit('collect:end');
1469
- return;
1470
- }
1471
- // 删除logic节点,如果有对应的interface要一起删除
1472
- if (node instanceof concepts_1.Logic) {
1473
- const App = this.rootNode;
1474
- // 收集修改
1475
- App.emit('collect:start', {
1476
- actionMsg: '删除逻辑并删除导出的接口',
1477
- });
1478
- this.delete();
1479
- refsList.forEach((record) => {
1480
- const fileNode = naslServer.file2NodeMap.get(record.file);
1481
- if (!fileNode)
1482
- return null;
1483
- const minRange = naslServer._findMinRange(record, fileNode);
1484
- if (minRange) {
1485
- if (minRange.node instanceof concepts_1.Interface) {
1486
- minRange.node.delete();
1487
- }
1488
- }
1489
- });
1490
- // 结束修改 ,批量操作
1491
- App.emit('collect:end');
1492
- return;
1493
- }
1494
- // 删除权限节点
1495
- if (node instanceof concepts_1.Role) {
1496
- const App = this.rootNode;
1497
- // 收集修改
1498
- App.emit('collect:start', {
1499
- actionMsg: '删除权限',
1500
- });
1501
- this.delete();
1502
- refsList.forEach((record) => {
1503
- const fileNode = naslServer.file2NodeMap.get(record.file);
1504
- if (!fileNode)
1505
- return null;
1506
- const minRange = naslServer._findMinRange(record, fileNode);
1507
- if (minRange) {
1508
- if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
1509
- // oldName旧的节点存的值
1510
- // newValue用户输入值
1511
- // node.bindRoles 存的
1512
- const str = minRange.node.bindRoles.toString().replace(this.name, '');
1513
- const newBindRoles = str.split(',').filter((item) => !!item);
1514
- minRange.node.setBindRoles(newBindRoles);
1515
- }
1516
- }
1517
- });
1518
- // 结束修改 ,批量操作
1519
- App.emit('collect:end');
1520
- return;
1521
- }
1522
- // 删除页面或者流程,如果上一步没有return 就说明他是有别的引用的,会有引用弹框
1523
- if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
1524
- this.delete();
1525
- }
1526
- // 其余的都直接调用删除
1527
- // Structure 和 Interface是内部有delete方法
1528
- if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
1529
- this.deleteLogincAndModule();
1530
- }
1531
- else {
1532
- this.delete();
1533
- }
1534
- };
1535
- }
1536
- (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, callback);
1537
- }
1538
- catch (err) {
1539
- console.log(err);
1540
- }
1541
- };
1542
- /**
1543
- * 如果添加需要触发查找引用并且在之后,对内容产生影响
1544
- */
1545
- concepts_1.BaseNode.prototype.addParamsPrepare = async function addParamsPrepare() {
1546
- try {
1547
- /**
1548
- * 查找这个节点是不是有依赖
1549
- */
1550
- const refsList = await naslServer._isHaveRef(this);
1551
- return naslServer._addParamsPrepare(this, refsList);
1552
- }
1553
- catch (err) {
1554
- console.log(err);
1555
- }
1556
- };
1557
1293
  /**
1558
1294
  * 除去rename场景下的更新
1559
1295
  * @param fileNode 文件级别的节点
@@ -1692,7 +1428,6 @@ async function incidentalAction(action, fileNode, targetNode, oldpath) {
1692
1428
  await incidentalAction(action, fileNodeItem, fileNodeItem, currentOldPath);
1693
1429
  }
1694
1430
  }
1695
- ;
1696
1431
  }
1697
1432
  // 删除或新增模块
1698
1433
  // 需要把下面的哦内容全部都更新一遍
@@ -1710,7 +1445,6 @@ async function incidentalAction(action, fileNode, targetNode, oldpath) {
1710
1445
  await handleDelete(node, node, result);
1711
1446
  }
1712
1447
  }
1713
- ;
1714
1448
  // 删除模块通知更新列表
1715
1449
  if (action === 'delete') {
1716
1450
  try {