@lcap/nasl 3.7.0-beta.5 → 3.7.0-beta.6

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 (96) hide show
  1. package/out/bak/translator.js +12 -12
  2. package/out/bak/translator.js.map +1 -1
  3. package/out/common/BaseNode.js +2 -2
  4. package/out/common/BaseNode.js.map +1 -1
  5. package/out/concepts/App__.d.ts +1 -1
  6. package/out/concepts/App__.js +2 -2
  7. package/out/concepts/App__.js.map +1 -1
  8. package/out/concepts/BindAttribute__.js +1 -1
  9. package/out/concepts/BindAttribute__.js.map +1 -1
  10. package/out/concepts/BindDirective__.js +1 -1
  11. package/out/concepts/BindDirective__.js.map +1 -1
  12. package/out/concepts/CallAuthInterface__.d.ts +1 -0
  13. package/out/concepts/CallAuthInterface__.js +9 -0
  14. package/out/concepts/CallAuthInterface__.js.map +1 -1
  15. package/out/concepts/CallLogic__.js +12 -6
  16. package/out/concepts/CallLogic__.js.map +1 -1
  17. package/out/concepts/Frontend__.js +1 -0
  18. package/out/concepts/Frontend__.js.map +1 -1
  19. package/out/concepts/Integration__.d.ts +1 -0
  20. package/out/concepts/Integration__.js +4 -0
  21. package/out/concepts/Integration__.js.map +1 -1
  22. package/out/concepts/LogicItem__.js +1 -1
  23. package/out/concepts/LogicItem__.js.map +1 -1
  24. package/out/concepts/Logic__.js +4 -4
  25. package/out/concepts/Logic__.js.map +1 -1
  26. package/out/concepts/Param__.js +3 -1
  27. package/out/concepts/Param__.js.map +1 -1
  28. package/out/concepts/View__.d.ts +3 -2
  29. package/out/concepts/View__.js +11 -18
  30. package/out/concepts/View__.js.map +1 -1
  31. package/out/generator/release-body/body.js +1 -2
  32. package/out/generator/release-body/body.js.map +1 -1
  33. package/out/generator/release-body/data.js +1 -1
  34. package/out/generator/release-body/types.d.ts +1 -1
  35. package/out/natural/genNaturalTS.d.ts +8 -8
  36. package/out/natural/genNaturalTS.js +41 -41
  37. package/out/natural/prompt/analyzeClaims.js +4 -3
  38. package/out/natural/prompt/analyzeClaims.js.map +1 -1
  39. package/out/natural/prompt/analyzeFormatOutput.js +1 -1
  40. package/out/natural/prompt/analyzeTasks.js +2 -2
  41. package/out/server/naslServer.js +11 -4
  42. package/out/server/naslServer.js.map +1 -1
  43. package/out/templator/genCreateBlock.js +2 -2
  44. package/out/templator/genCreateBlock.js.map +1 -1
  45. package/out/templator/genCurdEditMultipleKeyBlock.js +1 -1
  46. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  47. package/out/templator/genCurdMultipleKeyBlock.js +2 -3
  48. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  49. package/out/templator/genUpdateBlock.js +5 -4
  50. package/out/templator/genUpdateBlock.js.map +1 -1
  51. package/out/utils/delay/index.d.ts +0 -0
  52. package/out/utils/delay/index.js +1 -0
  53. package/out/utils/delay/index.js.map +1 -0
  54. package/out/utils/delay.d.ts +9 -0
  55. package/out/utils/delay.js +41 -0
  56. package/out/utils/delay.js.map +1 -0
  57. package/out/utils/env.d.ts +4 -0
  58. package/out/utils/env.js +6 -1
  59. package/out/utils/env.js.map +1 -1
  60. package/out/utils/time-slicing/controller.js +4 -2
  61. package/out/utils/time-slicing/controller.js.map +1 -1
  62. package/out/utils/time-slicing/page-state.d.ts +1 -1
  63. package/out/utils/time-slicing/page-state.js +3 -9
  64. package/out/utils/time-slicing/page-state.js.map +1 -1
  65. package/package.json +1 -1
  66. package/src/bak/translator.js +13 -13
  67. package/src/common/BaseNode.ts +2 -2
  68. package/src/concepts/App__.ts +2 -2
  69. package/src/concepts/BindAttribute__.ts +1 -1
  70. package/src/concepts/BindDirective__.ts +1 -1
  71. package/src/concepts/CallAuthInterface__.ts +10 -0
  72. package/src/concepts/CallLogic__.ts +14 -7
  73. package/src/concepts/Frontend__.ts +1 -0
  74. package/src/concepts/Integration__.ts +6 -0
  75. package/src/concepts/LogicItem__.ts +1 -1
  76. package/src/concepts/Logic__.ts +4 -4
  77. package/src/concepts/Param__.ts +3 -1
  78. package/src/concepts/View__.ts +12 -20
  79. package/src/generator/release-body/body.ts +1 -2
  80. package/src/generator/release-body/data.ts +1 -1
  81. package/src/generator/release-body/types.ts +1 -1
  82. package/src/natural/genNaturalTS.ts +41 -41
  83. package/src/natural/prompt/analyzeClaims.ts +4 -3
  84. package/src/natural/prompt/analyzeFormatOutput.ts +1 -1
  85. package/src/natural/prompt/analyzeTasks.ts +2 -2
  86. package/src/server/naslServer.ts +12 -4
  87. package/src/templator/genCreateBlock.ts +2 -2
  88. package/src/templator/genCurdEditMultipleKeyBlock.ts +1 -1
  89. package/src/templator/genCurdMultipleKeyBlock.ts +2 -3
  90. package/src/templator/genUpdateBlock.ts +5 -4
  91. package/src/utils/delay/index.ts +0 -0
  92. package/src/utils/delay.ts +41 -0
  93. package/src/utils/env.ts +7 -0
  94. package/src/utils/time-slicing/controller.ts +5 -3
  95. package/src/utils/time-slicing/page-state.ts +1 -9
  96. package/test/concepts/view-element/__snapshots__/toVue.spec.ts.snap +2 -2
@@ -7,9 +7,9 @@ export const analyzeTasks = () => {
7
7
  - text: 如果你认为需求不够明确时,可以继续询问用户需求的细节,不可为空
8
8
  - executable
9
9
  - 类型为 boolean, 如果你认为需求比较明确并且 plan 可执行, 返回 true, 否则返回 false
10
- - moduleIndexList
10
+ - requiredIndexes
11
11
  - 类型为 Array, 你需要根据用户的执行计划,从 Context Definition 中整理出执行需要用到的模块或者方法,返回对应的索引
12
- - 用于下一步的具体实施,需要尽可能详细的返回所有和执行计划相关的模块或方法索引。例如:"moduleIndexList": ['1','6-3','8-1-1-0']。
12
+ - 用于下一步的具体实施,需要尽可能详细的返回所有和执行计划相关的模块或方法索引。例如:"requiredIndexes": ['1','6-3','8-1-1-0']。
13
13
  - needQueryRepository
14
14
  - 类型为 boolean, 如果你认为需求相关的上下文信息不足,需要另外查询知识库时, 返回 true, 否则返回 false
15
15
  `;
@@ -584,7 +584,7 @@ class NaslServer {
584
584
 
585
585
  if (module instanceof Connector) {
586
586
  yield* getTsFiles(triggerLaunchers, 'triggerLauncher');
587
- yield* getTsFiles(authLogicsForCallInterface, 'authLogicForCallInterface');
587
+ // yield* getTsFiles(authLogicsForCallInterface, 'authLogicForCallInterface');
588
588
  yield* getTsFiles(concat(namespaces, 'logics'), 'namespaces_logic');
589
589
  }
590
590
 
@@ -2206,7 +2206,7 @@ class NaslServer {
2206
2206
  }
2207
2207
  else if (fileNode instanceof Logic || fileNode instanceof OverriddenLogic) {
2208
2208
  const { isRefedByTrigger, fRefNames } = yield this.isRefedByTriggerAndReturnFirstRef(fileNode);
2209
- if (fileNode instanceof Logic && fileNode?.exportInterface) {
2209
+ if (fileNode instanceof Logic && fileNode?.exportInterface && fileNode.calleewholeKey.startsWith('app.logics')) {
2210
2210
  let isSame = true;
2211
2211
  const itf = (fileNode.exportInterface as Interface);
2212
2212
  const { params: logicParams, returns: logicReturns } = fileNode;
@@ -2233,7 +2233,7 @@ class NaslServer {
2233
2233
  if (isSame && logicReturns?.length === itfReturns?.length && logicReturns?.length > 0) {
2234
2234
  if (logicReturns[0].name !== itfReturns[0].name) {
2235
2235
  isSame = false;
2236
- } else if (!logicReturns[0]?.typeAnnotation?.isSame?.(itfReturns[0]?.typeAnnotation)) {
2236
+ } else if (!(logicReturns[0]?.typeAnnotation ?? logicReturns[0]?.__TypeAnnotation)?.isSame?.(itfReturns[0]?.typeAnnotation)) {
2237
2237
  isSame = false;
2238
2238
  }
2239
2239
  }
@@ -4474,6 +4474,11 @@ class NaslServer {
4474
4474
 
4475
4475
  this.logger.timeEnd('全量标注');
4476
4476
 
4477
+ // 测试环境打印数据
4478
+ if (utils.isTestBrowser) {
4479
+ this.logger.info('全量标注数据', json);
4480
+ }
4481
+
4477
4482
  if (releaseFlag) {
4478
4483
  // 全量标注后对json进行一些修改,为了服务端翻译处理
4479
4484
  this.annotationToJson(typesMap, json);
@@ -4803,7 +4808,10 @@ class NaslServer {
4803
4808
  * @param result toTs生成的内容
4804
4809
  */
4805
4810
  async handleDelete(fileNode: BaseNode, targetNode: BaseNode, result: utils.EmbeddedTSFileResult) {
4806
- const filePath = (fileNode as FileNode).getEmbeddedFilePath();
4811
+ const filePath = (fileNode as FileNode)?.getEmbeddedFilePath();
4812
+ if (!filePath) {
4813
+ return;
4814
+ }
4807
4815
  // 如果要删除,而且当前要删Logic就直接删除并且清除错误
4808
4816
  /**
4809
4817
  * 删除节点中的一个内容,删除了以后,就查一下引用的地方一起查一下异常
@@ -31,7 +31,7 @@ export function genCreateFormTemplate(entity: Entity, nameGroup: NameGroup, sele
31
31
  if (required) rules.push('required');
32
32
  const rulesStr = rules.join(' | ');
33
33
 
34
- let formItem = ` <u-form-item ${required ? ' required' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''
34
+ let formItem = ` <u-form-item ${required ? ' :required="true"' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''
35
35
  } layout="center"><template #label><u-text text="${label}"></u-text></template>\n`;
36
36
 
37
37
  const { typeAnnotation } = property || {};
@@ -121,7 +121,7 @@ export function genH5CreateFormTemplate(entity: Entity, nameGroup: NameGroup, se
121
121
  if (required) rules.push('required');
122
122
  const rulesStr = rules.join(' | ');
123
123
 
124
- let formItem = ` <van-field drole="other" ${required ? ' required' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''}>\n`;
124
+ let formItem = ` <van-field drole="other" ${required ? ' :required="true"' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''}>\n`;
125
125
  const { typeAnnotation } = property || {};
126
126
  const { typeNamespace: propertyTypeNamespace } = typeAnnotation || {};
127
127
  const propertyTypeName = transEntityMetadataTypes(typeAnnotation, dataSource.app);
@@ -137,7 +137,7 @@ function genSaveModalTemplate(entity: Entity, nameGroup: NameGroup, selectNameGr
137
137
  const rulesStr = rules.join(' | ');
138
138
 
139
139
  let formItem = `<u-form-item
140
- ${required ? 'required' : ''}
140
+ ${required ? ':required="true"' : ''}
141
141
  ${rulesStr.length ? `rules="${rulesStr}"` : ''}
142
142
  layout="center"
143
143
  ><template #label><u-text text="${label}"></u-text></template>`;
@@ -147,7 +147,7 @@ function genSaveModalTemplate(entity: Entity, nameGroup: NameGroup, selectNameGr
147
147
  }
148
148
  if (required) rules.push('required');
149
149
  const rulesStr = rules.join(' | ');
150
- let formItem = `<u-form-item ${required ? 'required' : ''} ${
150
+ let formItem = `<u-form-item ${required ? ':required="true"' : ''} ${
151
151
  rulesStr.length ? `rules="${rulesStr}"` : ''
152
152
  } layout="center"><template #label><u-text text="${label}"></u-text></template>`;
153
153
 
@@ -1094,7 +1094,7 @@ function genSaveModalTemplateDesigner(
1094
1094
  }
1095
1095
  if (required) rules.push('required');
1096
1096
  const rulesStr = rules.join(' | ');
1097
- let formItem = `<u-form-item ${required ? 'required' : ''} ${
1097
+ let formItem = `<u-form-item ${required ? ':required="true"' : ''} ${
1098
1098
  rulesStr.length ? `rules="${rulesStr}"` : ''
1099
1099
  } layout="center"><template #label><u-text text="${label}"></u-text></template>`;
1100
1100
 
@@ -1410,7 +1410,6 @@ export function genCurdMultipleKeyBlockForTableDesigner(
1410
1410
  "viewBindEvents": [
1411
1411
  {
1412
1412
  "concept": "BindEvent",
1413
- ${composedByOptionStr}
1414
1413
  "arguments": [],
1415
1414
  "name": "created",
1416
1415
  "calleeNamespace": "",
@@ -31,7 +31,7 @@ export function genUpdateFormTemplate(entity: Entity, nameGroup: NameGroup, sele
31
31
  if (required) rules.push('required');
32
32
  const rulesStr = rules.join(' | ');
33
33
 
34
- let formItem = ` <u-form-item ${required ? ' required' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''
34
+ let formItem = ` <u-form-item ${required ? ' :required="true"' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''
35
35
  } layout="center"><template #label><u-text text="${label}"></u-text></template>\n`;
36
36
 
37
37
  const { typeAnnotation } = property || {};
@@ -55,9 +55,10 @@ export function genUpdateFormTemplate(entity: Entity, nameGroup: NameGroup, sele
55
55
  // 存在多个属性关联同一个实体的情况,因此加上属性名用以唯一标识
56
56
  const key = [property.name, relationEntity.name].join('-');
57
57
  const selectNameGroup = selectNameGroupMap.get(key);
58
+ let dataSourceValue = `(params) => ${selectNameGroup.logic}(elements.$ce.page, elements.$ce.size)`
58
59
  formItem += `
59
- <u-select :clearable="true" placeholder="请选择${label}" :dataSource="${selectNameGroup.viewLogicLoad}"
60
- textField="${lowerEntityName}.${displayedProperty.name}" valueField="${lowerEntityName}.${relationProperty.name}" :pagination="true" v-model="${vModel}">
60
+ <u-select :clearable="true" placeholder="请选择${label}" :dataSource="${dataSourceValue}" :pageSize="50"
61
+ textField="${lowerEntityName}.${displayedProperty.name}" valueField="${lowerEntityName}.${relationProperty.name}" :pagination="true" v-model="${vModel}">
61
62
  </u-select>
62
63
  `;
63
64
  } else
@@ -124,7 +125,7 @@ export function genH5UpdateFormTemplate(entity: Entity, nameGroup: NameGroup, se
124
125
  if (required) rules.push('required');
125
126
  const rulesStr = rules.join(' | ');
126
127
 
127
- let formItem = ` <van-field drole="other" ${required ? ' required' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''}>\n`;
128
+ let formItem = ` <van-field drole="other" ${required ? ' :required="true"' : ''}${rulesStr.length ? ` rules="${rulesStr}"` : ''}>\n`;
128
129
 
129
130
  const { typeAnnotation } = property || {};
130
131
  const { typeNamespace: propertyTypeNamespace } = typeAnnotation || {};
File without changes
@@ -0,0 +1,41 @@
1
+ import { isNode } from './env';
2
+
3
+ /** 主线程延迟 */
4
+ export function delay(time: number) {
5
+ return new Promise((resolve) => setTimeout(resolve, time));
6
+ }
7
+
8
+ let delaySwitch = (): void => void 0;
9
+ let worker: Worker;
10
+
11
+ if (!isNode) {
12
+ const workerCode = `
13
+ self.onmessage = function({ data: delay }) {
14
+ setTimeout(function() {
15
+ self.postMessage('Delayed');
16
+ }, delay);
17
+ }
18
+ `.trim();
19
+
20
+ worker = new Worker(URL.createObjectURL(new Blob([workerCode], { type: 'application/javascript' })));
21
+ worker.addEventListener('message', () => {
22
+ delaySwitch();
23
+ });
24
+ }
25
+
26
+ /**
27
+ * Web Worker 延迟
28
+ *
29
+ * @description 和 setTimeout 相比,它能无视页面在后台导致的 setTimeout 暂停问题
30
+ * @description 仅在浏览器环境下有效;Nodejs 环境下等同于 setTimeout
31
+ */
32
+ export function delayInWorker(time = 0) {
33
+ if (isNode) {
34
+ return delay(time);
35
+ }
36
+
37
+ return new Promise<void>((resolve) => {
38
+ worker.postMessage(time);
39
+ delaySwitch = resolve;
40
+ });
41
+ }
package/src/utils/env.ts CHANGED
@@ -1,2 +1,9 @@
1
+ /** 浏览器环境 */
2
+ export const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
1
3
  /** Node 环境 */
2
4
  export const isNode = process.env.BUILD_TARGET === 'node' || !globalThis.window;
5
+ /** 是否是浏览器测试环境 */
6
+ export const isTestBrowser = isBrowser && (
7
+ /codewave-(test|dev)\.163yun\.com$/.test(location.hostname) ||
8
+ location.hostname.includes('localhost')
9
+ );
@@ -1,4 +1,4 @@
1
- import { pageIsActive } from './page-state';
1
+ import { isPageActive } from './page-state';
2
2
  import { Performance } from './performance';
3
3
  import {
4
4
  getFrameMark,
@@ -16,6 +16,7 @@ import {
16
16
  NextState,
17
17
  TheoreticalLimitCalculationCoefficient as Coefficient,
18
18
  } from './constant';
19
+ import { delayInWorker } from '../delay';
19
20
 
20
21
  /** 时间分片控制器 */
21
22
  export class TimeSlicingController {
@@ -97,11 +98,12 @@ export class TimeSlicingController {
97
98
  const { frame, group, async } = this;
98
99
 
99
100
  // 页面处于活动状态
100
- if (pageIsActive) {
101
+ if (isPageActive()) {
101
102
  /** 帧剩余时间 */
102
103
  const restFrameTime = Math.max(FrameMinTime - async.time - frame.time, 0);
103
104
  /** 是否使用下一帧 */
104
105
  const useNextFrame = restFrameTime < FrameIdleTime;
106
+ /** 下组任务状态 */
105
107
  const state = useNextFrame ? NextState.NextFrame : NextState.MicroTask;
106
108
  /** 增长系数计算的任务上限 */
107
109
  const taskNumberByRatio = this.increaseRatio(group.limit);
@@ -273,7 +275,7 @@ export class TimeSlicingController {
273
275
  }
274
276
  else {
275
277
  this.setFrameEnd();
276
- requestAnimationFrame(runFrame);
278
+ delayInWorker(FrameIdleTime).then(runFrame);
277
279
  }
278
280
  };
279
281
  /** 运行任务组 */
@@ -1,12 +1,4 @@
1
1
  import { isNode } from '../env';
2
2
 
3
3
  /** 页面活动状态 */
4
- export let pageIsActive = false;
5
-
6
- // 浏览器环境需要监听页面活动状态
7
- if (!isNode) {
8
- pageIsActive = !(document?.hidden ?? true);
9
- document?.addEventListener('visibilitychange', () => {
10
- pageIsActive = !document.hidden;
11
- });
12
- }
4
+ export const isPageActive = () => !isNode && !document.hidden;
@@ -103,7 +103,7 @@ exports[`view-element:toVue table-data-source-calllogic-with-server-validation 1
103
103
  >
104
104
  <u-table-view
105
105
  :ref=\\"\`tableView_1\`\\"
106
- :data-source=\\"__tableView_1_dataSourceLoad\\"
106
+ :data-source=\\"(params) => __tableView_1_handleDataSourceLoad(params)\\"
107
107
  :data-schema=\\"\`LoadTestTableView_1Structure\`\\"
108
108
  :value-field=\\"\`entity1.id\`\\"
109
109
  :pagination=\\"true\\"
@@ -271,7 +271,7 @@ exports[`view-element:toVue with-table 1`] = `
271
271
  </u-linear-layout>
272
272
  <u-table-view
273
273
  :ref=\\"\`tableView\`\\"
274
- :data-source=\\"__tableView_dataSourceLoad\\"
274
+ :data-source=\\"(params) => __tableView_handleDataSourceLoad(params)\\"
275
275
  :data-schema=\\"\`LoadTestTableView2Structure\`\\"
276
276
  :value-field=\\"\`entity2.id\`\\"
277
277
  :pagination=\\"true\\"