@lcap/nasl 4.1.0-creator.3 → 4.1.0-rc.10

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 (146) hide show
  1. package/out/generator/genBundleFiles.d.ts +0 -1
  2. package/out/generator/genBundleFiles.d.ts.map +1 -1
  3. package/out/generator/genBundleFiles.js +4 -7
  4. package/out/generator/genBundleFiles.js.map +1 -1
  5. package/out/generator/index.d.ts +0 -1
  6. package/out/generator/index.d.ts.map +1 -1
  7. package/out/generator/index.js +0 -1
  8. package/out/generator/index.js.map +1 -1
  9. package/out/generator/release-body/data.d.ts.map +1 -1
  10. package/out/generator/release-body/data.js +0 -2
  11. package/out/generator/release-body/data.js.map +1 -1
  12. package/out/generator/release-body/utils.d.ts +3 -7
  13. package/out/generator/release-body/utils.d.ts.map +1 -1
  14. package/out/generator/release-body/utils.js +2 -4
  15. package/out/generator/release-body/utils.js.map +1 -1
  16. package/out/index.d.ts +1 -1
  17. package/out/index.d.ts.map +1 -1
  18. package/out/index.js +1 -2
  19. package/out/index.js.map +1 -1
  20. package/out/natural/index.d.ts +0 -2
  21. package/out/natural/index.d.ts.map +1 -1
  22. package/out/natural/index.js +0 -4
  23. package/out/natural/index.js.map +1 -1
  24. package/out/natural/parseNaturalTS.d.ts +8 -5
  25. package/out/natural/parseNaturalTS.d.ts.map +1 -1
  26. package/out/natural/parseNaturalTS.js +50 -200
  27. package/out/natural/parseNaturalTS.js.map +1 -1
  28. package/out/natural/transformTS2UI.d.ts.map +1 -1
  29. package/out/natural/transformTS2UI.js +17 -15
  30. package/out/natural/transformTS2UI.js.map +1 -1
  31. package/out/natural/transformTSCode.d.ts.map +1 -1
  32. package/out/natural/transformTSCode.js +4 -4
  33. package/out/natural/transformTSCode.js.map +1 -1
  34. package/out/natural/transforms/registerTransform.d.ts +8 -0
  35. package/out/natural/transforms/registerTransform.d.ts.map +1 -0
  36. package/out/natural/transforms/registerTransform.js +24 -0
  37. package/out/natural/transforms/registerTransform.js.map +1 -0
  38. package/out/natural/transforms/transform2Entity.d.ts +1 -3
  39. package/out/natural/transforms/transform2Entity.d.ts.map +1 -1
  40. package/out/natural/transforms/transform2Entity.js +5 -7
  41. package/out/natural/transforms/transform2Entity.js.map +1 -1
  42. package/out/natural/transforms/transform2Enum.d.ts +1 -3
  43. package/out/natural/transforms/transform2Enum.d.ts.map +1 -1
  44. package/out/natural/transforms/transform2Enum.js +3 -3
  45. package/out/natural/transforms/transform2Enum.js.map +1 -1
  46. package/out/natural/transforms/transform2GlobalLogicDeclaration.d.ts +1 -3
  47. package/out/natural/transforms/transform2GlobalLogicDeclaration.d.ts.map +1 -1
  48. package/out/natural/transforms/transform2GlobalLogicDeclaration.js +3 -3
  49. package/out/natural/transforms/transform2GlobalLogicDeclaration.js.map +1 -1
  50. package/out/natural/transforms/transform2Logic.d.ts +1 -9
  51. package/out/natural/transforms/transform2Logic.d.ts.map +1 -1
  52. package/out/natural/transforms/transform2Logic.js +7 -39
  53. package/out/natural/transforms/transform2Logic.js.map +1 -1
  54. package/out/natural/transforms/transform2LogicItem.d.ts +29 -59
  55. package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -1
  56. package/out/natural/transforms/transform2LogicItem.js +199 -375
  57. package/out/natural/transforms/transform2LogicItem.js.map +1 -1
  58. package/out/natural/transforms/transform2Structure.d.ts +1 -3
  59. package/out/natural/transforms/transform2Structure.d.ts.map +1 -1
  60. package/out/natural/transforms/transform2Structure.js +4 -4
  61. package/out/natural/transforms/transform2Structure.js.map +1 -1
  62. package/out/natural/transforms/transform2TypeAnnotation.d.ts +1 -3
  63. package/out/natural/transforms/transform2TypeAnnotation.d.ts.map +1 -1
  64. package/out/natural/transforms/transform2TypeAnnotation.js +11 -10
  65. package/out/natural/transforms/transform2TypeAnnotation.js.map +1 -1
  66. package/out/natural/transforms/transform2Variable.d.ts +1 -6
  67. package/out/natural/transforms/transform2Variable.d.ts.map +1 -1
  68. package/out/natural/transforms/transform2Variable.js +6 -30
  69. package/out/natural/transforms/transform2Variable.js.map +1 -1
  70. package/out/natural/transforms/utils.d.ts +3 -22
  71. package/out/natural/transforms/utils.d.ts.map +1 -1
  72. package/out/natural/transforms/utils.js +12 -80
  73. package/out/natural/transforms/utils.js.map +1 -1
  74. package/out/server/OQL/sqlFunctions.json +8 -696
  75. package/out/server/index.d.ts +0 -1
  76. package/out/server/index.d.ts.map +1 -1
  77. package/out/server/index.js +0 -1
  78. package/out/server/index.js.map +1 -1
  79. package/out/server/naslServer.d.ts +1 -5
  80. package/out/server/naslServer.d.ts.map +1 -1
  81. package/out/server/naslServer.js +16 -31
  82. package/out/server/naslServer.js.map +1 -1
  83. package/out/service/initial/form-designer.d.ts +1 -1
  84. package/out/service/initial/form-designer.d.ts.map +1 -1
  85. package/out/service/initial/form-designer.js +1 -4
  86. package/out/service/initial/form-designer.js.map +1 -1
  87. package/out/service/initial/processV2.d.ts +1 -1
  88. package/out/service/initial/processV2.d.ts.map +1 -1
  89. package/out/service/initial/processV2.js +1 -4
  90. package/out/service/initial/processV2.js.map +1 -1
  91. package/out/service/initial/types.d.ts +0 -1
  92. package/out/service/initial/types.d.ts.map +1 -1
  93. package/out/service/storage/api.d.ts +7 -16
  94. package/out/service/storage/api.js +0 -6
  95. package/out/service/storage/api.js.map +1 -1
  96. package/out/service/storage/cache/index.d.ts +15 -3
  97. package/out/service/storage/cache/index.d.ts.map +1 -1
  98. package/out/service/storage/cache/index.js +299 -14
  99. package/out/service/storage/cache/index.js.map +1 -1
  100. package/out/service/storage/cache/split.d.ts +21 -0
  101. package/out/service/storage/cache/split.d.ts.map +1 -1
  102. package/out/service/storage/cache/split.js +33 -24
  103. package/out/service/storage/cache/split.js.map +1 -1
  104. package/out/service/storage/init.d.ts +0 -9
  105. package/out/service/storage/init.d.ts.map +1 -1
  106. package/out/service/storage/init.js +73 -38
  107. package/out/service/storage/init.js.map +1 -1
  108. package/out/service/storage/service.js +1 -1
  109. package/out/service/storage/service.js.map +1 -1
  110. package/package.json +13 -15
  111. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/nasl/error.ts +0 -45
  112. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/datasources/defaultDS/entities/StockFinancials.ts +0 -89
  113. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/datasources/defaultDS/entities/Stocks.ts +0 -96
  114. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/datasources/defaultDS.ts +0 -5
  115. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/enums/FinancialStatementType.ts +0 -13
  116. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/logics/getStockFinancialStatements.ts +0 -62
  117. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/roles/DEV-AdminRole.ts +0 -5
  118. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/sqlFunctions/dameng.ts +0 -73
  119. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/sqlFunctions/mysql.ts +0 -67
  120. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/sqlFunctions/oracle.ts +0 -59
  121. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/sqlFunctions/postgresql.ts +0 -30
  122. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/sqlFunctions/vastbase_pg.ts +0 -28
  123. package/out/debug/apps/24b6fb54-2871-4866-b64b-676bec0f7eb5/embedded/zystestnew/structures/FinancialDataItem.ts +0 -9
  124. package/out/debug/apps/anonymous/extension.component.ts +0 -0
  125. package/out/debug/apps/anonymous/nasl.ui.component.ts +0 -7743
  126. package/out/generator/genSimpleBundleFile.d.ts +0 -19
  127. package/out/generator/genSimpleBundleFile.d.ts.map +0 -1
  128. package/out/generator/genSimpleBundleFile.js +0 -114
  129. package/out/generator/genSimpleBundleFile.js.map +0 -1
  130. package/out/natural/parseNaturalTSXView.d.ts +0 -14
  131. package/out/natural/parseNaturalTSXView.d.ts.map +0 -1
  132. package/out/natural/parseNaturalTSXView.js +0 -565
  133. package/out/natural/parseNaturalTSXView.js.map +0 -1
  134. package/out/natural/transforms/transform2MetadataType.d.ts +0 -5
  135. package/out/natural/transforms/transform2MetadataType.d.ts.map +0 -1
  136. package/out/natural/transforms/transform2MetadataType.js +0 -14
  137. package/out/natural/transforms/transform2MetadataType.js.map +0 -1
  138. package/out/natural/transforms/transform2ValidationRule.d.ts +0 -5
  139. package/out/natural/transforms/transform2ValidationRule.d.ts.map +0 -1
  140. package/out/natural/transforms/transform2ValidationRule.js +0 -24
  141. package/out/natural/transforms/transform2ValidationRule.js.map +0 -1
  142. package/out/natural/transforms/transformThemeAndStyle.d.ts +0 -28
  143. package/out/natural/transforms/transformThemeAndStyle.d.ts.map +0 -1
  144. package/out/natural/transforms/transformThemeAndStyle.js +0 -269
  145. package/out/natural/transforms/transformThemeAndStyle.js.map +0 -1
  146. package/out/server/OQL/sqlCategory.json +0 -410
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.transformCall2Extension = exports.transformCall2Connector = exports.transformCall2Interface = exports.transformAlert2ShowMessage = exports.transformForEach2ForEachStatement = exports.transformForOf2ForEachStatement = exports.transform2ForEachStatement = exports.transformMap2ListTransform = exports.transform2UIFunction = exports.transformCall2CallFunction = exports.transform2CallFunction = exports.transformCall2JSONFunctions = exports.transformCall2Logging = exports.transformCall2ConsoleLog = exports.transformCall2CallDataSourceLogic = exports.transformCall2CallEntityLogic = exports.transformCall2CallViewElementLogic = exports.transformCallFunctionExpression2Match = exports.transformMemberExpression = exports.transformNewExpression = exports.transform2PartialNewComposite = exports.transform2Comment = exports.transform2StringInterpolation = exports.transformReturnStatement2AssignmentOrEnd = exports.transform2NullLiteral = exports.transform2NumericLiteral = exports.transform2DirectiveLiteral = exports.transform2StringLiteral = exports.transform2BooleanLiteral = exports.transformUpdateExpression2Assignment = exports.transform2Assignment = exports.transform2AnonymousFunction = exports.transformIdentifier = exports.transformSwitchStatement2Match = exports.transform2WhileStatement = exports.transform2Break = exports.transform2Continue = exports.transform2IfStatement = exports.transform2BinaryExpression = exports.transform2VariadicExpression = exports.transformCallExpressionToBinaryExpression = exports.transform2Param = exports.fixLogicNode = exports.flatIfStatementForMatch = exports.flatMatchPatternsExpression = exports.getSelectMembers = exports.unflatMemberExpression = exports.flatMemberExpression = exports.fixExpression = exports.TransformManager = void 0;
7
- exports.transform2LogicItem = exports.transformCall2Paginate = exports.transformCall2LogicWithAuth = exports.transformCall2Logic = exports.transformCall2CallViewLogic = void 0;
6
+ exports.transformCall2Extension = exports.transformCall2Connector = exports.transformCall2Interface = exports.transformAlert2ShowMessage = exports.transformForEach2ForEachStatement = exports.transformForOf2ForEachStatement = exports.transform2ForEachStatement = exports.transformMap2ListTransform = exports.transform2UIFunction = exports.transformCall2CallFunction = exports.transform2CallFunction = exports.transformCall2JSONFunctions = exports.transformCall2Logging = exports.transformCall2ConsoleLog = exports.transformCall2CallDataSourceLogic = exports.transformCall2CallEntityLogic = exports.transformCall2CallViewElementLogic = exports.transformCallCall2Match = exports.transformMemberExpression = exports.transformNewExpression = exports.transform2PartialNewComposite = exports.transform2Comment = exports.transform2StringInterpolation = exports.transformReturnStatement2AssignmentOrEnd = exports.transform2NullLiteral = exports.transform2NumericLiteral = exports.transform2DirectiveLiteral = exports.transform2StringLiteral = exports.transform2BooleanLiteral = exports.transformUpdateExpression2Assignment = exports.transform2Assignment = exports.transform2AnonymousFunction = exports.transformIdentifier = exports.transformSwitchStatement2Match = exports.transform2WhileStatement = exports.transform2Break = exports.transform2Continue = exports.transform2IfStatement = exports.transform2BinaryExpression = exports.transform2VariadicExpression = exports.transformCallExpressionToBinaryExpression = exports.transform2Param = exports.fixLogicNode = exports.flatIfStatement = exports.flatMatchPatternsExpression = exports.getSelectMembers = exports.unflatMemberExpression = exports.flatMemberExpression = exports.fixExpression = exports.TransformManager = void 0;
7
+ exports.transform2LogicItem = exports.transformCall2Paginate = exports.transformCall2LogicWithAuth = exports.transformCall2Logic = exports.transformCall2CallViewLogic = exports.transformArrowFunction2Match = void 0;
8
8
  const utils_1 = require("./utils");
9
9
  const transform2TypeAnnotation_1 = require("./transform2TypeAnnotation");
10
10
  const utils_2 = require("../../utils");
@@ -24,7 +24,7 @@ class TransformManager {
24
24
  apply(node, options) {
25
25
  if (node.type === 'CallExpression') {
26
26
  if (node.callee.type === 'CallExpression')
27
- return (0, utils_1.throwError)(options?.parsingId, '不支持连续调用!', node.callee);
27
+ (0, utils_1.throwError)(`不支持连续调用!`);
28
28
  const callee = flatMemberExpression(node.callee);
29
29
  if (callee[0]
30
30
  && callee[0].type === 'CallExpression'
@@ -36,8 +36,9 @@ class TransformManager {
36
36
  }
37
37
  else {
38
38
  for (const calleeItem of callee) {
39
- if (calleeItem.type !== 'Identifier' && !(calleeItem.type === 'FunctionExpression' && calleeItem.id?.name === 'match')) {
40
- return (0, utils_1.throwError)(options?.parsingId, '不支持连续调用!', node.callee);
39
+ if (calleeItem.type !== 'Identifier') {
40
+ const calleeName = (0, utils_1.generate)(node.callee).code;
41
+ (0, utils_1.throwError)(`不支持连续调用!${calleeName}`);
41
42
  }
42
43
  }
43
44
  }
@@ -47,7 +48,7 @@ class TransformManager {
47
48
  return transform(node, calleeName, callee, options);
48
49
  }
49
50
  }
50
- return (0, utils_1.throwError)(options?.parsingId, `不支持的节点类型 ${callee.map((item) => item.name).join('.')}`, node.type, node);
51
+ (0, utils_1.throwError)(`Unhandled node ${callee.map((item) => item.name).join('.')} ${node.type}`);
51
52
  }
52
53
  else {
53
54
  for (const [type, transform] of this.transforms) {
@@ -55,7 +56,7 @@ class TransformManager {
55
56
  return transform(node, options);
56
57
  }
57
58
  }
58
- return (0, utils_1.throwError)(options?.parsingId, '不支持的节点类型', node.type, node);
59
+ (0, utils_1.throwError)(`Unhandled node ${node.type}`);
59
60
  }
60
61
  }
61
62
  }
@@ -77,7 +78,7 @@ function transformTSCode2SubLogic(node, options) {
77
78
  statements = [...node?.body?.directives, ...node?.body?.body];
78
79
  }
79
80
  parameters.forEach((node) => {
80
- const param = transform2Param(node, options);
81
+ const param = transform2Param(node);
81
82
  param && logic.addParam(param);
82
83
  });
83
84
  const newStatements = [];
@@ -121,9 +122,9 @@ function transformTSCode2SubLogic(node, options) {
121
122
  }
122
123
  return logic;
123
124
  }
124
- function assertAssignmentRightIsNotAnonymousFunction(expression, options) {
125
+ function assertAssignmentRightIsNotAnonymousFunction(expression) {
125
126
  if (expression?.concept === 'AnonymousFunction')
126
- return (0, utils_1.throwError)(options?.parsingId, 'Anonymous function is not allowed in assignment');
127
+ (0, utils_1.throwError)('Anonymous function is not allowed in assignment');
127
128
  return expression;
128
129
  }
129
130
  function fixExpression(arg, options, supportSubLogic = false) {
@@ -242,18 +243,13 @@ function flatMatchPatternsExpression(node) {
242
243
  return [node];
243
244
  }
244
245
  exports.flatMatchPatternsExpression = flatMatchPatternsExpression;
245
- function flatIfStatementForMatch(node) {
246
+ function flatIfStatement(node) {
246
247
  if (node.alternate.type === 'IfStatement') {
247
- return [node, ...flatIfStatementForMatch(node.alternate)];
248
+ return [...flatIfStatement(node.alternate), node];
248
249
  }
249
- return [node, {
250
- type: 'IfStatement',
251
- test: null,
252
- consequent: node.alternate,
253
- alternate: node.alternate,
254
- }];
250
+ return [node];
255
251
  }
256
- exports.flatIfStatementForMatch = flatIfStatementForMatch;
252
+ exports.flatIfStatement = flatIfStatement;
257
253
  /**
258
254
  * 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
259
255
  * @param node
@@ -269,7 +265,7 @@ function fixLogicNode(node) {
269
265
  }
270
266
  }
271
267
  exports.fixLogicNode = fixLogicNode;
272
- function transform2Param(node, options) {
268
+ function transform2Param(node) {
273
269
  const exclude = ['event'];
274
270
  if (node.type === 'ObjectProperty') {
275
271
  const typeAnnotation = node?.value?.name ? utils_1.naslTypes.TypeAnnotation.createPrimitive((node?.value).name) : null;
@@ -281,7 +277,7 @@ function transform2Param(node, options) {
281
277
  name,
282
278
  typeAnnotation,
283
279
  defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
284
- expression: transform2LogicItem(defaultValueExpression, { parsingId: options?.parsingId, transformType: 'attr', isRestricted: true }),
280
+ expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
285
281
  }),
286
282
  });
287
283
  }
@@ -293,9 +289,9 @@ function transform2Param(node, options) {
293
289
  let defaultValueExpression = node.optional ? { type: 'NullLiteral' } : undefined;
294
290
  return new utils_1.naslTypes.Param({
295
291
  name,
296
- typeAnnotation: typeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation, options) || undefined,
292
+ typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
297
293
  defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
298
- expression: transform2LogicItem(defaultValueExpression, { parsingId: options?.parsingId, transformType: 'attr', isRestricted: true }),
294
+ expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
299
295
  }),
300
296
  });
301
297
  }
@@ -308,9 +304,9 @@ function transform2Param(node, options) {
308
304
  return new utils_1.naslTypes.Param({
309
305
  name,
310
306
  required: !node.optional,
311
- typeAnnotation: typeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation, options) || undefined,
307
+ typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
312
308
  defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
313
- expression: transform2LogicItem(defaultValueExpression, { parsingId: options?.parsingId, transformType: 'attr', isRestricted: true }),
309
+ expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
314
310
  }),
315
311
  });
316
312
  }
@@ -331,14 +327,14 @@ function transform2Param(node, options) {
331
327
  return null;
332
328
  return new utils_1.naslTypes.Param({
333
329
  name,
334
- typeAnnotation: typeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation, options) || undefined,
330
+ typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
335
331
  defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
336
- expression: transform2LogicItem(defaultValueExpression, { parsingId: options?.parsingId, transformType: 'attr', isRestricted: true }),
332
+ expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
337
333
  }),
338
334
  });
339
335
  }
340
336
  else {
341
- return (0, utils_1.throwError)(options?.parsingId, '在输入参数中不支持节点类型', node);
337
+ (0, utils_1.throwError)(`Unhandled node ${node}`);
342
338
  }
343
339
  }
344
340
  exports.transform2Param = transform2Param;
@@ -357,12 +353,6 @@ function transformCallExpressionToBinaryExpression(node, calleeName, callee, opt
357
353
  IN: 'in',
358
354
  IS_NULL: 'isNull',
359
355
  };
360
- if (calleeName === 'IS_NULL') {
361
- return new utils_1.naslTypes.UnaryExpression({
362
- operator: 'isNull',
363
- argument: transformNodeFunction(argument?.[0], options),
364
- });
365
- }
366
356
  return new utils_1.naslTypes.BinaryExpression({
367
357
  operator: map[calleeName],
368
358
  left: transformNodeFunction(argument?.[0], options),
@@ -442,21 +432,11 @@ function transform2BinaryExpression(node, options) {
442
432
  right: transformNodeFunction(node.right, options),
443
433
  });
444
434
  }
445
- return (0, utils_1.throwError)(options?.parsingId, '在二元表达式中不支持节点类型', node.type, node);
435
+ (0, utils_1.throwError)(`Unhandled node ${node.type}`);
446
436
  }
447
437
  exports.transform2BinaryExpression = transform2BinaryExpression;
448
- function transformDefaultExpression(node, options) {
449
- const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
450
- return transformNodeFunction(node.left, options);
451
- }
452
438
  function transformConditionalExpression(node, options) {
453
439
  const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
454
- if (options?.inCallQueryComponentField) {
455
- const expr = (0, utils_1.generate)(node.test)?.code;
456
- const then_expr = (0, utils_1.generate)(node.consequent)?.code;
457
- const else_expr = (0, utils_1.generate)(node.alternate)?.code;
458
- return (0, utils_1.throwError)(options?.parsingId, `数据查询中不支持条件表达式!${(0, utils_1.generate)(node)?.code}, 请使用 SQL函数 IF(${expr} == null, ${then_expr}, ${else_expr})`);
459
- }
460
440
  const test = transformNodeFunction(node.test, options);
461
441
  const consequent = transformNodeFunction(node.consequent, options);
462
442
  const alternate = transformNodeFunction(node.alternate, options);
@@ -479,12 +459,12 @@ function transformConditionalExpression(node, options) {
479
459
  cases: [
480
460
  new utils_1.naslTypes.MatchCase({
481
461
  patterns: [new utils_1.naslTypes.BooleanLiteral({ value: 'true' })],
482
- body: consequent ? [consequent] : [],
462
+ body: [consequent],
483
463
  isMatchedTypeEnumable: true,
484
464
  }),
485
465
  new utils_1.naslTypes.MatchCase({
486
- patterns: [],
487
- body: alternate ? [alternate] : [],
466
+ patterns: [alternate],
467
+ body: [alternate],
488
468
  }),
489
469
  ],
490
470
  });
@@ -495,34 +475,17 @@ function transformArrayExpression(node, options) {
495
475
  const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
496
476
  return new utils_1.naslTypes.NewList({
497
477
  typeAnnotation,
498
- items: node?.elements?.map((arg) => transformNodeFunction(arg, { ...options, typeAnnotation: undefined })).filter(Boolean),
478
+ items: node?.elements?.map((arg) => transformNodeFunction(arg, { ...options, typeAnnotation: undefined })),
499
479
  });
500
480
  }
501
481
  function transform2NewAnonymousStructure(node, options) {
502
- for (let i = 0; i < node.properties.length; i++) {
503
- const item = node.properties[i];
504
- const itemValue = item?.value;
505
- if (itemValue.type === 'NullLiteral') {
506
- const currentType = options?.typeAnnotation?.properties?.[i];
507
- if (currentType?.typeAnnotation) {
508
- item.naslType = currentType.typeAnnotation;
509
- }
510
- else {
511
- return (0, utils_1.throwError)(options?.parsingId, '匿名数据结构的属性中, 不允许出现没有类型的 null 值,请使用 as 关键字来指定类型,如 { price: null as Decimal }', node);
512
- }
513
- }
514
- else if (itemValue.type === 'TSAsExpression') {
515
- const typeAnnotation = (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(itemValue.typeAnnotation, options);
516
- item.naslType = typeAnnotation;
517
- }
518
- }
519
482
  const newComposite = transform2PartialNewComposite(node, options);
520
483
  const newProperties = node.properties.filter((prop) => prop.type === 'ObjectProperty' && prop.value.type !== 'ConditionalExpression');
521
484
  const structureProperties = [];
522
485
  newProperties.forEach((arg, index) => {
523
486
  structureProperties.push(new utils_1.naslTypes.StructureProperty({
524
487
  name: arg.key.name,
525
- typeAnnotation: arg.naslType || null,
488
+ typeAnnotation: null
526
489
  }));
527
490
  });
528
491
  newComposite.typeAnnotation = utils_1.naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties);
@@ -545,15 +508,15 @@ function transform2NewExpression(calleeName, node, options) {
545
508
  }
546
509
  else {
547
510
  typeAnnotation = utils_1.naslTypes.TypeAnnotation.createGeneric('List', {
548
- typeArguments: node?.typeParameters?.params.map((type) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(type, options)).filter(Boolean),
511
+ typeArguments: node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation),
549
512
  });
550
513
  }
551
514
  if (node?.arguments && node?.arguments?.[0]?.type !== 'ArrayExpression') {
552
- return (0, utils_1.throwError)(options?.parsingId, 'NewList 中不允许出现非数组表达式', node);
515
+ (0, utils_1.throwError)(`Not allowed code ${(0, utils_1.generate)(node).code} in NewList`);
553
516
  }
554
517
  return new utils_1.naslTypes.NewList({
555
518
  typeAnnotation: node?.typeParameters ? typeAnnotation : undefined,
556
- items: node?.arguments?.[0]?.elements?.map((arg) => transformNodeFunction(arg, options)).filter(Boolean),
519
+ items: node?.arguments?.[0]?.elements?.map((arg) => transformNodeFunction(arg, options)),
557
520
  });
558
521
  }
559
522
  if (calleeName === 'NewMap') {
@@ -569,7 +532,7 @@ function transform2NewExpression(calleeName, node, options) {
569
532
  }
570
533
  else {
571
534
  typeAnnotation = utils_1.naslTypes.TypeAnnotation.createGeneric('Map', {
572
- typeArguments: node?.typeParameters?.params.map((type) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(type, options)).filter(Boolean),
535
+ typeArguments: node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation),
573
536
  });
574
537
  }
575
538
  return new utils_1.naslTypes.NewMap({
@@ -582,13 +545,13 @@ function transform2NewExpression(calleeName, node, options) {
582
545
  const typeParam = node.typeParameters?.params[0];
583
546
  const typeNamespaceAndName = typeParam ? (0, utils_1.generate)(typeParam).code : '';
584
547
  if (!typeNamespaceAndName)
585
- return (0, utils_1.throwError)(options?.parsingId, 'NewEntity 中必须指定类型', node);
548
+ (0, utils_1.throwError)(`Not allowed empty namespace in NewEntity`);
586
549
  return transform2NewStructure(typeNamespaceAndName, node.arguments[0], options);
587
550
  }
588
551
  if (calleeName === 'NewAnonymousStructure') {
589
552
  return transform2NewAnonymousStructure(node.arguments[0], options);
590
553
  }
591
- return (0, utils_1.throwError)(options?.parsingId, '在新建表达式中不支持节点类型', node.type, node);
554
+ (0, utils_1.throwError)(`Unhandled ArrowFunctionExpression node ${node.type}`);
592
555
  }
593
556
  function pushElseIf(ifNode, switchStatement, options) {
594
557
  const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
@@ -653,7 +616,7 @@ function transform2ArrayPattern(decl, options) {
653
616
  if (options.transformType === 'logic') {
654
617
  options.logic.variables.push(new utils_1.naslTypes.Variable({
655
618
  name: element.name,
656
- typeAnnotation: varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation, options) || undefined,
619
+ typeAnnotation: varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation),
657
620
  }));
658
621
  }
659
622
  }
@@ -685,7 +648,7 @@ function transform2VariableAndAddAssignment(node, options) {
685
648
  const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
686
649
  const declList = node?.declarations || [];
687
650
  let newNode;
688
- declList.forEach((decl) => {
651
+ declList?.forEach((decl) => {
689
652
  const variableName = decl.id.name;
690
653
  const isArrayPattern = decl.id?.type === 'ArrayPattern';
691
654
  if (isArrayPattern && decl.init) {
@@ -696,7 +659,7 @@ function transform2VariableAndAddAssignment(node, options) {
696
659
  let typeAnnotation;
697
660
  if (options.transformType === 'logic' && ![...options.logic.variables, ...options.logic.returns].some((variable) => variable.name === variableName)) {
698
661
  const varTypeAnnotation = decl.id.typeAnnotation?.typeAnnotation;
699
- typeAnnotation = varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation, options) || undefined;
662
+ typeAnnotation = varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation);
700
663
  options.logic.variables.push(new utils_1.naslTypes.Variable({
701
664
  name: variableName,
702
665
  typeAnnotation,
@@ -705,14 +668,14 @@ function transform2VariableAndAddAssignment(node, options) {
705
668
  if (decl.init) {
706
669
  const calleeName = (0, utils_1.generate)(decl?.init?.callee).code;
707
670
  const varTypeAnnotation = decl?.id?.typeAnnotation?.typeAnnotation;
708
- typeAnnotation = varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation, options) || undefined;
671
+ typeAnnotation = varTypeAnnotation && (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(varTypeAnnotation);
709
672
  if (calleeName === 'nasl.oql.query' && varTypeAnnotation) {
710
673
  decl.init.typeAnnotations = varTypeAnnotation;
711
674
  }
712
675
  options.typeAnnotation = typeAnnotation;
713
676
  newNode = new utils_1.naslTypes.Assignment({
714
677
  left: transformNodeFunction(decl.id, options),
715
- right: assertAssignmentRightIsNotAnonymousFunction(transformNodeFunction(decl.init, { ...options, typeAnnotation }), options) || undefined,
678
+ right: assertAssignmentRightIsNotAnonymousFunction(transformNodeFunction(decl.init, { ...options, typeAnnotation })),
716
679
  });
717
680
  }
718
681
  });
@@ -822,16 +785,6 @@ function transformIdentifier(node, options) {
822
785
  if (placeholderMap.includes(node.name)) {
823
786
  return new utils_1.naslTypes.Identifier({});
824
787
  }
825
- if (node.name === '$self') {
826
- return new utils_1.naslTypes.MemberExpression({
827
- object: new utils_1.naslTypes.Identifier({
828
- name: 'elements',
829
- }),
830
- property: new utils_1.naslTypes.Identifier({
831
- name: '$ce',
832
- }),
833
- });
834
- }
835
788
  return new utils_1.naslTypes.Identifier({
836
789
  name: node.name,
837
790
  });
@@ -860,7 +813,7 @@ function transform2SelectQueryFieldExpression(node, options) {
860
813
  // @TODO
861
814
  }
862
815
  else {
863
- return (0, utils_1.throwError)(options?.parsingId, '在 QueryFieldExpression 不支持表达式类型', expression.type, expression);
816
+ (0, utils_1.throwError)(`Unsupported expression type: ${expression.type} for QueryFieldExpression`);
864
817
  }
865
818
  }
866
819
  function transform2QueryAggregateExpression(node, options) {
@@ -869,10 +822,10 @@ function transform2QueryAggregateExpression(node, options) {
869
822
  const arg = callExpression.arguments[0];
870
823
  if (arg.type !== 'MemberExpression') {
871
824
  const code = (0, utils_1.generate)(arg).code;
872
- return (0, utils_1.throwError)(options?.parsingId, `聚合函数的输入只能是表字段(实体.属性),但AVG(${code})中的${code}不是表字段`);
825
+ (0, utils_1.throwError)(`聚合函数的输入只能是表字段(实体.属性),但AVG(${code})中的${code}不是表字段`);
873
826
  }
874
827
  if (callExpression.arguments?.length > 1) {
875
- return (0, utils_1.throwError)(options?.parsingId, `聚合函数${callExpression.callee.name}只支持一个参数`);
828
+ (0, utils_1.throwError)(`聚合函数${callExpression.callee.name}只支持一个参数`);
876
829
  }
877
830
  return new utils_1.naslTypes.QueryAggregateExpression({
878
831
  asName: asNameNode.name,
@@ -882,10 +835,10 @@ function transform2QueryAggregateExpression(node, options) {
882
835
  }
883
836
  function transform2AnonymousFunction(node, options) {
884
837
  if (node.body.type === 'BlockStatement')
885
- return (0, utils_1.throwError)(options?.parsingId, 'Anonymous function with block statement is not supported', node);
838
+ (0, utils_1.throwError)('Anonymous function with block statement is not supported');
886
839
  const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
887
840
  return new utils_1.naslTypes.AnonymousFunction({
888
- params: node.params.map((param) => transform2Param(param, options)).filter(Boolean),
841
+ params: node.params.map((param) => transform2Param(param)),
889
842
  body: transformNodeFunction(node.body, options),
890
843
  });
891
844
  }
@@ -914,7 +867,7 @@ function transform2Assignment(node, options) {
914
867
  }
915
868
  return new utils_1.naslTypes.Assignment({
916
869
  left: transformNodeFunction(node.left, options),
917
- right: assertAssignmentRightIsNotAnonymousFunction(transformNodeFunction(node.right, options), options) || undefined,
870
+ right: assertAssignmentRightIsNotAnonymousFunction(transformNodeFunction(node.right, options)),
918
871
  });
919
872
  }
920
873
  exports.transform2Assignment = transform2Assignment;
@@ -991,15 +944,15 @@ function transformReturnStatement2AssignmentOrEnd(node, options) {
991
944
  }
992
945
  }
993
946
  if (!logic.returns.length) {
994
- const typeAnnotation = node?.argument?.type === 'TSAsExpression' ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node?.argument?.typeAnnotation, options) || undefined : undefined;
947
+ const typeAnnotation = node?.argument?.type === 'TSAsExpression' ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node?.argument?.typeAnnotation) : undefined;
995
948
  logic.returns.push(new utils_1.naslTypes.Return({
996
949
  name: 'result',
997
950
  typeAnnotation
998
951
  }));
999
952
  }
1000
953
  const leftName = logic.returns[0].name;
1001
- const right = assertAssignmentRightIsNotAnonymousFunction(transformNodeFunction(argument, options), options) || undefined;
1002
- if (right && right.concept === 'Identifier' && right.name === leftName) {
954
+ const right = assertAssignmentRightIsNotAnonymousFunction(transformNodeFunction(argument, options));
955
+ if (right.concept === 'Identifier' && right.name === leftName) {
1003
956
  return new utils_1.naslTypes.End();
1004
957
  }
1005
958
  else {
@@ -1049,7 +1002,7 @@ function transform2PartialNewComposite(node, options) {
1049
1002
  const rights = [];
1050
1003
  const structureProperties = [];
1051
1004
  const assignmentLines = [];
1052
- const newProperties = (node?.properties || node?.arguments?.[0]?.properties);
1005
+ const newProperties = (node?.properties || node?.arguments?.[0]?.properties)?.filter((arg) => arg?.value?.type !== 'ConditionalExpression');
1053
1006
  let idx = 0;
1054
1007
  newProperties?.forEach((arg, index) => {
1055
1008
  properties.push(transformNodeFunction(arg.key, options));
@@ -1142,7 +1095,8 @@ function transformNewExpression(node, options) {
1142
1095
  else if (calleeName.includes('.entities.') || calleeName.includes('.structures.')) {
1143
1096
  return transform2NewStructure(calleeName, node.arguments[0], options);
1144
1097
  }
1145
- return (0, utils_1.throwError)(options?.parsingId, '在新建表达式中不支持节点类型', node.type, node);
1098
+ const errCode = (0, utils_1.generate)(node).code;
1099
+ (0, utils_1.throwError)(`Unhandled node ${node.type}: ${errCode}`);
1146
1100
  }
1147
1101
  exports.transformNewExpression = transformNewExpression;
1148
1102
  function transformMemberExpression(node, options) {
@@ -1179,31 +1133,18 @@ function transformMemberExpression(node, options) {
1179
1133
  });
1180
1134
  }
1181
1135
  if (calleeName?.startsWith('$refs.')) {
1182
- if (callee[0].type === 'CallExpression') {
1183
- const callExpression = callee[0];
1184
- const callCallee = flatMemberExpression(callExpression.callee);
1185
- const callCalleeName = (0, utils_1.generate)(callExpression)?.code;
1186
- let callResult = transformCall2CallViewElementLogic(callExpression, callCalleeName, callCallee, options);
1187
- const remainingCallee = callee.slice(1);
1188
- if (remainingCallee.length > 0 && callResult) {
1189
- return unflatMemberExpression(remainingCallee, options, callResult);
1190
- }
1191
- return callResult;
1192
- }
1193
- else {
1194
- const componentName = callee?.[1]?.name;
1195
- const propertyName = callee?.[2]?.name;
1196
- return new utils_1.naslTypes.MemberExpression({
1197
- object: new utils_1.naslTypes.Identifier({
1198
- namespace: `elements.${componentName}.property`,
1199
- name: componentName,
1200
- }),
1201
- property: new utils_1.naslTypes.Identifier({
1202
- namespace: propertyName,
1203
- name: propertyName,
1204
- }),
1205
- });
1206
- }
1136
+ const componentName = callee?.[1]?.name;
1137
+ const propertyName = callee?.[2]?.name;
1138
+ return new utils_1.naslTypes.MemberExpression({
1139
+ object: new utils_1.naslTypes.Identifier({
1140
+ namespace: `elements.${componentName}.property`,
1141
+ name: componentName,
1142
+ }),
1143
+ property: new utils_1.naslTypes.Identifier({
1144
+ namespace: propertyName,
1145
+ name: propertyName,
1146
+ }),
1147
+ });
1207
1148
  }
1208
1149
  const regex = /^(app\..+?)\.variables\.(.+)$/;
1209
1150
  if (regex.test(calleeName)) {
@@ -1258,88 +1199,12 @@ function transformMemberExpression(node, options) {
1258
1199
  });
1259
1200
  }
1260
1201
  exports.transformMemberExpression = transformMemberExpression;
1261
- /**
1262
- * @example (function match(_value) {
1263
- if (_value === true) {
1264
- return 'green'
1265
- } else {
1266
- return 'red'
1267
- }
1268
- })(nasl.util.Convert<Boolean>(enabled))
1269
- */
1270
- function transformCallFunctionExpression2Match(node, calleeName, callee, options) {
1271
- const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
1272
- const arg = node.arguments[0];
1273
- const ifStatement = node.callee.body.body[0];
1274
- if (ifStatement.type !== 'IfStatement') {
1275
- return (0, utils_1.throwError)(options?.parsingId, 'Match 函数体内必须是一个 if 语句', ifStatement);
1276
- }
1277
- const flatedIfStatements = flatIfStatementForMatch(ifStatement);
1278
- const match = new utils_1.naslTypes.Match({
1279
- expression: transformNodeFunction(arg, options),
1280
- isExpression: true,
1281
- cases: flatedIfStatements.map((_case) => {
1282
- let argument;
1283
- if (_case.consequent.type === 'BlockStatement') {
1284
- if (_case.consequent.body.length === 1 && _case.consequent.body[0].type === 'ReturnStatement') {
1285
- argument = _case.consequent.body[0].argument;
1286
- }
1287
- else {
1288
- return (0, utils_1.throwError)(options?.parsingId, 'Match Case 的 if 中只能写一个 return 语句', _case.consequent);
1289
- }
1290
- }
1291
- else {
1292
- if (_case.consequent.type === 'ReturnStatement') {
1293
- argument = _case.consequent.argument;
1294
- }
1295
- else {
1296
- return (0, utils_1.throwError)(options?.parsingId, 'Match Case 的 if 中只能写一个 return 语句', _case.consequent);
1297
- }
1298
- }
1299
- const bodyNode = transformNodeFunction(argument, options);
1300
- return new utils_1.naslTypes.MatchCase({
1301
- isMatchedTypeEnumable: false,
1302
- patterns: !_case.test ? [] : flatMatchPatternsExpression(transformNodeFunction(_case.test, options)),
1303
- body: bodyNode ? [bodyNode] : [],
1304
- });
1305
- }).filter(Boolean),
1306
- });
1307
- if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
1308
- match.cases.push(new utils_1.naslTypes.MatchCase({
1309
- isMatchedTypeEnumable: false,
1310
- patterns: [],
1311
- body: [],
1312
- }));
1313
- }
1314
- match.cases.forEach((case_) => {
1315
- if (case_.patterns.length) {
1316
- if (case_.patterns[0].concept === 'BooleanLiteral' || case_.patterns[0].concept === 'StringLiteral') {
1317
- case_.isMatchedTypeEnumable = true;
1318
- }
1319
- if (case_.patterns[0].concept === 'MemberExpression') {
1320
- case_.isMatchedTypeEnumable = true;
1321
- case_.patterns[0] = new utils_1.naslTypes.MemberExpression({
1322
- object: {
1323
- concept: 'Identifier',
1324
- name: case_.patterns[0].object.property.name,
1325
- folded: false,
1326
- namespace: 'app.enums'
1327
- },
1328
- property: {
1329
- concept: 'Identifier',
1330
- name: case_.patterns[0].property.value,
1331
- folded: false,
1332
- },
1333
- });
1334
- }
1335
- }
1336
- });
1337
- return match;
1202
+ function transformCallCall2Match(node, options) {
1203
+ // (function match() {})(...) 的情况
1204
+ return undefined;
1338
1205
  }
1339
- exports.transformCallFunctionExpression2Match = transformCallFunctionExpression2Match;
1206
+ exports.transformCallCall2Match = transformCallCall2Match;
1340
1207
  function transformCall2CallViewElementLogic(node, calleeName, callee, options) {
1341
- if (options?.isRestricted)
1342
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1343
1208
  if (calleeName?.includes('getPropValue') || calleeName?.includes('setPropValue')) {
1344
1209
  const componentName = callee?.[1]?.name;
1345
1210
  const propertyName = node?.arguments?.[0]?.value;
@@ -1374,8 +1239,6 @@ function transformCall2CallViewElementLogic(node, calleeName, callee, options) {
1374
1239
  }
1375
1240
  exports.transformCall2CallViewElementLogic = transformCall2CallViewElementLogic;
1376
1241
  function transformCall2CallEntityLogic(node, calleeName, callee, options) {
1377
- if (options?.isRestricted)
1378
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1379
1242
  const entityName = callee[0].name.replace(/Entity$/, '');
1380
1243
  // console.log('callee', callee);
1381
1244
  return new utils_1.naslTypes.CallLogic({
@@ -1388,8 +1251,6 @@ function transformCall2CallEntityLogic(node, calleeName, callee, options) {
1388
1251
  }
1389
1252
  exports.transformCall2CallEntityLogic = transformCall2CallEntityLogic;
1390
1253
  function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
1391
- if (options?.isRestricted)
1392
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1393
1254
  if (calleeName?.includes('.entities.')) {
1394
1255
  const calleeNamespace = (0, utils_1.generate)(node?.callee?.object?.object)?.code;
1395
1256
  const entityName = node?.callee?.object?.property?.name?.replace(/Entity$/, '');
@@ -1448,10 +1309,6 @@ function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
1448
1309
  }
1449
1310
  exports.transformCall2CallDataSourceLogic = transformCall2CallDataSourceLogic;
1450
1311
  function transformCall2OQLQuery(node, calleeName, callee, options) {
1451
- if (options?.isInFrontend)
1452
- return (0, utils_1.throwError)(options?.parsingId, 'OQL组件不支持在前端使用', node);
1453
- if (options?.isRestricted)
1454
- return (0, utils_1.throwError)(options?.parsingId, 'OQL组件不支持在组件或默认值表达式中使用', node);
1455
1312
  if (options.transformType === 'logic' && options?.logicType === 'global_logic') {
1456
1313
  // const _typeAnnotation = node?.typeParameters?.params?.length > 0 ? naslTypes.TypeAnnotation.createGeneric('List', {
1457
1314
  // typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType })),
@@ -1461,13 +1318,11 @@ function transformCall2OQLQuery(node, calleeName, callee, options) {
1461
1318
  return new utils_1.naslTypes.OqlQueryComponent({
1462
1319
  dataSource: 'app.dataSources.defaultDS',
1463
1320
  code,
1464
- typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node?.typeAnnotations, options) || undefined,
1321
+ typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node?.typeAnnotations)
1465
1322
  });
1466
1323
  }
1467
1324
  }
1468
1325
  function transformCall2ConsoleLog(node, calleeName, callee, options) {
1469
- if (options?.isRestricted)
1470
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1471
1326
  return new utils_1.naslTypes.CallLogic({
1472
1327
  calleeNamespace: 'nasl.logging',
1473
1328
  calleeName: 'INFO',
@@ -1479,8 +1334,6 @@ function transformCall2ConsoleLog(node, calleeName, callee, options) {
1479
1334
  }
1480
1335
  exports.transformCall2ConsoleLog = transformCall2ConsoleLog;
1481
1336
  function transformCall2Logging(node, calleeName, callee, options) {
1482
- if (options?.isRestricted)
1483
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1484
1337
  const newArguments = node.arguments.map((arg) => new utils_1.naslTypes.Argument({
1485
1338
  expression: arg?.name === "undefined" ?
1486
1339
  new utils_1.naslTypes.StringLiteral()
@@ -1512,7 +1365,7 @@ function transformCall2JSONFunctions(node, calleeName, callee, options) {
1512
1365
  keyword: 'arg',
1513
1366
  }),
1514
1367
  ],
1515
- typeArguments: node?.typeParameters?.params.map((curType) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)({ ...curType }, options)).filter(Boolean),
1368
+ typeArguments: node?.typeParameters?.params.map((curType) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)({ ...curType })),
1516
1369
  });
1517
1370
  }
1518
1371
  exports.transformCall2JSONFunctions = transformCall2JSONFunctions;
@@ -1529,12 +1382,12 @@ function transform2CallFunction(node, calleeName, argument, options) {
1529
1382
  keyword: func && func?.params[index]?.name || `param${index + 1}`,
1530
1383
  });
1531
1384
  });
1532
- let newTypeArguments = node?.typeParameters?.params.map((curType) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)({ ...curType }, options)).filter(Boolean);
1533
- // if (calleeName === 'ListRepeat') {
1534
- // newTypeArguments = [
1535
- // new naslTypes.TypeAnnotation()
1536
- // ];
1537
- // }
1385
+ let newTypeArguments = node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation);
1386
+ if (calleeName === 'ListRepeat') {
1387
+ newTypeArguments = [
1388
+ new utils_1.naslTypes.TypeAnnotation()
1389
+ ];
1390
+ }
1538
1391
  if (calleeName === 'Concat') {
1539
1392
  const expressions = newArguments.map((item) => item.expression);
1540
1393
  return new utils_1.naslTypes.StringInterpolation({
@@ -1563,7 +1416,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
1563
1416
  const content = np?.toNaturalTS();
1564
1417
  const noContent = np?.toNaturalTS()?.includes('__IDENTIFIER__');
1565
1418
  if (!np && !p?.defaultExpression) {
1566
- return (0, utils_1.throwError)(options?.parsingId, `函数${calleeName}生成不符合标准的函数调用`, content);
1419
+ (0, utils_1.throwError)(`函数${calleeName}生成不符合标准的函数调用`);
1567
1420
  }
1568
1421
  if (np && calleeName === 'ListDistinctBy') {
1569
1422
  if (idx === 1) {
@@ -1596,7 +1449,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
1596
1449
  });
1597
1450
  }
1598
1451
  else {
1599
- return (0, utils_1.throwError)(options?.parsingId, `函数${calleeName}不存在`, node.callee, node);
1452
+ (0, utils_1.throwError)(`函数${calleeName}不存在`);
1600
1453
  }
1601
1454
  if (!func.params?.length) {
1602
1455
  const needDefaultParam = ['CurrDate', 'CurrTime', 'CurrDateTime'];
@@ -1618,7 +1471,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
1618
1471
  // 这两个参数比较特殊,可以无限加参数,不再判断参数数量
1619
1472
  const excludes = ['HasValue', 'ListSort'];
1620
1473
  if (func.params?.length !== newArguments?.length && !excludes.includes(calleeName)) {
1621
- return (0, utils_1.throwError)(options?.parsingId, `函数${calleeName}生成不符合标准的函数调用,参数数量不匹配`, node.callee, node);
1474
+ (0, utils_1.throwError)(`函数${calleeName}生成不符合标准的函数调用,参数数量不匹配`);
1622
1475
  }
1623
1476
  else {
1624
1477
  newArguments?.forEach((arg, idx) => {
@@ -1635,22 +1488,19 @@ function transform2CallFunction(node, calleeName, argument, options) {
1635
1488
  // typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType, typeNamespace })),
1636
1489
  });
1637
1490
  if (calleeName === 'ListSort') {
1638
- const handledNode = (0, utils_1.handleListSort)(nodeElement?.toJSON(), options);
1639
- return handledNode && new utils_1.naslTypes.CallFunction(handledNode);
1491
+ return new utils_1.naslTypes.CallFunction((0, utils_1.handleListSort)(nodeElement?.toJSON()));
1640
1492
  }
1641
1493
  if (options.transformType === 'logic' && options?.inCallQueryComponentField) {
1642
- return (0, utils_1.throwError)(options?.parsingId, '数据查询中不支持使用内置函数', nodeElement.calleeName, node);
1494
+ (0, utils_1.throwError)(`数据查询中不支持内置函数${nodeElement.calleeName}`);
1643
1495
  }
1644
1496
  return nodeElement;
1645
1497
  }
1646
1498
  exports.transform2CallFunction = transform2CallFunction;
1647
1499
  function transform2SqlFunction(node, calleeName, argument, options) {
1648
1500
  if (options.inCallQueryComponentField && !['WHERE', 'HAVING', 'ORDER_BY'].includes(options.inCallQueryComponentField)) {
1649
- return (0, utils_1.throwError)(options?.parsingId, `数据查询中只有 WHERE, HAVING, ORDER_BY 支持 SQL 函数,而当前字段为 ${options.inCallQueryComponentField}`, node.callee, node);
1501
+ (0, utils_1.throwError)(`数据查询中只有 WHERE, HAVING, ORDER_BY 支持 SQL 函数,而当前字段为 ${options.inCallQueryComponentField}`);
1650
1502
  }
1651
1503
  const specFunList = ['COUNT', 'COUNTD', 'SUM', 'AVG', 'MAX', 'MIN'];
1652
- // TODO: 先写死了 mysql,后续需要传入: 参考 requestSqlFunctions
1653
- const func = server_1.default ? server_1.default?.getSqlFunction('mysql', calleeName) : null;
1654
1504
  let addArguments = [];
1655
1505
  if (specFunList.includes(calleeName)) {
1656
1506
  const value = calleeName === 'COUNTD' ? 'DISTINCT' : 'ALL';
@@ -1663,20 +1513,20 @@ function transform2SqlFunction(node, calleeName, argument, options) {
1663
1513
  }
1664
1514
  const newArguments = argument.map((arg, index) => new utils_1.naslTypes.Argument({
1665
1515
  expression: fixExpression(arg, options),
1666
- keyword: func?.params[index]?.name || `param${index + 1}`,
1516
+ keyword: 'str', // `arg${index + 1}`,
1667
1517
  }));
1668
1518
  const nodeElement = new utils_1.naslTypes.CallFunction({
1669
1519
  calleeNamespace: 'nasl.sqlFunction',
1670
1520
  calleeName: utils_1.replaceCallFunctionMap?.[calleeName] || calleeName,
1671
1521
  arguments: [...addArguments, ...newArguments],
1672
- typeArguments: node?.typeParameters?.params.map((curType) => (0, transform2TypeAnnotation_1.transform2TypeAnnotation)({ ...curType }, options)).filter(Boolean),
1522
+ typeArguments: node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation),
1673
1523
  // typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType, typeNamespace })),
1674
1524
  });
1675
1525
  return nodeElement;
1676
1526
  }
1677
1527
  function transformCall2CallFunction(node, calleeName, callee, options) {
1678
1528
  let curCalleeName;
1679
- if (callee.length >= 3)
1529
+ if (callee.length === 3)
1680
1530
  curCalleeName = callee[callee.length - 1].name;
1681
1531
  else {
1682
1532
  let _callee = callee[0].callee;
@@ -1684,10 +1534,11 @@ function transformCall2CallFunction(node, calleeName, callee, options) {
1684
1534
  _callee = _callee.callee;
1685
1535
  curCalleeName = _callee.property.name;
1686
1536
  }
1687
- const argument = callee.length >= 3 ? node.arguments : callee[0].arguments;
1688
- // if (['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN'].includes(curCalleeName)) {
1689
- // return transformCallExpressionToBinaryExpression(node, curCalleeName, callee, options);
1690
- // };
1537
+ const argument = callee.length === 3 ? node.arguments : callee[0].arguments;
1538
+ if (['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN'].includes(curCalleeName)) {
1539
+ return transformCallExpressionToBinaryExpression(node, curCalleeName, callee, options);
1540
+ }
1541
+ ;
1691
1542
  if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
1692
1543
  return transform2NewExpression(curCalleeName, node, options);
1693
1544
  }
@@ -1696,31 +1547,10 @@ function transformCall2CallFunction(node, calleeName, callee, options) {
1696
1547
  exports.transformCall2CallFunction = transformCall2CallFunction;
1697
1548
  function transform2UIFunction(node, calleeName, callee, options) {
1698
1549
  if (callee[2].name === 'destination') {
1699
- let namespaceNode = node.arguments[0];
1700
- let namespace = '';
1701
- if (namespaceNode.type === 'TemplateLiteral') {
1702
- namespace = namespaceNode.quasis[0]?.value?.cooked;
1703
- }
1704
- else if (namespaceNode.type === 'StringLiteral') {
1705
- namespace = namespaceNode.value;
1706
- }
1707
- else {
1708
- namespace = (0, utils_1.generate)(namespaceNode).code;
1709
- }
1710
- let nsArr;
1711
- let viewNamespace = '';
1712
- let viewName = '';
1713
- if (namespace.startsWith('app.frontendTypes.')) {
1714
- nsArr = namespace.split('.');
1715
- viewName = nsArr.pop();
1716
- viewNamespace = nsArr.join('.');
1717
- }
1718
- else {
1719
- nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
1720
- const pageType = nsArr.shift();
1721
- viewName = nsArr.pop();
1722
- viewNamespace = `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`;
1723
- }
1550
+ const namespace = node.arguments[0].value;
1551
+ const nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
1552
+ const pageType = nsArr.shift();
1553
+ const viewName = nsArr.pop();
1724
1554
  const newArguments = node?.arguments?.slice(1);
1725
1555
  let argument = [];
1726
1556
  if (newArguments?.[0]?.type === 'ObjectExpression') {
@@ -1736,7 +1566,7 @@ function transform2UIFunction(node, calleeName, callee, options) {
1736
1566
  }));
1737
1567
  }
1738
1568
  return new utils_1.naslTypes.Destination({
1739
- viewNamespace,
1569
+ viewNamespace: `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`,
1740
1570
  viewName,
1741
1571
  arguments: argument,
1742
1572
  });
@@ -1746,8 +1576,6 @@ function transform2UIFunction(node, calleeName, callee, options) {
1746
1576
  link: fixExpression(node?.arguments[0], options),
1747
1577
  });
1748
1578
  }
1749
- if (options?.isRestricted)
1750
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1751
1579
  return new utils_1.naslTypes.CallLogic({
1752
1580
  calleeNamespace: 'nasl.ui',
1753
1581
  calleeName: callee[2].name,
@@ -1784,11 +1612,11 @@ function transform2ForEachStatement(node, calleeName, callee, options) {
1784
1612
  each: transformNodeFunction(newCallee[0], options),
1785
1613
  start: transformNodeFunction(newCallee[1], options),
1786
1614
  end: newCallee[2]?.name === '__IDENTIFIER__' ? undefined : transformNodeFunction(newCallee[2], options),
1787
- item: arrowFunction?.params?.[0] ? transform2Param(arrowFunction.params[0], options) || undefined : new utils_1.naslTypes.Param({
1615
+ item: arrowFunction?.params?.[0] ? transform2Param(arrowFunction.params[0]) : new utils_1.naslTypes.Param({
1788
1616
  name: 'item',
1789
1617
  typeAnnotation: undefined,
1790
1618
  }),
1791
- index: arrowFunction?.params?.[1] ? transform2Param(arrowFunction.params[1], options) || undefined : new utils_1.naslTypes.Param({
1619
+ index: arrowFunction?.params?.[1] ? transform2Param(arrowFunction.params[1]) : new utils_1.naslTypes.Param({
1792
1620
  name: `index_${(0, utils_2.uuidv4)().slice(0, 4)}`,
1793
1621
  typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
1794
1622
  }),
@@ -1815,8 +1643,8 @@ function transformForOf2ForEachStatement(node, options) {
1815
1643
  let endNode;
1816
1644
  if (node?.right?.type === 'CallExpression') {
1817
1645
  const rightNode = node?.right;
1818
- const calleeName = (0, utils_1.generate)(rightNode.callee).code;
1819
- const hasListEntries = ['ListEntries', 'nasl.util.ListEntries'].includes(calleeName);
1646
+ const calleeName = rightNode?.callee?.type === 'Identifier' && rightNode?.callee?.name;
1647
+ const hasListEntries = calleeName === 'ListEntries';
1820
1648
  const areaArguments = rightNode?.arguments;
1821
1649
  eachNode = hasListEntries ? areaArguments?.[0] : rightNode;
1822
1650
  startNode = hasListEntries ? areaArguments?.[1] : undefined;
@@ -1832,11 +1660,11 @@ function transformForOf2ForEachStatement(node, options) {
1832
1660
  typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
1833
1661
  }),
1834
1662
  end: endNode?.name === '__IDENTIFIER__' ? undefined : endNode ? transformNodeFunction(endNode, options) : undefined,
1835
- item: itemNode ? transform2Param(itemNode, options) || undefined : new utils_1.naslTypes.Param({
1663
+ item: itemNode ? transform2Param(itemNode) : new utils_1.naslTypes.Param({
1836
1664
  name: 'item',
1837
1665
  typeAnnotation: undefined,
1838
1666
  }),
1839
- index: indexNode ? transform2Param(indexNode, options) || undefined : new utils_1.naslTypes.Param({
1667
+ index: indexNode ? transform2Param(indexNode) : new utils_1.naslTypes.Param({
1840
1668
  name: `index_${(0, utils_2.uuidv4)().slice(0, 2)}`,
1841
1669
  typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
1842
1670
  }),
@@ -1856,8 +1684,8 @@ function transformForEach2ForEachStatement(node, calleeName, callee, options) {
1856
1684
  value: '0',
1857
1685
  typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
1858
1686
  }),
1859
- item: transform2Param(arrowFunction.params[0], options) || undefined,
1860
- index: arrowFunction.params[1] ? transform2Param(arrowFunction.params[1], options) || undefined : new utils_1.naslTypes.Param({
1687
+ item: transform2Param(arrowFunction.params[0]),
1688
+ index: arrowFunction.params[1] ? transform2Param(arrowFunction.params[1]) : new utils_1.naslTypes.Param({
1861
1689
  name: `index_${(0, utils_2.uuidv4)().slice(0, 2)}`,
1862
1690
  typeAnnotation: utils_1.naslTypes.TypeAnnotation.createPrimitive('Long'),
1863
1691
  }),
@@ -1867,8 +1695,6 @@ function transformForEach2ForEachStatement(node, calleeName, callee, options) {
1867
1695
  }
1868
1696
  exports.transformForEach2ForEachStatement = transformForEach2ForEachStatement;
1869
1697
  function transformAlert2ShowMessage(node, calleeName, callee, options) {
1870
- if (options?.isRestricted)
1871
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1872
1698
  return new utils_1.naslTypes.CallLogic({
1873
1699
  calleeNamespace: 'nasl.ui',
1874
1700
  calleeName: 'showMessage',
@@ -1880,8 +1706,6 @@ function transformAlert2ShowMessage(node, calleeName, callee, options) {
1880
1706
  }
1881
1707
  exports.transformAlert2ShowMessage = transformAlert2ShowMessage;
1882
1708
  function transformCall2Interface(node, calleeName, callee, options) {
1883
- if (options?.isRestricted)
1884
- return (0, utils_1.throwError)(options?.parsingId, '调用接口不支持在组件或默认值表达式中使用', node);
1885
1709
  return new utils_1.naslTypes.CallInterface({
1886
1710
  calleeNamespace: (0, utils_1.generate)(node.callee.object).code,
1887
1711
  calleeName: callee[callee.length - 1].name,
@@ -1893,15 +1717,13 @@ function transformCall2Interface(node, calleeName, callee, options) {
1893
1717
  }
1894
1718
  exports.transformCall2Interface = transformCall2Interface;
1895
1719
  function transformCall2Connector(node, calleeName, callee, options) {
1896
- if (options?.isRestricted)
1897
- return (0, utils_1.throwError)(options?.parsingId, '调用连接器不支持在组件或默认值表达式中使用', node);
1898
1720
  let calleeConnectionName = undefined;
1899
1721
  let calleeNamespace = undefined;
1900
1722
  let calleeNamespacePrefix = `connector.${callee[1].name}`;
1901
1723
  if (callee.length === 5) {
1902
1724
  const connectArg = callee[2].arguments[0];
1903
1725
  if (!connectArg || connectArg.type !== 'StringLiteral') {
1904
- return (0, utils_1.throwError)(options?.parsingId, '调用 connector 的 connect 参数不正确,只允许使用字符串字面量', node);
1726
+ (0, utils_1.throwError)(`调用 connector 的 connect 参数不正确,只允许使用字符串字面量`);
1905
1727
  }
1906
1728
  calleeConnectionName = connectArg.value;
1907
1729
  const noNamespace = callee[3].name === 'logics';
@@ -1916,7 +1738,7 @@ function transformCall2Connector(node, calleeName, callee, options) {
1916
1738
  calleeNamespace = calleeNamespacePrefix;
1917
1739
  }
1918
1740
  else {
1919
- return (0, utils_1.throwError)(options?.parsingId, `调用 connector,参数数量不正确,当前参数数量为 ${callee.length},${calleeName}`, node);
1741
+ (0, utils_1.throwError)(`调用 connector,参数数量不正确,当前参数数量为 ${callee.length},${calleeName}`);
1920
1742
  }
1921
1743
  return new utils_1.naslTypes.CallConnector({
1922
1744
  calleeConnectionName,
@@ -1929,8 +1751,6 @@ function transformCall2Connector(node, calleeName, callee, options) {
1929
1751
  }
1930
1752
  exports.transformCall2Connector = transformCall2Connector;
1931
1753
  function transformCall2Extension(node, calleeName, callee, options) {
1932
- if (options?.isRestricted)
1933
- return (0, utils_1.throwError)(options?.parsingId, '调用扩展逻辑不支持在组件或默认值表达式中使用', node);
1934
1754
  return new utils_1.naslTypes.CallLogic({
1935
1755
  calleeNamespace: (0, utils_1.generate)(node?.callee?.object)?.code,
1936
1756
  calleeName: callee?.[callee?.length - 1]?.name,
@@ -1940,26 +1760,70 @@ function transformCall2Extension(node, calleeName, callee, options) {
1940
1760
  });
1941
1761
  }
1942
1762
  exports.transformCall2Extension = transformCall2Extension;
1763
+ function transformArrowFunction2Match(node, calleeName, callee, options) {
1764
+ const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
1765
+ // NOTE: 适用于 if else
1766
+ const newCallee = node.callee.body.body;
1767
+ if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFunction') {
1768
+ const match = new utils_1.naslTypes.Match({
1769
+ expression: fixExpression(newCallee[0], options),
1770
+ isExpression: options.transformType !== 'logic',
1771
+ cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new utils_1.naslTypes.MatchCase({
1772
+ patterns: !_case.test ? [] : flatMatchPatternsExpression(transformNodeFunction(_case.test, options)),
1773
+ body: transformBlockBody(_case.consequent.body.filter((item) => item.type !== 'BreakStatement'), options),
1774
+ })),
1775
+ });
1776
+ if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
1777
+ match.cases.push(new utils_1.naslTypes.MatchCase({
1778
+ patterns: [],
1779
+ body: [],
1780
+ }));
1781
+ }
1782
+ match.cases.forEach((case_) => {
1783
+ if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
1784
+ case_.isMatchedTypeEnumable = true;
1785
+ }
1786
+ if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
1787
+ case_.isMatchedTypeEnumable = true;
1788
+ case_.patterns[0] = new utils_1.naslTypes.MemberExpression({
1789
+ object: {
1790
+ concept: 'Identifier',
1791
+ name: case_.patterns[0].object.property.name,
1792
+ folded: false,
1793
+ namespace: 'app.enums'
1794
+ },
1795
+ property: {
1796
+ concept: 'Identifier',
1797
+ name: case_.patterns[0].property.value,
1798
+ folded: false,
1799
+ },
1800
+ });
1801
+ }
1802
+ });
1803
+ return match;
1804
+ }
1805
+ if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
1806
+ const switchStatement = transformNodeFunction(newCallee[0].body.body[0], options);
1807
+ return switchStatement;
1808
+ }
1809
+ (0, utils_1.throwError)(`Unhandled ArrowFunctionExpression node ${node.type}`);
1810
+ }
1811
+ exports.transformArrowFunction2Match = transformArrowFunction2Match;
1943
1812
  function transformTSAsExpression(node, options) {
1944
1813
  if (node.expression.type === 'NumericLiteral') {
1945
- return transform2NumericLiteral(node.expression, { ...options, typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation, options) || undefined });
1814
+ return transform2NumericLiteral(node.expression, { ...options, typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation) });
1946
1815
  }
1947
1816
  else if (node.expression.type === 'ArrayExpression') {
1948
- const typeAnnotation = (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation, options) || undefined;
1817
+ const typeAnnotation = (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation);
1949
1818
  if (typeAnnotation.typeName !== 'List' && typeAnnotation.typeNamespace !== 'nasl.collection')
1950
- return (0, utils_1.throwError)(options?.parsingId, `列表 as 必须为 List 类型`, node);
1819
+ (0, utils_1.throwError)(`列表 as 必须为 List 类型`);
1951
1820
  return transformArrayExpression(node.expression, { ...options, typeAnnotation });
1952
1821
  }
1953
- else if (node.expression.type === 'NullLiteral') {
1954
- return transform2NullLiteral(node.expression, options);
1955
- }
1956
1822
  else {
1957
- return (0, utils_1.throwError)(options?.parsingId, '表达式不支持使用 as 关键字', node.expression.type, node.expression);
1823
+ (0, utils_1.throwError)(`表达式 ${node.expression.type} 不支持使用 as 关键字`);
1958
1824
  }
1959
1825
  }
1960
1826
  function transformCall2CallViewLogic(node, calleeName, callee, options) {
1961
- if (options?.isRestricted)
1962
- return (0, utils_1.throwError)(options?.parsingId, '调用页面逻辑不支持在组件或默认值表达式中使用', node);
1963
1827
  return new utils_1.naslTypes.CallLogic({
1964
1828
  calleeNamespace: '',
1965
1829
  calleeName: calleeName.slice('viewLogic_'.length),
@@ -1970,13 +1834,11 @@ function transformCall2CallViewLogic(node, calleeName, callee, options) {
1970
1834
  }
1971
1835
  exports.transformCall2CallViewLogic = transformCall2CallViewLogic;
1972
1836
  function transformCall2Logic(node, calleeName, callee, options) {
1973
- if (options?.isRestricted)
1974
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
1975
1837
  if (utils_1.callFunctionMap.includes(calleeName)) {
1976
1838
  // 未带前缀,补一下
1977
1839
  return transform2CallFunction(node, calleeName, node?.arguments || [], options);
1978
1840
  }
1979
- else if (server_1.default.getSqlFunction('mysql', calleeName) || calleeName === 'COUNTD') {
1841
+ else if (utils_1.sqlFunctions.includes(calleeName) || calleeName === 'COUNTD') {
1980
1842
  return transform2SqlFunction(node, calleeName, node?.arguments || [], options);
1981
1843
  }
1982
1844
  let newCalleeName = calleeName?.includes('__IDENTIFIER__') ? undefined : calleeName;
@@ -1996,8 +1858,6 @@ function transformCall2Logic(node, calleeName, callee, options) {
1996
1858
  }
1997
1859
  exports.transformCall2Logic = transformCall2Logic;
1998
1860
  function transformCall2LogicWithAuth(node, calleeName, callee, options) {
1999
- if (options?.isRestricted)
2000
- return (0, utils_1.throwError)(options?.parsingId, '调用逻辑不支持在组件或默认值表达式中使用', node);
2001
1861
  return new utils_1.naslTypes.CallLogic({
2002
1862
  calleeNamespace: `nasl.auth`,
2003
1863
  calleeName: callee[callee.length - 1].name,
@@ -2022,10 +1882,10 @@ function flatCallQueryComponentChainNode(node, options) {
2022
1882
  const calleeName = node.callee.name;
2023
1883
  if (['FROM', 'INNER_JOIN', 'LEFT_JOIN', 'RIGHT_JOIN', 'OUTER_JOIN'].includes(calleeName)) {
2024
1884
  if (node.arguments[1].type !== 'ArrowFunctionExpression')
2025
- return (0, utils_1.throwError)(options?.parsingId, 'FROM should have a ArrowFunctionExpression as the second argument', node.arguments[1], node);
1885
+ (0, utils_1.throwError)('FROM should have a ArrowFunctionExpression as the second argument');
2026
1886
  const arrowFunctionExpression = node.arguments[1];
2027
1887
  if (arrowFunctionExpression.body.type !== 'CallExpression')
2028
- return (0, utils_1.throwError)(options?.parsingId, 'FROM should have a CallExpression as the body of ArrowFunctionExpression', arrowFunctionExpression.body, node);
1888
+ (0, utils_1.throwError)('FROM should have a CallExpression as the body of ArrowFunctionExpression');
2029
1889
  const body = arrowFunctionExpression.body;
2030
1890
  const callExpressions = flatChainCallExpression(body);
2031
1891
  const joinNode = callExpressions?.filter((item) => item?.callee?.name.includes('_JOIN'));
@@ -2035,13 +1895,13 @@ function flatCallQueryComponentChainNode(node, options) {
2035
1895
  FROM(T1Entity, T1 => ${name}(T2Entity, T2 => ON(T1.id == T2.id)).SELECT(...)); // 错误用法, ${name}的回调函数必须是完整的QueryChain
2036
1896
  FROM(T1Entity, T1 => ${name}(T2Entity, T2 => ON(T1.id == T2.id).SELECT(...))); // 正确用法, 后续查询都在${name}的回调函数中进行
2037
1897
  `;
2038
- return (0, utils_1.throwError)(options?.parsingId, error, node);
1898
+ (0, utils_1.throwError)(error);
2039
1899
  }
2040
1900
  const joinCode = (0, utils_1.generate)(joinNode[0])?.code || '';
2041
1901
  const count = joinCode.match(/_JOIN/g)?.length || 0;
2042
1902
  const errorOrder = count >= 1 && !callExpressions?.[callExpressions?.length - 1]?.callee?.name?.includes('_JOIN');
2043
1903
  if (errorOrder) {
2044
- return (0, utils_1.throwError)(options?.parsingId, '调用顺序错误,期望的调用顺序为 FROM -> JOIN -> WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY。其中,FROM在最外层,FROM内部是零到多层JOIN嵌套调用,在最内层的JOIN内部是 WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY 的调用顺序。', node);
1904
+ (0, utils_1.throwError)('调用顺序错误,期望的调用顺序为 FROM -> JOIN -> WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY。其中,FROM在最外层,FROM内部是零到多层JOIN嵌套调用,在最内层的JOIN内部是 WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY 的调用顺序。', options.needThrowError);
2045
1905
  }
2046
1906
  const result = [{
2047
1907
  calleeName: calleeName,
@@ -2053,7 +1913,7 @@ FROM(T1Entity, T1 => ${name}(T2Entity, T2 => ON(T1.id == T2.id).SELECT(...))); /
2053
1913
  result[0].arguments[2] = item.arguments[0];
2054
1914
  }
2055
1915
  else if (['INNER_JOIN', 'LEFT_JOIN', 'RIGHT_JOIN', 'OUTER_JOIN'].includes(item.callee.name)) {
2056
- result.push(...flatCallQueryComponentChainNode(item, options) || []);
1916
+ result.push(...flatCallQueryComponentChainNode(item, options));
2057
1917
  }
2058
1918
  else {
2059
1919
  result.push({
@@ -2086,37 +1946,33 @@ function flatOnExpressions(node) {
2086
1946
  return [node];
2087
1947
  }
2088
1948
  }
2089
- function transformMemberExpression2Entity(node, node2, options) {
1949
+ function transformMemberExpression2Entity(node, node2) {
2090
1950
  const entityPath = flatMemberExpression(node);
2091
1951
  const entityNamespace = entityPath.slice(0, -1).map(n => n.name).join('.');
2092
1952
  const entityName = entityPath[entityPath.length - 1].name.replace(/Entity$/, '');
2093
1953
  if (!entityNamespace?.includes('.entities')) {
2094
- return (0, utils_1.throwError)(options?.parsingId, `${entityNamespace}.${entityName} 不是一个数据库表,无法使用数据查询`, node);
1954
+ (0, utils_1.throwError)(`${entityNamespace}.${entityName} 不是一个数据库表,无法使用数据查询。`);
2095
1955
  }
2096
1956
  const asName = node2.name === entityName ? undefined : node2.name;
2097
1957
  if (asName) {
2098
- return (0, utils_1.throwError)(options?.parsingId, `FROM 中回调函数的入参名称应为${entityName},但实际为${node2.name}`);
1958
+ (0, utils_1.throwError)(`FROM 中回调函数的入参名称应为${entityName},但实际为${node2.name}`);
2099
1959
  }
2100
1960
  return { entityNamespace, entityName, asName };
2101
1961
  }
2102
1962
  function transformCall2DataQuery(node, calleeName, callee, options) {
2103
- if (options?.isInFrontend)
2104
- return (0, utils_1.throwError)(options?.parsingId, '数据查询组件不支持在前端使用', node);
2105
- if (options?.isRestricted)
2106
- return (0, utils_1.throwError)(options?.parsingId, '数据查询组件不支持在组件或默认值表达式中使用', node);
2107
1963
  const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
2108
1964
  const code = (0, utils_1.generate)(node)?.code || '';
2109
1965
  if (code?.includes('nasl.util')) {
2110
- return (0, utils_1.throwError)(options?.parsingId, '数据查询中不支持nasl.util内的库函数,请将对应操作放在数据查询外部进行处理', code);
1966
+ (0, utils_1.throwError)('数据查询中不支持nasl.util内的库函数,请将对应操作放在数据查询外部进行处理');
2111
1967
  }
2112
1968
  if (!code?.includes('.SELECT(') && !code?.includes('.AGGR_SELECT(')) {
2113
- return (0, utils_1.throwError)(options?.parsingId, '缺少 SELECT 或 AGGR_SELECT 语句', code);
1969
+ (0, utils_1.throwError)('缺少 SELECT 或 AGGR_SELECT 语句');
2114
1970
  }
2115
1971
  const flatted = flatCallQueryComponentChainNode(node, options);
2116
- const calleeNames = flatted && flatted.map((item) => item?.calleeName).filter((name) => name !== '$');
1972
+ const calleeNames = flatted.map((item) => item?.calleeName).filter((name) => name !== '$');
2117
1973
  const isOrderCorrect = (0, utils_1.checkOQLCalleeNameOrder)(calleeNames);
2118
1974
  if (!isOrderCorrect) {
2119
- return (0, utils_1.throwError)(options?.parsingId, '调用顺序错误,期望的调用顺序为 FROM -> JOIN -> WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY。其中,FROM在最外层,FROM内部是零到多层JOIN嵌套调用,在最内层的JOIN内部是 WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY 的调用顺序。', node);
1975
+ (0, utils_1.throwError)('调用顺序错误,期望的调用顺序为 FROM -> JOIN -> WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY。其中,FROM在最外层,FROM内部是零到多层JOIN嵌套调用,在最内层的JOIN内部是 WHERE -> GROUP_BY -> SELECT/AGGR_SELECT -> HAVING -> ORDER_BY 的调用顺序。', options.needThrowError);
2120
1976
  }
2121
1977
  let from;
2122
1978
  let where;
@@ -2129,13 +1985,11 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2129
1985
  let hasErrorTSScopeColumn = false;
2130
1986
  let useResultItem = false;
2131
1987
  // 这里只是一个示例,具体的逻辑需要根据flatted的内容来构建
2132
- flatted && flatted.forEach((item) => {
1988
+ flatted.forEach((item) => {
2133
1989
  // console.log(item.calleeName)
2134
1990
  switch (item.calleeName) {
2135
1991
  case 'FROM':
2136
- entity = transformMemberExpression2Entity(item.arguments[0], item.arguments[1], options);
2137
- if (!entity)
2138
- return;
1992
+ entity = transformMemberExpression2Entity(item.arguments[0], item.arguments[1]);
2139
1993
  const entityName = entity.asName || entity.entityName;
2140
1994
  entityAsNames.push(entityName);
2141
1995
  from = new utils_1.naslTypes.QueryFromExpression({
@@ -2147,15 +2001,11 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2147
2001
  case 'LEFT_JOIN':
2148
2002
  case 'RIGHT_JOIN':
2149
2003
  case 'OUTER_JOIN':
2150
- entity = transformMemberExpression2Entity(item.arguments[0], item.arguments[1], options);
2151
- if (!entity)
2152
- break;
2004
+ entity = transformMemberExpression2Entity(item.arguments[0], item.arguments[1]);
2153
2005
  entityAsNames.push(entity.asName || entity.entityName);
2154
2006
  const rawJoinType = item.calleeName.slice(0, -5);
2155
2007
  const joinType = rawJoinType === 'OUTER' ? 'FULL' : rawJoinType;
2156
2008
  const onExpressions = flatOnExpressions(item.arguments[2]);
2157
- if (!from)
2158
- return; // throwError(options?.parsingId, 'FROM 不存在或异常,无法添加 JOIN 子句', node);
2159
2009
  from.addJoinPart(new utils_1.naslTypes.QueryJoinExpression({
2160
2010
  ...entity,
2161
2011
  joinType,
@@ -2172,50 +2022,27 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2172
2022
  break;
2173
2023
  case 'AGGR_SELECT':
2174
2024
  if (groupBy?.length) {
2175
- return (0, utils_1.throwError)(options?.parsingId, '存在 GROUP_BY,应使用 SELECT 进行查询,但实际为 AGGR_SELECT', node);
2025
+ (0, utils_1.throwError)('存在 GROUP_BY,应使用 SELECT 进行查询,但实际为 AGGR_SELECT');
2176
2026
  }
2177
2027
  select = new utils_1.naslTypes.QuerySelectExpression({
2178
2028
  distinct: false,
2179
2029
  star: true,
2180
2030
  selectElements: [new utils_1.naslTypes.QueryFieldExpression({
2181
2031
  isDotStar: true,
2182
- entityAsName: from?.entityName,
2032
+ entityAsName: from.entityName,
2183
2033
  propertyName: '',
2184
2034
  })],
2185
2035
  });
2186
- if (item.arguments[0].type === 'ObjectExpression') {
2187
- item.arguments[0].properties?.forEach((arg) => {
2188
- if (arg?.value.type === 'CallExpression') {
2189
- let selectElements = transform2QueryAggregateExpression(arg, { ...options, entityAsNames, inCallQueryComponentField: item.calleeName });
2190
- if (selectElements) {
2191
- const newSelectElements = [...select.selectElements, selectElements];
2192
- select.setSelectElements(newSelectElements);
2193
- }
2194
- }
2195
- else {
2196
- return (0, utils_1.throwError)(options?.parsingId, `Unsupported expression type for QueryAggregateExpression`, arg?.value.type, arg?.value);
2197
- }
2198
- });
2199
- }
2200
- else if (item.arguments[0].type === 'CallExpression') { // 只有一个的简写:AGGR_SELECT(SUM(Entity1.age))
2201
- const selectElements = transform2QueryAggregateExpression({
2202
- type: 'ObjectProperty',
2203
- key: {
2204
- type: 'Identifier',
2205
- name: 'resultItem',
2206
- },
2207
- value: item.arguments[0],
2208
- computed: false,
2209
- shorthand: false,
2210
- }, { ...options, entityAsNames, inCallQueryComponentField: item.calleeName });
2211
- if (selectElements) {
2036
+ item.arguments[0].properties?.forEach((arg) => {
2037
+ if (arg?.value.type === 'CallExpression') {
2038
+ let selectElements = transform2QueryAggregateExpression(arg, { ...options, entityAsNames, inCallQueryComponentField: item.calleeName });
2212
2039
  const newSelectElements = [...select.selectElements, selectElements];
2213
2040
  select.setSelectElements(newSelectElements);
2214
2041
  }
2215
- }
2216
- else {
2217
- return (0, utils_1.throwError)(options?.parsingId, 'Unsupported expression type for QueryAggregateExpression', item.arguments[0].type, item.arguments[0]);
2218
- }
2042
+ else {
2043
+ (0, utils_1.throwError)(`Unsupported expression type: ${arg?.value.type} for QueryAggregateExpression`);
2044
+ }
2045
+ });
2219
2046
  break;
2220
2047
  case 'SELECT':
2221
2048
  select = new utils_1.naslTypes.QuerySelectExpression({
@@ -2223,7 +2050,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2223
2050
  star: true,
2224
2051
  selectElements: groupBy?.length ? [new utils_1.naslTypes.QueryFieldExpression({
2225
2052
  isDotStar: true,
2226
- entityAsName: from?.entityName,
2053
+ entityAsName: from.entityName,
2227
2054
  propertyName: '',
2228
2055
  })] : [],
2229
2056
  });
@@ -2234,17 +2061,17 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2234
2061
  }
2235
2062
  else if (arg.value.type === 'ObjectExpression') {
2236
2063
  if (groupBy?.length) {
2237
- return (0, utils_1.throwError)(options?.parsingId, '存在 GROUP_BY,SELECT应为单层结构,不应使用双层局部列', node);
2064
+ (0, utils_1.throwError)('存在 GROUP_BY,SELECT应为单层结构,不应使用双层局部列');
2238
2065
  }
2239
2066
  const originName = arg.key?.name || '';
2240
2067
  if (originName && originName.charAt(0) === originName.charAt(0).toUpperCase()) {
2241
2068
  const needName = (0, utils_2.firstLowerCase)(originName);
2242
- return (0, utils_1.throwError)(options?.parsingId, `SELECT 局部列第一层命名不符合规范, 应为${needName}, 但实际为${originName}`, node);
2069
+ (0, utils_1.throwError)(`SELECT 局部列第一层命名不符合规范, 应为${needName}, 但实际为${originName}`);
2243
2070
  }
2244
2071
  const entityName = (0, utils_2.firstUpperCase)(originName);
2245
2072
  const needNameList = entityAsNames.map(item => (0, utils_2.firstLowerCase)(item))?.join('或');
2246
2073
  if (!entityAsNames.includes(entityName)) {
2247
- return (0, utils_1.throwError)(options?.parsingId, `SELECT 局部列第一层命名不符合规范, 应为${needNameList}, 但实际为${originName}`, node);
2074
+ (0, utils_1.throwError)(`SELECT 局部列第一层命名不符合规范, 应为${needNameList}, 但实际为${originName}`);
2248
2075
  }
2249
2076
  selectElements = arg.value.properties?.map((property) => {
2250
2077
  const columnAsName = property.key?.name;
@@ -2252,7 +2079,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2252
2079
  const selectElement = transform2SelectQueryFieldExpression(property, { ...options, entityAsNames, inCallQueryComponentField: item.calleeName });
2253
2080
  if (columnAsName !== columnPropertyName) {
2254
2081
  // eg: comment: Topic_Comment.comment_stu
2255
- return (0, utils_1.throwError)(options?.parsingId, `SELECT 局部列第二层命名不符合规范, 应为${columnPropertyName}, 但实际为${columnAsName}`, node);
2082
+ (0, utils_1.throwError)(`SELECT 局部列第二层命名不符合规范, 应为${columnPropertyName}, 但实际为${columnAsName}`);
2256
2083
  }
2257
2084
  selectElement.isDotStar = false;
2258
2085
  return selectElement;
@@ -2287,7 +2114,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2287
2114
  }
2288
2115
  }
2289
2116
  else {
2290
- return (0, utils_1.throwError)(options?.parsingId, 'HAVING 不符合规范,请使用箭头函数', havingNode, node);
2117
+ (0, utils_1.throwError)('HAVING 不符合规范,请使用箭头函数');
2291
2118
  }
2292
2119
  having = transformNodeFunction(havingNode, { ...options, ...restParams });
2293
2120
  break;
@@ -2302,7 +2129,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2302
2129
  }
2303
2130
  }
2304
2131
  else {
2305
- return (0, utils_1.throwError)(options?.parsingId, 'ORDER_BY 不符合规范,请使用箭头函数', orderNode, node);
2132
+ (0, utils_1.throwError)('ORDER_BY 不符合规范,请使用箭头函数');
2306
2133
  }
2307
2134
  orderBy = orderNode.map((arg) => {
2308
2135
  let orderElementCode = (0, utils_1.generate)(arg)?.code || '';
@@ -2328,26 +2155,24 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
2328
2155
  ideVersion: '2.22',
2329
2156
  });
2330
2157
  if (hasErrorTSScopeColumn && !groupBy?.length && !having) {
2331
- return (0, utils_1.throwError)(options?.parsingId, 'SELECT 局部列不符合规范,需要按两层对象返回', node);
2158
+ (0, utils_1.throwError)('SELECT 局部列不符合规范,需要按两层对象返回');
2332
2159
  }
2333
2160
  const hasScopeColumn = select?.selectElements?.find((selectElement) => selectElement?.concept === 'QueryFieldExpression' && !selectElement?.isDotStar);
2334
2161
  if (hasScopeColumn && (groupBy?.length || having)) {
2335
- return (0, utils_1.throwError)(options?.parsingId, '分组聚合与表字段局部列不允许同时出现', node);
2162
+ (0, utils_1.throwError)('分组聚合与表字段局部列不允许同时出现');
2336
2163
  }
2337
2164
  if (hasScopeColumn && useResultItem) {
2338
- return (0, utils_1.throwError)(options?.parsingId, "对于局部列的排序,只支持 实体.属性名 的格式,例如 ORDER_BY((resultItem) => [[Student.age, 'ASC']])", node);
2165
+ (0, utils_1.throwError)("对于局部列的排序,只支持 实体.属性名 的格式,例如 ORDER_BY((resultItem) => [[Student.age, 'ASC']])");
2339
2166
  }
2340
2167
  const isOnlyAggr = select?.selectElements?.find((selectElement) => selectElement?.concept !== 'QueryAggregateExpression');
2341
2168
  // 如果 select 中只有聚合属性时,并且没有用 AGGR_SELECT 来指定列
2342
2169
  if (!isOnlyAggr && !calleeNames?.includes('AGGR_SELECT')) {
2343
- return (0, utils_1.throwError)(options?.parsingId, 'SELECT 不符合规范,请使用 AGGR_SELECT', node);
2170
+ (0, utils_1.throwError)('SELECT 不符合规范,请使用 AGGR_SELECT');
2344
2171
  }
2345
2172
  // callQueryComponent.typeAnnotation = callQueryComponent.computeStructure();
2346
2173
  return callQueryComponent;
2347
2174
  }
2348
2175
  function transformCall2LaunchProcess(node, calleeName, callee, options) {
2349
- if (options?.isRestricted)
2350
- return (0, utils_1.throwError)(options?.parsingId, '调用流程逻辑不支持在组件或默认值表达式中使用', node);
2351
2176
  const args = node.arguments;
2352
2177
  const dataArg = args?.[0];
2353
2178
  const procDefKeyArg = args?.[1];
@@ -2386,7 +2211,6 @@ function transform2LogicItem(node, options) {
2386
2211
  transformManager.register('NumericLiteral', transform2NumericLiteral);
2387
2212
  transformManager.register('NullLiteral', transform2NullLiteral);
2388
2213
  transformManager.register('TemplateLiteral', transform2StringInterpolation);
2389
- transformManager.register((node) => node.type === 'LogicalExpression' && node.operator === '??', transformDefaultExpression);
2390
2214
  transformManager.register('BinaryExpression', transform2BinaryExpression);
2391
2215
  transformManager.register('LogicalExpression', transform2BinaryExpression);
2392
2216
  transformManager.register('UpdateExpression', transformUpdateExpression2Assignment);
@@ -2424,8 +2248,7 @@ function transform2LogicItem(node, options) {
2424
2248
  }
2425
2249
  });
2426
2250
  transformManager.register('MemberExpression', transformMemberExpression);
2427
- transformManager.register('OptionalMemberExpression', transformMemberExpression);
2428
- transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && (node.callee.type === 'FunctionExpression' && node.callee.id?.name === 'match' || node.callee.type === 'ArrowFunctionExpression'), transformCallFunctionExpression2Match);
2251
+ transformManager.register((node) => node.type === 'CallExpression' && node.callee.type === 'CallExpression', transformCallCall2Match);
2429
2252
  transformManager.registerCallExpression((node, calleeName) => /^\$refs\./.test(calleeName), transformCall2CallViewElementLogic);
2430
2253
  transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 2 && callee[0].type === 'Identifier' && callee[0].name.endsWith('Entity'), transformCall2CallEntityLogic);
2431
2254
  transformManager.registerCallExpression('nasl.oql.query', transformCall2OQLQuery);
@@ -2447,14 +2270,15 @@ function transform2LogicItem(node, options) {
2447
2270
  transformManager.registerCallExpression('extensions.lcap_process_framework.logics.launchProcess', transformCall2LaunchProcess);
2448
2271
  transformManager.registerCallExpression((node, calleeName) => /extensions\./.test(calleeName), transformCall2Extension);
2449
2272
  transformManager.registerCallExpression((node, calleeName) => /connectors\./.test(calleeName), transformCall2Connector);
2273
+ transformManager.registerCallExpression((node) => node.callee.type === 'ArrowFunctionExpression', transformArrowFunction2Match);
2450
2274
  transformManager.registerCallExpression((node, calleeName) => ['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN', 'IS_NULL'].includes(calleeName), transformCallExpressionToBinaryExpression);
2451
2275
  transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && calleeName.startsWith('viewLogic_'), transformCall2CallViewLogic);
2452
2276
  transformManager.registerCallExpression('PAGINATE', transformCall2Paginate);
2453
2277
  transformManager.registerCallExpression('FROM', transformCall2DataQuery);
2454
- transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && !['ArrowFunctionExpression', 'FunctionExpression'].includes(callee[0].type), transformCall2Logic);
2278
+ transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1, transformCall2Logic);
2455
2279
  let result = transformManager.apply(node, options);
2456
2280
  delete options.typeAnnotation;
2457
- return result || undefined;
2281
+ return result;
2458
2282
  }
2459
2283
  exports.transform2LogicItem = transform2LogicItem;
2460
2284
  //# sourceMappingURL=transform2LogicItem.js.map