@lcap/nasl 4.4.2-rc.4 → 4.4.3-rc.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 (119) hide show
  1. package/out/automate/upgrader/2.12.d.ts.map +1 -1
  2. package/out/automate/upgrader/2.12.js +1 -0
  3. package/out/automate/upgrader/2.12.js.map +1 -1
  4. package/out/automate/upgrader/2.14.d.ts.map +1 -1
  5. package/out/automate/upgrader/2.14.js +1 -0
  6. package/out/automate/upgrader/2.14.js.map +1 -1
  7. package/out/automate/upgrader/2.16.d.ts.map +1 -1
  8. package/out/automate/upgrader/2.16.js +1 -0
  9. package/out/automate/upgrader/2.16.js.map +1 -1
  10. package/out/automate/upgrader/2.17.d.ts.map +1 -1
  11. package/out/automate/upgrader/2.17.js +1 -0
  12. package/out/automate/upgrader/2.17.js.map +1 -1
  13. package/out/automate/upgrader/2.18.d.ts.map +1 -1
  14. package/out/automate/upgrader/2.18.js +1 -0
  15. package/out/automate/upgrader/2.18.js.map +1 -1
  16. package/out/automate/upgrader/2.20.d.ts.map +1 -1
  17. package/out/automate/upgrader/2.20.js +1 -0
  18. package/out/automate/upgrader/2.20.js.map +1 -1
  19. package/out/concepts/index.mini.d.ts +10 -0
  20. package/out/concepts/index.mini.d.ts.map +1 -0
  21. package/out/concepts/index.mini.js +26 -0
  22. package/out/concepts/index.mini.js.map +1 -0
  23. package/out/generator/genBundleFiles.js +1 -1
  24. package/out/generator/genBundleFiles.js.map +1 -1
  25. package/out/generator/release-body/utils.d.ts +1 -1
  26. package/out/generator/release-body/utils.d.ts.map +1 -1
  27. package/out/generator/release-body/utils.js +8 -6
  28. package/out/generator/release-body/utils.js.map +1 -1
  29. package/out/generator/ui-library-declaration/material.d.ts +2 -2
  30. package/out/generator/ui-library-declaration/material.d.ts.map +1 -1
  31. package/out/generator/ui-library-declaration/material.js +7 -3
  32. package/out/generator/ui-library-declaration/material.js.map +1 -1
  33. package/out/generator/ui-library-declaration/types.d.ts +2 -0
  34. package/out/generator/ui-library-declaration/types.d.ts.map +1 -1
  35. package/out/index.d.ts +2 -2
  36. package/out/index.d.ts.map +1 -1
  37. package/out/index.js +10 -1
  38. package/out/index.js.map +1 -1
  39. package/out/index.mini.d.ts +42 -0
  40. package/out/index.mini.d.ts.map +1 -0
  41. package/out/index.mini.js +89 -0
  42. package/out/index.mini.js.map +1 -0
  43. package/out/manager/diagnostic.d.ts +5 -5
  44. package/out/manager/diagnostic.d.ts.map +1 -1
  45. package/out/natural/exports/nasl2Files.d.ts.map +1 -1
  46. package/out/natural/exports/nasl2Files.js +3 -0
  47. package/out/natural/exports/nasl2Files.js.map +1 -1
  48. package/out/natural/exports/transform2BatchActions/diff/roles.d.ts +1 -1
  49. package/out/natural/exports/transform2BatchActions/diff/roles.d.ts.map +1 -1
  50. package/out/natural/exports/transform2BatchActions/diff/roles.js +16 -7
  51. package/out/natural/exports/transform2BatchActions/diff/roles.js.map +1 -1
  52. package/out/natural/old/parser/transformTS2UI.d.ts.map +1 -1
  53. package/out/natural/old/parser/transformTS2UI.js +4 -1
  54. package/out/natural/old/parser/transformTS2UI.js.map +1 -1
  55. package/out/natural/parser/parseNaturalTSXView.d.ts.map +1 -1
  56. package/out/natural/parser/parseNaturalTSXView.js +4 -0
  57. package/out/natural/parser/parseNaturalTSXView.js.map +1 -1
  58. package/out/natural/transforms/checker/checkIdentifierName.d.ts +1 -1
  59. package/out/natural/transforms/checker/checkIdentifierName.d.ts.map +1 -1
  60. package/out/natural/transforms/checker/checkIdentifierName.js.map +1 -1
  61. package/out/natural/transforms/checker/checkKeywords.d.ts +33 -0
  62. package/out/natural/transforms/checker/checkKeywords.d.ts.map +1 -0
  63. package/out/natural/transforms/checker/checkKeywords.js +85 -0
  64. package/out/natural/transforms/checker/checkKeywords.js.map +1 -0
  65. package/out/natural/transforms/checker/checkViewElement.d.ts +10 -0
  66. package/out/natural/transforms/checker/checkViewElement.d.ts.map +1 -1
  67. package/out/natural/transforms/checker/checkViewElement.js +26 -1
  68. package/out/natural/transforms/checker/checkViewElement.js.map +1 -1
  69. package/out/natural/transforms/checker/index.d.ts +2 -1
  70. package/out/natural/transforms/checker/index.d.ts.map +1 -1
  71. package/out/natural/transforms/checker/index.js +8 -1
  72. package/out/natural/transforms/checker/index.js.map +1 -1
  73. package/out/natural/transforms/transform2Entity.d.ts +2 -2
  74. package/out/natural/transforms/transform2Entity.d.ts.map +1 -1
  75. package/out/natural/transforms/transform2Entity.js +11 -2
  76. package/out/natural/transforms/transform2Entity.js.map +1 -1
  77. package/out/natural/transforms/transform2Enum.d.ts.map +1 -1
  78. package/out/natural/transforms/transform2Enum.js +3 -0
  79. package/out/natural/transforms/transform2Enum.js.map +1 -1
  80. package/out/natural/transforms/transform2LogicItem.d.ts +1 -0
  81. package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -1
  82. package/out/natural/transforms/transform2LogicItem.js +23 -13
  83. package/out/natural/transforms/transform2LogicItem.js.map +1 -1
  84. package/out/natural/transforms/transform2Roles.d.ts.map +1 -1
  85. package/out/natural/transforms/transform2Roles.js +5 -1
  86. package/out/natural/transforms/transform2Roles.js.map +1 -1
  87. package/out/natural/transforms/transform2Structure.d.ts.map +1 -1
  88. package/out/natural/transforms/transform2Structure.js +2 -0
  89. package/out/natural/transforms/transform2Structure.js.map +1 -1
  90. package/out/natural/transforms/utils/createComponentLookupMap.js +3 -3
  91. package/out/natural/transforms/utils/createComponentLookupMap.js.map +1 -1
  92. package/out/natural/transforms/utils/parseDecorator.d.ts +4 -4
  93. package/out/natural/transforms/utils/parseDecorator.d.ts.map +1 -1
  94. package/out/natural/transforms/utils/parseDecorator.js +23 -22
  95. package/out/natural/transforms/utils/parseDecorator.js.map +1 -1
  96. package/out/server/extendBaseNode.js +1 -0
  97. package/out/server/extendBaseNode.js.map +1 -1
  98. package/out/server/index.d.ts +1 -0
  99. package/out/server/index.d.ts.map +1 -1
  100. package/out/server/index.js +6 -1
  101. package/out/server/index.js.map +1 -1
  102. package/out/server/naslServer.d.ts +20 -0
  103. package/out/server/naslServer.d.ts.map +1 -1
  104. package/out/server/naslServer.js +100 -5
  105. package/out/server/naslServer.js.map +1 -1
  106. package/out/server/naslUiComponentTs.d.ts +16 -0
  107. package/out/server/naslUiComponentTs.d.ts.map +1 -0
  108. package/out/server/naslUiComponentTs.default.d.ts +47 -0
  109. package/out/server/naslUiComponentTs.js +111 -0
  110. package/out/server/naslUiComponentTs.js.map +1 -0
  111. package/out/service/autofix/types.d.ts +2 -2
  112. package/out/service/autofix/types.d.ts.map +1 -1
  113. package/out/service/storage/operation.d.ts +9 -1
  114. package/out/service/storage/operation.d.ts.map +1 -1
  115. package/out/service/storage/operation.js +220 -100
  116. package/out/service/storage/operation.js.map +1 -1
  117. package/out/service/storage/specTools.js +1 -1
  118. package/out/service/storage/specTools.js.map +1 -1
  119. package/package.json +10 -10
@@ -52,6 +52,7 @@ const service_1 = require("@lcap/nasl-concepts/service");
52
52
  const utils = __importStar(require("../utils"));
53
53
  const memory_optimization_1 = require("../generator/release-body/memory-optimization");
54
54
  const createUiTs_1 = __importStar(require("./createUiTs"));
55
+ const naslUiComponentTs_1 = require("./naslUiComponentTs");
55
56
  const translator_1 = require("../translator");
56
57
  const translator_2 = require("./translator");
57
58
  const common_1 = require("../common");
@@ -476,6 +477,8 @@ class NaslServer {
476
477
  this.typerErrRecords = [];
477
478
  // 确保首屏检查没有"传统艺能"、"时序问题"
478
479
  this.cachedEventPayloadValues = [];
480
+ // 标记正在等待组件定义加载,防止重复触发
481
+ this.waitingForComponentDefs = false;
479
482
  // 当前重命名模式:rename-only: 只重命名,update: 更新引用
480
483
  this.currentRenameMode = null;
481
484
  this.oqlDisaster = false;
@@ -906,7 +909,8 @@ class NaslServer {
906
909
  // without ui ts data, renaming will be wrong, theoretically
907
910
  if (this.isFirstScreen
908
911
  || !this.createUiTsArg1Copy?.basicUITsCode
909
- || (options?.basicUITsCode && this.createUiTsArg1Copy?.basicUITsCode != options?.basicUITsCode)) {
912
+ || (options?.basicUITsCode && this.createUiTsArg1Copy?.basicUITsCode != options?.basicUITsCode)
913
+ || this.createUiTsArg1Copy?.naslUiComponentTsOverride !== options?.naslUiComponentTsOverride) {
910
914
  this.createUiTsArg0Copy = components;
911
915
  this.createUiTsArg1Copy = options;
912
916
  }
@@ -918,16 +922,20 @@ class NaslServer {
918
922
  const convertTsCode = (code) => {
919
923
  code = code || '';
920
924
  code = code.replace(/nasl.core.Integer/g, 'nasl.core.Long');
921
- // 匹配union类型的正则
922
- const unionReg = /\s*['"].*['"](\s*\|\s*['"].*['"])+/g;
923
- code = code.replace(unionReg, 'nasl.core.String');
924
925
  return code;
925
926
  };
926
927
  // 添加基础组件的方法到elementsLogic
927
928
  Object.assign(elementsLogic, (0, createUiTs_1.createEleLogins)(standardUIComponents));
929
+ const naslUiTsQuery = (0, naslUiComponentTs_1.getNaslUiComponentTsQueryOpts)();
930
+ const naslUiComponentTsOverrideMerged = options.naslUiComponentTsOverride !== undefined
931
+ ? options.naslUiComponentTsOverride
932
+ : naslUiTsQuery.overrideFragment;
928
933
  const naslUiComponentTsFile = {
929
934
  file: 'nasl.ui.component.ts',
930
- fileContent: convertTsCode(options.basicUITsCode),
935
+ fileContent: (0, naslUiComponentTs_1.buildNaslUiComponentTsFileContent)(convertTsCode, {
936
+ basicUITsCode: options.basicUITsCode,
937
+ naslUiComponentTsOverride: naslUiComponentTsOverrideMerged,
938
+ }),
931
939
  };
932
940
  const extensionComponentFile = {
933
941
  file: 'extension.component.ts',
@@ -3825,6 +3833,18 @@ class NaslServer {
3825
3833
  const { changed, updatedNodes } = this.processAllEvents(events);
3826
3834
  if (changed) {
3827
3835
  this.logger.info('triggerTypeChecking 需要进行类型检查');
3836
+ // 检测是否有新引入的 extension 依赖库(需要加载其声明文件)
3837
+ const newExtensionDeps = this.detectNewExtensionDependencies();
3838
+ if (newExtensionDeps.length > 0) {
3839
+ this.logger.info(`[flushChangesForTypeChecking] 检测到 ${newExtensionDeps.length} 个新 extension 依赖,等待 IDE 层加载声明: ${newExtensionDeps.join(', ')}`);
3840
+ const loaded = await this.waitForExtensionDepsReload(newExtensionDeps);
3841
+ if (loaded) {
3842
+ this.logger.info('[flushChangesForTypeChecking] 依赖声明加载完成,继续类型检查');
3843
+ }
3844
+ else {
3845
+ this.logger.warn('[flushChangesForTypeChecking] 依赖声明加载失败或超时,可能产生误报');
3846
+ }
3847
+ }
3828
3848
  const oqlCheckFiles = new Set((0, nasl_language_server_core_1.getOqlFiles)(this.semEnv, this.typerCheckFiles, this.typerRemoveNodes));
3829
3849
  const originLogicCheckFiles = new Set((0, nasl_language_server_core_1.getOriginLogicFiles)(this.semEnv, this.typerCheckFiles, this.typerRemoveNodes));
3830
3850
  const exportInterfacesCheckFiles = new Set((0, nasl_language_server_core_1.getExportInterfacesFiles)(this.semEnv, this.typerCheckFiles, this.typerRemoveNodes));
@@ -3930,6 +3950,80 @@ class NaslServer {
3930
3950
  }),
3931
3951
  });
3932
3952
  }
3953
+ /**
3954
+ * 检测本次增量变更中是否存在新引入的 extension 类型依赖库
3955
+ * 当 operationRecord.forward() 等操作引入新依赖时,需要加载其声明文件
3956
+ *
3957
+ * 注意:
3958
+ * - 只检测 'create' 操作(typerCreateNodes),因为新依赖总是先被创建
3959
+ * - 如果是依赖版本升级(update),声明已在初始化时加载,无需处理
3960
+ * - 仅处理 type === 'extension' 且有 frontends 的依赖(前端组件库)
3961
+ *
3962
+ * @returns 新引入的 extension 依赖名称列表
3963
+ */
3964
+ detectNewExtensionDependencies() {
3965
+ if (!this.semEnv) {
3966
+ return [];
3967
+ }
3968
+ const newExtensionDeps = new Set();
3969
+ // 扫描本次创建的节点中的 Module(依赖库)
3970
+ // operationRecord.forward() 的 redo 操作会将依赖作为 'create' 放入 typerCreateNodes
3971
+ for (const node of this.typerCreateNodes) {
3972
+ if (node.concept !== 'Module') {
3973
+ continue;
3974
+ }
3975
+ const module = node;
3976
+ // 只处理 extension 类型的依赖(有前端组件的依赖库)
3977
+ if (module.type !== 'extension') {
3978
+ continue;
3979
+ }
3980
+ // 检查该依赖是否有 frontends(包含 viewComponents)
3981
+ const hasFrontends = module.frontends && module.frontends.length > 0;
3982
+ if (!hasFrontends) {
3983
+ continue;
3984
+ }
3985
+ const depName = module.name;
3986
+ if (depName) {
3987
+ newExtensionDeps.add(depName);
3988
+ this.logger.info(`[detectNewExtensionDependencies] 检测到新引入的 extension 依赖: ${depName}`);
3989
+ }
3990
+ }
3991
+ return Array.from(newExtensionDeps);
3992
+ }
3993
+ /**
3994
+ * 等待 IDE 层完成 extension 依赖声明加载
3995
+ * 通过 Promise 和事件机制实现异步等待
3996
+ */
3997
+ async waitForExtensionDepsReload(depNames) {
3998
+ if (this.waitingForComponentDefs) {
3999
+ // 已经在等待中,避免重复触发
4000
+ return false;
4001
+ }
4002
+ if (depNames.length === 0) {
4003
+ return true;
4004
+ }
4005
+ this.waitingForComponentDefs = true;
4006
+ return new Promise((resolve) => {
4007
+ // 设置超时,避免无限等待(10秒,依赖加载可能需要更长时间)
4008
+ const timeout = setTimeout(() => {
4009
+ this.waitingForComponentDefs = false;
4010
+ this.logger.warn(`[waitForExtensionDepsReload] 等待依赖声明加载超时: ${depNames.join(', ')}`);
4011
+ resolve(false);
4012
+ }, 10000);
4013
+ // 监听一次性事件:IDE 层完成声明加载后会触发此事件
4014
+ const handler = () => {
4015
+ clearTimeout(timeout);
4016
+ this.embeddedTSEmitter?.off('extensionDeps:loaded', handler);
4017
+ this.waitingForComponentDefs = false;
4018
+ this.logger.info('[waitForExtensionDepsReload] 依赖声明加载完成');
4019
+ resolve(true);
4020
+ };
4021
+ this.embeddedTSEmitter?.once('extensionDeps:loaded', handler);
4022
+ // 发送缺失事件通知 IDE 层
4023
+ this.logger.info(`[waitForExtensionDepsReload] 通知 IDE 层加载依赖声明: ${depNames.join(', ')}`);
4024
+ this.embeddedTSEmitter?.emit('extensionDeps:missing', { extra: { deps: depNames } });
4025
+ });
4026
+ }
3933
4027
  static toRaw(nd) {
3934
4028
  // @ts-ignore
3935
4029
  return nd?.__v_raw ?? nd;
@@ -4016,6 +4110,7 @@ class NaslServer {
4016
4110
  this.semEnv.app = rawApp;
4017
4111
  const isAIStrictMode = this.flags.isStrictMode;
4018
4112
  this.semEnv.isAIStrictMode = isAIStrictMode;
4113
+ this.semEnv.looseTypeCheck = String(rawApp.preferenceMap?.looseTypeCheck) === 'true' ? true : undefined;
4019
4114
  this.semEnv.refMgr.buildQNameDefsForApp(rawApp);
4020
4115
  this.semEnv.errorDiagnoser = nasl_language_server_core_1.checker.createErrorDiagnoser({
4021
4116
  app: rawApp,