@lcap/nasl 4.1.0-rc.2 → 4.1.0-rc.4

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.
@@ -60,25 +60,7 @@ const decorators_1 = require("../decorators");
60
60
  const nasl_concepts_1 = require("@lcap/nasl-concepts");
61
61
  const nasl_language_server_core_1 = require("@lcap/nasl-language-server-core");
62
62
  const findReference_1 = require("./findReference");
63
- const NEED_SYNC_BIND_ATTRIBUTE = [
64
- 'textField',
65
- 'valueField',
66
- 'iconField',
67
- 'toField',
68
- 'parentField',
69
- 'childrenField',
70
- 'hasChildrenField',
71
- 'field',
72
- 'idField',
73
- 'titleField',
74
- 'closableField',
75
- 'descriptionField',
76
- 'expandedField',
77
- 'disabledField',
78
- 'nameField',
79
- 'labelField',
80
- 'sortField'
81
- ];
63
+ const nasl_server_client_1 = require("./client/nasl-server-client");
82
64
  const SentryMessager = (0, nasl_sentry_1.sentryMonitorTSWorkerMessager)(Messager_1.default);
83
65
  // naslStdlib文件缓存;作为全局变量给多实例用复用
84
66
  const __naslStdlibFileCacheMap = new Map();
@@ -406,7 +388,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
406
388
  rawApp.emit('collect:end');
407
389
  this.semData.isFirstScreen = false;
408
390
  this.semEnv.allocatedVEQNames.forEach(n => {
409
- this.semEnv.refMgr.qNameDefs.delete(n);
391
+ this.semEnv.refMgr.gQNameDefs.delete(n);
410
392
  });
411
393
  this.semEnv.allocatedVEQNames.length = 0;
412
394
  for (const value of this.cachedEventPayloadValues) {
@@ -1651,11 +1633,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
1651
1633
  const { parentNode } = nd;
1652
1634
  const semEnv = NaslServer_1.toRaw(this.semEnv);
1653
1635
  let result = wrapRefs(semEnv.refMgr.getReferences(semEnv, nd));
1654
- if (nd.concept === 'ViewElement') {
1655
- const refMemAddrs = semEnv.refMgr.getViewElementRefs(semEnv, nd);
1656
- result.push(...wrapRefs(refMemAddrs));
1657
- }
1658
- else if (nd.concept === 'ProcessElementV2') {
1636
+ if (nd.concept === 'ProcessElementV2') {
1659
1637
  const refMemAddrs = semEnv.refMgr.getProcessElementRefs(semEnv, nd);
1660
1638
  result.push(...wrapRefs(refMemAddrs));
1661
1639
  }
@@ -1668,7 +1646,15 @@ let NaslServer = NaslServer_1 = class NaslServer {
1668
1646
  }
1669
1647
  }
1670
1648
  }
1671
- else if (concepts_1.asserts.isStrictParam(nd)) {
1649
+ else if (nd.concept === 'BindEvent') {
1650
+ // v4.1 新增 绑定事件 改类型,需要把 事件逻辑的引用,全部迁移过去
1651
+ // v4.1 修改:logics 其实只能有一个
1652
+ if (nd.logics[0].concept === 'Logic') {
1653
+ const eventLogicRefs = semEnv.refMgr.getReferences(semEnv, nd.logics[0]);
1654
+ result.push(...wrapRefs(eventLogicRefs));
1655
+ }
1656
+ }
1657
+ else if (nd.concept === 'Param' || nd.concept === 'ParamWithGroup') {
1672
1658
  // 调用处的 keyword = XXX 等也要修改,所以查 Logic、View 等的引用
1673
1659
  const pNode = NaslServer_1.toRaw(parentNode);
1674
1660
  if ((0, nasl_language_server_core_1.isCallableNaslLogic)(pNode) || concepts_1.asserts.isStrictView(pNode)) {
@@ -1715,6 +1701,22 @@ let NaslServer = NaslServer_1 = class NaslServer {
1715
1701
  const minRange = {
1716
1702
  ...record,
1717
1703
  };
1704
+ // 搞事情:v4.1 新增 绑定事件 改类型,需要把 事件逻辑的引用,全部迁移过去
1705
+ if (nd.concept === 'BindEvent') {
1706
+ if (minRange.node.concept === 'Identifier') {
1707
+ /**
1708
+ * 使用正则替换倒数第二个点和倒数第一个点之间的内容
1709
+ * 例如 elements.button_1.bindEvents.XXX.logics -> elements.button_1.bindEvents.YYY.logics
1710
+ */
1711
+ minRange.newValue = minRange.node.namespace.replace(/(\.bindEvents\.)([^.]+)(\.logics)$/, `$1${newValue}$3`);
1712
+ minRange.setTypeMethods = 'setNamespace';
1713
+ }
1714
+ else if (minRange.node === nd) {
1715
+ // 自己
1716
+ minRange.newValue = newValue;
1717
+ minRange.setTypeMethods = 'setName';
1718
+ }
1719
+ }
1718
1720
  // 节点上ts临时变量标识,如果有这个就不rename
1719
1721
  if (minRange.node?.noTsReName) {
1720
1722
  return null;
@@ -1748,6 +1750,22 @@ let NaslServer = NaslServer_1 = class NaslServer {
1748
1750
  }
1749
1751
  // 如果匹配到的节点是Identifier表达式
1750
1752
  if (minRange.node instanceof concepts_1.Identifier) {
1753
+ /**
1754
+ * v4.1 新增 Identifier 可能是 页面元素 的事件逻辑 Logic 的引用 或 逻辑的引用
1755
+ * 页面元素 改名后,这个 Identifier 的 namespace 中间的元素名需要修改
1756
+ */
1757
+ if (nd.concept === 'ViewElement') {
1758
+ minRange.setTypeMethods = 'setNamespace';
1759
+ /**
1760
+ * 使用正则替换第二个点和第三个点之间的内容
1761
+ * 例如 elements.XXX.bindEvents.click.logics -> elements.YYY.bindEvents.click.logics
1762
+ */
1763
+ const parts = minRange.node.namespace.split('.');
1764
+ if (parts.length >= 1) {
1765
+ parts[1] = newValue;
1766
+ minRange.newValue = parts.join('.');
1767
+ }
1768
+ }
1751
1769
  // 如果参数修改影响了Identifier, 就说明是上一级逻辑的引用,所以就直接过滤掉就好了
1752
1770
  if (nd instanceof concepts_1.Param && minRange.node?.namespace?.endsWith('logics')) {
1753
1771
  return null;
@@ -1826,7 +1844,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
1826
1844
  minRange.setTypeMethods = 'setUrlValue';
1827
1845
  minRange.newValue = newTextValue;
1828
1846
  }
1829
- else if (minRange.node instanceof concepts_1.BindAttribute && NEED_SYNC_BIND_ATTRIBUTE.includes(minRange.node.name)) {
1847
+ else if (minRange.node instanceof concepts_1.BindAttribute && nasl_language_server_core_1.specialStringRefs.includes(minRange.node.name)) {
1830
1848
  // eslint-disable-next-line no-confusing-arrow
1831
1849
  minRange.newValue = (minRange.node.value ?? '').split('.').map((v, i) => i ? v : newValue.charAt(0).toLowerCase() + newValue.slice(1)).join('.');
1832
1850
  minRange.setTypeMethods = 'setValue';
@@ -1865,7 +1883,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
1865
1883
  // 如果要修改实体属性
1866
1884
  if (nd instanceof concepts_1.EntityProperty) {
1867
1885
  // 如果是修改实体属性,要同步绑定属性(属性名为 valueField / textField)
1868
- if (minRange.node instanceof concepts_1.BindAttribute && NEED_SYNC_BIND_ATTRIBUTE.includes(minRange.node.name)) {
1886
+ if (minRange.node instanceof concepts_1.BindAttribute && nasl_language_server_core_1.specialStringRefs.includes(minRange.node.name)) {
1869
1887
  // eslint-disable-next-line no-confusing-arrow
1870
1888
  minRange.newValue = (minRange.node.value ?? '').split('.').slice(0, -1).concat(newValue).join('.');
1871
1889
  minRange.setTypeMethods = 'setValue';
@@ -2388,6 +2406,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
2388
2406
  'CallFunction',
2389
2407
  'CallInterface',
2390
2408
  'CallMicroserviceInterface',
2409
+ 'CallGatewayInterface',
2391
2410
  'MemberExpression',
2392
2411
  'Return',
2393
2412
  'Variable',
@@ -3313,7 +3332,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
3313
3332
  this.typerErrRecords.length = 0;
3314
3333
  this.oqlRemoveNodesTsPath.clear();
3315
3334
  this.semEnv.allocatedVEQNames.forEach(n => {
3316
- this.semEnv.refMgr.qNameDefs.delete(n);
3335
+ this.semEnv.refMgr.gQNameDefs.delete(n);
3317
3336
  });
3318
3337
  this.semEnv.allocatedVEQNames.length = 0;
3319
3338
  this.originProxyTargetNodes.clear();
@@ -3600,6 +3619,9 @@ let NaslServer = NaslServer_1 = class NaslServer {
3600
3619
  ctxProcessV2?.getSubLogics();
3601
3620
  });
3602
3621
  }
3622
+ async getClient() {
3623
+ return (0, nasl_server_client_1.getNaslServerClient)(this);
3624
+ }
3603
3625
  };
3604
3626
  exports.NaslServer = NaslServer;
3605
3627
  __decorate([