@lcap/nasl 4.1.0-rc.1 → 4.1.0-rc.11
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.
- package/out/generator/genBundleFiles.d.ts.map +1 -1
- package/out/generator/genBundleFiles.js +15 -93
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/generator/permission.d.ts.map +1 -1
- package/out/generator/permission.js +70 -34
- package/out/generator/permission.js.map +1 -1
- package/out/generator/release-body/body.d.ts.map +1 -1
- package/out/generator/release-body/body.js +3 -4
- package/out/generator/release-body/body.js.map +1 -1
- package/out/generator/release-body/data.d.ts.map +1 -1
- package/out/generator/release-body/data.js +0 -2
- package/out/generator/release-body/data.js.map +1 -1
- package/out/generator/release-body/memory-optimization.d.ts.map +1 -1
- package/out/generator/release-body/memory-optimization.js +3 -2
- package/out/generator/release-body/memory-optimization.js.map +1 -1
- package/out/generator/release-body/utils.d.ts +4 -4
- package/out/generator/release-body/utils.d.ts.map +1 -1
- package/out/generator/release-body/utils.js +3 -3
- package/out/generator/release-body/utils.js.map +1 -1
- package/out/index.d.ts +1 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +2 -1
- package/out/index.js.map +1 -1
- package/out/natural/transforms/transform2LogicItem.d.ts +1 -1
- package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -1
- package/out/natural/transforms/transform2LogicItem.js +44 -11
- package/out/natural/transforms/transform2LogicItem.js.map +1 -1
- package/out/server/OQL/oql-cache.d.ts.map +1 -1
- package/out/server/OQL/oql-cache.js +2 -0
- package/out/server/OQL/oql-cache.js.map +1 -1
- package/out/server/client/nasl-server-client.d.ts +7 -0
- package/out/server/client/nasl-server-client.d.ts.map +1 -0
- package/out/server/client/nasl-server-client.js +9 -0
- package/out/server/client/nasl-server-client.js.map +1 -0
- package/out/server/extendBaseNode.d.ts.map +1 -1
- package/out/server/extendBaseNode.js +18 -9
- package/out/server/extendBaseNode.js.map +1 -1
- package/out/server/findReference.d.ts.map +1 -1
- package/out/server/findReference.js +4 -0
- package/out/server/findReference.js.map +1 -1
- package/out/server/naslServer.d.ts +6 -0
- package/out/server/naslServer.d.ts.map +1 -1
- package/out/server/naslServer.js +103 -48
- package/out/server/naslServer.js.map +1 -1
- package/out/service/storage/api.d.ts +16 -7
- package/out/service/storage/api.js +6 -0
- package/out/service/storage/api.js.map +1 -1
- package/out/service/storage/cache/index.d.ts +3 -15
- package/out/service/storage/cache/index.d.ts.map +1 -1
- package/out/service/storage/cache/index.js +14 -299
- package/out/service/storage/cache/index.js.map +1 -1
- package/out/service/storage/cache/split.d.ts +0 -21
- package/out/service/storage/cache/split.d.ts.map +1 -1
- package/out/service/storage/cache/split.js +24 -33
- package/out/service/storage/cache/split.js.map +1 -1
- package/out/service/storage/init.d.ts +9 -0
- package/out/service/storage/init.d.ts.map +1 -1
- package/out/service/storage/init.js +61 -90
- package/out/service/storage/init.js.map +1 -1
- package/out/service/storage/service.js +1 -1
- package/out/service/storage/service.js.map +1 -1
- package/out/templator/genQueryComponent.d.ts +6 -1
- package/out/templator/genQueryComponent.d.ts.map +1 -1
- package/out/templator/genQueryComponent.js +4 -14
- package/out/templator/genQueryComponent.js.map +1 -1
- package/out/templator/utils.d.ts +9 -0
- package/out/templator/utils.d.ts.map +1 -1
- package/out/templator/utils.js +7 -0
- package/out/templator/utils.js.map +1 -1
- package/package.json +10 -10
package/out/server/naslServer.js
CHANGED
|
@@ -46,6 +46,7 @@ const path = __importStar(require("path"));
|
|
|
46
46
|
const worker_threads_1 = require("worker_threads");
|
|
47
47
|
/// #endif
|
|
48
48
|
const concepts_1 = require("../concepts");
|
|
49
|
+
// import { validator, VusionValidator } from '@lcap/nasl-concepts';
|
|
49
50
|
const asserts_1 = require("@lcap/nasl-concepts/asserts");
|
|
50
51
|
const service_1 = require("@lcap/nasl-concepts/service");
|
|
51
52
|
const utils = __importStar(require("../utils"));
|
|
@@ -60,25 +61,7 @@ const decorators_1 = require("../decorators");
|
|
|
60
61
|
const nasl_concepts_1 = require("@lcap/nasl-concepts");
|
|
61
62
|
const nasl_language_server_core_1 = require("@lcap/nasl-language-server-core");
|
|
62
63
|
const findReference_1 = require("./findReference");
|
|
63
|
-
const
|
|
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
|
-
];
|
|
64
|
+
const nasl_server_client_1 = require("./client/nasl-server-client");
|
|
82
65
|
const SentryMessager = (0, nasl_sentry_1.sentryMonitorTSWorkerMessager)(Messager_1.default);
|
|
83
66
|
// naslStdlib文件缓存;作为全局变量给多实例用复用
|
|
84
67
|
const __naslStdlibFileCacheMap = new Map();
|
|
@@ -388,13 +371,13 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
388
371
|
const diagAppStartTime = performance.now();
|
|
389
372
|
await utils.runGeneratorAsync(this.semEnv.errorDiagnoser.diagnosticApp());
|
|
390
373
|
const diagAppEndTime = performance.now();
|
|
391
|
-
console.
|
|
374
|
+
console.info(`\x1b[44m\x1b[97m Diagnostic App \x1b[0m: ${((diagAppEndTime - diagAppStartTime) / 1000).toFixed(3)}s`);
|
|
392
375
|
const diagnosticMap = this.semEnv.errorDiagnoser.getAllDiagnostics();
|
|
393
376
|
const transformStartTime = performance.now();
|
|
394
377
|
const records = transformDiagnosticMapToRecords(diagnosticMap);
|
|
395
378
|
await this.diagnosticManager.setInitialDiagData(records);
|
|
396
379
|
const transformEndTime = performance.now();
|
|
397
|
-
console.
|
|
380
|
+
console.info(`\x1b[44m\x1b[97m Transform Diagnostic Map To Records \x1b[0m: ${((transformEndTime - transformStartTime) / 1000).toFixed(3)}s`);
|
|
398
381
|
// 首屏和增量通路不同,首屏时需要手动调用lsRunEndSwitch;增量时则在增量代码中调用
|
|
399
382
|
this._lsRunEndSwitch();
|
|
400
383
|
this.isFirstScreen = false;
|
|
@@ -406,7 +389,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
406
389
|
rawApp.emit('collect:end');
|
|
407
390
|
this.semData.isFirstScreen = false;
|
|
408
391
|
this.semEnv.allocatedVEQNames.forEach(n => {
|
|
409
|
-
this.semEnv.refMgr.
|
|
392
|
+
this.semEnv.refMgr.gQNameDefs.delete(n);
|
|
410
393
|
});
|
|
411
394
|
this.semEnv.allocatedVEQNames.length = 0;
|
|
412
395
|
for (const value of this.cachedEventPayloadValues) {
|
|
@@ -418,6 +401,12 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
418
401
|
}
|
|
419
402
|
utils.isDebugMode && console.timeEnd('\x1b[44m\x1b[97m 用户体感首屏检查耗时 \x1b[0m');
|
|
420
403
|
}
|
|
404
|
+
/**
|
|
405
|
+
* @warning 不放在这里无法起到加速效果,且读到的 cache 为空,抛出 undefined 值
|
|
406
|
+
* 放在这里的话好像是有些“时序”问题?
|
|
407
|
+
*/
|
|
408
|
+
this.semData.recoverSlowGetters();
|
|
409
|
+
this.semData.clearSemanticData();
|
|
421
410
|
(0, nasl_language_server_core_1.clearFileNodeCache)();
|
|
422
411
|
}
|
|
423
412
|
this.notifyPublishDiagnosticsEnd(tsDiagnostics);
|
|
@@ -853,8 +842,6 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
853
842
|
await this.waitOqlQueryComponentChildrenFinish(app);
|
|
854
843
|
// 翻译 ts 文件
|
|
855
844
|
const results = await utils.runGeneratorAsync(getAllTsFiles());
|
|
856
|
-
this.semData.recoverSlowGetters();
|
|
857
|
-
this.semData.clearSemanticData();
|
|
858
845
|
const files = results.map((result) => ({
|
|
859
846
|
file: result.filePath,
|
|
860
847
|
fileContent: result.code,
|
|
@@ -1647,11 +1634,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
1647
1634
|
const { parentNode } = nd;
|
|
1648
1635
|
const semEnv = NaslServer_1.toRaw(this.semEnv);
|
|
1649
1636
|
let result = wrapRefs(semEnv.refMgr.getReferences(semEnv, nd));
|
|
1650
|
-
if (nd.concept === '
|
|
1651
|
-
const refMemAddrs = semEnv.refMgr.getViewElementRefs(semEnv, nd);
|
|
1652
|
-
result.push(...wrapRefs(refMemAddrs));
|
|
1653
|
-
}
|
|
1654
|
-
else if (nd.concept === 'ProcessElementV2') {
|
|
1637
|
+
if (nd.concept === 'ProcessElementV2') {
|
|
1655
1638
|
const refMemAddrs = semEnv.refMgr.getProcessElementRefs(semEnv, nd);
|
|
1656
1639
|
result.push(...wrapRefs(refMemAddrs));
|
|
1657
1640
|
}
|
|
@@ -1664,10 +1647,18 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
1664
1647
|
}
|
|
1665
1648
|
}
|
|
1666
1649
|
}
|
|
1667
|
-
else if (
|
|
1650
|
+
else if (nd.concept === 'BindEvent') {
|
|
1651
|
+
// v4.1 新增 绑定事件 改类型,需要把 事件逻辑的引用,全部迁移过去
|
|
1652
|
+
// v4.1 修改:logics 其实只能有一个
|
|
1653
|
+
if (nd.logics[0].concept === 'Logic') {
|
|
1654
|
+
const eventLogicRefs = semEnv.refMgr.getReferences(semEnv, nd.logics[0]);
|
|
1655
|
+
result.push(...wrapRefs(eventLogicRefs));
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
else if (nd.concept === 'Param' || nd.concept === 'ParamWithGroup') {
|
|
1668
1659
|
// 调用处的 keyword = XXX 等也要修改,所以查 Logic、View 等的引用
|
|
1669
1660
|
const pNode = NaslServer_1.toRaw(parentNode);
|
|
1670
|
-
if ((0,
|
|
1661
|
+
if ((0, service_1.isCallableNaslLogic)(pNode) || concepts_1.asserts.isStrictView(pNode)) {
|
|
1671
1662
|
const refs = semEnv.refMgr.getReferences(semEnv, pNode);
|
|
1672
1663
|
result.push(...wrapRefs(refs));
|
|
1673
1664
|
}
|
|
@@ -1711,6 +1702,22 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
1711
1702
|
const minRange = {
|
|
1712
1703
|
...record,
|
|
1713
1704
|
};
|
|
1705
|
+
// 搞事情:v4.1 新增 绑定事件 改类型,需要把 事件逻辑的引用,全部迁移过去
|
|
1706
|
+
if (nd.concept === 'BindEvent') {
|
|
1707
|
+
if (minRange.node.concept === 'Identifier') {
|
|
1708
|
+
/**
|
|
1709
|
+
* 使用正则替换倒数第二个点和倒数第一个点之间的内容
|
|
1710
|
+
* 例如 elements.button_1.bindEvents.XXX.logics -> elements.button_1.bindEvents.YYY.logics
|
|
1711
|
+
*/
|
|
1712
|
+
minRange.newValue = minRange.node.namespace.replace(/(\.bindEvents\.)([^.]+)(\.logics)$/, `$1${newValue}$3`);
|
|
1713
|
+
minRange.setTypeMethods = 'setNamespace';
|
|
1714
|
+
}
|
|
1715
|
+
else if (minRange.node === nd) {
|
|
1716
|
+
// 自己
|
|
1717
|
+
minRange.newValue = newValue;
|
|
1718
|
+
minRange.setTypeMethods = 'setName';
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1714
1721
|
// 节点上ts临时变量标识,如果有这个就不rename
|
|
1715
1722
|
if (minRange.node?.noTsReName) {
|
|
1716
1723
|
return null;
|
|
@@ -1744,6 +1751,22 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
1744
1751
|
}
|
|
1745
1752
|
// 如果匹配到的节点是Identifier表达式
|
|
1746
1753
|
if (minRange.node instanceof concepts_1.Identifier) {
|
|
1754
|
+
/**
|
|
1755
|
+
* v4.1 新增 Identifier 可能是 页面元素 的事件逻辑 Logic 的引用 或 逻辑的引用
|
|
1756
|
+
* 页面元素 改名后,这个 Identifier 的 namespace 中间的元素名需要修改
|
|
1757
|
+
*/
|
|
1758
|
+
if (nd.concept === 'ViewElement') {
|
|
1759
|
+
minRange.setTypeMethods = 'setNamespace';
|
|
1760
|
+
/**
|
|
1761
|
+
* 使用正则替换第二个点和第三个点之间的内容
|
|
1762
|
+
* 例如 elements.XXX.bindEvents.click.logics -> elements.YYY.bindEvents.click.logics
|
|
1763
|
+
*/
|
|
1764
|
+
const parts = minRange.node.namespace.split('.');
|
|
1765
|
+
if (parts.length >= 1) {
|
|
1766
|
+
parts[1] = newValue;
|
|
1767
|
+
minRange.newValue = parts.join('.');
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1747
1770
|
// 如果参数修改影响了Identifier, 就说明是上一级逻辑的引用,所以就直接过滤掉就好了
|
|
1748
1771
|
if (nd instanceof concepts_1.Param && minRange.node?.namespace?.endsWith('logics')) {
|
|
1749
1772
|
return null;
|
|
@@ -1822,7 +1845,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
1822
1845
|
minRange.setTypeMethods = 'setUrlValue';
|
|
1823
1846
|
minRange.newValue = newTextValue;
|
|
1824
1847
|
}
|
|
1825
|
-
else if (minRange.node instanceof concepts_1.BindAttribute &&
|
|
1848
|
+
else if (minRange.node instanceof concepts_1.BindAttribute && nasl_language_server_core_1.specialStringRefs.includes(minRange.node.name)) {
|
|
1826
1849
|
// eslint-disable-next-line no-confusing-arrow
|
|
1827
1850
|
minRange.newValue = (minRange.node.value ?? '').split('.').map((v, i) => i ? v : newValue.charAt(0).toLowerCase() + newValue.slice(1)).join('.');
|
|
1828
1851
|
minRange.setTypeMethods = 'setValue';
|
|
@@ -1861,7 +1884,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
1861
1884
|
// 如果要修改实体属性
|
|
1862
1885
|
if (nd instanceof concepts_1.EntityProperty) {
|
|
1863
1886
|
// 如果是修改实体属性,要同步绑定属性(属性名为 valueField / textField)
|
|
1864
|
-
if (minRange.node instanceof concepts_1.BindAttribute &&
|
|
1887
|
+
if (minRange.node instanceof concepts_1.BindAttribute && nasl_language_server_core_1.specialStringRefs.includes(minRange.node.name)) {
|
|
1865
1888
|
// eslint-disable-next-line no-confusing-arrow
|
|
1866
1889
|
minRange.newValue = (minRange.node.value ?? '').split('.').slice(0, -1).concat(newValue).join('.');
|
|
1867
1890
|
minRange.setTypeMethods = 'setValue';
|
|
@@ -2126,7 +2149,16 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2126
2149
|
// 增加参数的副作用,用于更新logic和view
|
|
2127
2150
|
_addParamsEffect(refsList, nd) {
|
|
2128
2151
|
const parentNode = nd?.parentNode;
|
|
2129
|
-
|
|
2152
|
+
// 按 node.nodePath 降序排列,保证父级或更深层的引用先处理
|
|
2153
|
+
const sortedRefs = (refsList || []).slice().sort((a, b) => {
|
|
2154
|
+
const pa = a?.node?.nodePath ?? '';
|
|
2155
|
+
const pb = b?.node?.nodePath ?? '';
|
|
2156
|
+
return pb.localeCompare(pa);
|
|
2157
|
+
});
|
|
2158
|
+
// 考虑 CallA(CallA(null))
|
|
2159
|
+
// 如果 不按 nodePath 降序排列,那么更新了第一个 CallA 后,第二个的 CallA 的 nodePath 中会有 -1
|
|
2160
|
+
// 推测可能是 CallA 变成了新节点,所以存的 node 变了
|
|
2161
|
+
sortedRefs.forEach(({ node: minRangeNode }) => {
|
|
2130
2162
|
// 如果找到节点是callLogic就去更新
|
|
2131
2163
|
if (nd instanceof concepts_1.Param) {
|
|
2132
2164
|
if (minRangeNode instanceof concepts_1.CallLogic || minRangeNode instanceof concepts_1.CallAuthInterface) {
|
|
@@ -2354,6 +2386,8 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2354
2386
|
utils.delay(55);
|
|
2355
2387
|
}
|
|
2356
2388
|
const { node, filePath, item } = itemDetail;
|
|
2389
|
+
if (!item)
|
|
2390
|
+
return;
|
|
2357
2391
|
// 先按照顺序占位
|
|
2358
2392
|
types.set(node, null);
|
|
2359
2393
|
// 获取已知节点类型的类型
|
|
@@ -2384,6 +2418,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2384
2418
|
'CallFunction',
|
|
2385
2419
|
'CallInterface',
|
|
2386
2420
|
'CallMicroserviceInterface',
|
|
2421
|
+
'CallGatewayInterface',
|
|
2387
2422
|
'MemberExpression',
|
|
2388
2423
|
'Return',
|
|
2389
2424
|
'Variable',
|
|
@@ -2676,14 +2711,16 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2676
2711
|
// 集成内存优化:在标注过程中直接优化JSON,减少内存使用和处理时间
|
|
2677
2712
|
(0, memory_optimization_1.optimizeJsonDuringAnnotation)(newJson);
|
|
2678
2713
|
let tyAnn = tyAnnToJSON(this.semEnv.getType(oldNd));
|
|
2679
|
-
if ((oldNd.concept === 'Variable' || oldNd.concept === 'Return' || oldNd.concept === 'Param')
|
|
2714
|
+
if ((oldNd.concept === 'Variable' || oldNd.concept === 'Return' || oldNd.concept === 'Param' || oldNd.concept === 'ParamWithGroup')
|
|
2680
2715
|
&& !oldNd.typeAnnotation
|
|
2681
2716
|
&& tyAnn?.typeKind !== 'typeParam') {
|
|
2682
2717
|
newJson.typeAnnotation = tyAnn;
|
|
2683
2718
|
}
|
|
2684
2719
|
// 原来的标注环节复制粘贴过来改写的,调整了顺序
|
|
2685
2720
|
// jsonSerializer 是 CallLogic,其余是 CallFunction。CallLogic 有好几个子类。
|
|
2686
|
-
|
|
2721
|
+
const isCallType1 = oldNd.concept === 'CallLogic' || oldNd.concept === 'CallConnector';
|
|
2722
|
+
const isCallFn = oldNd.concept === 'CallFunction';
|
|
2723
|
+
if (isCallType1 || isCallFn) {
|
|
2687
2724
|
const tzArgIdx = timeZoneArgumentIndexMap.get(oldNd.calleeName);
|
|
2688
2725
|
const args = oldNd.arguments;
|
|
2689
2726
|
const tzArg = args ? args[tzArgIdx] : undefined;
|
|
@@ -2696,9 +2733,9 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2696
2733
|
/**
|
|
2697
2734
|
* 特殊处理,不想去查两次类型, 因为是从函数签名上拿类型,所以直接合并在一起,先这样
|
|
2698
2735
|
* 应该主要是 Java 扩展库逻辑调用
|
|
2699
|
-
*/
|
|
2700
|
-
if (oldNd
|
|
2701
|
-
newJson.typeArguments = oldNd.__TypeArguments.map(tyAnnToJSON);
|
|
2736
|
+
*/ // @ts-ignore
|
|
2737
|
+
if (oldNd.__TypeArguments?.length && isCallType1) { // @ts-ignore
|
|
2738
|
+
newJson.typeArguments = oldNd.__TypeArguments.map(tyAnnToJSON);
|
|
2702
2739
|
newJson.typeAnnotation = tyAnn;
|
|
2703
2740
|
}
|
|
2704
2741
|
// 根据 https://projectmanage.netease-official.lcap.163yun.com/dashboard/FeatureDetail?id=2737356895760128&id1=null&iterationId=null&versionid=null&tab=info
|
|
@@ -2706,7 +2743,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2706
2743
|
// - 对argument.expression.typeAnnotation 无需做修改,保持为其实际类型
|
|
2707
2744
|
// - 对argument.typeAnnotation,为根据对应Collection的泛型参数的类型填写其类型
|
|
2708
2745
|
// 先不动这里,有空再调整
|
|
2709
|
-
if (
|
|
2746
|
+
if (isCallFn) {
|
|
2710
2747
|
if (oldNd.calleeNamespace === 'nasl.util') {
|
|
2711
2748
|
const calleeName = oldNd.calleeName;
|
|
2712
2749
|
const listFunctionParamIndexMaps = new Map(Object.entries({
|
|
@@ -2762,34 +2799,41 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
2762
2799
|
}
|
|
2763
2800
|
}
|
|
2764
2801
|
if (!tyAnn) {
|
|
2802
|
+
const isCallItfc = oldNd.concept === 'CallInterface' ||
|
|
2803
|
+
oldNd.concept === 'CallAuthInterface' ||
|
|
2804
|
+
oldNd.concept === 'CallMicroserviceInterface' ||
|
|
2805
|
+
oldNd.concept === 'CallGatewayInterface';
|
|
2806
|
+
if (isCallType1 || isCallFn || isCallItfc) {
|
|
2807
|
+
newJson.typeAnnotation = nasl_language_server_core_1.naslVoidTy.toJSON();
|
|
2808
|
+
}
|
|
2765
2809
|
return newJson;
|
|
2766
2810
|
}
|
|
2767
|
-
if (oldNd.concept === 'CallQueryComponent' /* && !oldNd.isAutoInfer() 直接覆盖得了,老版的 typeAnnotation 问题有点多 */) {
|
|
2811
|
+
if (oldNd.concept === 'CallQueryComponent' /* && !oldNd.isAutoInfer() 直接覆盖得了,老版的 typeAnnotation 问题有点多 */) {
|
|
2768
2812
|
newJson.typeAnnotation = tyAnn;
|
|
2769
2813
|
// 新类型标注标的是对的,所以不再需要原来的改法(即,把 T 变为 { list:T, total: Long }
|
|
2770
2814
|
}
|
|
2771
2815
|
// 如果节点本身有类型就不去在塞一遍了
|
|
2772
2816
|
// 有值而且没有类型再去设置
|
|
2773
2817
|
// 但是Identifier 和 MemberExpression 都用标注出来的因为本身是变量,有类型也需要覆盖一下
|
|
2774
|
-
else if (tyAnn && (oldNd.concept === 'Argument') && oldNd.getAncestor('Connector')?.concept === 'Connector') {
|
|
2818
|
+
else if (tyAnn && (oldNd.concept === 'Argument') && oldNd.getAncestor('Connector')?.concept === 'Connector') {
|
|
2775
2819
|
newJson.typeAnnotation = tyAnn;
|
|
2776
2820
|
}
|
|
2777
2821
|
else if (oldNd.concept === 'Identifier' || oldNd.concept === 'MemberExpression') {
|
|
2778
2822
|
// @ts-ignore 处理 Match,还是需要,因为后端翻译比较特殊
|
|
2779
|
-
const iName = getNameOfIdAndMemExpr(newJson);
|
|
2823
|
+
const iName = getNameOfIdAndMemExpr(newJson);
|
|
2780
2824
|
newJson.typeAnnotation = matchExprTyAnnMap.has(iName) ? matchExprTyAnnMap.get(iName) : tyAnn;
|
|
2781
2825
|
}
|
|
2782
2826
|
else if ((oldNd.concept === 'NewComposite') &&
|
|
2783
|
-
(oldNd.typeAnnotation?.typeKind === 'anonymousStructure' || oldNd.typeAnnotation?.typeKind === 'generic')) {
|
|
2827
|
+
(oldNd.typeAnnotation?.typeKind === 'anonymousStructure' || oldNd.typeAnnotation?.typeKind === 'generic')) {
|
|
2784
2828
|
newJson.typeAnnotation = tyAnn;
|
|
2785
2829
|
}
|
|
2786
2830
|
// 服务端需要默认值节点有类型来判断父节点是否是日期类型
|
|
2787
2831
|
else if (newJson.concept === 'DefaultValue') {
|
|
2788
|
-
//
|
|
2832
|
+
// v3.14.x 先改成这样,应该直接拿就行
|
|
2789
2833
|
newJson.typeAnnotation = tyAnn;
|
|
2790
2834
|
}
|
|
2791
2835
|
// 定义上不挂类型
|
|
2792
|
-
else if ((!oldNd.typeAnnotation) && !nasl_language_server_core_1.ReferenceManager.defConcept.includes(oldNd.concept)) {
|
|
2836
|
+
else if ((!oldNd.typeAnnotation) && !nasl_language_server_core_1.ReferenceManager.defConcept.includes(oldNd.concept)) {
|
|
2793
2837
|
newJson.typeAnnotation = tyAnn;
|
|
2794
2838
|
}
|
|
2795
2839
|
return newJson;
|
|
@@ -3254,7 +3298,6 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
3254
3298
|
this.logger.timeEnd('语言服务变更');
|
|
3255
3299
|
}
|
|
3256
3300
|
catch (e) {
|
|
3257
|
-
console.log('error', e);
|
|
3258
3301
|
console.error('error', e);
|
|
3259
3302
|
this.logger.info('no "naslServer:nodeChange" event received');
|
|
3260
3303
|
}
|
|
@@ -3301,6 +3344,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
3301
3344
|
});
|
|
3302
3345
|
// 刷新左侧事件逻辑树
|
|
3303
3346
|
this._refreshTreeViews();
|
|
3347
|
+
this._triggerOqlQueryComponentUpdate();
|
|
3304
3348
|
utils.isDebugMode && console.time('\x1b[44m\x1b[97m 6: push all diagnostic records \x1b[0m');
|
|
3305
3349
|
await this.diagnosticManager.pushAll(diagRecs);
|
|
3306
3350
|
this.typerCheckFiles.clear();
|
|
@@ -3309,7 +3353,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
3309
3353
|
this.typerErrRecords.length = 0;
|
|
3310
3354
|
this.oqlRemoveNodesTsPath.clear();
|
|
3311
3355
|
this.semEnv.allocatedVEQNames.forEach(n => {
|
|
3312
|
-
this.semEnv.refMgr.
|
|
3356
|
+
this.semEnv.refMgr.gQNameDefs.delete(n);
|
|
3313
3357
|
});
|
|
3314
3358
|
this.semEnv.allocatedVEQNames.length = 0;
|
|
3315
3359
|
this.originProxyTargetNodes.clear();
|
|
@@ -3596,6 +3640,17 @@ let NaslServer = NaslServer_1 = class NaslServer {
|
|
|
3596
3640
|
ctxProcessV2?.getSubLogics();
|
|
3597
3641
|
});
|
|
3598
3642
|
}
|
|
3643
|
+
// 修复:sql查询实时更新问题
|
|
3644
|
+
_triggerOqlQueryComponentUpdate() {
|
|
3645
|
+
this.originProxyTargetNodes.forEach((nd) => {
|
|
3646
|
+
if (concepts_1.asserts.isOqlQueryComponent(nd) && nd.codeSourceMap) {
|
|
3647
|
+
nd.codeSourceMap = { ...nd.codeSourceMap };
|
|
3648
|
+
}
|
|
3649
|
+
});
|
|
3650
|
+
}
|
|
3651
|
+
async getClient() {
|
|
3652
|
+
return (0, nasl_server_client_1.getNaslServerClient)(this);
|
|
3653
|
+
}
|
|
3599
3654
|
};
|
|
3600
3655
|
exports.NaslServer = NaslServer;
|
|
3601
3656
|
__decorate([
|