@lcap/nasl 3.9.0-beta.7 → 3.9.0-beta.9

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 (133) hide show
  1. package/out/config.d.ts +1 -1
  2. package/out/config.d.ts.map +1 -1
  3. package/out/config.js +2 -1
  4. package/out/config.js.map +1 -1
  5. package/out/generator/annotation/utils.d.ts +2 -2
  6. package/out/generator/annotation/utils.js +1 -1
  7. package/out/generator/annotation/utils.js.map +1 -1
  8. package/out/generator/compileComponent.d.ts.map +1 -1
  9. package/out/generator/compileComponent.js +2 -0
  10. package/out/generator/compileComponent.js.map +1 -1
  11. package/out/generator/genBundleFiles.d.ts +4 -2
  12. package/out/generator/genBundleFiles.d.ts.map +1 -1
  13. package/out/generator/genBundleFiles.js +24 -23
  14. package/out/generator/genBundleFiles.js.map +1 -1
  15. package/out/generator/release-body/body.js +4 -4
  16. package/out/generator/release-body/body.js.map +1 -1
  17. package/out/generator/ui-library-declaration/basic.d.ts +7 -0
  18. package/out/generator/ui-library-declaration/basic.d.ts.map +1 -0
  19. package/out/generator/ui-library-declaration/basic.js +113 -0
  20. package/out/generator/ui-library-declaration/basic.js.map +1 -0
  21. package/out/generator/ui-library-declaration/custom.d.ts +11 -0
  22. package/out/generator/ui-library-declaration/custom.d.ts.map +1 -0
  23. package/out/generator/ui-library-declaration/custom.js +149 -0
  24. package/out/generator/ui-library-declaration/custom.js.map +1 -0
  25. package/out/generator/ui-library-declaration/dependency.d.ts +8 -0
  26. package/out/generator/ui-library-declaration/dependency.d.ts.map +1 -0
  27. package/out/generator/ui-library-declaration/dependency.js +163 -0
  28. package/out/generator/ui-library-declaration/dependency.js.map +1 -0
  29. package/out/generator/ui-library-declaration/format.d.ts +30 -0
  30. package/out/generator/ui-library-declaration/format.d.ts.map +1 -0
  31. package/out/generator/ui-library-declaration/format.js +332 -0
  32. package/out/generator/ui-library-declaration/format.js.map +1 -0
  33. package/out/generator/ui-library-declaration/manifest.d.ts +5 -0
  34. package/out/generator/ui-library-declaration/manifest.d.ts.map +1 -0
  35. package/out/generator/ui-library-declaration/manifest.js +27 -0
  36. package/out/generator/ui-library-declaration/manifest.js.map +1 -0
  37. package/out/generator/ui-library-declaration/material.d.ts +4 -1
  38. package/out/generator/ui-library-declaration/material.d.ts.map +1 -1
  39. package/out/generator/ui-library-declaration/material.js +70 -5
  40. package/out/generator/ui-library-declaration/material.js.map +1 -1
  41. package/out/generator/ui-library-declaration/types.d.ts +35 -1
  42. package/out/generator/ui-library-declaration/types.d.ts.map +1 -1
  43. package/out/generator/ui-library-declaration/utils.d.ts +3 -0
  44. package/out/generator/ui-library-declaration/utils.d.ts.map +1 -0
  45. package/out/generator/ui-library-declaration/utils.js +20 -0
  46. package/out/generator/ui-library-declaration/utils.js.map +1 -0
  47. package/out/natural/genNaturalTS.d.ts +45 -10
  48. package/out/natural/genNaturalTS.d.ts.map +1 -1
  49. package/out/natural/genNaturalTS.js +57 -33
  50. package/out/natural/genNaturalTS.js.map +1 -1
  51. package/out/natural/getContext/getUILib.d.ts.map +1 -1
  52. package/out/natural/getContext/getUILib.js +6 -3
  53. package/out/natural/getContext/getUILib.js.map +1 -1
  54. package/out/natural/getContext/index.d.ts +20 -7
  55. package/out/natural/getContext/index.d.ts.map +1 -1
  56. package/out/natural/getContext/index.js +142 -22
  57. package/out/natural/getContext/index.js.map +1 -1
  58. package/out/natural/getContext/naslStdlibMap.js +8 -8
  59. package/out/natural/getContext/naslStdlibMap.js.map +1 -1
  60. package/out/natural/tools.d.ts +16 -0
  61. package/out/natural/tools.d.ts.map +1 -1
  62. package/out/natural/tools.js +114 -2
  63. package/out/natural/tools.js.map +1 -1
  64. package/out/natural/transformTS2UI.d.ts.map +1 -1
  65. package/out/natural/transformTS2UI.js +345 -294
  66. package/out/natural/transformTS2UI.js.map +1 -1
  67. package/out/natural/transformTSCode.d.ts +3 -5
  68. package/out/natural/transformTSCode.d.ts.map +1 -1
  69. package/out/natural/transformTSCode.js +30 -1080
  70. package/out/natural/transformTSCode.js.map +1 -1
  71. package/out/natural/transforms/registerTransform.d.ts +8 -0
  72. package/out/natural/transforms/registerTransform.d.ts.map +1 -0
  73. package/out/natural/transforms/registerTransform.js +24 -0
  74. package/out/natural/transforms/registerTransform.js.map +1 -0
  75. package/out/natural/transforms/transform2LogicItem.d.ts +25 -0
  76. package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -0
  77. package/out/natural/transforms/transform2LogicItem.js +1262 -0
  78. package/out/natural/transforms/transform2LogicItem.js.map +1 -0
  79. package/out/natural/transforms/transform2TypeAnnotation.d.ts +3 -0
  80. package/out/natural/transforms/transform2TypeAnnotation.d.ts.map +1 -0
  81. package/out/natural/transforms/transform2TypeAnnotation.js +86 -0
  82. package/out/natural/transforms/transform2TypeAnnotation.js.map +1 -0
  83. package/out/natural/transforms/utils.d.ts +9 -0
  84. package/out/natural/transforms/utils.d.ts.map +1 -0
  85. package/out/natural/transforms/utils.js +59 -0
  86. package/out/natural/transforms/utils.js.map +1 -0
  87. package/out/server/translator.d.ts.map +1 -1
  88. package/out/server/translator.js.map +1 -1
  89. package/out/templator/block2nasl/jsx2nasl/index.d.ts +6 -0
  90. package/out/templator/block2nasl/jsx2nasl/index.d.ts.map +1 -0
  91. package/out/templator/block2nasl/jsx2nasl/index.js +15 -0
  92. package/out/templator/block2nasl/jsx2nasl/index.js.map +1 -0
  93. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts +4 -0
  94. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts.map +1 -0
  95. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js +213 -0
  96. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js.map +1 -0
  97. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts +15 -0
  98. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts.map +1 -0
  99. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js +201 -0
  100. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js.map +1 -0
  101. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts +5 -0
  102. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts.map +1 -0
  103. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js +186 -0
  104. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js.map +1 -0
  105. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts +29 -0
  106. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts.map +1 -0
  107. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js +336 -0
  108. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js.map +1 -0
  109. package/out/templator/block2nasl/jsx2nasl/utils.d.ts +3 -0
  110. package/out/templator/block2nasl/jsx2nasl/utils.d.ts.map +1 -0
  111. package/out/templator/block2nasl/jsx2nasl/utils.js +26 -0
  112. package/out/templator/block2nasl/jsx2nasl/utils.js.map +1 -0
  113. package/out/templator/block2nasl/transformBlock2Nasl.d.ts +11 -0
  114. package/out/templator/block2nasl/transformBlock2Nasl.d.ts.map +1 -0
  115. package/out/templator/block2nasl/transformBlock2Nasl.js +122 -0
  116. package/out/templator/block2nasl/transformBlock2Nasl.js.map +1 -0
  117. package/out/templator/block2nasl/viewMergeBlock.d.ts +10 -0
  118. package/out/templator/block2nasl/viewMergeBlock.d.ts.map +1 -0
  119. package/out/templator/block2nasl/viewMergeBlock.js +110 -0
  120. package/out/templator/block2nasl/viewMergeBlock.js.map +1 -0
  121. package/package.json +16 -13
  122. package/sandbox-natural/stdlib/nasl.core.d.ts +54 -0
  123. package/sandbox-natural/stdlib/nasl.oql.d.ts +22 -0
  124. package/sandbox-natural/stdlib/nasl.ui.d.ts +78 -0
  125. package/sandbox-natural/stdlib/nasl.ui.h5.d.ts +1684 -1643
  126. package/sandbox-natural/stdlib/nasl.ui.h5.json +15746 -15045
  127. package/sandbox-natural/stdlib/nasl.ui.pc.d.ts +5341 -5154
  128. package/sandbox-natural/stdlib/nasl.ui.pc.json +31176 -30681
  129. package/sandbox-natural/stdlib/{nasl.util.ts → nasl.util.d.ts} +49 -43
  130. package/sandbox-natural/stdlib/nasl.core.ts +0 -36
  131. package/sandbox-natural/stdlib/nasl.oql.ts +0 -14
  132. package/sandbox-natural/stdlib/nasl.ui.pre.d.ts +0 -90
  133. package/sandbox-natural/stdlib/nasl.ui.ts +0 -63
@@ -0,0 +1,1262 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transform2LogicItem = exports.transform2Param = exports.TransformManager = void 0;
4
+ const utils_1 = require("./utils");
5
+ const transform2TypeAnnotation_1 = require("./transform2TypeAnnotation");
6
+ const utils_2 = require("../../utils");
7
+ class TransformManager {
8
+ constructor() {
9
+ this.transforms = [];
10
+ this.transformCallExpressions = [];
11
+ }
12
+ register(type, transform) {
13
+ this.transforms.push([type, transform]);
14
+ }
15
+ registerCallExpression(type, transform) {
16
+ this.transformCallExpressions.push([type, transform]);
17
+ }
18
+ apply(node, options) {
19
+ if (node.type === 'CallExpression' && node.callee.type !== 'CallExpression') {
20
+ const callee = flatMemberExpression(node.callee);
21
+ const calleeName = (0, utils_1.generate)(node.callee).code;
22
+ for (const [type, transform] of this.transformCallExpressions) {
23
+ if (typeof type === 'function' ? type(node, calleeName, callee) : type === calleeName) {
24
+ return transform(node, calleeName, callee, options);
25
+ }
26
+ }
27
+ (0, utils_1.throwError)(`Unhandled node ${callee.map((item) => item.name).join('.')} ${node.type}`);
28
+ }
29
+ else {
30
+ for (const [type, transform] of this.transforms) {
31
+ if (typeof type === 'function' ? type(node) : type === node.type) {
32
+ return transform(node, options);
33
+ }
34
+ }
35
+ (0, utils_1.throwError)(`Unhandled node ${node.type}`);
36
+ }
37
+ }
38
+ }
39
+ exports.TransformManager = TransformManager;
40
+ function fixExpression(arg, options) {
41
+ let expression = transform2LogicItem(arg, options);
42
+ if (expression?.concept === 'Identifier' && expression?.name === 'undefined') {
43
+ expression = undefined;
44
+ }
45
+ return expression;
46
+ }
47
+ /**
48
+ * 铺平点选表达式
49
+ */
50
+ function flatMemberExpression(node) {
51
+ if (node.type === 'MemberExpression')
52
+ return [...flatMemberExpression(node.object), node.property];
53
+ return [node];
54
+ }
55
+ /**
56
+ * 铺平链式调用表达式
57
+ */
58
+ function flatChainCallExpression(node) {
59
+ if (node.callee.type === 'MemberExpression') {
60
+ if (node.callee.object.type === 'CallExpression' && node.callee.property.type === 'Identifier')
61
+ return [...flatChainCallExpression(node.callee.object), utils_1.babelTypes.callExpression(node.callee.property, node.arguments)];
62
+ else if (node.callee.object.type === 'Identifier' && node.callee.property.type === 'Identifier')
63
+ return [utils_1.babelTypes.callExpression(node.callee.property, node.arguments)];
64
+ }
65
+ return [node];
66
+ }
67
+ function flatMembers(node) {
68
+ if (node.concept === 'MemberExpression')
69
+ return [...flatMembers((node?.object)), node];
70
+ return [];
71
+ }
72
+ function flatMatchPatternsExpression(node) {
73
+ if (node.concept === 'BinaryExpression') {
74
+ if (node.operator === '||') {
75
+ return [...flatMatchPatternsExpression(node.left), ...flatMatchPatternsExpression(node.right)];
76
+ }
77
+ if (node.operator === '==') {
78
+ return [node.right];
79
+ }
80
+ return [node];
81
+ }
82
+ return [node];
83
+ }
84
+ function flatIfStatement(node) {
85
+ if (node.alternate.type === 'IfStatement') {
86
+ return [...flatIfStatement(node.alternate), node];
87
+ }
88
+ return [node];
89
+ }
90
+ /**
91
+ * 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
92
+ * @param node
93
+ * @returns
94
+ */
95
+ function fixLogicNode(node) {
96
+ if (node?.type === 'CallExpression') {
97
+ const calleeName = (0, utils_1.generate)(node.callee).code;
98
+ if (calleeName === 'nasl.util.ForEach') {
99
+ const callee = flatMemberExpression(node.callee);
100
+ node.callee = callee[2];
101
+ }
102
+ }
103
+ }
104
+ function transform2Param(node) {
105
+ const typeAnnotation = node.typeAnnotation?.typeAnnotation;
106
+ const exclude = ['event'];
107
+ if (exclude.includes(node.name))
108
+ return null;
109
+ return new utils_1.naslTypes.Param({
110
+ name: node.name,
111
+ typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
112
+ });
113
+ }
114
+ exports.transform2Param = transform2Param;
115
+ function transformCallExpressionToBinaryExpression(node, calleeName, callee, options) {
116
+ const argument = node?.arguments;
117
+ const map = {
118
+ plus: '+',
119
+ minus: '-',
120
+ multiply: '*',
121
+ divide: '/',
122
+ remainder: '%',
123
+ STARTWITH: 'startwith',
124
+ ENDWITH: 'endwith',
125
+ LIKE: 'like',
126
+ IN: 'in',
127
+ };
128
+ return new utils_1.naslTypes.BinaryExpression({
129
+ operator: map[calleeName],
130
+ left: transform2LogicItem(argument?.[0], options),
131
+ right: transform2LogicItem(argument?.[1], options),
132
+ });
133
+ }
134
+ function transform2BinaryExpression(node, options) {
135
+ if (node.operator === '===')
136
+ node.operator = '==';
137
+ if (node.operator === '!==')
138
+ node.operator = '!=';
139
+ if (['+', '-', '*', '/', '%', '==', '!=', '>', '<', '>=', '<=', '&&', '||', 'startwith', 'endwith', 'like', 'in'].includes(node.operator)) {
140
+ return new utils_1.naslTypes.BinaryExpression({
141
+ operator: node.operator,
142
+ left: transform2LogicItem(node.left, options),
143
+ right: transform2LogicItem(node.right, options),
144
+ });
145
+ }
146
+ (0, utils_1.throwError)(`Unhandled node ${node.type}`);
147
+ }
148
+ function transform2NewExpression(calleeName, node, options) {
149
+ if (calleeName === 'NewList') {
150
+ return new utils_1.naslTypes.NewList({
151
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createGeneric('List', {
152
+ typeArguments: node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation),
153
+ }),
154
+ items: (node?.arguments?.[0]).elements?.map((arg) => transform2LogicItem(arg, options)),
155
+ });
156
+ }
157
+ if (calleeName === 'NewMap') {
158
+ const keys = [];
159
+ const values = [];
160
+ node?.arguments?.[0]?.properties.forEach((arg) => {
161
+ keys.push(transform2LogicItem(arg.key, options));
162
+ values.push(transform2LogicItem(arg.value, options));
163
+ });
164
+ return new utils_1.naslTypes.NewMap({
165
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createGeneric('Map', {
166
+ typeArguments: node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation),
167
+ }),
168
+ keys,
169
+ values,
170
+ });
171
+ }
172
+ if (calleeName === 'NewEntity') {
173
+ const properties = [];
174
+ const rights = [];
175
+ const assignmentLines = [];
176
+ node?.arguments?.[0]?.properties.forEach((arg, index) => {
177
+ properties.push(transform2LogicItem(arg.key, options));
178
+ if (arg.value.type === 'MemberExpression') {
179
+ const expression = flatMemberExpression(arg.value);
180
+ const members = flatMembers(transform2LogicItem(arg.value, options));
181
+ rights.push(new utils_1.naslTypes.SelectMembers({
182
+ expression: transform2LogicItem(expression[0], options),
183
+ members,
184
+ }));
185
+ if (arg?.value) {
186
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
187
+ leftIndex: [0, index],
188
+ rightIndex: [index, members.length - 1],
189
+ }));
190
+ }
191
+ }
192
+ else {
193
+ rights.push(new utils_1.naslTypes.SelectMembers({
194
+ expression: transform2LogicItem(arg.value, options)
195
+ }));
196
+ if (arg?.value) {
197
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
198
+ leftIndex: [0, index],
199
+ rightIndex: [index],
200
+ }));
201
+ }
202
+ }
203
+ });
204
+ const parameters = node?.typeParameters?.params?.[0];
205
+ if (parameters && parameters?.type === 'TSTypeReference' && parameters?.typeName?.type === 'TSQualifiedName') {
206
+ const { left, right } = parameters?.typeName || {};
207
+ const typeNamespace = (0, utils_1.generate)(left)?.code;
208
+ const typeName = right?.name;
209
+ return new utils_1.naslTypes.NewComposite({
210
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createReference(typeName, {
211
+ typeNamespace,
212
+ typeName
213
+ }),
214
+ properties,
215
+ rights,
216
+ assignmentLines
217
+ });
218
+ }
219
+ const typeName = parameters?.typeName?.name;
220
+ return new utils_1.naslTypes.NewComposite({
221
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createReference(typeName, {
222
+ typeNamespace: 'app.dataSources.defaultDS.entities',
223
+ typeName
224
+ }),
225
+ properties,
226
+ rights,
227
+ assignmentLines
228
+ });
229
+ }
230
+ if (calleeName === 'NewStructure') {
231
+ const properties = [];
232
+ const rights = [];
233
+ const assignmentLines = [];
234
+ node?.arguments?.[0]?.properties.forEach((arg, index) => {
235
+ properties.push(transform2LogicItem(arg.key, options));
236
+ if (arg.value.type === 'MemberExpression') {
237
+ const expression = flatMemberExpression(arg.value);
238
+ const members = flatMembers(transform2LogicItem(arg.value, options));
239
+ rights.push(new utils_1.naslTypes.SelectMembers({
240
+ expression: transform2LogicItem(expression[0], options),
241
+ members,
242
+ }));
243
+ if (arg?.value) {
244
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
245
+ leftIndex: [0, index],
246
+ rightIndex: [index, members.length - 1],
247
+ }));
248
+ }
249
+ }
250
+ else {
251
+ rights.push(new utils_1.naslTypes.SelectMembers({
252
+ expression: transform2LogicItem(arg.value, options)
253
+ }));
254
+ if (arg?.value) {
255
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
256
+ leftIndex: [0, index],
257
+ rightIndex: [index],
258
+ }));
259
+ }
260
+ }
261
+ });
262
+ const parameters = node?.typeParameters?.params?.[0];
263
+ if (parameters && parameters?.type === 'TSTypeReference' && parameters?.typeName?.type === 'TSQualifiedName') {
264
+ const { left, right } = parameters?.typeName || {};
265
+ const typeNamespace = (0, utils_1.generate)(left)?.code;
266
+ const typeName = right?.name;
267
+ return new utils_1.naslTypes.NewComposite({
268
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createReference(typeName, {
269
+ typeNamespace,
270
+ typeName
271
+ }),
272
+ properties,
273
+ rights,
274
+ assignmentLines
275
+ });
276
+ }
277
+ const typeName = parameters?.typeName?.name;
278
+ return new utils_1.naslTypes.NewComposite({
279
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createReference(typeName, {
280
+ typeNamespace: 'app.structures',
281
+ typeName
282
+ }),
283
+ properties,
284
+ rights,
285
+ assignmentLines
286
+ });
287
+ }
288
+ if (calleeName === 'NewAnonymousStructure') {
289
+ const properties = [];
290
+ const rights = [];
291
+ const structureProperties = [];
292
+ const assignmentLines = [];
293
+ node?.arguments?.[0]?.properties?.forEach((arg, index) => {
294
+ properties.push(transform2LogicItem(arg.key, options));
295
+ if (arg.value.type === 'MemberExpression') {
296
+ const expression = flatMemberExpression(arg.value);
297
+ const members = flatMembers(transform2LogicItem(arg.value, options));
298
+ rights.push(new utils_1.naslTypes.SelectMembers({
299
+ expression: transform2LogicItem(expression[0], options),
300
+ members,
301
+ }));
302
+ if (arg?.value) {
303
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
304
+ leftIndex: [0, index],
305
+ rightIndex: [index, members.length - 1],
306
+ }));
307
+ }
308
+ }
309
+ else {
310
+ rights.push(new utils_1.naslTypes.SelectMembers({
311
+ expression: transform2LogicItem(arg.value, options)
312
+ }));
313
+ if (arg?.value) {
314
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
315
+ leftIndex: [0, index],
316
+ rightIndex: [index],
317
+ }));
318
+ }
319
+ }
320
+ structureProperties.push(new utils_1.naslTypes.StructureProperty({
321
+ name: arg?.key?.name,
322
+ typeAnnotation: null
323
+ }));
324
+ });
325
+ return new utils_1.naslTypes.NewComposite({
326
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
327
+ properties,
328
+ rights,
329
+ assignmentLines
330
+ });
331
+ }
332
+ (0, utils_1.throwError)(`Unhandled ArrowFunctionExpression node ${node.type}`);
333
+ }
334
+ function pushElseIf(ifNode, switchStatement, options) {
335
+ switchStatement.cases.push(new utils_1.naslTypes.SwitchCase({
336
+ test: transform2LogicItem(ifNode.test, options),
337
+ consequent: !ifNode.consequent ? [] : ifNode.consequent.body.map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
338
+ }));
339
+ if (ifNode.alternate && ifNode.alternate.type === 'IfStatement') {
340
+ pushElseIf(ifNode.alternate, switchStatement, options);
341
+ }
342
+ else {
343
+ switchStatement.cases.push(new utils_1.naslTypes.SwitchCase({
344
+ test: undefined,
345
+ consequent: !ifNode?.alternate ? [] : ifNode?.alternate?.body.map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
346
+ }));
347
+ }
348
+ }
349
+ function transform2VariableAndAddAssignment(node, options) {
350
+ const declList = node?.declarations || [];
351
+ let newNode;
352
+ declList?.forEach((decl) => {
353
+ const variableName = decl.id.name;
354
+ if (![...options.logic.variables, ...options.logic.returns].some((variable) => variable.name === variableName)) {
355
+ const varTypeAnnotation = decl.id.typeAnnotation?.typeAnnotation;
356
+ options.logic.variables.push(new utils_1.naslTypes.Variable({
357
+ name: variableName,
358
+ typeAnnotation: varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation),
359
+ }));
360
+ }
361
+ if (decl.init) {
362
+ if (decl.init.type !== 'ArrayExpression' && decl.init.type !== 'ObjectExpression') {
363
+ const calleeName = (0, utils_1.generate)(decl?.init?.callee).code;
364
+ const varTypeAnnotation = decl?.id?.typeAnnotation?.typeAnnotation;
365
+ if (calleeName === 'nasl.oql.query' && varTypeAnnotation) {
366
+ decl.init.typeAnnotations = varTypeAnnotation;
367
+ }
368
+ newNode = new utils_1.naslTypes.Assignment({
369
+ left: new utils_1.naslTypes.Identifier({
370
+ name: variableName,
371
+ }),
372
+ right: transform2LogicItem(decl.init, options),
373
+ });
374
+ }
375
+ }
376
+ });
377
+ if (newNode)
378
+ return newNode;
379
+ }
380
+ function transform2IfStatement(node, options) {
381
+ if (node.alternate && node.alternate.type === 'IfStatement') {
382
+ const switchStatement = new utils_1.naslTypes.SwitchStatement({
383
+ cases: [],
384
+ });
385
+ pushElseIf(node, switchStatement, options);
386
+ return switchStatement;
387
+ }
388
+ let consequentIndex;
389
+ let alternateIndex;
390
+ const naslNode = new utils_1.naslTypes.IfStatement({
391
+ test: transform2LogicItem(node.test, options),
392
+ consequent: !node.consequent ? [] : node.consequent.body.map((item, index) => {
393
+ if (item?.type === 'ReturnStatement') {
394
+ item.ends = true;
395
+ if (item?.argument) {
396
+ consequentIndex = index;
397
+ }
398
+ }
399
+ return transform2LogicItem(item, options);
400
+ }).filter((item) => !!item),
401
+ alternate: !node.alternate ? [] : node.alternate.body.map((item, index) => {
402
+ if (item?.type === 'ReturnStatement') {
403
+ item.ends = true;
404
+ if (item?.argument) {
405
+ alternateIndex = index;
406
+ }
407
+ }
408
+ return transform2LogicItem(item, options);
409
+ }).filter((item) => !!item),
410
+ });
411
+ if (consequentIndex !== undefined) {
412
+ naslNode?.consequent?.splice(consequentIndex + 1, 0, new utils_1.naslTypes.End());
413
+ }
414
+ if (alternateIndex !== undefined) {
415
+ naslNode?.alternate?.splice(alternateIndex + 1, 0, new utils_1.naslTypes.End());
416
+ }
417
+ return naslNode;
418
+ }
419
+ function transform2WhileStatement(node, options) {
420
+ return new utils_1.naslTypes.WhileStatement({
421
+ test: transform2LogicItem(node.test, options),
422
+ body: node.body.body.map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
423
+ });
424
+ }
425
+ function transformSwitchStatement2Match(node, options) {
426
+ const match = new utils_1.naslTypes.Match({
427
+ expression: transform2LogicItem(node.discriminant, options),
428
+ isExpression: false,
429
+ cases: node.cases.map((_case) => new utils_1.naslTypes.MatchCase({
430
+ patterns: !_case.test ? [] : [transform2LogicItem(_case.test, options)],
431
+ body: _case.consequent.filter((item) => item.type !== 'BreakStatement').map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
432
+ })),
433
+ });
434
+ if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
435
+ match.cases.push(new utils_1.naslTypes.MatchCase({
436
+ patterns: [],
437
+ body: [],
438
+ }));
439
+ }
440
+ match.cases.forEach((case_) => {
441
+ if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
442
+ case_.isMatchedTypeEnumable = true;
443
+ }
444
+ if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
445
+ case_.isMatchedTypeEnumable = true;
446
+ case_.patterns[0].object.namespace = 'app.enums';
447
+ }
448
+ });
449
+ return match;
450
+ }
451
+ function transformIdentifier(node, options) {
452
+ if (options.entityAsNames?.includes(node.name)) {
453
+ return new utils_1.naslTypes.QueryFieldExpression({
454
+ isDotStar: false,
455
+ asName: undefined,
456
+ entityAsName: node.name,
457
+ propertyName: '',
458
+ });
459
+ }
460
+ return new utils_1.naslTypes.Identifier({
461
+ name: node.name,
462
+ });
463
+ }
464
+ function transform2SelectQueryFieldExpression(node, options) {
465
+ // babelTypes.Identifier | babelTypes.MemberExpression
466
+ let expression;
467
+ let asNameNode;
468
+ // if (node.type === 'ObjectProperty') {
469
+ expression = node.value;
470
+ asNameNode = node.key;
471
+ // }
472
+ if (expression.type === 'Identifier') {
473
+ return new utils_1.naslTypes.QueryFieldExpression({
474
+ isDotStar: true,
475
+ asName: (0, utils_2.firstUpperCase)(asNameNode.name) === expression.name ? undefined : asNameNode.name,
476
+ entityAsName: expression.name,
477
+ propertyName: '',
478
+ });
479
+ }
480
+ else {
481
+ return new utils_1.naslTypes.QueryFieldExpression({
482
+ isDotStar: true,
483
+ asName: (0, utils_2.firstUpperCase)(asNameNode.name) === expression.property.name ? undefined : asNameNode.name,
484
+ entityAsName: expression.object.name,
485
+ propertyName: expression.property.name,
486
+ });
487
+ }
488
+ }
489
+ function transform2QueryAggregateExpression(node, options) {
490
+ const callExpression = node.value;
491
+ let asNameNode = node.key;
492
+ const arg = callExpression.arguments[0];
493
+ return new utils_1.naslTypes.QueryAggregateExpression({
494
+ asName: asNameNode.name,
495
+ aggregateName: callExpression.callee.name,
496
+ aggregateParam: (arg.type === 'MemberExpression' ? transformMemberExpression(arg, options) : transformIdentifier(arg, options)),
497
+ });
498
+ }
499
+ function transform2AnonymousFunction(node, options) {
500
+ return new utils_1.naslTypes.AnonymousFunction({
501
+ params: node.params.map((param) => transform2Param(param)),
502
+ body: transform2LogicItem(node.body, options),
503
+ });
504
+ }
505
+ function transform2Assignment(node, options) {
506
+ if (node.operator === '+=' || node.operator === '-=') {
507
+ return new utils_1.naslTypes.Assignment({
508
+ left: transform2LogicItem(node.left, options),
509
+ right: new utils_1.naslTypes.BinaryExpression({
510
+ operator: node.operator[0],
511
+ left: transform2LogicItem(node.left, options),
512
+ right: transform2LogicItem(node.right, options),
513
+ }),
514
+ });
515
+ }
516
+ return new utils_1.naslTypes.Assignment({
517
+ left: transform2LogicItem(node.left, options),
518
+ right: transform2LogicItem(node.right, options),
519
+ });
520
+ }
521
+ function transformUpdateExpression2Assignment(node, options) {
522
+ if (node.operator === '++' || node.operator === '--') {
523
+ return new utils_1.naslTypes.Assignment({
524
+ left: transform2LogicItem(node.argument, options),
525
+ right: new utils_1.naslTypes.BinaryExpression({
526
+ operator: node.operator[0],
527
+ left: transform2LogicItem(node.argument, options),
528
+ right: new utils_1.naslTypes.NumericLiteral({
529
+ value: '1',
530
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Integer'),
531
+ }),
532
+ }),
533
+ });
534
+ }
535
+ }
536
+ function transform2BooleanLiteral(node, options) {
537
+ return new utils_1.naslTypes.BooleanLiteral({
538
+ value: String(node.value),
539
+ });
540
+ }
541
+ function transform2StringLiteral(node, options) {
542
+ return new utils_1.naslTypes.StringLiteral({
543
+ value: node.value,
544
+ });
545
+ }
546
+ function transform2NumericLiteral(node, options) {
547
+ const literal = new utils_1.naslTypes.NumericLiteral({
548
+ value: String(node.value),
549
+ typeAnnotation: options.typeAnnotation || utils_1.naslTypes.TypeAnnotation.createPrimitive('Integer'),
550
+ });
551
+ literal.typeAnnotation.typeName = literal.changeType(String(node.value));
552
+ return literal;
553
+ }
554
+ function transform2NullLiteral(node, options) {
555
+ return new utils_1.naslTypes.NullLiteral();
556
+ }
557
+ function transformReturnStatement2AssignmentOrEnd(node, options) {
558
+ if (!node.argument) {
559
+ return new utils_1.naslTypes.End();
560
+ }
561
+ const { logic } = options;
562
+ if (node.argument?.type === 'Identifier') {
563
+ if (!logic.returns.length) {
564
+ const curVariable = logic?.variables?.find((item) => item.name === node?.argument?.name);
565
+ if (curVariable) {
566
+ logic.variables = logic?.variables?.filter((item) => item.name !== node?.argument?.name);
567
+ logic.addReturn(curVariable);
568
+ }
569
+ }
570
+ }
571
+ else {
572
+ if (!logic.returns.length) {
573
+ logic.returns.push(new utils_1.naslTypes.Return({
574
+ name: 'result',
575
+ }));
576
+ }
577
+ return new utils_1.naslTypes.Assignment({
578
+ left: new utils_1.naslTypes.Identifier({
579
+ name: logic.returns[0].name,
580
+ }),
581
+ right: transform2LogicItem(node.argument, options),
582
+ });
583
+ }
584
+ }
585
+ function transform2StringInterpolation(node, options) {
586
+ const expressions = [...node.expressions, ...node.quasis.map((element) => ({
587
+ type: 'StringLiteral',
588
+ value: element.value.raw,
589
+ start: element.start,
590
+ end: element.end,
591
+ }))];
592
+ expressions.sort((a, b) => a.start - b.start);
593
+ return new utils_1.naslTypes.StringInterpolation({
594
+ expressions: expressions.map((item) => transform2LogicItem(item, options)),
595
+ });
596
+ }
597
+ function transform2Comment(node, options) {
598
+ return node.leadingComments && new utils_1.naslTypes.Comment({
599
+ value: String(node.leadingComments[0].value),
600
+ });
601
+ }
602
+ function transformBlockStatement(node, options) {
603
+ return transform2LogicItem(node?.body?.[0], options);
604
+ }
605
+ function transform2NewComposite(node, options) {
606
+ const properties = [];
607
+ const rights = [];
608
+ const structureProperties = [];
609
+ const assignmentLines = [];
610
+ node?.properties?.forEach((arg, index) => {
611
+ properties.push(transform2LogicItem(arg.key, options));
612
+ if (arg.value.type === 'MemberExpression') {
613
+ const expression = flatMemberExpression(arg.value);
614
+ const members = flatMembers(transform2LogicItem(arg.value, options));
615
+ rights.push(new utils_1.naslTypes.SelectMembers({
616
+ expression: transform2LogicItem(expression[0], options),
617
+ members,
618
+ }));
619
+ if (arg?.value) {
620
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
621
+ leftIndex: [0, index],
622
+ rightIndex: [index, members.length - 1],
623
+ }));
624
+ }
625
+ }
626
+ else {
627
+ rights.push(new utils_1.naslTypes.SelectMembers({
628
+ expression: transform2LogicItem(arg?.value, options)
629
+ }));
630
+ if (arg?.value) {
631
+ assignmentLines.push(new utils_1.naslTypes.AssignmentLine({
632
+ leftIndex: [0, index],
633
+ rightIndex: [index],
634
+ }));
635
+ }
636
+ }
637
+ structureProperties.push(new utils_1.naslTypes.StructureProperty({
638
+ name: arg?.key?.name,
639
+ typeAnnotation: null
640
+ }));
641
+ });
642
+ return new utils_1.naslTypes.NewComposite({
643
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
644
+ properties,
645
+ rights,
646
+ assignmentLines
647
+ });
648
+ }
649
+ function transformNewExpression(node, options) {
650
+ const calleeName = (0, utils_1.generate)(node.callee).code;
651
+ if (['Boolean', 'Integer', 'Double', 'Decimal', 'Long'].includes(calleeName)) {
652
+ return transform2LogicItem(node.arguments[0], {
653
+ ...options,
654
+ typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive(calleeName),
655
+ });
656
+ }
657
+ (0, utils_1.throwError)(`Unhandled node ${node.type}`);
658
+ }
659
+ function transformMemberExpression(node, options) {
660
+ if (options.entityAsNames?.includes(node.object.name)) {
661
+ return new utils_1.naslTypes.QueryFieldExpression({
662
+ isDotStar: false,
663
+ asName: undefined,
664
+ entityAsName: node.object.name,
665
+ propertyName: node.property.name,
666
+ });
667
+ }
668
+ const callee = flatMemberExpression(node);
669
+ const calleeName = (0, utils_1.generate)(node)?.code;
670
+ if (calleeName?.includes('app.enums')) {
671
+ const name = callee?.[3]?.value || callee?.[3]?.name || callee?.[3]?.value;
672
+ return new utils_1.naslTypes.MemberExpression({
673
+ object: new utils_1.naslTypes.Identifier({
674
+ namespace: 'app.enums',
675
+ name: callee?.[2]?.name,
676
+ }),
677
+ property: new utils_1.naslTypes.Identifier({
678
+ name: String(name),
679
+ }),
680
+ });
681
+ }
682
+ if (calleeName?.includes('nasl.auth.')) {
683
+ return new utils_1.naslTypes.MemberExpression({
684
+ object: new utils_1.naslTypes.Identifier({
685
+ namespace: 'nasl.auth',
686
+ name: callee?.[2]?.name,
687
+ }),
688
+ property: new utils_1.naslTypes.Identifier({
689
+ name: callee?.[3]?.name,
690
+ }),
691
+ });
692
+ }
693
+ const regex = /^(app\..+?)\.variables\.(.+)$/;
694
+ if (regex.test(calleeName)) {
695
+ const [, namespace, variableName] = calleeName.match(regex);
696
+ return new utils_1.naslTypes.Identifier({
697
+ name: String(variableName),
698
+ namespace: `${namespace}.variables`
699
+ });
700
+ }
701
+ if (node.property.type === 'NumericLiteral') {
702
+ return new utils_1.naslTypes.CallFunction({
703
+ calleeNamespace: 'nasl.util',
704
+ calleeName: 'Get',
705
+ arguments: [
706
+ new utils_1.naslTypes.Argument({
707
+ expression: transform2LogicItem(node.object, options),
708
+ }),
709
+ new utils_1.naslTypes.Argument({
710
+ expression: transform2LogicItem(node.property, options),
711
+ }),
712
+ ],
713
+ });
714
+ }
715
+ return new utils_1.naslTypes.MemberExpression({
716
+ object: transform2LogicItem(node.object, options),
717
+ property: transform2LogicItem(node.property, options),
718
+ });
719
+ }
720
+ function transformCallCall2Match(node, options) {
721
+ // (function match() {})(...) 的情况
722
+ return undefined;
723
+ }
724
+ function transformCall2CallViewElementLogic(node, calleeNmae, callee, options) {
725
+ return new utils_1.naslTypes.CallLogic({
726
+ calleeNamespace: `elements.${callee[1].name}.logics`,
727
+ calleeName: callee[2].name,
728
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
729
+ expression: fixExpression(arg, options),
730
+ })),
731
+ });
732
+ }
733
+ function transformCall2CallEntityLogic(node, calleeName, callee, options) {
734
+ const entityName = callee[0].name.replace(/Entity/, '');
735
+ return new utils_1.naslTypes.CallLogic({
736
+ calleeNamespace: `app.dataSources.defaultDS.entities.${entityName}.logics`,
737
+ calleeName: callee[1].name,
738
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
739
+ expression: fixExpression(arg, options),
740
+ })),
741
+ });
742
+ }
743
+ function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
744
+ if (calleeName?.includes('.entities.')) {
745
+ const calleeNamespace = (0, utils_1.generate)(node?.callee?.object?.object)?.code;
746
+ const entityName = node?.callee?.object?.property?.name?.replace(/Entity/, '');
747
+ return new utils_1.naslTypes.CallLogic({
748
+ calleeNamespace: `${calleeNamespace}.${entityName}.logics`,
749
+ calleeName: node?.callee?.property?.name,
750
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
751
+ expression: fixExpression(arg, options),
752
+ })),
753
+ });
754
+ }
755
+ return new utils_1.naslTypes.CallLogic({
756
+ calleeNamespace: (0, utils_1.generate)(node.callee.object).code,
757
+ calleeName: callee[callee.length - 1].name,
758
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
759
+ expression: fixExpression(arg, options),
760
+ })),
761
+ });
762
+ }
763
+ function transformCall2OQLQuery(node, calleeName, callee, options) {
764
+ if (!options.isPageLogic) {
765
+ // const _typeAnnotation = node?.typeParameters?.params?.length > 0 ? naslTypes.TypeAnnotation.createGeneric('List', {
766
+ // typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType })),
767
+ // }) : null;
768
+ let code = (0, utils_1.generate)(node.arguments[0]).code.trim().slice(1, -1);
769
+ code = code?.replace(/app\.enums\.(\w+)\[(\d+)\]/g, "app.enums.$1.$2").replace(/app\.enums\.(\w+)\['(\w+)'\]/g, "app.enums.$1.$2");
770
+ return new utils_1.naslTypes.OqlQueryComponent({
771
+ dataSource: 'app.dataSources.defaultDS',
772
+ code,
773
+ typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node?.typeAnnotations)
774
+ });
775
+ }
776
+ }
777
+ function transformCall2ConsoleLog(node, calleeName, callee, options) {
778
+ if (options.isPageLogic) {
779
+ return new utils_1.naslTypes.CallLogic({
780
+ calleeNamespace: 'nasl.util',
781
+ calleeName: 'consoleLog',
782
+ shortcut: true,
783
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
784
+ expression: fixExpression(arg, options),
785
+ })),
786
+ });
787
+ }
788
+ return new utils_1.naslTypes.CallLogic({
789
+ calleeNamespace: 'nasl.logging',
790
+ calleeName: 'INFO',
791
+ shortcut: true,
792
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
793
+ expression: fixExpression(arg, options),
794
+ })),
795
+ });
796
+ }
797
+ function transformCall2Logging(node, calleeName, callee, options) {
798
+ return new utils_1.naslTypes.CallLogic({
799
+ calleeNamespace: 'nasl.logging',
800
+ calleeName: callee[2].name,
801
+ shortcut: true,
802
+ arguments: node.arguments.map((arg) => new utils_1.naslTypes.Argument({
803
+ expression: fixExpression(arg, options),
804
+ })),
805
+ });
806
+ }
807
+ function transformCall2JSONFunctions(node, calleeName, callee, options) {
808
+ const curCalleeName = node.callee.property.name;
809
+ return new utils_1.naslTypes.CallLogic({
810
+ calleeNamespace: 'nasl.util',
811
+ calleeName: curCalleeName,
812
+ shortcut: true,
813
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
814
+ expression: fixExpression(arg, options),
815
+ })),
816
+ typeArguments: node?.typeParameters?.params.map((curType) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)({ ...curType })),
817
+ });
818
+ }
819
+ function transformCall2CallFunction(node, calleeName, callee, options) {
820
+ let curCalleeName;
821
+ if (callee.length === 3)
822
+ curCalleeName = callee[callee.length - 1].name;
823
+ else {
824
+ let _callee = callee[0].callee;
825
+ while (_callee.type === 'CallExpression')
826
+ _callee = _callee.callee;
827
+ curCalleeName = _callee.property.name;
828
+ }
829
+ const argument = callee.length === 3 ? node.arguments : callee[0].arguments;
830
+ if (['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTWITH', 'ENDWITH', 'LIKE', 'IN'].includes(curCalleeName)) {
831
+ return transformCallExpressionToBinaryExpression(node, curCalleeName, callee, options);
832
+ }
833
+ ;
834
+ if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
835
+ return transform2NewExpression(curCalleeName, node, options);
836
+ }
837
+ // let typeNamespace: string;
838
+ // if (argument?.[argument.length - 1]?.type === 'ObjectExpression') {
839
+ // typeNamespace = argument.splice(-1)[0].properties[0].value.value;
840
+ // }
841
+ const nodeElement = new utils_1.naslTypes.CallFunction({
842
+ calleeNamespace: 'nasl.util',
843
+ calleeName: curCalleeName,
844
+ arguments: argument.map((arg, index) => new utils_1.naslTypes.Argument({
845
+ expression: fixExpression(arg, options),
846
+ keyword: `str${index + 1}`,
847
+ })),
848
+ typeArguments: node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation),
849
+ // typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType, typeNamespace })),
850
+ });
851
+ return nodeElement;
852
+ }
853
+ function transform2UIFunction(node, calleeName, callee, options) {
854
+ if (callee[2].name === 'destination') {
855
+ const namespace = node.arguments[0].value;
856
+ const nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
857
+ const pageType = nsArr.shift();
858
+ const viewName = nsArr.pop();
859
+ const newArguments = node?.arguments?.slice(1);
860
+ let argument = [];
861
+ if (newArguments?.[0]?.type === 'ObjectExpression') {
862
+ argument = newArguments?.[0]?.properties?.map((property) => new utils_1.naslTypes.Argument({
863
+ keyword: property?.key?.name,
864
+ expression: fixExpression(property?.value, options),
865
+ }));
866
+ }
867
+ else {
868
+ argument = node.arguments.slice(1).map((arg) => new utils_1.naslTypes.Argument({
869
+ expression: fixExpression(arg, options),
870
+ }));
871
+ }
872
+ return new utils_1.naslTypes.Destination({
873
+ viewNamespace: `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`,
874
+ viewName,
875
+ arguments: argument,
876
+ });
877
+ }
878
+ return new utils_1.naslTypes.CallLogic({
879
+ calleeNamespace: 'nasl.ui',
880
+ calleeName: callee[2].name,
881
+ shortcut: true,
882
+ /**
883
+ * 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
884
+ * @param node
885
+ * @returns
886
+ */
887
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
888
+ expression: fixExpression(arg, options),
889
+ })),
890
+ });
891
+ }
892
+ function transformMap2ListTransform(node, calleeName, callee, options) {
893
+ return new utils_1.naslTypes.CallFunction({
894
+ calleeNamespace: 'nasl.util',
895
+ calleeName: 'ListTransform',
896
+ arguments: [new utils_1.naslTypes.Argument({
897
+ expression: fixExpression(node.callee.object, options),
898
+ }), ...node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
899
+ expression: fixExpression(arg, options),
900
+ }))],
901
+ });
902
+ }
903
+ function transform2ForEachStatement(node, calleeName, callee, options) {
904
+ const newCallee = node.arguments;
905
+ const arrowFunction = node.arguments[3];
906
+ const nodeElement = new utils_1.naslTypes.ForEachStatement({
907
+ each: transform2LogicItem(newCallee[0], options),
908
+ start: transform2LogicItem(newCallee[1], options),
909
+ end: transform2LogicItem(newCallee[2], options),
910
+ item: transform2Param(arrowFunction.params[0]),
911
+ index: arrowFunction.params[1] ? transform2Param(arrowFunction.params[1]) : new utils_1.naslTypes.Param({
912
+ name: 'index', typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
913
+ }),
914
+ body: arrowFunction.body.body.map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
915
+ });
916
+ return nodeElement;
917
+ }
918
+ function transformForEach2ForEachStatement(node, calleeName, callee, options) {
919
+ const newCallee = node.callee.object;
920
+ const arrowFunction = node.arguments[0];
921
+ const nodeElement = new utils_1.naslTypes.ForEachStatement({
922
+ each: transform2LogicItem(newCallee.callee.object, options),
923
+ start: transform2LogicItem(newCallee?.arguments?.[0], options),
924
+ end: transform2LogicItem(newCallee?.arguments?.[1], options),
925
+ item: transform2Param(arrowFunction.params[0]),
926
+ index: arrowFunction.params[1] ? transform2Param(arrowFunction.params[1]) : new utils_1.naslTypes.Param({
927
+ name: 'index', typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
928
+ }),
929
+ body: arrowFunction.body.body.map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
930
+ });
931
+ return nodeElement;
932
+ }
933
+ function transformAlert2ShowMessage(node, calleeName, callee, options) {
934
+ return new utils_1.naslTypes.CallLogic({
935
+ calleeNamespace: 'nasl.ui',
936
+ calleeName: 'showMessage',
937
+ shortcut: true,
938
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
939
+ expression: fixExpression(arg, options),
940
+ })),
941
+ });
942
+ }
943
+ function transformCall2Interface(node, calleeName, callee, options) {
944
+ return new utils_1.naslTypes.CallInterface({
945
+ calleeNamespace: (0, utils_1.generate)(node.callee.object).code,
946
+ calleeName: callee[callee.length - 1].name,
947
+ arguments: node?.arguments?.map((arg) => arg?.properties?.map((item) => new utils_1.naslTypes.Argument({
948
+ keyword: item?.key?.name,
949
+ expression: fixExpression(item?.value, options),
950
+ })) || []).flat() || [],
951
+ });
952
+ }
953
+ function transformCall2Connector(node, calleeName, callee, options) {
954
+ let flatCalleeKey = (0, utils_1.generate)(node?.callee)?.code;
955
+ if (flatCalleeKey?.startsWith('connector.')) {
956
+ flatCalleeKey = flatCalleeKey?.replace('connector.', '');
957
+ }
958
+ const [, calleeConnectionName, calleeNamespace, calleeFunName] = flatCalleeKey?.match(/^(\w+)\.([\w.]+)\.(\w+)$/);
959
+ return new utils_1.naslTypes.CallConnector({
960
+ calleeConnectionName,
961
+ calleeNamespace,
962
+ calleeName: calleeFunName,
963
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
964
+ expression: fixExpression(arg, options),
965
+ })),
966
+ });
967
+ }
968
+ function transformCall2Extension(node, calleeName, callee, options) {
969
+ return new utils_1.naslTypes.CallLogic({
970
+ calleeNamespace: (0, utils_1.generate)(node?.callee?.object)?.code,
971
+ calleeName: callee?.[callee?.length - 1]?.name,
972
+ handleError: true,
973
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
974
+ expression: fixExpression(arg, options),
975
+ })),
976
+ });
977
+ }
978
+ function transformArrowFunction2Match(node, calleeName, callee, options) {
979
+ // NOTE: 适用于 if else
980
+ const newCallee = node.callee.body.body;
981
+ if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFuntion') {
982
+ const match = new utils_1.naslTypes.Match({
983
+ expression: fixExpression(newCallee[0], options),
984
+ isExpression: false,
985
+ cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new utils_1.naslTypes.MatchCase({
986
+ patterns: !_case.test ? [] : flatMatchPatternsExpression(transform2LogicItem(_case.test, options)),
987
+ body: _case.consequent.body.filter((item) => item.type !== 'BreakStatement').map((item) => transform2LogicItem(item, options)).filter((item) => !!item),
988
+ })),
989
+ });
990
+ if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
991
+ match.cases.push(new utils_1.naslTypes.MatchCase({
992
+ patterns: [],
993
+ body: [],
994
+ }));
995
+ }
996
+ match.cases.forEach((case_) => {
997
+ if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
998
+ case_.isMatchedTypeEnumable = true;
999
+ }
1000
+ if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
1001
+ case_.isMatchedTypeEnumable = true;
1002
+ case_.patterns[0] = new utils_1.naslTypes.MemberExpression({
1003
+ object: {
1004
+ concept: 'Identifier',
1005
+ name: case_.patterns[0].object.property.name,
1006
+ folded: false,
1007
+ namespace: 'app.enums'
1008
+ },
1009
+ property: {
1010
+ concept: 'Identifier',
1011
+ name: case_.patterns[0].property.value,
1012
+ folded: false,
1013
+ },
1014
+ });
1015
+ }
1016
+ });
1017
+ return match;
1018
+ }
1019
+ if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
1020
+ const switchStatement = transform2LogicItem(newCallee[0].body.body[0], options);
1021
+ return switchStatement;
1022
+ }
1023
+ (0, utils_1.throwError)(`Unhandled ArrowFunctionExpression node ${node.type}`);
1024
+ }
1025
+ function transformCall2CallViewLogic(node, calleeName, callee, options) {
1026
+ return new utils_1.naslTypes.CallLogic({
1027
+ calleeNamespace: '',
1028
+ calleeName: calleeName.slice('viewLogic_'.length),
1029
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
1030
+ expression: fixExpression(arg, options),
1031
+ })),
1032
+ });
1033
+ }
1034
+ function transformCall2Logic(node, calleeName, callee, options) {
1035
+ return new utils_1.naslTypes.CallLogic({
1036
+ calleeNamespace: ``,
1037
+ calleeName,
1038
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
1039
+ expression: fixExpression(arg, options),
1040
+ })),
1041
+ });
1042
+ }
1043
+ function transformCall2LogicWithAuth(node, calleeName, callee, options) {
1044
+ return new utils_1.naslTypes.CallLogic({
1045
+ calleeNamespace: `nasl.auth`,
1046
+ calleeName: callee[callee.length - 1].name,
1047
+ arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
1048
+ expression: fixExpression(arg, options),
1049
+ })),
1050
+ });
1051
+ }
1052
+ function transformCall2Paginate(node, calleeName, callee, options) {
1053
+ const newCallee = node.arguments || [];
1054
+ return new utils_1.naslTypes.Paginate({
1055
+ list: newCallee[0] && transform2LogicItem(newCallee[0], options),
1056
+ page: newCallee[1] && transform2LogicItem(newCallee[1], options),
1057
+ size: newCallee[2] && transform2LogicItem(newCallee[2], options),
1058
+ });
1059
+ }
1060
+ function flatCallQueryComponentChainNode(node) {
1061
+ if (node.callee.type === 'Identifier') {
1062
+ const calleeName = node.callee.name;
1063
+ if (['FROM', 'INNER_JOIN', 'LEFT_JOIN', 'RIGHT_JOIN', 'OUTER_JOIN'].includes(calleeName)) {
1064
+ if (node.arguments[1].type !== 'ArrowFunctionExpression')
1065
+ (0, utils_1.throwError)('FROM should have a ArrowFunctionExpression as the second argument');
1066
+ const arrowFunctionExpression = node.arguments[1];
1067
+ if (arrowFunctionExpression.body.type !== 'CallExpression')
1068
+ (0, utils_1.throwError)('FROM should have a CallExpression as the body of ArrowFunctionExpression');
1069
+ const body = arrowFunctionExpression.body;
1070
+ const callExpressions = flatChainCallExpression(body);
1071
+ const result = [{
1072
+ calleeName: calleeName,
1073
+ arguments: [node.arguments[0], arrowFunctionExpression.params[0], undefined],
1074
+ }];
1075
+ callExpressions.forEach((item) => {
1076
+ if (item.callee.type === 'Identifier')
1077
+ if (item.callee.name === 'ON') {
1078
+ result[0].arguments[2] = item.arguments[0];
1079
+ }
1080
+ else if (['INNER_JOIN', 'LEFT_JOIN', 'RIGHT_JOIN', 'OUTER_JOIN'].includes(item.callee.name)) {
1081
+ result.push(...flatCallQueryComponentChainNode(item));
1082
+ }
1083
+ else {
1084
+ result.push({
1085
+ calleeName: item.callee.name,
1086
+ arguments: item.arguments,
1087
+ });
1088
+ }
1089
+ });
1090
+ return result;
1091
+ }
1092
+ }
1093
+ return [];
1094
+ }
1095
+ function transformMemberExpression2Entity(node, node2) {
1096
+ const entityPath = flatMemberExpression(node);
1097
+ const entityNamespace = entityPath.slice(0, -1).map(n => n.name).join('.');
1098
+ const entityName = entityPath[entityPath.length - 1].name.replace(/Entity/, '');
1099
+ const asName = node2.name === entityName ? undefined : node2.name;
1100
+ return { entityNamespace, entityName, asName };
1101
+ }
1102
+ function transformCall2DataQuery(node, calleeName, callee, options) {
1103
+ const flatted = flatCallQueryComponentChainNode(node);
1104
+ let from;
1105
+ let where;
1106
+ let having;
1107
+ let groupBy = [];
1108
+ let orderBy = [];
1109
+ let select;
1110
+ const entityAsNames = [];
1111
+ let entity;
1112
+ // 这里只是一个示例,具体的逻辑需要根据flatted的内容来构建
1113
+ flatted.forEach((item) => {
1114
+ // console.log(item.calleeName)
1115
+ switch (item.calleeName) {
1116
+ case 'FROM':
1117
+ entity = transformMemberExpression2Entity(item.arguments[0], item.arguments[1]);
1118
+ entityAsNames.push(entity.asName || entity.entityName);
1119
+ from = new utils_1.naslTypes.QueryFromExpression({
1120
+ ...entity,
1121
+ joinParts: [],
1122
+ });
1123
+ break;
1124
+ case 'INNER_JOIN':
1125
+ case 'LEFT_JOIN':
1126
+ case 'RIGHT_JOIN':
1127
+ case 'OUTER_JOIN':
1128
+ entity = transformMemberExpression2Entity(item.arguments[0], item.arguments[1]);
1129
+ entityAsNames.push(entity.asName || entity.entityName);
1130
+ const rawJoinType = item.calleeName.slice(0, -5);
1131
+ const joinType = rawJoinType === 'OUTER' ? 'FULL' : rawJoinType;
1132
+ from.joinParts.push(new utils_1.naslTypes.QueryJoinExpression({
1133
+ ...entity,
1134
+ joinType,
1135
+ onExpressions: [transform2BinaryExpression(item.arguments[2], { ...options, entityAsNames })], // toArray
1136
+ }));
1137
+ break;
1138
+ case 'WHERE':
1139
+ where = transform2LogicItem(item.arguments[0], { ...options, entityAsNames });
1140
+ break;
1141
+ case 'HAVING':
1142
+ having = transform2LogicItem(item.arguments[0], { ...options, entityAsNames });
1143
+ break;
1144
+ case 'GROUP_BY':
1145
+ groupBy = item.arguments.map((arg) => new utils_1.naslTypes.QueryGroupByExpression({
1146
+ groupElement: transform2LogicItem(arg, { ...options, entityAsNames }),
1147
+ }));
1148
+ break;
1149
+ case 'ORDER_BY':
1150
+ orderBy = item.arguments.map((arg) => new utils_1.naslTypes.QueryOrderByExpression({
1151
+ orderElement: transform2LogicItem(arg.elements[0], { ...options, entityAsNames }),
1152
+ order: transform2LogicItem(arg.elements[1], { ...options, entityAsNames })
1153
+ }));
1154
+ break;
1155
+ case 'SELECT':
1156
+ select = new utils_1.naslTypes.QuerySelectExpression({
1157
+ distinct: false,
1158
+ star: true,
1159
+ selectElements: [],
1160
+ });
1161
+ const asNames = [];
1162
+ item.arguments[0].properties.forEach((arg) => {
1163
+ const selectElement = arg.value.type === 'CallExpression' ? transform2QueryAggregateExpression(arg, { ...options, entityAsNames }) : transform2SelectQueryFieldExpression(arg, { ...options, entityAsNames });
1164
+ asNames.push(arg.key.name);
1165
+ if (selectElement.concept === 'QueryFieldExpression') {
1166
+ const groupByExpression = groupBy.find((groupByExpression) => selectElement.propertyName === groupByExpression.groupElement.propertyName);
1167
+ if (groupByExpression) {
1168
+ groupByExpression.groupElement.asName = selectElement.asName;
1169
+ return;
1170
+ }
1171
+ }
1172
+ select.selectElements.push(selectElement);
1173
+ });
1174
+ orderBy.forEach((orderByExpression) => {
1175
+ const oe = orderByExpression.orderElement;
1176
+ if (asNames.includes(oe.name)) {
1177
+ oe.namespace = 'inner';
1178
+ }
1179
+ });
1180
+ break;
1181
+ }
1182
+ });
1183
+ // 构建并返回 naslTypes.CallQueryComponent 实例
1184
+ const callQueryComponent = new utils_1.naslTypes.CallQueryComponent({
1185
+ select: select || null,
1186
+ from: from || null,
1187
+ where: where || null,
1188
+ groupBy,
1189
+ having: having || null,
1190
+ orderBy,
1191
+ ideVersion: '2.22',
1192
+ });
1193
+ // callQueryComponent.typeAnnotation = callQueryComponent.computeStructure();
1194
+ return callQueryComponent;
1195
+ }
1196
+ function transform2LogicItem(node, options) {
1197
+ fixLogicNode(node);
1198
+ const transformManager = new TransformManager();
1199
+ transformManager.register('VariableDeclaration', transform2VariableAndAddAssignment);
1200
+ transformManager.register('IfStatement', transform2IfStatement);
1201
+ transformManager.register('WhileStatement', transform2WhileStatement);
1202
+ transformManager.register('SwitchStatement', transformSwitchStatement2Match);
1203
+ transformManager.register('Identifier', transformIdentifier);
1204
+ transformManager.register('ExpressionStatement', (node, options) => transform2LogicItem(node.expression, options));
1205
+ transformManager.register('AssignmentExpression', transform2Assignment);
1206
+ transformManager.register('ArrowFunctionExpression', transform2AnonymousFunction);
1207
+ transformManager.register('BooleanLiteral', transform2BooleanLiteral);
1208
+ transformManager.register('StringLiteral', transform2StringLiteral);
1209
+ transformManager.register('NumericLiteral', transform2NumericLiteral);
1210
+ transformManager.register('NullLiteral', transform2NullLiteral);
1211
+ transformManager.register('TemplateLiteral', transform2StringInterpolation);
1212
+ transformManager.register('BinaryExpression', transform2BinaryExpression);
1213
+ transformManager.register('LogicalExpression', transform2BinaryExpression);
1214
+ transformManager.register('UpdateExpression', transformUpdateExpression2Assignment);
1215
+ transformManager.register('ReturnStatement', transformReturnStatement2AssignmentOrEnd);
1216
+ transformManager.register('EmptyStatement', transform2Comment);
1217
+ transformManager.register('BlockStatement', transformBlockStatement);
1218
+ transformManager.register('ObjectExpression', transform2NewComposite);
1219
+ transformManager.register('NewExpression', transformNewExpression);
1220
+ transformManager.register((node) => node.type === 'UnaryExpression' && ['!'].includes(node.operator), (node, options) => {
1221
+ return new utils_1.naslTypes.UnaryExpression({
1222
+ operator: node.operator,
1223
+ argument: transform2LogicItem(node.argument, options),
1224
+ });
1225
+ });
1226
+ transformManager.register((node) => node.type === 'UnaryExpression' && ['-'].includes(node.operator) && node.argument.type === 'NumericLiteral', (node, options) => {
1227
+ return transform2NumericLiteral({
1228
+ type: 'NumericLiteral',
1229
+ value: -node.argument.value,
1230
+ }, options);
1231
+ });
1232
+ transformManager.register('MemberExpression', transformMemberExpression);
1233
+ transformManager.register((node) => node.type === 'CallExpression' && node.callee.type === 'CallExpression', transformCallCall2Match);
1234
+ transformManager.registerCallExpression((node, calleeName) => /^\$refs\./.test(calleeName), transformCall2CallViewElementLogic);
1235
+ transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 2 && callee[0].type === 'Identifier' && callee[0].name.endsWith('Entity'), transformCall2CallEntityLogic);
1236
+ transformManager.registerCallExpression('nasl.oql.query', transformCall2OQLQuery);
1237
+ transformManager.registerCallExpression('nasl.util.consoleLog', transformCall2ConsoleLog);
1238
+ transformManager.registerCallExpression('console.log', transformCall2ConsoleLog);
1239
+ transformManager.registerCallExpression((node, calleeName) => calleeName.startsWith('nasl.logging.'), transformCall2Logging);
1240
+ transformManager.registerCallExpression('nasl.util.jsonSerialize', transformCall2JSONFunctions);
1241
+ transformManager.registerCallExpression('nasl.util.jsonDeserialize', transformCall2JSONFunctions);
1242
+ transformManager.registerCallExpression((node, calleeName) => calleeName.startsWith('nasl.util.'), transformCall2CallFunction);
1243
+ transformManager.registerCallExpression((node, calleeName) => calleeName.startsWith('nasl.auth.'), transformCall2LogicWithAuth);
1244
+ transformManager.registerCallExpression((node, calleeName) => calleeName.startsWith('nasl.ui.'), transform2UIFunction);
1245
+ transformManager.registerCallExpression((node, calleeName) => calleeName.endsWith('.map'), transformMap2ListTransform);
1246
+ transformManager.registerCallExpression('ForEach', transform2ForEachStatement);
1247
+ transformManager.registerCallExpression((node, calleeName) => calleeName.endsWith('.forEach'), transformForEach2ForEachStatement);
1248
+ transformManager.registerCallExpression('alert', transformAlert2ShowMessage);
1249
+ transformManager.registerCallExpression((node, calleeName) => /^app.dataSources|app.logics/.test(calleeName), transformCall2CallDataSourceLogic);
1250
+ transformManager.registerCallExpression((node, calleeName) => /interfaces\./.test(calleeName), transformCall2Interface);
1251
+ transformManager.registerCallExpression((node, calleeName) => /connectors\./.test(calleeName), transformCall2Connector);
1252
+ transformManager.registerCallExpression((node, calleeName) => /extensions\./.test(calleeName), transformCall2Extension);
1253
+ transformManager.registerCallExpression((node) => node.callee.type === 'ArrowFunctionExpression', transformArrowFunction2Match);
1254
+ transformManager.registerCallExpression((node, calleeName) => ['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTWITH', 'ENDWITH', 'LIKE', 'IN'].includes(calleeName), transformCallExpressionToBinaryExpression);
1255
+ transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && calleeName.startsWith('viewLogic_'), transformCall2CallViewLogic);
1256
+ transformManager.registerCallExpression('PAGINATE', transformCall2Paginate);
1257
+ transformManager.registerCallExpression('FROM', transformCall2DataQuery);
1258
+ transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1, transformCall2Logic);
1259
+ return transformManager.apply(node, options);
1260
+ }
1261
+ exports.transform2LogicItem = transform2LogicItem;
1262
+ //# sourceMappingURL=transform2LogicItem.js.map