@lcap/nasl 3.8.2-beta.8 → 3.8.3-beta.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 (223) hide show
  1. package/ai-engineer.config.js +617 -0
  2. package/out/common/BaseNode.js +5 -3
  3. package/out/common/BaseNode.js.map +1 -1
  4. package/out/common/ComponentAPI.d.ts +9 -0
  5. package/out/concepts/AuthLogicForCallInterface__.js +21 -6
  6. package/out/concepts/AuthLogicForCallInterface__.js.map +1 -1
  7. package/out/concepts/BackendVariable__.js +16 -1
  8. package/out/concepts/BackendVariable__.js.map +1 -1
  9. package/out/concepts/BindAttribute__.js +12 -4
  10. package/out/concepts/BindAttribute__.js.map +1 -1
  11. package/out/concepts/BindDirective__.js +1 -1
  12. package/out/concepts/BindDirective__.js.map +1 -1
  13. package/out/concepts/BindStyle__.js +1 -1
  14. package/out/concepts/BindStyle__.js.map +1 -1
  15. package/out/concepts/BusinessComponent__.js +24 -8
  16. package/out/concepts/BusinessComponent__.js.map +1 -1
  17. package/out/concepts/BusinessLogic__.js +21 -6
  18. package/out/concepts/BusinessLogic__.js.map +1 -1
  19. package/out/concepts/CallInterface__.js +2 -1
  20. package/out/concepts/CallInterface__.js.map +1 -1
  21. package/out/concepts/CallLogic__.d.ts +1 -0
  22. package/out/concepts/CallLogic__.js +32 -11
  23. package/out/concepts/CallLogic__.js.map +1 -1
  24. package/out/concepts/CallQueryComponent__.d.ts +1 -0
  25. package/out/concepts/CallQueryComponent__.js +23 -12
  26. package/out/concepts/CallQueryComponent__.js.map +1 -1
  27. package/out/concepts/Destination__.js +11 -8
  28. package/out/concepts/Destination__.js.map +1 -1
  29. package/out/concepts/EntityProperty__.js +3 -2
  30. package/out/concepts/EntityProperty__.js.map +1 -1
  31. package/out/concepts/Entity__.js +1 -1
  32. package/out/concepts/Entity__.js.map +1 -1
  33. package/out/concepts/Interface__.js +1 -1
  34. package/out/concepts/Interface__.js.map +1 -1
  35. package/out/concepts/Logic__.js +49 -17
  36. package/out/concepts/Logic__.js.map +1 -1
  37. package/out/concepts/MemberExpression__.js +19 -13
  38. package/out/concepts/MemberExpression__.js.map +1 -1
  39. package/out/concepts/OqlQueryComponent__.js +37 -12
  40. package/out/concepts/OqlQueryComponent__.js.map +1 -1
  41. package/out/concepts/OverriddenLogic__.js +21 -6
  42. package/out/concepts/OverriddenLogic__.js.map +1 -1
  43. package/out/concepts/Param__.js +5 -4
  44. package/out/concepts/Param__.js.map +1 -1
  45. package/out/concepts/QueryOrderByExpression__.d.ts +0 -1
  46. package/out/concepts/QueryOrderByExpression__.js +0 -1
  47. package/out/concepts/QueryOrderByExpression__.js.map +1 -1
  48. package/out/concepts/Structure__.js +5 -7
  49. package/out/concepts/Structure__.js.map +1 -1
  50. package/out/concepts/Variable__.js +5 -0
  51. package/out/concepts/Variable__.js.map +1 -1
  52. package/out/concepts/ViewElement__.d.ts +1 -0
  53. package/out/concepts/ViewElement__.js +17 -7
  54. package/out/concepts/ViewElement__.js.map +1 -1
  55. package/out/concepts/View__.js +70 -14
  56. package/out/concepts/View__.js.map +1 -1
  57. package/out/concepts/basics/stdlib/nasl.processV2.js +78 -0
  58. package/out/concepts/basics/stdlib/nasl.processV2.js.map +1 -1
  59. package/out/concepts/basics/stdlib/nasl.ui.js +40 -40
  60. package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
  61. package/out/generator/genBundleFiles.js +1 -1
  62. package/out/generator/genBundleFiles.js.map +1 -1
  63. package/out/generator/release-body/utils.js +1 -1
  64. package/out/natural/genNaturalTS.d.ts +45 -10
  65. package/out/natural/genNaturalTS.js +57 -33
  66. package/out/natural/genNaturalTS.js.map +1 -1
  67. package/out/natural/getContext/getUILib.js +6 -3
  68. package/out/natural/getContext/getUILib.js.map +1 -1
  69. package/out/natural/getContext/index.d.ts +20 -7
  70. package/out/natural/getContext/index.js +143 -23
  71. package/out/natural/getContext/index.js.map +1 -1
  72. package/out/natural/getContext/naslStdlibMap.js +8 -8
  73. package/out/natural/getContext/naslStdlibMap.js.map +1 -1
  74. package/out/natural/tools.d.ts +16 -0
  75. package/out/natural/tools.js +110 -2
  76. package/out/natural/tools.js.map +1 -1
  77. package/out/natural/transformTS2UI.js +361 -304
  78. package/out/natural/transformTS2UI.js.map +1 -1
  79. package/out/natural/transformTSCode.d.ts +3 -5
  80. package/out/natural/transformTSCode.js +30 -1089
  81. package/out/natural/transformTSCode.js.map +1 -1
  82. package/out/natural/transforms/registerTransform.d.ts +7 -0
  83. package/out/natural/transforms/registerTransform.js +24 -0
  84. package/out/natural/transforms/registerTransform.js.map +1 -0
  85. package/out/natural/transforms/transform2LogicItem.d.ts +24 -0
  86. package/out/natural/transforms/transform2LogicItem.js +1240 -0
  87. package/out/natural/transforms/transform2LogicItem.js.map +1 -0
  88. package/out/natural/transforms/transform2TypeAnnotation.d.ts +2 -0
  89. package/out/natural/transforms/transform2TypeAnnotation.js +86 -0
  90. package/out/natural/transforms/transform2TypeAnnotation.js.map +1 -0
  91. package/out/natural/transforms/utils.d.ts +8 -0
  92. package/out/natural/transforms/utils.js +59 -0
  93. package/out/natural/transforms/utils.js.map +1 -0
  94. package/out/server/getLogics.js +12 -12
  95. package/out/server/getLogics.js.map +1 -1
  96. package/out/server/getMemberIdentifier.js +11 -17
  97. package/out/server/getMemberIdentifier.js.map +1 -1
  98. package/out/server/naslServer.d.ts +2 -2
  99. package/out/server/naslServer.js +38 -18
  100. package/out/server/naslServer.js.map +1 -1
  101. package/out/server/translator.js +5 -0
  102. package/out/server/translator.js.map +1 -1
  103. package/out/templator/block2nasl/jsx2nasl/index.d.ts +5 -0
  104. package/out/templator/block2nasl/jsx2nasl/index.js +15 -0
  105. package/out/templator/block2nasl/jsx2nasl/index.js.map +1 -0
  106. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts +3 -0
  107. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js +213 -0
  108. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js.map +1 -0
  109. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts +14 -0
  110. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js +201 -0
  111. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js.map +1 -0
  112. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts +4 -0
  113. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js +186 -0
  114. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js.map +1 -0
  115. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts +28 -0
  116. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js +336 -0
  117. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js.map +1 -0
  118. package/out/templator/block2nasl/jsx2nasl/utils.d.ts +2 -0
  119. package/out/templator/block2nasl/jsx2nasl/utils.js +26 -0
  120. package/out/templator/block2nasl/jsx2nasl/utils.js.map +1 -0
  121. package/out/templator/block2nasl/transformBlock2Nasl.d.ts +10 -0
  122. package/out/templator/block2nasl/transformBlock2Nasl.js +122 -0
  123. package/out/templator/block2nasl/transformBlock2Nasl.js.map +1 -0
  124. package/out/templator/block2nasl/viewMergeBlock.d.ts +9 -0
  125. package/out/templator/block2nasl/viewMergeBlock.js +110 -0
  126. package/out/templator/block2nasl/viewMergeBlock.js.map +1 -0
  127. package/out/translator/types.d.ts +2 -0
  128. package/out/translator/utils.js +1 -1
  129. package/out/translator/utils.js.map +1 -1
  130. package/out/utils/index.js +0 -4
  131. package/out/utils/index.js.map +1 -1
  132. package/out/utils/language-cache/constant.d.ts +2 -1
  133. package/out/utils/language-cache/constant.js +1 -0
  134. package/out/utils/language-cache/constant.js.map +1 -1
  135. package/out/utils/language-cache/nasl.d.ts +1 -0
  136. package/out/utils/language-cache/nasl.js +9 -1
  137. package/out/utils/language-cache/nasl.js.map +1 -1
  138. package/package.json +6 -2
  139. package/sandbox/stdlib/nasl.processV2.ts +19 -0
  140. package/sandbox/stdlib/nasl.ui.ts +8 -8
  141. package/sandbox-natural/stdlib/nasl.core.d.ts +54 -0
  142. package/sandbox-natural/stdlib/nasl.oql.d.ts +22 -0
  143. package/sandbox-natural/stdlib/nasl.ui.d.ts +78 -0
  144. package/sandbox-natural/stdlib/nasl.ui.h5.d.ts +1684 -1643
  145. package/sandbox-natural/stdlib/nasl.ui.h5.json +15746 -15045
  146. package/sandbox-natural/stdlib/nasl.ui.pc.d.ts +5341 -5154
  147. package/sandbox-natural/stdlib/nasl.ui.pc.json +31176 -30681
  148. package/sandbox-natural/stdlib/{nasl.util.ts → nasl.util.d.ts} +49 -43
  149. package/src/common/BaseNode.ts +5 -3
  150. package/src/common/ComponentAPI.ts +7 -0
  151. package/src/concepts/AuthLogicForCallInterface__.ts +23 -6
  152. package/src/concepts/BackendVariable__.ts +16 -1
  153. package/src/concepts/BindAttribute__.ts +18 -13
  154. package/src/concepts/BindDirective__.ts +1 -1
  155. package/src/concepts/BindStyle__.ts +1 -1
  156. package/src/concepts/BusinessComponent__.ts +26 -8
  157. package/src/concepts/BusinessLogic__.ts +23 -6
  158. package/src/concepts/CallInterface__.ts +2 -2
  159. package/src/concepts/CallLogic__.ts +50 -24
  160. package/src/concepts/CallQueryComponent__.ts +26 -12
  161. package/src/concepts/Destination__.ts +14 -12
  162. package/src/concepts/EntityProperty__.ts +5 -5
  163. package/src/concepts/Entity__.ts +1 -1
  164. package/src/concepts/Interface__.ts +1 -1
  165. package/src/concepts/Logic__.ts +62 -33
  166. package/src/concepts/MemberExpression__.ts +20 -13
  167. package/src/concepts/OqlQueryComponent__.ts +29 -5
  168. package/src/concepts/OverriddenLogic__.ts +23 -6
  169. package/src/concepts/Param__.ts +5 -4
  170. package/src/concepts/QueryOrderByExpression__.ts +0 -1
  171. package/src/concepts/Structure__.ts +5 -7
  172. package/src/concepts/Variable__.ts +9 -5
  173. package/src/concepts/ViewElement__.ts +25 -9
  174. package/src/concepts/View__.ts +97 -37
  175. package/src/concepts/basics/stdlib/nasl.processV2.ts +79 -0
  176. package/src/concepts/basics/stdlib/nasl.ui.ts +40 -40
  177. package/src/generator/genBundleFiles.ts +1 -1
  178. package/src/generator/release-body/utils.ts +1 -1
  179. package/src/natural/genNaturalTS.ts +88 -39
  180. package/src/natural/getContext/getUILib.ts +6 -3
  181. package/src/natural/getContext/index.ts +125 -23
  182. package/src/natural/getContext/naslStdlibMap.ts +8 -8
  183. package/src/natural/tools.ts +107 -2
  184. package/src/natural/transformTS2UI.ts +205 -147
  185. package/src/natural/transformTSCode.ts +29 -1055
  186. package/src/natural/transforms/registerTransform.ts +34 -0
  187. package/src/natural/transforms/transform2LogicItem.ts +1335 -0
  188. package/src/natural/transforms/transform2TypeAnnotation.ts +77 -0
  189. package/src/natural/transforms/utils.ts +25 -0
  190. package/src/server/getLogics.ts +12 -12
  191. package/src/server/getMemberIdentifier.ts +14 -14
  192. package/src/server/naslServer.ts +39 -19
  193. package/src/server/translator.ts +5 -0
  194. package/src/templator/block2nasl/jsx2nasl/index.ts +11 -0
  195. package/src/templator/block2nasl/jsx2nasl/transform-expression2nasl.ts +238 -0
  196. package/src/templator/block2nasl/jsx2nasl/transform-func2nasl.ts +241 -0
  197. package/src/templator/block2nasl/jsx2nasl/transform-tstype2nasl.ts +213 -0
  198. package/src/templator/block2nasl/jsx2nasl/transform-tsx2nasl.ts +422 -0
  199. package/src/templator/block2nasl/jsx2nasl/utils.ts +19 -0
  200. package/src/templator/block2nasl/transformBlock2Nasl.ts +99 -0
  201. package/src/templator/block2nasl/viewMergeBlock.ts +149 -0
  202. package/src/translator/types.ts +2 -0
  203. package/src/translator/utils.ts +1 -1
  204. package/src/utils/index.ts +0 -4
  205. package/src/utils/language-cache/constant.ts +1 -0
  206. package/src/utils/language-cache/nasl.ts +6 -0
  207. package/test/concepts/member-expression/__snapshots__/toJS.spec.ts.snap +1 -1
  208. package/test/concepts/member-expression/__snapshots__/toVue.spec.ts.snap +1 -1
  209. package/test/tdd/dataQuery/QueryFieldExpression/case1/ast.json +7 -0
  210. package/test/tdd/dataQuery/QueryFieldExpression/case1/natural.ts.txt +1 -0
  211. package/test/tdd/dataQuery/QueryFieldExpression/case2/ast.json +7 -0
  212. package/test/tdd/dataQuery/QueryFieldExpression/case2/natural.ts.txt +1 -0
  213. package/test/tdd/transform/case1/ast.json +243 -0
  214. package/test/tdd/transform/case1/natural.ts.md +20 -0
  215. package/test/tdd/transform/case2/ast.json +207 -0
  216. package/test/tdd/transform/case2/natural.ts.md +12 -0
  217. package/test/tdd.test.js +10 -0
  218. package/test/tdd.transform.test.js +38 -0
  219. package/test/utils.js +40 -0
  220. package/sandbox-natural/stdlib/nasl.core.ts +0 -36
  221. package/sandbox-natural/stdlib/nasl.oql.ts +0 -14
  222. package/sandbox-natural/stdlib/nasl.ui.pre.d.ts +0 -90
  223. package/sandbox-natural/stdlib/nasl.ui.ts +0 -63
@@ -437,7 +437,7 @@ export class CallLogic extends LogicItem {
437
437
  /**
438
438
  * 设置argment 触发别的地方的更新
439
439
  */
440
- setArgumentName({ argument }: { argument: Argument[] }) {
440
+ setArgumentName({ argument }: { argument: Argument[]; }) {
441
441
  // argument.setKeyword(newKeyword);
442
442
  // this.arguments = argument;
443
443
  }
@@ -513,9 +513,14 @@ export class CallLogic extends LogicItem {
513
513
  const Identifier = getConceptConstructor('Identifier');
514
514
  const Argument = getConceptConstructor('Argument');
515
515
  const TypeAnnotation = getConceptConstructor('TypeAnnotation');
516
+
517
+ // 拖拽实体更新逻辑,默认全部更新,不带 properties
518
+ const isEntityUpdate = /entities\.([^.]+)\.logics\.(update|updateBy|createOrUpdate|batchUpdate)/.test(logic.calleewholeKey);
519
+ const logicParams = isEntityUpdate ? logic.params.filter((item) => item.name !== 'properties') : logic.params;
520
+
516
521
  const params =
517
522
  argument ??
518
- logic?.params?.map((param) => {
523
+ logicParams?.map((param) => {
519
524
  const relationOptions = { parentNode: this, parentKey: 'arguments' };
520
525
  let expression = param.defaultExpression;
521
526
  if (param.isFunction) {
@@ -689,7 +694,7 @@ export class CallLogic extends LogicItem {
689
694
  for (let i = 0; i < currentIndex; i++) {
690
695
  currentParamList.push(`,current${i === 0 ? '' : i}`);
691
696
  }
692
- code += `$global.useDatabaseCallback()(__${currentElement.name}_handleDataSourceLoad${currentParamList.join('')})`
697
+ code += `$global.useDatabaseCallback()(__${currentElement.name}_handleDataSourceLoad${currentParamList.join('')})`;
693
698
  return code;
694
699
  }
695
700
  if (calleeName === 'jsonSerialize') {
@@ -817,7 +822,7 @@ export class CallLogic extends LogicItem {
817
822
  let extensionName = '';
818
823
 
819
824
  const { calleeName, calleeNamespace, isComponentLogic, completeArguments, isViewLogic, typeArguments } = this;
820
- const completeTypeArguments = this.__TypeArguments?.length ? this.__TypeArguments : typeArguments;
825
+ const completeTypeArguments = this.__TypeArguments?.length ? this.__TypeArguments : typeArguments;
821
826
 
822
827
  const isShowArgument = (arg?: Argument) => {
823
828
  return arg?.expression;
@@ -845,8 +850,8 @@ export class CallLogic extends LogicItem {
845
850
  body: {
846
851
  `;
847
852
  const argsStr = (this?.arguments || []).filter((obj) => obj?.expression)
848
- .map((obj) => `\n${obj.keyword}: ${obj.expression?.toJS(state)}`)
849
- .join(', ');
853
+ .map((obj) => `\n${obj.keyword}: ${obj.expression?.toJS(state)}`)
854
+ .join(', ');
850
855
  code += argsStr;
851
856
 
852
857
  code += `}
@@ -857,9 +862,8 @@ export class CallLogic extends LogicItem {
857
862
  const isSpreadFunc = args.some((arg) => arg.spread);
858
863
  const keywordEntitiesIndex = findConceptKeyWordIndexFromNamespace(this.calleeNamespace, 'entities');
859
864
 
860
- code += `this.$logics['${
861
- this.calleeNamespace ? `${this.calleeNamespace}.${this.calleeName}` : this.calleeName
862
- }']`;
865
+ code += `this.$logics['${this.calleeNamespace ? `${this.calleeNamespace}.${this.calleeName}` : this.calleeName
866
+ }']`;
863
867
  code += `({
864
868
  config: {
865
869
  download: false,
@@ -1511,7 +1515,8 @@ export class CallLogic extends LogicItem {
1511
1515
  code += '()';
1512
1516
  }
1513
1517
  };
1514
-
1518
+ // 调用实体逻辑特殊处理
1519
+ if (tsCalleeNamespace.startsWith('app.dataSources.') && tsCalleeNamespace.endsWith('.logics')) calleeKey = calleeKey.replace('.logics', 'Entity');
1515
1520
  code += calleeKey;
1516
1521
  setTypeArguments();
1517
1522
  setInputParam();
@@ -1613,11 +1618,13 @@ export class CallLogic extends LogicItem {
1613
1618
  } else if (this.calleeNamespace?.startsWith('elements.')) {
1614
1619
  // 查找组件的逻辑,用于展示默认值
1615
1620
  const elementsLogic = (this.app as any)?.naslServer?.elementsLogic || {};
1616
- let elementName: string = this.calleeNamespace.split('.')[1];
1617
- // eslint-disable-next-line prefer-destructuring
1618
- elementName = elementName.split('_')[0];
1619
- elementName = elementName[0].toUpperCase() + elementName.slice(1);
1620
- const logics = elementsLogic[`U${elementName}`] || elementsLogic[`Van${elementName}`] || [];
1621
+
1622
+ let tag = this.getElementTagByLogic();
1623
+ // tag转换为首字母大写,驼峰
1624
+ tag = tag.replace(/^\S/, (s) => s.toUpperCase())
1625
+ .replace(/-(\w)/g, (all, letter) => letter.toUpperCase());
1626
+
1627
+ const logics = elementsLogic[`${tag}`] || [];
1621
1628
  node = logics.find((l: any) => l.name === this.calleeName);
1622
1629
  } else {
1623
1630
  // 如果是其余app下自定义逻辑
@@ -1636,12 +1643,31 @@ export class CallLogic extends LogicItem {
1636
1643
  state: Array.isArray(t) ? 2 : 1,
1637
1644
  };
1638
1645
  });
1639
- } catch (err) {}
1646
+ } catch (err) { }
1640
1647
  }
1641
1648
  return node;
1642
1649
  }
1643
1650
 
1644
- getCallNodeUsingCache(frontNdCache : Map<string, Logic>, serverNdCache : Map<string, Logic>, processNdCache : Map<string, Logic>): ['front' | 'server' | 'process', Logic | undefined] {
1651
+ private getElementTagByLogic(): string {
1652
+ const elementName: string = this.calleeNamespace.split('.')[1];
1653
+ let tag = '';
1654
+ this.likeComponent.elements.forEach((element) => {
1655
+ utils.traverse(
1656
+ ({ node }) => {
1657
+ if (node.name === elementName) {
1658
+ tag = node.tag;
1659
+ }
1660
+ },
1661
+ {
1662
+ node: element,
1663
+ },
1664
+ );
1665
+ });
1666
+
1667
+ return tag;
1668
+ }
1669
+
1670
+ getCallNodeUsingCache(frontNdCache: Map<string, Logic>, serverNdCache: Map<string, Logic>, processNdCache: Map<string, Logic>): ['front' | 'server' | 'process', Logic | undefined] {
1645
1671
  const cwKey = this.calleewholeKey;
1646
1672
  if (serverNdCache.get(cwKey)) {
1647
1673
  return ['server', serverNdCache.get(cwKey)];
@@ -1663,11 +1689,11 @@ export class CallLogic extends LogicItem {
1663
1689
  } else if (this.calleeNamespace?.startsWith('elements.')) {
1664
1690
  // 查找组件的逻辑,用于展示默认值
1665
1691
  const elementsLogic = (this.app as any)?.naslServer?.elementsLogic || {};
1666
- let elementName: string = this.calleeNamespace.split('.')[1];
1667
- // eslint-disable-next-line prefer-destructuring
1668
- elementName = elementName.split('_')[0];
1669
- elementName = elementName[0].toUpperCase() + elementName.slice(1);
1670
- const logics = elementsLogic[`U${elementName}`] || elementsLogic[`Van${elementName}`] || [];
1692
+ let tag = this.getElementTagByLogic();
1693
+ // tag转换为首字母大写,驼峰
1694
+ tag = tag.replace(/^\S/, (s) => s.toUpperCase())
1695
+ .replace(/-(\w)/g, (all, letter) => letter.toUpperCase());
1696
+ const logics = elementsLogic[`${tag}`] || [];
1671
1697
  node = logics.find((l: any) => l.name === this.calleeName);
1672
1698
  } else {
1673
1699
  // 如果是其余app下自定义逻辑
@@ -1686,7 +1712,7 @@ export class CallLogic extends LogicItem {
1686
1712
  state: Array.isArray(t) ? 2 : 1,
1687
1713
  };
1688
1714
  });
1689
- } catch (err) {}
1715
+ } catch (err) { }
1690
1716
  }
1691
1717
  frontNdCache.set(cwKey, node);
1692
1718
  return ['front', node];
@@ -1726,7 +1752,7 @@ export class CallLogic extends LogicItem {
1726
1752
  } else {
1727
1753
  const result = getCallExpressionQuickInfo(range, getCode);
1728
1754
  let code = getCode();
1729
- if(code.includes('__elements.')){
1755
+ if (code.includes('__elements.')) {
1730
1756
  const prefixOffset = code.indexOf('__elements.');
1731
1757
  code = code.slice(prefixOffset);
1732
1758
  let indexOf = code.indexOf('(');
@@ -743,10 +743,8 @@ export class CallQueryComponent extends LogicItem {
743
743
  return {
744
744
  kind: 'Statement',
745
745
  concept: 'CallQueryComponent',
746
- label: '数据查询',
747
746
  select: {
748
747
  concept: 'QuerySelectExpression',
749
- label: '查询组件Select子句',
750
748
  distinct: false,
751
749
  star: true,
752
750
  selectElements: [],
@@ -852,10 +850,14 @@ export class CallQueryComponent extends LogicItem {
852
850
  @withSourceMapGenerator
853
851
  *toEmbeddedTS(state = createCompilerState()): TranslatorGenerator {
854
852
  const self = this;
855
- if (!self.typeAnnotation)
856
- return `(function () {
857
- return;
858
- })()`;
853
+ if (!self.typeAnnotation) {
854
+ if (!self.isAutoInfer()) {
855
+ return `(function () {
856
+ return;
857
+ })()`;
858
+ }
859
+ self.typeAnnotation = self.computeStructure();
860
+ }
859
861
  let code = `(function(): `;
860
862
  if (self.isAutoInfer()) {
861
863
  code += `${yield* self.typeAnnotation.toEmbeddedTS(shiftState(state, code))} {\n`;
@@ -1093,17 +1095,13 @@ export class CallQueryComponent extends LogicItem {
1093
1095
  });
1094
1096
  }
1095
1097
 
1096
- saveStructure() {
1098
+ computeStructure(): TypeAnnotation {
1097
1099
  // 没有数据源时不初始化数据结构
1098
1100
  if (!this.entityInfos.length) {
1099
1101
  return;
1100
1102
  }
1101
1103
  const entityNamespace = this.from?.entityNamespace;
1102
1104
  const entities = this.app.findNodeByCompleteName(entityNamespace);
1103
- if (!this.isAutoInfer()) {
1104
- // 存量应用走之前的逻辑
1105
- return this.saveStructureNoInfer(entities);
1106
- }
1107
1105
 
1108
1106
  const { groupBy } = this;
1109
1107
  const selectElements = this.select.selectAggregateElements;
@@ -1249,7 +1247,23 @@ export class CallQueryComponent extends LogicItem {
1249
1247
  }
1250
1248
  }
1251
1249
 
1252
- this.update({ typeAnnotation });
1250
+ return typeAnnotation;
1251
+ }
1252
+
1253
+ saveStructure() {
1254
+ // 没有数据源时不初始化数据结构
1255
+ if (!this.entityInfos.length) {
1256
+ return;
1257
+ }
1258
+ const entityNamespace = this.from?.entityNamespace;
1259
+ const entities = this.app.findNodeByCompleteName(entityNamespace);
1260
+
1261
+ if (!this.isAutoInfer()) {
1262
+ // 存量应用走之前的逻辑
1263
+ return this.saveStructureNoInfer(entities);
1264
+ }
1265
+
1266
+ this.update({ typeAnnotation: this.computeStructure() });
1253
1267
  }
1254
1268
 
1255
1269
  saveStructureNoInfer(entities: any[] = []) {
@@ -312,9 +312,8 @@ export class Destination extends LogicItem {
312
312
  let code = '';
313
313
  const viewArr = this.genViewArr();
314
314
  if (Array.isArray(viewArr) && viewArr.length) {
315
- code += `let url = '${
316
- this.viewNode?.frontend?.prefixPath ? this.viewNode.frontend.prefixPath : ''
317
- }/${viewArr.join('/')}';\n`;
315
+ code += `let url = '${this.viewNode?.frontend?.prefixPath ? this.viewNode.frontend.prefixPath : ''
316
+ }/${viewArr.join('/')}';\n`;
318
317
  const { completeArguments } = this;
319
318
  if (Array.isArray(completeArguments) && completeArguments.length) {
320
319
  const node = this.viewNode;
@@ -596,7 +595,7 @@ export class Destination extends LogicItem {
596
595
  /**
597
596
  * 设置Arguments的KeyWord
598
597
  */
599
- setArgumentsKeyWord(options: { findArgument: Argument; newKeyword: string }) {
598
+ setArgumentsKeyWord(options: { findArgument: Argument; newKeyword: string; }) {
600
599
  const { findArgument, newKeyword } = options;
601
600
  findArgument.setKeyword(newKeyword);
602
601
  }
@@ -729,18 +728,21 @@ export class Destination extends LogicItem {
729
728
 
730
729
  if (this.tsCalleeNamespace && this.tsName) {
731
730
  const viewPath =
732
- `${this.tsCalleeNamespace}.${this.tsName}`.replace(/^app\..+?.views\./, '').replace(/\.views\./g, '_view.') +
733
- '_view';
734
- code += `nasl.ui.destination('${viewPath}'`;
731
+ `${`${this.tsCalleeNamespace}.${this.tsName}`.replace(/^app\..+?.views\./, '').replace(/\.views\./g, '_view.')}_view`;
732
+ code += `nasl.ui.destination('${this?.frontend?.name}.${viewPath}'`;
733
+ if (logicParamLength > 0) {
734
+ code += `, `;
735
+ code += '{';
736
+ }
735
737
  this.arguments.slice(0, logicParamLength).forEach((argument: Argument, index) => {
736
- if (!argument) {
737
- code += `, __IDENTIFIER__`;
738
- } else {
738
+ code += argument?.toNaturalTS(shiftState(state, code, { inline: true }), false, true);
739
+ if (index < logicParamLength - 1) {
739
740
  code += `, `;
740
- code += argument.toNaturalTS(shiftState(state, code, { inline: true }), false, false);
741
741
  }
742
742
  });
743
-
743
+ if (logicParamLength > 0) {
744
+ code += '}';
745
+ }
744
746
  // code += this.anchor?.toNaturalTS(shiftState(state, code, { inline: true }), true) || '';
745
747
  // code += `, '${this.target}'`;
746
748
 
@@ -361,7 +361,7 @@ export class EntityProperty extends BaseNode {
361
361
  this.app?.emit('collect:end');
362
362
  }
363
363
 
364
- async _effect(options: { action?: 'delete' } = {}) {
364
+ async _effect(options: { action?: 'delete'; } = {}) {
365
365
  // 处理选中的此字段的 CallQueryComponent
366
366
  const callQueryComponents: Set<CallQueryComponent> = new Set();
367
367
  const refs = await this.findUsage();
@@ -408,7 +408,7 @@ export class EntityProperty extends BaseNode {
408
408
  /**
409
409
  * 设置是否必填
410
410
  */
411
- setDisplay(display: { [name: string]: boolean }) {
411
+ setDisplay(display: { [name: string]: boolean; }) {
412
412
  const object = {
413
413
  display,
414
414
  };
@@ -478,10 +478,10 @@ export class EntityProperty extends BaseNode {
478
478
  @withSourceMap()
479
479
  toNaturalTS(state = createCompilerState()): string {
480
480
  let code = '';
481
+ const excludeList = ['createdTime', 'updatedTime', 'createdBy', 'updatedBy'];
482
+ if (state.descriptionComment && !excludeList.includes(this.name))
483
+ code += createDescriptionComment(state, this, ['label']);
481
484
 
482
- if (state.descriptionComment)
483
- code += createDescriptionComment(state, this, ['label', 'description']);
484
-
485
485
  if (this.relationNamespace && this.relationEntity && this.relationProperty) {
486
486
  code += `@EntityRelation(() => new ${this.relationEntity}().${this.relationProperty})\n`;
487
487
  code += indent(state.tabSize);
@@ -844,7 +844,7 @@ export class Entity extends Annotatable {
844
844
  let code = '';
845
845
  if (state.descriptionComment)
846
846
  code += createDescriptionComment(state, this, ['description']);
847
- code = `class ${this?.name} {\n`;
847
+ code += `class ${this?.name} {\n`;
848
848
 
849
849
  this.properties.forEach((property) => {
850
850
  code += `${property.toNaturalTS(shiftState(state, code, { tabSize: state.tabSize + 1 }))};\n`;
@@ -985,7 +985,7 @@ export class Interface extends ImportedInterface {
985
985
  let code = '';
986
986
  if (state.descriptionComment)
987
987
  code += createDescriptionComment(state, this, ['description']);
988
- code = `declare function ${state?.rename || name}(`;
988
+ code += `declare function ${state?.rename || name}(`;
989
989
  if (params?.length) {
990
990
  code += '{ ';
991
991
  params?.forEach((param, index) => {
@@ -1276,7 +1276,7 @@ export class Logic extends Annotatable {
1276
1276
  }
1277
1277
 
1278
1278
  get __isVirtual() {
1279
- const isDisabled = !!this.getAncestor('HistoryProcessV2') || ['enabled', 'history'].includes(this.processV2?.status)
1279
+ const isDisabled = !!this.getAncestor('HistoryProcessV2') || ['enabled', 'history'].includes(this.processV2?.status);
1280
1280
  return isDisabled || this.process?.__isVirtual || false;
1281
1281
  }
1282
1282
 
@@ -1551,7 +1551,7 @@ export class Logic extends Annotatable {
1551
1551
  const self = this;
1552
1552
 
1553
1553
  // 获取所有子节点用于树上填充
1554
- self.getSubLogics()
1554
+ self.getSubLogics();
1555
1555
 
1556
1556
  yield waitOqlQueryComponentChildrenFinish(self);
1557
1557
  let code = '';
@@ -1610,7 +1610,7 @@ export class Logic extends Annotatable {
1610
1610
  leftIndex.length === 1
1611
1611
  ? yield* el.left.expression.toEmbeddedTS(shiftState(state, code, { inline: true }))
1612
1612
  : yield* el.left.members[leftIndex[1]]?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
1613
- returnOrigin('');
1613
+ returnOrigin('');
1614
1614
  const advanceVar = self.variables?.find(
1615
1615
  (variable) => !variable.typeAnnotation && leftCode === variable.name,
1616
1616
  );
@@ -1663,7 +1663,7 @@ export class Logic extends Annotatable {
1663
1663
  leftIndex.length === 1
1664
1664
  ? yield* assignment.left.expression.toEmbeddedTS(shiftState(state, code, { inline: true }))
1665
1665
  : yield* assignment.left.members[leftIndex[1]]?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
1666
- returnOrigin('');
1666
+ returnOrigin('');
1667
1667
  if (leftCode === node.name) {
1668
1668
  const rightNode: any =
1669
1669
  rightIndex.length === 1
@@ -1934,7 +1934,7 @@ export class Logic extends Annotatable {
1934
1934
  leftIndex.length === 1
1935
1935
  ? yield* el.left.expression.toEmbeddedTS(shiftState(state, code, { inline: true }))
1936
1936
  : yield* el.left.members[leftIndex[1]]?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
1937
- returnOrigin('');
1937
+ returnOrigin('');
1938
1938
  const advanceVar = self.variables?.find(
1939
1939
  (variable) => !variable.typeAnnotation && leftCode === variable.name,
1940
1940
  );
@@ -2049,7 +2049,7 @@ export class Logic extends Annotatable {
2049
2049
  leftIndex.length === 1
2050
2050
  ? yield* assignment.left.expression.toEmbeddedTS(shiftState(state, code, { inline: true }))
2051
2051
  : yield* assignment.left.members[leftIndex[1]]?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
2052
- returnOrigin('');
2052
+ returnOrigin('');
2053
2053
  if (leftCode === node.name) {
2054
2054
  const rightNode: any =
2055
2055
  rightIndex.length === 1
@@ -2151,22 +2151,39 @@ export class Logic extends Annotatable {
2151
2151
  ],
2152
2152
  function* warpForEachGenerator({ key, node: itemNode }) {
2153
2153
  if (itemNode) {
2154
- code += `const __${key}_${node?.name} = `;
2154
+ code += `let __${key}_${node?.name}`;
2155
2155
  let itemCode = '';
2156
+ // 匿名数据结构 / 未设置类型的List/map 才进getInitCode
2156
2157
  if (
2157
- asserts.isNewComposite(itemNode)
2158
- || asserts.isNewList(itemNode)
2159
- || asserts.isNewMap(itemNode)
2158
+ (
2159
+ asserts.isNewComposite(itemNode)
2160
+ && itemNode.typeAnnotation?.typeKind === 'anonymousStructure'
2161
+ )
2162
+ || (
2163
+ (asserts.isNewList(itemNode) || asserts.isNewMap(itemNode))
2164
+ && !(itemNode?.typeAnnotation)
2165
+ )
2160
2166
  ) {
2161
- itemCode += yield* itemNode?.getInitCode(shiftState(state, code, {
2167
+ code += ' = ';
2168
+ itemCode += yield* itemNode?.getInitCode?.(shiftState(state, code, {
2162
2169
  inline: true
2163
2170
  })) ??
2164
- returnOrigin('');
2171
+ returnOrigin('');
2172
+ } else if (asserts.isNewComposite(itemNode) && itemNode.typeAnnotation?.typeKind === 'generic') { // new 带泛型的数据结构/实体 进这里
2173
+ code += ' = ';
2174
+ itemCode += (yield* itemNode?.getNewCompositeCode?.(shiftState(state, code, { inline: true }))) || 'null';
2175
+ } else if ((itemNode as any)?.typeAnnotation && !(asserts.isCallQueryComponent(itemNode) && !itemNode.isAutoInfer())) {
2176
+ code += ': ';
2177
+ code += yield* (itemNode as any)?.typeAnnotation?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
2178
+ returnOrigin('');
2165
2179
  } else {
2180
+ code += ' = ';
2166
2181
  itemCode = yield* itemNode?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
2167
2182
  returnOrigin('');
2168
2183
  }
2169
- code += yield* self.getRightCode(itemCode, assignment, itemNode);
2184
+ if (itemCode) {
2185
+ code += yield* self.getRightCode(itemCode, assignment, itemNode);
2186
+ }
2170
2187
  code += ';\n';
2171
2188
  }
2172
2189
  },
@@ -2277,19 +2294,32 @@ export class Logic extends Annotatable {
2277
2294
  }
2278
2295
 
2279
2296
  code += `(`;
2280
- if (this.parentNode?.concept === 'BindEvent') {
2281
- code += `event`;
2297
+ if (state?.typeMap?.[this.nodePath]) {
2298
+ code += state?.typeMap?.[this.nodePath];
2299
+ } else {
2300
+ if (this.parentNode?.concept === 'BindEvent') {
2301
+ // code += `event`;
2302
+ }
2303
+ this.params.forEach((param, index) => {
2304
+ let curCode = '';
2305
+ if (param.name === 'event') curCode += '';
2306
+ else curCode += param.toNaturalTS(shiftState(state, code, { inline: true }));
2307
+ if (curCode && index !== this.params.length - 1) curCode += ', ';
2308
+ code += curCode;
2309
+ });
2282
2310
  }
2283
- this.params.forEach((param, index) => {
2284
- code += param.toNaturalTS(shiftState(state, code, { inline: true }));
2285
- if (index !== this.params.length - 1) code += ', ';
2286
- });
2287
2311
  code += ')';
2288
2312
 
2289
2313
  // 兼容 return 没有类型情况
2290
- if (this.returns.length && (this.returns[0].typeAnnotation || this.returns[0].__TypeAnnotation)) {
2291
- code += ': ';
2292
- code += this.returns[0].typeAnnotation?.toNaturalTS(shiftState(state, code, { inline: true })) || this.returns[0].__TypeAnnotation?.toNaturalTS(shiftState(state, code, { inline: true }));
2314
+ if (this.returns.length) {
2315
+ if (state?.typeMap?.[this.returns[0]?.nodePath]) {
2316
+ code += ': ';
2317
+ code += state?.typeMap?.[this.returns[0]?.nodePath];
2318
+ } else if (this.returns[0].typeAnnotation || this.returns[0].__TypeAnnotation) {
2319
+ code += ': ';
2320
+ const typeAnnotation = this.returns[0].typeAnnotation || this.returns[0].__TypeAnnotation;
2321
+ code += typeAnnotation?.toNaturalTS(shiftState(state, code, { inline: true }));
2322
+ }
2293
2323
  }
2294
2324
 
2295
2325
  if (state.declaration) {
@@ -2372,17 +2402,17 @@ export class Logic extends Annotatable {
2372
2402
  code += ';';
2373
2403
  } else {
2374
2404
  code += ' {\n';
2375
-
2405
+
2376
2406
  this.variables.forEach((variable) => {
2377
2407
  code += `${indent(state.tabSize + 1)}let `;
2378
2408
  code += variable.toTextualNASL(shiftState(state, code, { inline: true }));
2379
2409
  code += ';\n';
2380
2410
  });
2381
2411
  if (this.variables.length) code += '\n';
2382
-
2412
+
2383
2413
  this.body.forEach((item) => {
2384
2414
  let partialCode = '';
2385
-
2415
+
2386
2416
  // if (!state.focusedNodePath && item.concept === 'End') code += `${indent(state.tabSize + 1)}/* 当前位置 */\n`;
2387
2417
  if (item.toTextualNASL) {
2388
2418
  partialCode = item.toTextualNASL(shiftState(state, code, { tabSize: state.tabSize + 1 }));
@@ -2515,8 +2545,8 @@ export class Logic extends Annotatable {
2515
2545
  collectionTSCode === '__IDENTIFIER__'
2516
2546
  ? collectionTSCode
2517
2547
  : callFunction.isLoopMap && index === 0
2518
- ? `${collectionTSCode}.__getKey(0)`
2519
- : `${collectionTSCode}.__get(0)`,
2548
+ ? `${collectionTSCode}.__getKey(0)`
2549
+ : `${collectionTSCode}.__get(0)`,
2520
2550
  );
2521
2551
  }
2522
2552
  });
@@ -2658,9 +2688,8 @@ export class Logic extends Annotatable {
2658
2688
  if (asserts.isFrontendLibrary(this.parentNode)) {
2659
2689
  _path += `/frontends/${this.parentNode.type}`;
2660
2690
  } else if (this.parentNode.concept === 'BindEvent' && this.getAncestor('Frontend')) {
2661
- _path += `/frontendTypes/${this.getAncestor('FrontendType')?.name}/frontends/${
2662
- this.getAncestor('Frontend')?.name
2663
- }/bindEvents/${name}.ts`;
2691
+ _path += `/frontendTypes/${this.getAncestor('FrontendType')?.name}/frontends/${this.getAncestor('Frontend')?.name
2692
+ }/bindEvents/${name}.ts`;
2664
2693
  }
2665
2694
  return `/embedded/${this.getAncestor('App')?.name}${_path}/logics/${name}.ts`;
2666
2695
  }
@@ -2750,9 +2779,9 @@ export class Logic extends Annotatable {
2750
2779
  super.delete();
2751
2780
  this.body.forEach((el) => {
2752
2781
  if (asserts.isCallInterface(el)) {
2753
- el.deleteCallNode()
2782
+ el.deleteCallNode();
2754
2783
  }
2755
- })
2784
+ });
2756
2785
  this.traverseChildren(async (el) => {
2757
2786
  if (el?.concept === 'CallQueryComponent') (el as CallQueryComponent).removeStructure();
2758
2787
  // 仅仅针对 自定义连接器下的 Loigc,其他需要界定边界
@@ -2886,7 +2915,7 @@ export class Logic extends Annotatable {
2886
2915
 
2887
2916
  getSubLogics() {
2888
2917
  const subLogics = this.findNaslNodeByBFS((node: BaseNode) => {
2889
- if (asserts.isSubLogic(node)) {
2918
+ if (node?.concept === 'SubLogic') {
2890
2919
  return true;
2891
2920
  }
2892
2921
  });
@@ -8,13 +8,14 @@ import {
8
8
  withGenerator,
9
9
  TranslatorGenerator,
10
10
  } from '../translator';
11
- import { ComponentCompletionPropertyMap, Enum, TypeAnnotation, BusinessComponent, View } from '..';
11
+ import { Enum, TypeAnnotation, BusinessComponent, View } from '..';
12
12
  import { ElementToVueOptions } from './ViewElement__';
13
13
  import type Identifier from './Identifier__';
14
14
  import BindAttribute, { attrConvertCamelCase } from './BindAttribute__';
15
15
  import type Assignment from './Assignment__';
16
16
  import type BatchAssignment from './BatchAssignment__';
17
17
  import DefaultValue from './DefaultValue__';
18
+ import { config } from '../config';
18
19
 
19
20
  const Identifier_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
20
21
 
@@ -138,11 +139,13 @@ export class MemberExpression extends LogicItem {
138
139
  }
139
140
 
140
141
  if (
141
- ComponentCompletionPropertyMap[elementTag] &&
142
- ComponentCompletionPropertyMap[elementTag][this.property.name] &&
143
- ComponentCompletionPropertyMap[elementTag][this.property.name].state
142
+ config?.allNodesAPI &&
143
+ config?.allNodesAPI[elementTag] &&
144
+ config?.allNodesAPI[elementTag].readablePropsMap &&
145
+ config?.allNodesAPI[elementTag].readablePropsMap[this.property.name] &&
146
+ config?.allNodesAPI[elementTag].readablePropsMap[this.property.name].state
144
147
  ) {
145
- const { prop } = ComponentCompletionPropertyMap[elementTag][this.property.name];
148
+ const { prop } = config?.allNodesAPI[elementTag].readablePropsMap[this.property.name];
146
149
  if (!['data'].includes(this.property.name)) {
147
150
  return `this && this.__${elementName}_params && this.__${elementName}_params.${this.property.name}`;
148
151
  }
@@ -263,11 +266,13 @@ export class MemberExpression extends LogicItem {
263
266
  }
264
267
 
265
268
  if (
266
- ComponentCompletionPropertyMap[elementTag] &&
267
- ComponentCompletionPropertyMap[elementTag][this.property.name] &&
268
- ComponentCompletionPropertyMap[elementTag][this.property.name].state
269
+ config?.allNodesAPI &&
270
+ config?.allNodesAPI[elementTag] &&
271
+ config?.allNodesAPI[elementTag].readablePropsMap &&
272
+ config?.allNodesAPI[elementTag].readablePropsMap[this.property.name] &&
273
+ config?.allNodesAPI[elementTag].readablePropsMap[this.property.name].state
269
274
  ) {
270
- const { prop } = ComponentCompletionPropertyMap[elementTag][this.property.name];
275
+ const { prop } = config?.allNodesAPI[elementTag].readablePropsMap[this.property.name];
271
276
 
272
277
  if (!['data'].includes(this.property.name)) {
273
278
  return `this['__${elementName}_params'] && this['__${elementName}_params'].${this.property.name}`;
@@ -422,11 +427,13 @@ export class MemberExpression extends LogicItem {
422
427
  const prefix = type === 'toVue' ? '' : 'this.';
423
428
 
424
429
  if (
425
- ComponentCompletionPropertyMap[elementTag] &&
426
- ComponentCompletionPropertyMap[elementTag][this.property.name] &&
427
- ComponentCompletionPropertyMap[elementTag][this.property.name].state
430
+ config?.allNodesAPI &&
431
+ config?.allNodesAPI[elementTag] &&
432
+ config?.allNodesAPI[elementTag].readablePropsMap &&
433
+ config?.allNodesAPI[elementTag].readablePropsMap[this.property.name] &&
434
+ config?.allNodesAPI[elementTag].readablePropsMap[this.property.name].state
428
435
  ) {
429
- const { prop } = ComponentCompletionPropertyMap[elementTag][this.property.name];
436
+ const { prop } = config?.allNodesAPI[elementTag].readablePropsMap[this.property.name];
430
437
 
431
438
  if (!['data'].includes(this.property.name)) {
432
439
  return `${prefix}__${elementName}_params && ${prefix}__${elementName}_params.${this.property.name}`;