@lcap/nasl 4.1.0-beta.4 → 4.1.0-beta.5

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 (37) hide show
  1. package/out/generator/release-body/body.d.ts +1 -1
  2. package/out/generator/release-body/body.d.ts.map +1 -1
  3. package/out/generator/release-body/body.js +387 -385
  4. package/out/generator/release-body/body.js.map +1 -1
  5. package/out/generator/release-body/data.d.ts.map +1 -1
  6. package/out/generator/release-body/data.js +51 -34
  7. package/out/generator/release-body/data.js.map +1 -1
  8. package/out/generator/release-body/index.d.ts +1 -0
  9. package/out/generator/release-body/index.d.ts.map +1 -1
  10. package/out/generator/release-body/index.js +1 -0
  11. package/out/generator/release-body/index.js.map +1 -1
  12. package/out/generator/release-body/memory-optimization.d.ts +47 -0
  13. package/out/generator/release-body/memory-optimization.d.ts.map +1 -0
  14. package/out/generator/release-body/memory-optimization.js +266 -0
  15. package/out/generator/release-body/memory-optimization.js.map +1 -0
  16. package/out/generator/release-body/utils.d.ts +11 -4
  17. package/out/generator/release-body/utils.d.ts.map +1 -1
  18. package/out/generator/release-body/utils.js +52 -20
  19. package/out/generator/release-body/utils.js.map +1 -1
  20. package/out/server/extendBaseNode.js +1 -1
  21. package/out/server/extendBaseNode.js.map +1 -1
  22. package/out/server/findReference.d.ts.map +1 -1
  23. package/out/server/findReference.js +5 -1
  24. package/out/server/findReference.js.map +1 -1
  25. package/out/server/index.d.ts +0 -1
  26. package/out/server/index.d.ts.map +1 -1
  27. package/out/server/index.js +1 -2
  28. package/out/server/index.js.map +1 -1
  29. package/out/server/naslServer.d.ts +4 -11
  30. package/out/server/naslServer.d.ts.map +1 -1
  31. package/out/server/naslServer.js +21 -56
  32. package/out/server/naslServer.js.map +1 -1
  33. package/out/templator/utils.d.ts.map +1 -1
  34. package/out/templator/utils.js +1 -0
  35. package/out/templator/utils.js.map +1 -1
  36. package/package.json +11 -12
  37. package/sandbox/stdlib/nasl.util.ts +18 -4
@@ -49,6 +49,7 @@ const concepts_1 = require("../concepts");
49
49
  const asserts_1 = require("@lcap/nasl-concepts/asserts");
50
50
  const service_1 = require("@lcap/nasl-concepts/service");
51
51
  const utils = __importStar(require("../utils"));
52
+ const memory_optimization_1 = require("../generator/release-body/memory-optimization");
52
53
  const createUiTs_1 = __importStar(require("./createUiTs"));
53
54
  const translator_1 = require("../translator");
54
55
  const translator_2 = require("./translator");
@@ -1614,7 +1615,9 @@ let NaslServer = NaslServer_1 = class NaslServer {
1614
1615
  // // this.logger.info(refsList, 'refsList');
1615
1616
  // return refsList;
1616
1617
  // }
1617
- // rename 等内部调用的查找引用,不是用户点击的 "查找引用"
1618
+ /**
1619
+ * @warning 主要是 rename 等内部调用的查找引用,不是用户点击的 "查找引用"
1620
+ */
1618
1621
  async _isHaveRef(__node) {
1619
1622
  const wrapRefs = (refs) => {
1620
1623
  const result = [];
@@ -1643,13 +1646,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
1643
1646
  }
1644
1647
  const { parentNode } = nd;
1645
1648
  let result = wrapRefs(this.semEnv.refMgr.getReferences(this.semEnv, nd));
1646
- if (nd.concept === 'Entity') {
1647
- // 加上所有实体逻辑调用的引用(实体逻辑可看做无定义,但要修改调用处的 namespace:实体名是 namespace 的一部分)
1648
- for (const l of nd.logics) {
1649
- result.push(...wrapRefs(this.semEnv.refMgr.getReferences(this.semEnv, l)));
1650
- }
1651
- }
1652
- else if (nd.concept === 'ViewElement') {
1649
+ if (nd.concept === 'ViewElement') {
1653
1650
  const refMemAddrs = this.semEnv.refMgr.getViewElementRefs(this.semEnv, nd);
1654
1651
  result.push(...wrapRefs(refMemAddrs));
1655
1652
  }
@@ -2621,32 +2618,12 @@ let NaslServer = NaslServer_1 = class NaslServer {
2621
2618
  // 不用 TS LS 的最新类型,用现有类型直接写入 NASL json
2622
2619
  async fastGetNaslAnnotatedJSON(naslNode) {
2623
2620
  // eslint-disable-next-line @typescript-eslint/no-shadow
2624
- const isApp = concepts_1.asserts.isApp(naslNode);
2625
2621
  if (this.changeStackList?.length) {
2626
2622
  throw new Error(`当前还有${this.changeStackList.length}个文件还在执行更新操作`);
2627
2623
  }
2628
2624
  this.logger.time('app to AnnotatedJSON');
2629
- if (isApp) {
2630
- const isSysEnum = (nsp) => ['nasl.configuration.enums', 'nasl.processV2.enums'].includes(nsp);
2631
- // 不知道为什么实体的(国际化、流程)枚举的默认值的 expr 和 expr.object 和 expr.property 都没标类型,但是逻辑变量的默认值就标了
2632
- // 不标类型,服务端就认为是用户自定义枚举,然后 import 一个奇怪的文件,就挂了
2633
- // Enum1.prop,怎么想 prop 也不应该标 Enum1 类型啊,现在就得是 prop、Enum1、Enum1.prop 都标成 Enum1 类型……
2634
- const fixEnumDefValTypesInEntity = (app) => {
2635
- app.dataSources.forEach(ds => ds.entities.forEach(ett => {
2636
- ett.properties.forEach(prop => {
2637
- // @ts-ignore
2638
- if (isSysEnum(prop.defaultValue?.expression?.object?.namespace)) {
2639
- const ty = prop.typeAnnotation;
2640
- const memExp = prop.defaultValue.expression;
2641
- memExp.__TypeAnnotation = ty;
2642
- memExp.object.__TypeAnnotation = ty;
2643
- memExp.property.__TypeAnnotation = ty;
2644
- }
2645
- });
2646
- }));
2647
- };
2648
- fixEnumDefValTypesInEntity(naslNode);
2649
- }
2625
+ // 重置优化统计信息
2626
+ (0, memory_optimization_1.resetOptimizationStats)();
2650
2627
  const timeZoneArgumentIndexMap = new Map([
2651
2628
  ['ToString', 1],
2652
2629
  ['CurrDateTime', 0],
@@ -2695,8 +2672,8 @@ let NaslServer = NaslServer_1 = class NaslServer {
2695
2672
  // Do not write redundant type annotation for TypeAnnotation concept.
2696
2673
  return;
2697
2674
  }
2698
- // 删除多余属性,降低全量数据
2699
- delete newJson._aiUID;
2675
+ // 集成内存优化:在标注过程中直接优化JSON,减少内存使用和处理时间
2676
+ (0, memory_optimization_1.optimizeJsonDuringAnnotation)(newJson);
2700
2677
  let tyAnn = tyAnnToJSON(this.semEnv.getType(oldNd));
2701
2678
  if ((oldNd.concept === 'Variable' || oldNd.concept === 'Return' || oldNd.concept === 'Param')
2702
2679
  && !oldNd.typeAnnotation
@@ -2818,10 +2795,15 @@ let NaslServer = NaslServer_1 = class NaslServer {
2818
2795
  };
2819
2796
  const json = NaslServer_1.toRaw(naslNode)._toJSON(doWork, preWork, postWork);
2820
2797
  this.logger.timeEnd('app to AnnotatedJSON');
2821
- // 测试环境或者是调试模式打印数据
2822
- if (utils.isDebugMode || utils.isTestBrowser) {
2823
- this.logger.info(`${isApp ? '全量' : '单文件'}标注数据`, json);
2824
- }
2798
+ // 输出内存优化统计信息
2799
+ const stats = (0, memory_optimization_1.getOptimizationStats)();
2800
+ console.log('内存优化统计', {
2801
+ 节点处理数量: stats.totalCalls,
2802
+ 删除的属性: stats.propertiesRemoved,
2803
+ 删除的空数组: stats.emptyArraysRemoved,
2804
+ 删除的undefined值: stats.undefinedValuesRemoved,
2805
+ 总优化项: stats.propertiesRemoved + stats.emptyArraysRemoved + stats.undefinedValuesRemoved
2806
+ });
2825
2807
  return json;
2826
2808
  }
2827
2809
  /**
@@ -3449,26 +3431,6 @@ let NaslServer = NaslServer_1 = class NaslServer {
3449
3431
  }
3450
3432
  }
3451
3433
  }
3452
- /**
3453
- * 获取节点引用
3454
- *
3455
- * @param {SyntaxNode} node 查询的节点
3456
- * @param {SyntaxNode} [fileNode] 节点所属的文件节点,外部输入可以省去计算
3457
- */
3458
- getReferences(node, fileNode = (0, service_1.getFileNode)(node)) {
3459
- const refList = this.semEnv.refMgr.getReferences(this.semEnv, node)
3460
- .map((item) => ({ node: item, fileNode: (0, service_1.getFileNode)(item) })) // 我搞不定了,再说吧……
3461
- .filter((item) => item.fileNode && !item.fileNode.nodePath.includes('[-1]'));
3462
- const fileNodeRefList = this.semEnv.refMgr.getReferences(this.semEnv, fileNode)
3463
- .map((item) => ({ node: item, fileNode: (0, service_1.getFileNode)(item) })) // 我搞不定了,再说吧……
3464
- .filter((item) => item.fileNode && !item.fileNode.nodePath.includes('[-1]'));
3465
- // 引用要包含自身
3466
- refList.push({ node: node, fileNode });
3467
- return [
3468
- ...refList,
3469
- ...fileNodeRefList,
3470
- ];
3471
- }
3472
3434
  /**
3473
3435
  * 获取节点引用,不包括自己
3474
3436
  *
@@ -3622,12 +3584,15 @@ let NaslServer = NaslServer_1 = class NaslServer {
3622
3584
  uniqueViewLikes.forEach((viewLike) => {
3623
3585
  // 删除时,这些节点可能已经不在了,先用个 ?.
3624
3586
  viewLike?.getElementLogicRoot();
3587
+ viewLike.concept === 'View' && viewLike?.getSubLogics();
3625
3588
  });
3626
3589
  uniqueLogicLikes.forEach((ctxLogic) => {
3627
3590
  ctxLogic?.getSubLogics();
3628
3591
  });
3629
3592
  uniqueProcessV2s.forEach((ctxProcessV2) => {
3630
3593
  ctxProcessV2?.getVariablesRoot();
3594
+ ctxProcessV2?.getElementLogicRoot();
3595
+ ctxProcessV2?.getSubLogics();
3631
3596
  });
3632
3597
  }
3633
3598
  };