@lcap/nasl 3.6.0-alpha.1 → 3.6.0-alpha.2

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 (245) hide show
  1. package/out/bak/translator.js +119 -39
  2. package/out/bak/translator.js.map +1 -1
  3. package/out/breakpoint/generator/BreakpointNode.d.ts +3 -0
  4. package/out/breakpoint/generator/BreakpointNode.js +9 -0
  5. package/out/breakpoint/generator/BreakpointNode.js.map +1 -1
  6. package/out/breakpoint/shared/constants.js +1 -0
  7. package/out/breakpoint/shared/constants.js.map +1 -1
  8. package/out/breakpoint/shared/utils.js +12 -6
  9. package/out/breakpoint/shared/utils.js.map +1 -1
  10. package/out/breakpoint/store/core.js +1 -1
  11. package/out/breakpoint/store/core.js.map +1 -1
  12. package/out/common/BaseNode.d.ts +1 -4
  13. package/out/common/BaseNode.js +23 -37
  14. package/out/common/BaseNode.js.map +1 -1
  15. package/out/concepts/AnonymousFunction__.d.ts +6 -1
  16. package/out/concepts/AnonymousFunction__.js +34 -16
  17. package/out/concepts/AnonymousFunction__.js.map +1 -1
  18. package/out/concepts/App__.d.ts +55 -51
  19. package/out/concepts/App__.js +76 -80
  20. package/out/concepts/App__.js.map +1 -1
  21. package/out/concepts/BackendVariable__.js +10 -2
  22. package/out/concepts/BackendVariable__.js.map +1 -1
  23. package/out/concepts/BindAttribute__.js +16 -6
  24. package/out/concepts/BindAttribute__.js.map +1 -1
  25. package/out/concepts/BindDirective__.d.ts +1 -0
  26. package/out/concepts/BindDirective__.js +19 -4
  27. package/out/concepts/BindDirective__.js.map +1 -1
  28. package/out/concepts/BindEvent__.d.ts +3 -1
  29. package/out/concepts/BindEvent__.js +39 -14
  30. package/out/concepts/BindEvent__.js.map +1 -1
  31. package/out/concepts/BusinessComponent__.d.ts +641 -0
  32. package/out/concepts/BusinessComponent__.js +1921 -0
  33. package/out/concepts/BusinessComponent__.js.map +1 -0
  34. package/out/concepts/BusinessLogic__.d.ts +38 -0
  35. package/out/concepts/BusinessLogic__.js +358 -0
  36. package/out/concepts/BusinessLogic__.js.map +1 -0
  37. package/out/concepts/CallEvent__.d.ts +101 -0
  38. package/out/concepts/CallEvent__.js +280 -0
  39. package/out/concepts/CallEvent__.js.map +1 -0
  40. package/out/concepts/CallFunction__.d.ts +0 -1
  41. package/out/concepts/CallFunction__.js +10 -10
  42. package/out/concepts/CallFunction__.js.map +1 -1
  43. package/out/concepts/CallLogic__.d.ts +2 -0
  44. package/out/concepts/CallLogic__.js +38 -27
  45. package/out/concepts/CallLogic__.js.map +1 -1
  46. package/out/concepts/Constant__.js +7 -6
  47. package/out/concepts/Constant__.js.map +1 -1
  48. package/out/concepts/Destination__.d.ts +1 -1
  49. package/out/concepts/Destination__.js +7 -5
  50. package/out/concepts/Destination__.js.map +1 -1
  51. package/out/concepts/End__.js +2 -1
  52. package/out/concepts/End__.js.map +1 -1
  53. package/out/concepts/Event__.d.ts +14 -0
  54. package/out/concepts/Event__.js +61 -0
  55. package/out/concepts/Event__.js.map +1 -1
  56. package/out/concepts/FrontendType__.d.ts +308 -0
  57. package/out/concepts/FrontendType__.js +605 -0
  58. package/out/concepts/FrontendType__.js.map +1 -0
  59. package/out/concepts/Frontend__.d.ts +0 -88
  60. package/out/concepts/Frontend__.js +1 -143
  61. package/out/concepts/Frontend__.js.map +1 -1
  62. package/out/concepts/Identifier__.d.ts +5 -0
  63. package/out/concepts/Identifier__.js +19 -9
  64. package/out/concepts/Identifier__.js.map +1 -1
  65. package/out/concepts/LogicItem__.d.ts +1 -1
  66. package/out/concepts/LogicItem__.js.map +1 -1
  67. package/out/concepts/Logic__.d.ts +3 -1
  68. package/out/concepts/Logic__.js +31 -21
  69. package/out/concepts/Logic__.js.map +1 -1
  70. package/out/concepts/Match__.d.ts +1 -1
  71. package/out/concepts/MemberExpression__.d.ts +1 -1
  72. package/out/concepts/MemberExpression__.js +3 -3
  73. package/out/concepts/MemberExpression__.js.map +1 -1
  74. package/out/concepts/NewComposite__.js.map +1 -1
  75. package/out/concepts/ParamWithGroup__.d.ts +39 -0
  76. package/out/concepts/ParamWithGroup__.js +85 -0
  77. package/out/concepts/ParamWithGroup__.js.map +1 -0
  78. package/out/concepts/Param__.js +11 -3
  79. package/out/concepts/Param__.js.map +1 -1
  80. package/out/concepts/ProcessElement__.js +9 -1
  81. package/out/concepts/ProcessElement__.js.map +1 -1
  82. package/out/concepts/Return__.js +17 -9
  83. package/out/concepts/Return__.js.map +1 -1
  84. package/out/concepts/ValidationRule__.js +2 -1
  85. package/out/concepts/ValidationRule__.js.map +1 -1
  86. package/out/concepts/Variable__.js +17 -8
  87. package/out/concepts/Variable__.js.map +1 -1
  88. package/out/concepts/ViewElement__.d.ts +17 -1
  89. package/out/concepts/ViewElement__.js +145 -16
  90. package/out/concepts/ViewElement__.js.map +1 -1
  91. package/out/concepts/View__.js +21 -20
  92. package/out/concepts/View__.js.map +1 -1
  93. package/out/concepts/index__.d.ts +5 -0
  94. package/out/concepts/index__.js +5 -0
  95. package/out/concepts/index__.js.map +1 -1
  96. package/out/concepts/utils/asserts.d.ts +258 -3
  97. package/out/concepts/utils/asserts.js +351 -13
  98. package/out/concepts/utils/asserts.js.map +1 -1
  99. package/out/concepts/utils/types.d.ts +20 -3
  100. package/out/generator/genBundleFiles.js +25 -11
  101. package/out/generator/genBundleFiles.js.map +1 -1
  102. package/out/generator/genReleaseBody.js +12 -3
  103. package/out/generator/genReleaseBody.js.map +1 -1
  104. package/out/generator/permission.js +3 -3
  105. package/out/generator/permission.js.map +1 -1
  106. package/out/natural/transformTSCode.js +1 -1
  107. package/out/natural/transformTSCode.js.map +1 -1
  108. package/out/server/extendBaseNode.js +6 -4
  109. package/out/server/extendBaseNode.js.map +1 -1
  110. package/out/server/getLogics.js +62 -27
  111. package/out/server/getLogics.js.map +1 -1
  112. package/out/server/getMemberIdentifier.js +6 -1
  113. package/out/server/getMemberIdentifier.js.map +1 -1
  114. package/out/server/getProcesses.js +3 -3
  115. package/out/server/getProcesses.js.map +1 -1
  116. package/out/server/naslServer.js +40 -19
  117. package/out/server/naslServer.js.map +1 -1
  118. package/out/server/translator.js +6 -1
  119. package/out/server/translator.js.map +1 -1
  120. package/out/service/storage/init.js +1 -2
  121. package/out/service/storage/init.js.map +1 -1
  122. package/out/templator/genCreateBlock.js +6 -6
  123. package/out/templator/genCreateBlock.js.map +1 -1
  124. package/out/templator/genCurdEditMultipleKeyBlock.js +16 -16
  125. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  126. package/out/templator/genCurdMultipleKeyBlock.js +36 -36
  127. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  128. package/out/templator/genGetBlock.js +6 -5
  129. package/out/templator/genGetBlock.js.map +1 -1
  130. package/out/templator/genGridViewBlock.js +12 -12
  131. package/out/templator/genGridViewBlock.js.map +1 -1
  132. package/out/templator/genListViewBlock.js +4 -4
  133. package/out/templator/genListViewBlock.js.map +1 -1
  134. package/out/templator/genSelectBlock.js +3 -3
  135. package/out/templator/genSelectBlock.js.map +1 -1
  136. package/out/templator/genTableBlock.js +10 -10
  137. package/out/templator/genTableBlock.js.map +1 -1
  138. package/out/templator/genUpdateBlock.js +10 -9
  139. package/out/templator/genUpdateBlock.js.map +1 -1
  140. package/out/templator/utils.d.ts +2 -2
  141. package/out/templator/utils.js.map +1 -1
  142. package/out/translator/utils.js +12 -1
  143. package/out/translator/utils.js.map +1 -1
  144. package/out/utils/i18nInfo.js +7 -2
  145. package/out/utils/i18nInfo.js.map +1 -1
  146. package/out/utils/index.d.ts +17 -0
  147. package/out/utils/index.js +184 -1
  148. package/out/utils/index.js.map +1 -1
  149. package/package.json +2 -2
  150. package/src/bak/translator.js +121 -43
  151. package/src/breakpoint/generator/BreakpointNode.ts +12 -0
  152. package/src/breakpoint/shared/constants.ts +1 -0
  153. package/src/breakpoint/shared/utils.ts +13 -8
  154. package/src/breakpoint/store/core.ts +1 -1
  155. package/src/common/BaseNode.ts +22 -41
  156. package/src/concepts/AnonymousFunction__.ts +36 -18
  157. package/src/concepts/App__.ts +129 -130
  158. package/src/concepts/BackendVariable__.ts +10 -2
  159. package/src/concepts/BindAttribute__.ts +14 -6
  160. package/src/concepts/BindDirective__.ts +19 -4
  161. package/src/concepts/BindEvent__.ts +41 -13
  162. package/src/concepts/BusinessComponent__.ts +2693 -0
  163. package/src/concepts/BusinessLogic__.ts +376 -0
  164. package/src/concepts/CallEvent__.ts +351 -0
  165. package/src/concepts/CallFunction__.ts +10 -13
  166. package/src/concepts/CallLogic__.ts +45 -32
  167. package/src/concepts/Constant__.ts +5 -7
  168. package/src/concepts/Destination__.ts +7 -5
  169. package/src/concepts/End__.ts +1 -0
  170. package/src/concepts/Event__.ts +70 -0
  171. package/src/concepts/FrontendType__.ts +919 -0
  172. package/src/concepts/Frontend__.ts +3 -251
  173. package/src/concepts/Identifier__.ts +29 -13
  174. package/src/concepts/LogicItem__.ts +1 -0
  175. package/src/concepts/Logic__.ts +36 -23
  176. package/src/concepts/MemberExpression__.ts +3 -3
  177. package/src/concepts/NewComposite__.ts +4 -6
  178. package/src/concepts/ParamWithGroup__.ts +101 -0
  179. package/src/concepts/Param__.ts +11 -3
  180. package/src/concepts/ProcessElement__.ts +8 -1
  181. package/src/concepts/Return__.ts +15 -12
  182. package/src/concepts/ValidationRule__.ts +6 -1
  183. package/src/concepts/Variable__.ts +17 -9
  184. package/src/concepts/ViewElement__.ts +168 -33
  185. package/src/concepts/View__.ts +23 -20
  186. package/src/concepts/index__.ts +5 -0
  187. package/src/concepts/utils/asserts.ts +367 -4
  188. package/src/concepts/utils/types.ts +28 -0
  189. package/src/generator/genBundleFiles.ts +33 -15
  190. package/src/generator/genReleaseBody.ts +14 -3
  191. package/src/generator/permission.ts +8 -6
  192. package/src/natural/transformTSCode.ts +1 -1
  193. package/src/server/extendBaseNode.ts +22 -20
  194. package/src/server/getLogics.ts +79 -41
  195. package/src/server/getMemberIdentifier.ts +7 -1
  196. package/src/server/getProcesses.ts +3 -3
  197. package/src/server/naslServer.ts +44 -20
  198. package/src/server/translator.ts +7 -1
  199. package/src/service/storage/init.ts +1 -2
  200. package/src/templator/genCreateBlock.ts +6 -6
  201. package/src/templator/genCurdEditMultipleKeyBlock.ts +16 -16
  202. package/src/templator/genCurdMultipleKeyBlock.ts +36 -36
  203. package/src/templator/genGetBlock.ts +6 -5
  204. package/src/templator/genGridViewBlock.ts +12 -12
  205. package/src/templator/genListViewBlock.ts +4 -4
  206. package/src/templator/genSelectBlock.ts +3 -3
  207. package/src/templator/genTableBlock.ts +10 -10
  208. package/src/templator/genUpdateBlock.ts +10 -9
  209. package/src/templator/utils.ts +2 -2
  210. package/src/translator/utils.ts +12 -1
  211. package/src/utils/i18nInfo.ts +7 -2
  212. package/src/utils/index.ts +211 -1
  213. package/test/concepts/call-function/fixtures/from-string.json +68 -59
  214. package/test/concepts/call-function/fixtures/to-string-global-tz.json +67 -58
  215. package/test/concepts/call-function/fixtures/to-string-no-tz.json +57 -48
  216. package/test/concepts/call-function/fixtures/to-string-user-tz.json +69 -60
  217. package/test/concepts/call-function/fixtures/to-string-utc-tz.json +69 -60
  218. package/test/concepts/call-interface/fixtures/only-interface.json +81 -72
  219. package/test/concepts/call-interface/fixtures/with-body-complex-argument.json +223 -214
  220. package/test/concepts/call-interface/fixtures/with-body-no-argument.json +85 -76
  221. package/test/concepts/call-interface/fixtures/with-body-simple-argument.json +100 -91
  222. package/test/concepts/call-interface/fixtures/with-headers-no-argument.json +88 -79
  223. package/test/concepts/call-interface/fixtures/with-headers.json +90 -81
  224. package/test/concepts/call-interface/fixtures/with-query-no-argument.json +88 -79
  225. package/test/concepts/call-interface/fixtures/with-query.json +90 -81
  226. package/test/concepts/call-logic/__snapshots__/getQuickInfoOffset.spec.ts.snap +4 -2
  227. package/test/concepts/call-logic/fixtures/entries-get-with-arguments.json +104 -95
  228. package/test/concepts/call-logic/fixtures/entries-update-with-arguments.json +209 -200
  229. package/test/concepts/call-logic/fixtures/global-logic-argument-no-expression.json +97 -88
  230. package/test/concepts/call-logic/fixtures/global-logic-argument-some-expression.json +124 -115
  231. package/test/concepts/call-logic/fixtures/json-deserialize.json +120 -111
  232. package/test/concepts/call-logic/fixtures/json-serialize-with-string.json +124 -115
  233. package/test/concepts/call-logic/fixtures/json-serialize.json +124 -115
  234. package/test/concepts/call-logic/fixtures/view-buildin-logic-with-argument.json +91 -82
  235. package/test/concepts/call-logic/fixtures/view-component-logic-no-argument.json +88 -79
  236. package/test/concepts/call-logic/fixtures/view-component-with-validation.json +144 -135
  237. package/test/concepts/identifier/fixtures/view-variable.json +145 -136
  238. package/test/concepts/view-element/__snapshots__/toVue.spec.ts.snap +1 -1
  239. package/test/concepts/view-element/fixtures/default-login.json +221 -212
  240. package/test/concepts/view-element/fixtures/default-not-found.json +183 -174
  241. package/test/concepts/view-element/fixtures/with-role-auth.json +91 -82
  242. package/test/concepts/view-element/fixtures/with-table.json +1894 -1885
  243. package/test/concepts/view-element/toVue.spec.ts +1 -0
  244. package/ts-worker/package.json +1 -1
  245. package/ts-worker/src/index.js +1 -0
@@ -0,0 +1,376 @@
1
+ import {
2
+ wrapForEachToGenerator as wrapForEach,
3
+ wrapIteratorToGenerator as wrapIterator,
4
+ returnOrigin,
5
+ } from '../utils/time-slicing';
6
+ import { waitOqlQueryComponentChildrenFinish } from '../common';
7
+ import {
8
+ shiftState,
9
+ indent,
10
+ createCompilerState,
11
+ withSourceMapGenerator,
12
+ TranslatorGenerator,
13
+ } from '../translator';
14
+ import { Variable } from './Variable__';
15
+ import { Return } from './Return__';
16
+ import { Assignment } from './Assignment__';
17
+ import { BatchAssignment } from './BatchAssignment__';
18
+ import { Param } from './Param__';
19
+ import { BusinessComponent } from './BusinessComponent__';
20
+ //================================================================================
21
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
22
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
23
+ //================================================================================
24
+ import { EventPayload, Params } from '../common/EventEmitter';
25
+ import { concept, excludedInJSON, property, getConceptConstructor, getBaseNode } from '../decorators';
26
+
27
+ import * as utils from '../utils';
28
+ import * as types from './utils/types';
29
+ import * as asserts from './utils/asserts';
30
+ import { v4 as uuidv4 } from 'uuid';
31
+ import Logic from './Logic__';
32
+
33
+ /**
34
+ * 业务组件逻辑
35
+ */
36
+ @concept('业务组件逻辑')
37
+ export class BusinessLogic extends Logic {
38
+ /** 类名 */
39
+ static readonly ConceptName: string = 'BusinessLogic';
40
+
41
+ /** 继承链 */
42
+ static readonly inheritanceChain: string[] = ['Logic', 'BaseNode'];
43
+
44
+ /**
45
+ * 产品概念
46
+ */
47
+ @property('concept')
48
+ // @ts-ignore
49
+ readonly concept!: 'BusinessLogic';
50
+
51
+ /**
52
+ * 是否开放外部调用
53
+ */
54
+ @property()
55
+ isPublic!: boolean;
56
+
57
+ /**
58
+ * @param source 需要合并的部分参数
59
+ */
60
+ constructor(source?: Partial<BusinessLogic>) {
61
+ source = Object.assign({}, BusinessLogic.getDefaultOptions(), source);
62
+ super(source);
63
+ super.subConstructor(source);
64
+ }
65
+
66
+ static from(source: any, parentNode?: any, parentKey?: string): BusinessLogic {
67
+ return super.from(source, parentNode, parentKey) as BusinessLogic;
68
+ }
69
+
70
+ /**
71
+ * 设置是否开放外部调用
72
+ */
73
+ setIsPublic(isPublic: boolean) {
74
+ const object = {
75
+ isPublic,
76
+ };
77
+ this.update({
78
+ ...object,
79
+ });
80
+ }
81
+
82
+ //================================================================================
83
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
84
+ // 自动生成的代码已结束。下面可以手动编写。
85
+ //================================================================================
86
+ static getDefaultOptions(): Partial<{
87
+ body: Array<any>;
88
+ params: Array<any>;
89
+ returns: Array<any>;
90
+ description: string;
91
+ }> {
92
+ return {
93
+ description: '内部实现逻辑',
94
+ };
95
+ }
96
+
97
+ get businessComponent() {
98
+ return this.getAncestor('BusinessComponent') as BusinessComponent;
99
+ }
100
+
101
+ @withSourceMapGenerator
102
+ *toEmbeddedTS(state = createCompilerState(), prefix?: string, hideDefaultValue?: boolean): TranslatorGenerator {
103
+ const self = this;
104
+ // 等待 oql 查询返回内容
105
+ yield waitOqlQueryComponentChildrenFinish(self);
106
+ // 如果传了不要前缀那就为空, 要不用传进来的,要是都没有就默认导出
107
+ let code = '';
108
+ // 用来储存默认值翻译结构是__IDENTIFIER__或者__IDENTIFIER__()的节点
109
+ const IDENTIFIERMAP = new Set<Variable | Return>();
110
+ if (this.businessComponent) {
111
+ if (!self.isPublic) {
112
+ code += 'private ';
113
+ }
114
+ code += self.name;
115
+ }
116
+ if (self.typeParams?.length) {
117
+ code += '<';
118
+ yield* wrapForEach(self.typeParams, function* warpForEachGenerator(typeParam, typeParamIndex) {
119
+ code += yield* typeParam.toEmbeddedTS(shiftState(state, code, { inline: true }));
120
+ if (typeParamIndex !== self.typeParams.length - 1) code += ', ';
121
+ });
122
+ code += '>';
123
+ }
124
+ // 有参数长度
125
+ if (self.params.length) {
126
+ code += '(';
127
+ yield* wrapForEach(self.params, function* warpForEachGenerator(param, index) {
128
+ code += yield* param.toEmbeddedTS(shiftState(state, code));
129
+ if (index !== self.params.length - 1) code += ', ';
130
+ });
131
+ code += ')';
132
+ } else {
133
+ // 没有参数的
134
+ code += '()';
135
+ }
136
+ // 需要类型推导的局部变量/返回值需要调整申明顺序
137
+ const advanceMap: Map<Return | Variable, Assignment | BatchAssignment> = new Map();
138
+ // const needGetSourceMapOqlList: Promise<any>[] = [];
139
+ yield* self.traverseChildrenGenerator(function* traverseChildrenGenerator(el) {
140
+ if (el && (asserts.isBatchAssignment(el) || (asserts.isAssignment(el) && el.left?.name))) {
141
+ if (asserts.isAssignment(el)) {
142
+ const advanceVar = self.variables?.find(
143
+ (variable) => !variable.typeAnnotation && el.left?.name === variable.name,
144
+ );
145
+ if (advanceVar && !advanceMap.get(advanceVar)) {
146
+ advanceMap.set(advanceVar, el);
147
+ }
148
+ const advanceRn = self.returns?.find((ret) => !ret.typeAnnotation && el.left?.name === ret.name);
149
+ if (advanceRn && !advanceMap.get(advanceRn)) {
150
+ advanceMap.set(advanceRn, el);
151
+ }
152
+ } else if (asserts.isBatchAssignment(el)) {
153
+ yield* wrapForEach(el.assignmentLines, function* warpForEachGenerator({ leftIndex }) {
154
+ const leftCode =
155
+ leftIndex.length === 1
156
+ ? yield* el.left.expression.toEmbeddedTS(shiftState(state, code, { inline: true }))
157
+ : yield* el.left.members[leftIndex[1]]?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
158
+ returnOrigin('');
159
+ const advanceVar = self.variables?.find(
160
+ (variable) => !variable.typeAnnotation && leftCode === variable.name,
161
+ );
162
+ if (advanceVar && !advanceMap.get(advanceVar)) {
163
+ advanceMap.set(advanceVar, el);
164
+ }
165
+ const advanceRn = self.returns?.find((ret) => !ret.typeAnnotation && leftCode === ret.name);
166
+ if (advanceRn && !advanceMap.get(advanceRn)) {
167
+ advanceMap.set(advanceRn, el);
168
+ }
169
+ });
170
+ }
171
+ }
172
+ });
173
+ // 兼容 return 没有类型情况
174
+ if (self.returns.length && self.returns[0].typeAnnotation) {
175
+ code += ': ';
176
+ code += yield* self.returns[0].typeAnnotation?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
177
+ returnOrigin('');
178
+ }
179
+ code += '{\n';
180
+ // 用于虚拟节点的查找引用
181
+ if (Array.isArray(self.virtualParams)) {
182
+ for (const param of self.virtualParams) {
183
+ code += indent((state?.tabSize || 0) + 1);
184
+ code += yield* param.toEmbeddedNameTS(shiftState(state, code, { inline: true }));
185
+ code += '\n';
186
+ }
187
+ }
188
+
189
+ for (const variable of self.variables) {
190
+ const ts = yield* variable.defaultValue?.toEmbeddedTS?.() ?? utils.returnOrigin('');
191
+ if (['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts)) {
192
+ IDENTIFIERMAP.add(variable);
193
+ }
194
+ if (!advanceMap.get(variable)) {
195
+ code += `${indent((state?.tabSize || 0) + 1)}let `;
196
+ code += yield* variable.toEmbeddedTS(shiftState(state, code, { inline: true }));
197
+ code += ';\n';
198
+ }
199
+ }
200
+
201
+ for (const ret of self.returns) {
202
+ const ts = yield* ret.defaultValue?.toEmbeddedTS?.() ?? returnOrigin('');
203
+ if (['__IDENTIFIER__', '__IDENTIFIER__()'].includes(ts)) {
204
+ IDENTIFIERMAP.add(ret);
205
+ }
206
+ if (!advanceMap.get(ret)) {
207
+ code += `${indent((state?.tabSize || 0) + 1)}let `;
208
+ code += yield* ret.toEmbeddedTS(shiftState(state, code, { inline: true }));
209
+ code += ';\n';
210
+ }
211
+ }
212
+
213
+ yield* wrapIterator(advanceMap.entries(), function* warpForEachGenerator([node, assignment]) {
214
+ // 有默认值的用默认值来推导类型, 但是如果是__IDENTIFIER__或者__IDENTIFIER__(),就不需要默认值来推导了
215
+ if (node.defaultValue?.expression && !IDENTIFIERMAP.has(node)) {
216
+ code += `${indent((state?.tabSize || 0) + 1)}let `;
217
+ code += yield* node.toEmbeddedTS(shiftState(state, code, { inline: true }));
218
+ return;
219
+ }
220
+ code += `${indent((state?.tabSize || 0) + 1)}// @ts-ignore\n`;
221
+ code += `${indent((state?.tabSize || 0) + 1)}let `;
222
+ code += yield* node.toEmbeddedTS(shiftState(state, code, { inline: true }));
223
+ if (asserts.isBatchAssignment(assignment)) {
224
+ yield* wrapForEach(assignment.assignmentLines, function* warpForEachGenerator({ leftIndex, rightIndex }) {
225
+ const leftCode =
226
+ leftIndex.length === 1
227
+ ? yield* assignment.left.expression.toEmbeddedTS(shiftState(state, code, { inline: true }))
228
+ : yield* assignment.left.members[leftIndex[1]]?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
229
+ returnOrigin('');
230
+ if (leftCode === node.name) {
231
+ const rightNode: any =
232
+ rightIndex.length === 1
233
+ ? assignment.rights[rightIndex[0]]?.expression
234
+ : assignment.rights[rightIndex[0]]?.members[rightIndex[1]];
235
+ // 当右边有明确类型时,直接使用其类型。旧版本数据查询不能直接使用其 typeAnnotation
236
+ if (rightNode?.typeAnnotation && !(asserts.isCallQueryComponent(rightNode) && !rightNode.isAutoInfer())) {
237
+ if (rightNode.concept === 'NewComposite' && rightNode.typeAnnotation?.typeKind === 'anonymousStructure') {
238
+ code += '= ';
239
+ code += (yield* rightNode.getInitCode(shiftState(state, code, { inline: true }))) || 'null';
240
+ } else if (rightNode.concept === 'NewComposite' && rightNode.typeAnnotation?.typeKind === 'generic') {
241
+ code += '= ';
242
+ code += (yield* rightNode.getNewCompositeCode(shiftState(state, code, { inline: true }))) || 'null';
243
+ } else {
244
+ code += ': ';
245
+ code += yield* rightNode.typeAnnotation?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
246
+ returnOrigin('null');
247
+ }
248
+ } else {
249
+ code += ' = ';
250
+ const rightCode = yield* rightNode?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
251
+ returnOrigin('');
252
+ code += yield* self.getRightCode(rightCode, assignment, rightNode);
253
+ }
254
+ }
255
+ });
256
+ } else if (
257
+ ['NewList', 'NewMap'].includes(assignment.right?.concept) &&
258
+ !(assignment.right as any)?.typeAnnotation
259
+ ) {
260
+ const rightNode: any = assignment.right;
261
+ code += ' = ';
262
+ code += yield* rightNode.getInitCode(shiftState(state, code, { inline: true }));
263
+ } else if (
264
+ assignment.right?.concept === 'NewComposite' &&
265
+ (assignment.right as any)?.typeAnnotation?.typeKind === 'anonymousStructure'
266
+ ) {
267
+ const rightNode: any = assignment.right;
268
+ code += ' = ';
269
+ code += yield* rightNode.getInitCode(shiftState(state, code, { inline: true }));
270
+ } else if (
271
+ assignment.right?.concept === 'NewComposite' &&
272
+ (assignment.right as any)?.typeAnnotation?.typeKind === 'generic'
273
+ ) {
274
+ const rightNode: any = assignment.right;
275
+ code += ' = ';
276
+ code += yield* rightNode.getNewCompositeCode(shiftState(state, code, { inline: true }));
277
+ } else {
278
+ const rightNode: any = assignment.right;
279
+ // 当右边有明确类型时,直接使用其类型。旧版本数据查询不能直接使用其 typeAnnotation
280
+ if (rightNode?.typeAnnotation && !(asserts.isCallQueryComponent(rightNode) && !rightNode.isAutoInfer())) {
281
+ code += ': ';
282
+ code += yield* rightNode.typeAnnotation?.toEmbeddedTS(shiftState(state, code, { inline: true })) ??
283
+ returnOrigin('null');
284
+ } else {
285
+ code += ' = ';
286
+ let rightCode = '';
287
+ // 因为右侧枚举要赋值就得new 一下;
288
+ if (
289
+ rightNode &&
290
+ asserts.isIdentifier(rightNode) &&
291
+ rightNode.namespace &&
292
+ rightNode.namespace.endsWith('enums')
293
+ ) {
294
+ rightCode += 'new ';
295
+ }
296
+ rightCode +=
297
+ rightNode && rightNode.toEmbeddedTS
298
+ ? yield* rightNode.toEmbeddedTS(shiftState(state, code, { inline: true }))
299
+ : '__RIGHT__';
300
+ code += yield* self.getRightCode(rightCode, assignment, rightNode);
301
+ }
302
+ }
303
+ code += ';\n';
304
+ });
305
+
306
+ // 参数的默认值是__IDENTIFIER__或者__IDENTIFIER__()时不赋默认值,但是需要ts翻译出来进行报错校验
307
+ if (!hideDefaultValue) {
308
+ for (const node of IDENTIFIERMAP.values()) {
309
+ code += yield* node.defaultValue.toEmbeddedTS(shiftState(state, code, { inline: true }));
310
+ code += '; ';
311
+ }
312
+ code += '\n';
313
+ }
314
+
315
+ if (!this.body.length && this.returns.length) {
316
+ code += `${indent((state?.tabSize || 0) + 1)}return ${this.returns[0].name};\n`;
317
+ } else {
318
+ // 如果长度小于2 并且不是虚拟节点就 加 报错,
319
+ if (self.body.length <= 2 && !asserts.isNamespace(self.parentNode)) {
320
+ if (self.body.length && self.body[0].concept === 'JavaLogic') {
321
+ code += '';
322
+ } else {
323
+ code += indent((state?.tabSize || 0) + 1);
324
+ code += 'const __LogicEmpty: any = null;';
325
+ }
326
+ }
327
+ yield* wrapForEach(self.body, function* warpForEachGenerator(item) {
328
+ code += yield* item.toEmbeddedTS?.(shiftState(state, code, { tabSize: (state?.tabSize || 0) + 1 })) ??
329
+ returnOrigin('');
330
+ code += ';\n';
331
+ });
332
+ }
333
+ // 在body渲染完成之后把其余的节点放到下面
334
+ yield* wrapForEach(self.playground, function* warpForEachGenerator(item) {
335
+ code += yield* item.toEmbeddedTS(shiftState(state, code, { tabSize: (state?.tabSize || 0) + 1 }));
336
+ code += ';\n';
337
+ });
338
+
339
+ if (!hideDefaultValue) {
340
+ function* setPlaygroundCode(arr: Variable[] | Param[] | Return[], name: string) {
341
+ if (arr.length) {
342
+ code += `${indent((state?.tabSize || 0) + 1)}/* -----以下是 ${name} 的默认值草稿------ */\n`;
343
+ }
344
+
345
+ for (const item1 of arr) {
346
+ for (const item of item1.defaultValue?.playground ?? []) {
347
+ code += yield* item.toEmbeddedTS(shiftState(state, code, { tabSize: (state?.tabSize || 0) + 1 }));
348
+ code += ';\n';
349
+ }
350
+ }
351
+ }
352
+
353
+ yield* setPlaygroundCode(self.variables, 'variables');
354
+ yield* setPlaygroundCode(self.returns, 'returns');
355
+ yield* setPlaygroundCode(self.params, 'params');
356
+ }
357
+
358
+ code += `${indent(state?.tabSize || 0)}}`;
359
+ if (prefix === 'inObject') {
360
+ code += `,`;
361
+ }
362
+ code += '\n';
363
+ return code;
364
+ }
365
+
366
+ //================================================================================
367
+ // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
368
+ // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
369
+ //================================================================================
370
+ }
371
+
372
+ export default BusinessLogic;
373
+ //================================================================================
374
+ // ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
375
+ // 自动生成的代码已结束。下面可以手动编写。
376
+ //================================================================================