@lcap/nasl 4.1.0-beta.9 → 4.1.0-creator.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/generator/genBundleFiles.d.ts +1 -0
- package/out/generator/genBundleFiles.d.ts.map +1 -1
- package/out/generator/genBundleFiles.js +21 -96
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/generator/genSimpleBundleFile.d.ts +19 -0
- package/out/generator/genSimpleBundleFile.d.ts.map +1 -0
- package/out/generator/genSimpleBundleFile.js +114 -0
- package/out/generator/genSimpleBundleFile.js.map +1 -0
- package/out/generator/index.d.ts +1 -0
- package/out/generator/index.d.ts.map +1 -1
- package/out/generator/index.js +1 -0
- package/out/generator/index.js.map +1 -1
- package/out/generator/permission.d.ts.map +1 -1
- package/out/generator/permission.js +70 -34
- package/out/generator/permission.js.map +1 -1
- package/out/generator/release-body/body.d.ts.map +1 -1
- package/out/generator/release-body/body.js +3 -4
- package/out/generator/release-body/body.js.map +1 -1
- package/out/generator/release-body/utils.d.ts +7 -3
- package/out/generator/release-body/utils.d.ts.map +1 -1
- package/out/generator/release-body/utils.js +7 -5
- package/out/generator/release-body/utils.js.map +1 -1
- package/out/index.d.ts +1 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +2 -1
- package/out/index.js.map +1 -1
- package/out/natural/index.d.ts +1 -0
- package/out/natural/index.d.ts.map +1 -1
- package/out/natural/index.js +1 -0
- package/out/natural/index.js.map +1 -1
- package/out/natural/parseNaturalTS.d.ts +1 -1
- package/out/natural/parseNaturalTS.d.ts.map +1 -1
- package/out/natural/parseNaturalTS.js +150 -4
- package/out/natural/parseNaturalTS.js.map +1 -1
- package/out/natural/parseNaturalTSXView.d.ts +6 -0
- package/out/natural/parseNaturalTSXView.d.ts.map +1 -0
- package/out/natural/parseNaturalTSXView.js +536 -0
- package/out/natural/parseNaturalTSXView.js.map +1 -0
- package/out/natural/transformTS2UI.d.ts.map +1 -1
- package/out/natural/transformTS2UI.js +6 -9
- package/out/natural/transformTS2UI.js.map +1 -1
- package/out/natural/transformTSCode.d.ts.map +1 -1
- package/out/natural/transformTSCode.js +1 -1
- package/out/natural/transformTSCode.js.map +1 -1
- package/out/natural/transforms/transform2Entity.d.ts.map +1 -1
- package/out/natural/transforms/transform2Entity.js +3 -1
- package/out/natural/transforms/transform2Entity.js.map +1 -1
- package/out/natural/transforms/transform2Enum.js +1 -1
- package/out/natural/transforms/transform2Enum.js.map +1 -1
- package/out/natural/transforms/transform2Logic.d.ts +3 -1
- package/out/natural/transforms/transform2Logic.d.ts.map +1 -1
- package/out/natural/transforms/transform2Logic.js +37 -6
- package/out/natural/transforms/transform2Logic.js.map +1 -1
- package/out/natural/transforms/transform2LogicItem.d.ts +34 -6
- package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -1
- package/out/natural/transforms/transform2LogicItem.js +312 -140
- package/out/natural/transforms/transform2LogicItem.js.map +1 -1
- package/out/natural/transforms/transform2MetadataType.d.ts +3 -0
- package/out/natural/transforms/transform2MetadataType.d.ts.map +1 -0
- package/out/natural/transforms/transform2MetadataType.js +14 -0
- package/out/natural/transforms/transform2MetadataType.js.map +1 -0
- package/out/natural/transforms/transform2ValidationRule.d.ts +3 -0
- package/out/natural/transforms/transform2ValidationRule.d.ts.map +1 -0
- package/out/natural/transforms/transform2ValidationRule.js +19 -0
- package/out/natural/transforms/transform2ValidationRule.js.map +1 -0
- package/out/natural/transforms/transform2Variable.d.ts +1 -0
- package/out/natural/transforms/transform2Variable.d.ts.map +1 -1
- package/out/natural/transforms/transform2Variable.js +25 -1
- package/out/natural/transforms/transform2Variable.js.map +1 -1
- package/out/natural/transforms/transformThemeAndStyle.d.ts +24 -0
- package/out/natural/transforms/transformThemeAndStyle.d.ts.map +1 -0
- package/out/natural/transforms/transformThemeAndStyle.js +269 -0
- package/out/natural/transforms/transformThemeAndStyle.js.map +1 -0
- package/out/natural/transforms/utils.d.ts +16 -2
- package/out/natural/transforms/utils.d.ts.map +1 -1
- package/out/natural/transforms/utils.js +67 -11
- package/out/natural/transforms/utils.js.map +1 -1
- package/out/server/OQL/sqlCategory.json +410 -0
- package/out/server/OQL/sqlFunctions.json +695 -7
- package/out/server/client/nasl-server-client.d.ts +7 -0
- package/out/server/client/nasl-server-client.d.ts.map +1 -0
- package/out/server/client/nasl-server-client.js +9 -0
- package/out/server/client/nasl-server-client.js.map +1 -0
- package/out/server/extendBaseNode.d.ts.map +1 -1
- package/out/server/extendBaseNode.js +18 -9
- package/out/server/extendBaseNode.js.map +1 -1
- package/out/server/index.d.ts +1 -0
- package/out/server/index.d.ts.map +1 -1
- package/out/server/index.js +1 -0
- package/out/server/index.js.map +1 -1
- package/out/server/naslServer.d.ts +10 -1
- package/out/server/naslServer.d.ts.map +1 -1
- package/out/server/naslServer.js +119 -62
- package/out/server/naslServer.js.map +1 -1
- package/out/service/initial/form-designer.d.ts +1 -1
- package/out/service/initial/form-designer.d.ts.map +1 -1
- package/out/service/initial/form-designer.js +4 -1
- package/out/service/initial/form-designer.js.map +1 -1
- package/out/service/initial/processV2.d.ts +1 -1
- package/out/service/initial/processV2.d.ts.map +1 -1
- package/out/service/initial/processV2.js +4 -1
- package/out/service/initial/processV2.js.map +1 -1
- package/out/service/initial/types.d.ts +1 -0
- package/out/service/initial/types.d.ts.map +1 -1
- package/out/service/storage/api.d.ts +16 -7
- package/out/service/storage/api.js +6 -0
- package/out/service/storage/api.js.map +1 -1
- package/out/service/storage/cache/index.d.ts +3 -15
- package/out/service/storage/cache/index.d.ts.map +1 -1
- package/out/service/storage/cache/index.js +14 -299
- package/out/service/storage/cache/index.js.map +1 -1
- package/out/service/storage/cache/split.d.ts +0 -21
- package/out/service/storage/cache/split.d.ts.map +1 -1
- package/out/service/storage/cache/split.js +24 -33
- package/out/service/storage/cache/split.js.map +1 -1
- package/out/service/storage/init.d.ts +9 -0
- package/out/service/storage/init.d.ts.map +1 -1
- package/out/service/storage/init.js +61 -90
- package/out/service/storage/init.js.map +1 -1
- package/out/service/storage/service.js +1 -1
- package/out/service/storage/service.js.map +1 -1
- package/package.json +15 -13
|
@@ -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.
|
|
7
|
-
exports.transform2LogicItem = exports.transformCall2Paginate = exports.transformCall2LogicWithAuth = exports.transformCall2Logic = exports.transformCall2CallViewLogic =
|
|
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;
|
|
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
|
-
(0, utils_1.throwError)(
|
|
27
|
+
(0, utils_1.throwError)('不支持连续调用!', node.callee);
|
|
28
28
|
const callee = flatMemberExpression(node.callee);
|
|
29
29
|
if (callee[0]
|
|
30
30
|
&& callee[0].type === 'CallExpression'
|
|
@@ -36,9 +36,8 @@ class TransformManager {
|
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
38
|
for (const calleeItem of callee) {
|
|
39
|
-
if (calleeItem.type !== 'Identifier') {
|
|
40
|
-
|
|
41
|
-
(0, utils_1.throwError)(`不支持连续调用!${calleeName}`);
|
|
39
|
+
if (calleeItem.type !== 'Identifier' && !(calleeItem.type === 'FunctionExpression' && calleeItem.id?.name === 'match')) {
|
|
40
|
+
(0, utils_1.throwError)('不支持连续调用!', node.callee);
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
43
|
}
|
|
@@ -48,7 +47,7 @@ class TransformManager {
|
|
|
48
47
|
return transform(node, calleeName, callee, options);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
|
-
(0, utils_1.throwError)(`Unhandled node ${callee.map((item) => item.name).join('.')}
|
|
50
|
+
(0, utils_1.throwError)(`Unhandled node ${callee.map((item) => item.name).join('.')}`, node.type, node);
|
|
52
51
|
}
|
|
53
52
|
else {
|
|
54
53
|
for (const [type, transform] of this.transforms) {
|
|
@@ -56,7 +55,7 @@ class TransformManager {
|
|
|
56
55
|
return transform(node, options);
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
|
-
(0, utils_1.throwError)(
|
|
58
|
+
(0, utils_1.throwError)('Unhandled node', node.type, node);
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
}
|
|
@@ -124,7 +123,7 @@ function transformTSCode2SubLogic(node, options) {
|
|
|
124
123
|
}
|
|
125
124
|
function assertAssignmentRightIsNotAnonymousFunction(expression) {
|
|
126
125
|
if (expression?.concept === 'AnonymousFunction')
|
|
127
|
-
(0, utils_1.throwError)('Anonymous function is not allowed in assignment');
|
|
126
|
+
(0, utils_1.throwError)('Anonymous function is not allowed in assignment', expression.toNaturalTS());
|
|
128
127
|
return expression;
|
|
129
128
|
}
|
|
130
129
|
function fixExpression(arg, options, supportSubLogic = false) {
|
|
@@ -232,16 +231,29 @@ function flatMatchPatternsExpression(node) {
|
|
|
232
231
|
}
|
|
233
232
|
return [node];
|
|
234
233
|
}
|
|
234
|
+
else if (node.concept === 'VariadicExpression') {
|
|
235
|
+
if (node.operator === '||') {
|
|
236
|
+
return node.expressions
|
|
237
|
+
?.filter((item) => item?.concept === 'BinaryExpression' && item?.right?.concept === 'StringLiteral')
|
|
238
|
+
?.map((item) => new utils_1.naslTypes.StringLiteral({ value: item?.right?.value })) || [node];
|
|
239
|
+
}
|
|
240
|
+
return [node];
|
|
241
|
+
}
|
|
235
242
|
return [node];
|
|
236
243
|
}
|
|
237
244
|
exports.flatMatchPatternsExpression = flatMatchPatternsExpression;
|
|
238
|
-
function
|
|
245
|
+
function flatIfStatementForMatch(node) {
|
|
239
246
|
if (node.alternate.type === 'IfStatement') {
|
|
240
|
-
return [...
|
|
247
|
+
return [node, ...flatIfStatementForMatch(node.alternate)];
|
|
241
248
|
}
|
|
242
|
-
return [node
|
|
249
|
+
return [node, {
|
|
250
|
+
type: 'IfStatement',
|
|
251
|
+
test: null,
|
|
252
|
+
consequent: node.alternate,
|
|
253
|
+
alternate: node.alternate,
|
|
254
|
+
}];
|
|
243
255
|
}
|
|
244
|
-
exports.
|
|
256
|
+
exports.flatIfStatementForMatch = flatIfStatementForMatch;
|
|
245
257
|
/**
|
|
246
258
|
* 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
|
|
247
259
|
* @param node
|
|
@@ -269,7 +281,7 @@ function transform2Param(node) {
|
|
|
269
281
|
name,
|
|
270
282
|
typeAnnotation,
|
|
271
283
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
272
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
284
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
273
285
|
}),
|
|
274
286
|
});
|
|
275
287
|
}
|
|
@@ -283,7 +295,7 @@ function transform2Param(node) {
|
|
|
283
295
|
name,
|
|
284
296
|
typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
|
|
285
297
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
286
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
298
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
287
299
|
}),
|
|
288
300
|
});
|
|
289
301
|
}
|
|
@@ -298,7 +310,7 @@ function transform2Param(node) {
|
|
|
298
310
|
required: !node.optional,
|
|
299
311
|
typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
|
|
300
312
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
301
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
313
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
302
314
|
}),
|
|
303
315
|
});
|
|
304
316
|
}
|
|
@@ -321,12 +333,12 @@ function transform2Param(node) {
|
|
|
321
333
|
name,
|
|
322
334
|
typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
|
|
323
335
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
324
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
336
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
325
337
|
}),
|
|
326
338
|
});
|
|
327
339
|
}
|
|
328
340
|
else {
|
|
329
|
-
(0, utils_1.throwError)(
|
|
341
|
+
(0, utils_1.throwError)('Unhandled node', node);
|
|
330
342
|
}
|
|
331
343
|
}
|
|
332
344
|
exports.transform2Param = transform2Param;
|
|
@@ -345,6 +357,12 @@ function transformCallExpressionToBinaryExpression(node, calleeName, callee, opt
|
|
|
345
357
|
IN: 'in',
|
|
346
358
|
IS_NULL: 'isNull',
|
|
347
359
|
};
|
|
360
|
+
if (calleeName === 'IS_NULL') {
|
|
361
|
+
return new utils_1.naslTypes.UnaryExpression({
|
|
362
|
+
operator: 'isNull',
|
|
363
|
+
argument: transformNodeFunction(argument?.[0], options),
|
|
364
|
+
});
|
|
365
|
+
}
|
|
348
366
|
return new utils_1.naslTypes.BinaryExpression({
|
|
349
367
|
operator: map[calleeName],
|
|
350
368
|
left: transformNodeFunction(argument?.[0], options),
|
|
@@ -424,11 +442,21 @@ function transform2BinaryExpression(node, options) {
|
|
|
424
442
|
right: transformNodeFunction(node.right, options),
|
|
425
443
|
});
|
|
426
444
|
}
|
|
427
|
-
(0, utils_1.throwError)(
|
|
445
|
+
(0, utils_1.throwError)('Unhandled node', node.type, node);
|
|
428
446
|
}
|
|
429
447
|
exports.transform2BinaryExpression = transform2BinaryExpression;
|
|
448
|
+
function transformDefaultExpression(node, options) {
|
|
449
|
+
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
450
|
+
return transformNodeFunction(node.left, options);
|
|
451
|
+
}
|
|
430
452
|
function transformConditionalExpression(node, options) {
|
|
431
453
|
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
|
+
(0, utils_1.throwError)(`数据查询中不支持条件表达式!${(0, utils_1.generate)(node)?.code}, 请使用 SQL函数 IF(${expr} == null, ${then_expr}, ${else_expr})`);
|
|
459
|
+
}
|
|
432
460
|
const test = transformNodeFunction(node.test, options);
|
|
433
461
|
const consequent = transformNodeFunction(node.consequent, options);
|
|
434
462
|
const alternate = transformNodeFunction(node.alternate, options);
|
|
@@ -455,7 +483,7 @@ function transformConditionalExpression(node, options) {
|
|
|
455
483
|
isMatchedTypeEnumable: true,
|
|
456
484
|
}),
|
|
457
485
|
new utils_1.naslTypes.MatchCase({
|
|
458
|
-
patterns: [
|
|
486
|
+
patterns: [],
|
|
459
487
|
body: [alternate],
|
|
460
488
|
}),
|
|
461
489
|
],
|
|
@@ -471,13 +499,30 @@ function transformArrayExpression(node, options) {
|
|
|
471
499
|
});
|
|
472
500
|
}
|
|
473
501
|
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
|
+
(0, utils_1.throwError)('Do not allow NullLiteral without type, you can use as to carry the type', node);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
else if (itemValue.type === 'TSAsExpression') {
|
|
515
|
+
const typeAnnotation = (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(itemValue.typeAnnotation);
|
|
516
|
+
item.naslType = typeAnnotation;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
474
519
|
const newComposite = transform2PartialNewComposite(node, options);
|
|
475
520
|
const newProperties = node.properties.filter((prop) => prop.type === 'ObjectProperty' && prop.value.type !== 'ConditionalExpression');
|
|
476
521
|
const structureProperties = [];
|
|
477
522
|
newProperties.forEach((arg, index) => {
|
|
478
523
|
structureProperties.push(new utils_1.naslTypes.StructureProperty({
|
|
479
524
|
name: arg.key.name,
|
|
480
|
-
typeAnnotation: null
|
|
525
|
+
typeAnnotation: arg.naslType || null,
|
|
481
526
|
}));
|
|
482
527
|
});
|
|
483
528
|
newComposite.typeAnnotation = utils_1.naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties);
|
|
@@ -504,7 +549,7 @@ function transform2NewExpression(calleeName, node, options) {
|
|
|
504
549
|
});
|
|
505
550
|
}
|
|
506
551
|
if (node?.arguments && node?.arguments?.[0]?.type !== 'ArrayExpression') {
|
|
507
|
-
(0, utils_1.throwError)(
|
|
552
|
+
(0, utils_1.throwError)('Not allowed code in NewList', node);
|
|
508
553
|
}
|
|
509
554
|
return new utils_1.naslTypes.NewList({
|
|
510
555
|
typeAnnotation: node?.typeParameters ? typeAnnotation : undefined,
|
|
@@ -537,13 +582,13 @@ function transform2NewExpression(calleeName, node, options) {
|
|
|
537
582
|
const typeParam = node.typeParameters?.params[0];
|
|
538
583
|
const typeNamespaceAndName = typeParam ? (0, utils_1.generate)(typeParam).code : '';
|
|
539
584
|
if (!typeNamespaceAndName)
|
|
540
|
-
(0, utils_1.throwError)(
|
|
585
|
+
(0, utils_1.throwError)('Not allowed empty namespace in NewEntity', node);
|
|
541
586
|
return transform2NewStructure(typeNamespaceAndName, node.arguments[0], options);
|
|
542
587
|
}
|
|
543
588
|
if (calleeName === 'NewAnonymousStructure') {
|
|
544
589
|
return transform2NewAnonymousStructure(node.arguments[0], options);
|
|
545
590
|
}
|
|
546
|
-
(0, utils_1.throwError)(
|
|
591
|
+
(0, utils_1.throwError)('Unhandled ArrowFunctionExpression node', node.type, node);
|
|
547
592
|
}
|
|
548
593
|
function pushElseIf(ifNode, switchStatement, options) {
|
|
549
594
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
@@ -640,7 +685,7 @@ function transform2VariableAndAddAssignment(node, options) {
|
|
|
640
685
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
641
686
|
const declList = node?.declarations || [];
|
|
642
687
|
let newNode;
|
|
643
|
-
declList
|
|
688
|
+
declList.forEach((decl) => {
|
|
644
689
|
const variableName = decl.id.name;
|
|
645
690
|
const isArrayPattern = decl.id?.type === 'ArrayPattern';
|
|
646
691
|
if (isArrayPattern && decl.init) {
|
|
@@ -777,6 +822,16 @@ function transformIdentifier(node, options) {
|
|
|
777
822
|
if (placeholderMap.includes(node.name)) {
|
|
778
823
|
return new utils_1.naslTypes.Identifier({});
|
|
779
824
|
}
|
|
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
|
+
}
|
|
780
835
|
return new utils_1.naslTypes.Identifier({
|
|
781
836
|
name: node.name,
|
|
782
837
|
});
|
|
@@ -805,7 +860,7 @@ function transform2SelectQueryFieldExpression(node, options) {
|
|
|
805
860
|
// @TODO
|
|
806
861
|
}
|
|
807
862
|
else {
|
|
808
|
-
(0, utils_1.throwError)(
|
|
863
|
+
(0, utils_1.throwError)('Unsupported expression type for QueryFieldExpression', expression.type, expression);
|
|
809
864
|
}
|
|
810
865
|
}
|
|
811
866
|
function transform2QueryAggregateExpression(node, options) {
|
|
@@ -827,7 +882,7 @@ function transform2QueryAggregateExpression(node, options) {
|
|
|
827
882
|
}
|
|
828
883
|
function transform2AnonymousFunction(node, options) {
|
|
829
884
|
if (node.body.type === 'BlockStatement')
|
|
830
|
-
(0, utils_1.throwError)('Anonymous function with block statement is not supported');
|
|
885
|
+
(0, utils_1.throwError)('Anonymous function with block statement is not supported', node);
|
|
831
886
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
832
887
|
return new utils_1.naslTypes.AnonymousFunction({
|
|
833
888
|
params: node.params.map((param) => transform2Param(param)),
|
|
@@ -994,7 +1049,7 @@ function transform2PartialNewComposite(node, options) {
|
|
|
994
1049
|
const rights = [];
|
|
995
1050
|
const structureProperties = [];
|
|
996
1051
|
const assignmentLines = [];
|
|
997
|
-
const newProperties = (node?.properties || node?.arguments?.[0]?.properties)
|
|
1052
|
+
const newProperties = (node?.properties || node?.arguments?.[0]?.properties);
|
|
998
1053
|
let idx = 0;
|
|
999
1054
|
newProperties?.forEach((arg, index) => {
|
|
1000
1055
|
properties.push(transformNodeFunction(arg.key, options));
|
|
@@ -1087,8 +1142,7 @@ function transformNewExpression(node, options) {
|
|
|
1087
1142
|
else if (calleeName.includes('.entities.') || calleeName.includes('.structures.')) {
|
|
1088
1143
|
return transform2NewStructure(calleeName, node.arguments[0], options);
|
|
1089
1144
|
}
|
|
1090
|
-
|
|
1091
|
-
(0, utils_1.throwError)(`Unhandled node ${node.type}: ${errCode}`);
|
|
1145
|
+
(0, utils_1.throwError)('Unhandled node', node.type, node);
|
|
1092
1146
|
}
|
|
1093
1147
|
exports.transformNewExpression = transformNewExpression;
|
|
1094
1148
|
function transformMemberExpression(node, options) {
|
|
@@ -1125,18 +1179,31 @@ function transformMemberExpression(node, options) {
|
|
|
1125
1179
|
});
|
|
1126
1180
|
}
|
|
1127
1181
|
if (calleeName?.startsWith('$refs.')) {
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
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) {
|
|
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
|
+
}
|
|
1140
1207
|
}
|
|
1141
1208
|
const regex = /^(app\..+?)\.variables\.(.+)$/;
|
|
1142
1209
|
if (regex.test(calleeName)) {
|
|
@@ -1191,12 +1258,87 @@ function transformMemberExpression(node, options) {
|
|
|
1191
1258
|
});
|
|
1192
1259
|
}
|
|
1193
1260
|
exports.transformMemberExpression = transformMemberExpression;
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
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
|
+
(0, utils_1.throwError)('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
|
+
(0, utils_1.throwError)('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
|
+
(0, utils_1.throwError)('Match Case 的 if 中只能写一个 return 语句', _case.consequent);
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
return new utils_1.naslTypes.MatchCase({
|
|
1300
|
+
isMatchedTypeEnumable: false,
|
|
1301
|
+
patterns: !_case.test ? [] : flatMatchPatternsExpression(transformNodeFunction(_case.test, options)),
|
|
1302
|
+
body: [transformNodeFunction(argument, options)],
|
|
1303
|
+
});
|
|
1304
|
+
}),
|
|
1305
|
+
});
|
|
1306
|
+
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
1307
|
+
match.cases.push(new utils_1.naslTypes.MatchCase({
|
|
1308
|
+
isMatchedTypeEnumable: false,
|
|
1309
|
+
patterns: [],
|
|
1310
|
+
body: [],
|
|
1311
|
+
}));
|
|
1312
|
+
}
|
|
1313
|
+
match.cases.forEach((case_) => {
|
|
1314
|
+
if (case_.patterns.length) {
|
|
1315
|
+
if (case_.patterns[0].concept === 'BooleanLiteral' || case_.patterns[0].concept === 'StringLiteral') {
|
|
1316
|
+
case_.isMatchedTypeEnumable = true;
|
|
1317
|
+
}
|
|
1318
|
+
if (case_.patterns[0].concept === 'MemberExpression') {
|
|
1319
|
+
case_.isMatchedTypeEnumable = true;
|
|
1320
|
+
case_.patterns[0] = new utils_1.naslTypes.MemberExpression({
|
|
1321
|
+
object: {
|
|
1322
|
+
concept: 'Identifier',
|
|
1323
|
+
name: case_.patterns[0].object.property.name,
|
|
1324
|
+
folded: false,
|
|
1325
|
+
namespace: 'app.enums'
|
|
1326
|
+
},
|
|
1327
|
+
property: {
|
|
1328
|
+
concept: 'Identifier',
|
|
1329
|
+
name: case_.patterns[0].property.value,
|
|
1330
|
+
folded: false,
|
|
1331
|
+
},
|
|
1332
|
+
});
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
});
|
|
1336
|
+
return match;
|
|
1197
1337
|
}
|
|
1198
|
-
exports.
|
|
1338
|
+
exports.transformCallFunctionExpression2Match = transformCallFunctionExpression2Match;
|
|
1199
1339
|
function transformCall2CallViewElementLogic(node, calleeName, callee, options) {
|
|
1340
|
+
if (options?.isRestricted)
|
|
1341
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1200
1342
|
if (calleeName?.includes('getPropValue') || calleeName?.includes('setPropValue')) {
|
|
1201
1343
|
const componentName = callee?.[1]?.name;
|
|
1202
1344
|
const propertyName = node?.arguments?.[0]?.value;
|
|
@@ -1231,6 +1373,8 @@ function transformCall2CallViewElementLogic(node, calleeName, callee, options) {
|
|
|
1231
1373
|
}
|
|
1232
1374
|
exports.transformCall2CallViewElementLogic = transformCall2CallViewElementLogic;
|
|
1233
1375
|
function transformCall2CallEntityLogic(node, calleeName, callee, options) {
|
|
1376
|
+
if (options?.isRestricted)
|
|
1377
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1234
1378
|
const entityName = callee[0].name.replace(/Entity$/, '');
|
|
1235
1379
|
// console.log('callee', callee);
|
|
1236
1380
|
return new utils_1.naslTypes.CallLogic({
|
|
@@ -1243,6 +1387,8 @@ function transformCall2CallEntityLogic(node, calleeName, callee, options) {
|
|
|
1243
1387
|
}
|
|
1244
1388
|
exports.transformCall2CallEntityLogic = transformCall2CallEntityLogic;
|
|
1245
1389
|
function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
|
|
1390
|
+
if (options?.isRestricted)
|
|
1391
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1246
1392
|
if (calleeName?.includes('.entities.')) {
|
|
1247
1393
|
const calleeNamespace = (0, utils_1.generate)(node?.callee?.object?.object)?.code;
|
|
1248
1394
|
const entityName = node?.callee?.object?.property?.name?.replace(/Entity$/, '');
|
|
@@ -1301,6 +1447,10 @@ function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
|
|
|
1301
1447
|
}
|
|
1302
1448
|
exports.transformCall2CallDataSourceLogic = transformCall2CallDataSourceLogic;
|
|
1303
1449
|
function transformCall2OQLQuery(node, calleeName, callee, options) {
|
|
1450
|
+
if (options?.isInFrontend)
|
|
1451
|
+
(0, utils_1.throwError)('OQL组件不支持在前端使用', node);
|
|
1452
|
+
if (options?.isRestricted)
|
|
1453
|
+
(0, utils_1.throwError)('OQL组件不支持在组件或默认值表达式中使用', node);
|
|
1304
1454
|
if (options.transformType === 'logic' && options?.logicType === 'global_logic') {
|
|
1305
1455
|
// const _typeAnnotation = node?.typeParameters?.params?.length > 0 ? naslTypes.TypeAnnotation.createGeneric('List', {
|
|
1306
1456
|
// typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType })),
|
|
@@ -1315,6 +1465,8 @@ function transformCall2OQLQuery(node, calleeName, callee, options) {
|
|
|
1315
1465
|
}
|
|
1316
1466
|
}
|
|
1317
1467
|
function transformCall2ConsoleLog(node, calleeName, callee, options) {
|
|
1468
|
+
if (options?.isRestricted)
|
|
1469
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1318
1470
|
return new utils_1.naslTypes.CallLogic({
|
|
1319
1471
|
calleeNamespace: 'nasl.logging',
|
|
1320
1472
|
calleeName: 'INFO',
|
|
@@ -1326,6 +1478,8 @@ function transformCall2ConsoleLog(node, calleeName, callee, options) {
|
|
|
1326
1478
|
}
|
|
1327
1479
|
exports.transformCall2ConsoleLog = transformCall2ConsoleLog;
|
|
1328
1480
|
function transformCall2Logging(node, calleeName, callee, options) {
|
|
1481
|
+
if (options?.isRestricted)
|
|
1482
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1329
1483
|
const newArguments = node.arguments.map((arg) => new utils_1.naslTypes.Argument({
|
|
1330
1484
|
expression: arg?.name === "undefined" ?
|
|
1331
1485
|
new utils_1.naslTypes.StringLiteral()
|
|
@@ -1375,11 +1529,11 @@ function transform2CallFunction(node, calleeName, argument, options) {
|
|
|
1375
1529
|
});
|
|
1376
1530
|
});
|
|
1377
1531
|
let newTypeArguments = node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation);
|
|
1378
|
-
if (calleeName === 'ListRepeat') {
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
}
|
|
1532
|
+
// if (calleeName === 'ListRepeat') {
|
|
1533
|
+
// newTypeArguments = [
|
|
1534
|
+
// new naslTypes.TypeAnnotation()
|
|
1535
|
+
// ];
|
|
1536
|
+
// }
|
|
1383
1537
|
if (calleeName === 'Concat') {
|
|
1384
1538
|
const expressions = newArguments.map((item) => item.expression);
|
|
1385
1539
|
return new utils_1.naslTypes.StringInterpolation({
|
|
@@ -1441,7 +1595,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
|
|
|
1441
1595
|
});
|
|
1442
1596
|
}
|
|
1443
1597
|
else {
|
|
1444
|
-
(0, utils_1.throwError)(`函数${calleeName}
|
|
1598
|
+
(0, utils_1.throwError)(`函数${calleeName}不存在`, node.callee);
|
|
1445
1599
|
}
|
|
1446
1600
|
if (!func.params?.length) {
|
|
1447
1601
|
const needDefaultParam = ['CurrDate', 'CurrTime', 'CurrDateTime'];
|
|
@@ -1483,7 +1637,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
|
|
|
1483
1637
|
return new utils_1.naslTypes.CallFunction((0, utils_1.handleListSort)(nodeElement?.toJSON()));
|
|
1484
1638
|
}
|
|
1485
1639
|
if (options.transformType === 'logic' && options?.inCallQueryComponentField) {
|
|
1486
|
-
(0, utils_1.throwError)(
|
|
1640
|
+
(0, utils_1.throwError)('数据查询中不支持使用内置函数', nodeElement.calleeName, node);
|
|
1487
1641
|
}
|
|
1488
1642
|
return nodeElement;
|
|
1489
1643
|
}
|
|
@@ -1493,6 +1647,8 @@ function transform2SqlFunction(node, calleeName, argument, options) {
|
|
|
1493
1647
|
(0, utils_1.throwError)(`数据查询中只有 WHERE, HAVING, ORDER_BY 支持 SQL 函数,而当前字段为 ${options.inCallQueryComponentField}`);
|
|
1494
1648
|
}
|
|
1495
1649
|
const specFunList = ['COUNT', 'COUNTD', 'SUM', 'AVG', 'MAX', 'MIN'];
|
|
1650
|
+
// TODO: 先写死了 mysql,后续需要传入: 参考 requestSqlFunctions
|
|
1651
|
+
const func = server_1.default ? server_1.default?.getSqlFunction('mysql', calleeName) : null;
|
|
1496
1652
|
let addArguments = [];
|
|
1497
1653
|
if (specFunList.includes(calleeName)) {
|
|
1498
1654
|
const value = calleeName === 'COUNTD' ? 'DISTINCT' : 'ALL';
|
|
@@ -1505,7 +1661,7 @@ function transform2SqlFunction(node, calleeName, argument, options) {
|
|
|
1505
1661
|
}
|
|
1506
1662
|
const newArguments = argument.map((arg, index) => new utils_1.naslTypes.Argument({
|
|
1507
1663
|
expression: fixExpression(arg, options),
|
|
1508
|
-
keyword:
|
|
1664
|
+
keyword: func?.params[index]?.name || `param${index + 1}`,
|
|
1509
1665
|
}));
|
|
1510
1666
|
const nodeElement = new utils_1.naslTypes.CallFunction({
|
|
1511
1667
|
calleeNamespace: 'nasl.sqlFunction',
|
|
@@ -1518,7 +1674,7 @@ function transform2SqlFunction(node, calleeName, argument, options) {
|
|
|
1518
1674
|
}
|
|
1519
1675
|
function transformCall2CallFunction(node, calleeName, callee, options) {
|
|
1520
1676
|
let curCalleeName;
|
|
1521
|
-
if (callee.length
|
|
1677
|
+
if (callee.length >= 3)
|
|
1522
1678
|
curCalleeName = callee[callee.length - 1].name;
|
|
1523
1679
|
else {
|
|
1524
1680
|
let _callee = callee[0].callee;
|
|
@@ -1526,11 +1682,10 @@ function transformCall2CallFunction(node, calleeName, callee, options) {
|
|
|
1526
1682
|
_callee = _callee.callee;
|
|
1527
1683
|
curCalleeName = _callee.property.name;
|
|
1528
1684
|
}
|
|
1529
|
-
const argument = callee.length
|
|
1530
|
-
if (['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN'].includes(curCalleeName)) {
|
|
1531
|
-
|
|
1532
|
-
}
|
|
1533
|
-
;
|
|
1685
|
+
const argument = callee.length >= 3 ? node.arguments : callee[0].arguments;
|
|
1686
|
+
// if (['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN'].includes(curCalleeName)) {
|
|
1687
|
+
// return transformCallExpressionToBinaryExpression(node, curCalleeName, callee, options);
|
|
1688
|
+
// };
|
|
1534
1689
|
if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
|
|
1535
1690
|
return transform2NewExpression(curCalleeName, node, options);
|
|
1536
1691
|
}
|
|
@@ -1539,10 +1694,31 @@ function transformCall2CallFunction(node, calleeName, callee, options) {
|
|
|
1539
1694
|
exports.transformCall2CallFunction = transformCall2CallFunction;
|
|
1540
1695
|
function transform2UIFunction(node, calleeName, callee, options) {
|
|
1541
1696
|
if (callee[2].name === 'destination') {
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1697
|
+
let namespaceNode = node.arguments[0];
|
|
1698
|
+
let namespace = '';
|
|
1699
|
+
if (namespaceNode.type === 'TemplateLiteral') {
|
|
1700
|
+
namespace = namespaceNode.quasis[0]?.value?.cooked;
|
|
1701
|
+
}
|
|
1702
|
+
else if (namespaceNode.type === 'StringLiteral') {
|
|
1703
|
+
namespace = namespaceNode.value;
|
|
1704
|
+
}
|
|
1705
|
+
else {
|
|
1706
|
+
namespace = (0, utils_1.generate)(namespaceNode).code;
|
|
1707
|
+
}
|
|
1708
|
+
let nsArr;
|
|
1709
|
+
let viewNamespace = '';
|
|
1710
|
+
let viewName = '';
|
|
1711
|
+
if (namespace.startsWith('app.frontendTypes.')) {
|
|
1712
|
+
nsArr = namespace.split('.');
|
|
1713
|
+
viewName = nsArr.pop();
|
|
1714
|
+
viewNamespace = nsArr.join('.');
|
|
1715
|
+
}
|
|
1716
|
+
else {
|
|
1717
|
+
nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
|
|
1718
|
+
const pageType = nsArr.shift();
|
|
1719
|
+
viewName = nsArr.pop();
|
|
1720
|
+
viewNamespace = `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`;
|
|
1721
|
+
}
|
|
1546
1722
|
const newArguments = node?.arguments?.slice(1);
|
|
1547
1723
|
let argument = [];
|
|
1548
1724
|
if (newArguments?.[0]?.type === 'ObjectExpression') {
|
|
@@ -1558,7 +1734,7 @@ function transform2UIFunction(node, calleeName, callee, options) {
|
|
|
1558
1734
|
}));
|
|
1559
1735
|
}
|
|
1560
1736
|
return new utils_1.naslTypes.Destination({
|
|
1561
|
-
viewNamespace
|
|
1737
|
+
viewNamespace,
|
|
1562
1738
|
viewName,
|
|
1563
1739
|
arguments: argument,
|
|
1564
1740
|
});
|
|
@@ -1568,6 +1744,8 @@ function transform2UIFunction(node, calleeName, callee, options) {
|
|
|
1568
1744
|
link: fixExpression(node?.arguments[0], options),
|
|
1569
1745
|
});
|
|
1570
1746
|
}
|
|
1747
|
+
if (options?.isRestricted)
|
|
1748
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1571
1749
|
return new utils_1.naslTypes.CallLogic({
|
|
1572
1750
|
calleeNamespace: 'nasl.ui',
|
|
1573
1751
|
calleeName: callee[2].name,
|
|
@@ -1687,6 +1865,8 @@ function transformForEach2ForEachStatement(node, calleeName, callee, options) {
|
|
|
1687
1865
|
}
|
|
1688
1866
|
exports.transformForEach2ForEachStatement = transformForEach2ForEachStatement;
|
|
1689
1867
|
function transformAlert2ShowMessage(node, calleeName, callee, options) {
|
|
1868
|
+
if (options?.isRestricted)
|
|
1869
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1690
1870
|
return new utils_1.naslTypes.CallLogic({
|
|
1691
1871
|
calleeNamespace: 'nasl.ui',
|
|
1692
1872
|
calleeName: 'showMessage',
|
|
@@ -1698,6 +1878,8 @@ function transformAlert2ShowMessage(node, calleeName, callee, options) {
|
|
|
1698
1878
|
}
|
|
1699
1879
|
exports.transformAlert2ShowMessage = transformAlert2ShowMessage;
|
|
1700
1880
|
function transformCall2Interface(node, calleeName, callee, options) {
|
|
1881
|
+
if (options?.isRestricted)
|
|
1882
|
+
(0, utils_1.throwError)('调用接口不支持在组件或默认值表达式中使用', node);
|
|
1701
1883
|
return new utils_1.naslTypes.CallInterface({
|
|
1702
1884
|
calleeNamespace: (0, utils_1.generate)(node.callee.object).code,
|
|
1703
1885
|
calleeName: callee[callee.length - 1].name,
|
|
@@ -1709,13 +1891,15 @@ function transformCall2Interface(node, calleeName, callee, options) {
|
|
|
1709
1891
|
}
|
|
1710
1892
|
exports.transformCall2Interface = transformCall2Interface;
|
|
1711
1893
|
function transformCall2Connector(node, calleeName, callee, options) {
|
|
1894
|
+
if (options?.isRestricted)
|
|
1895
|
+
(0, utils_1.throwError)('调用连接器不支持在组件或默认值表达式中使用', node);
|
|
1712
1896
|
let calleeConnectionName = undefined;
|
|
1713
1897
|
let calleeNamespace = undefined;
|
|
1714
1898
|
let calleeNamespacePrefix = `connector.${callee[1].name}`;
|
|
1715
1899
|
if (callee.length === 5) {
|
|
1716
1900
|
const connectArg = callee[2].arguments[0];
|
|
1717
1901
|
if (!connectArg || connectArg.type !== 'StringLiteral') {
|
|
1718
|
-
(0, utils_1.throwError)(
|
|
1902
|
+
(0, utils_1.throwError)('调用 connector 的 connect 参数不正确,只允许使用字符串字面量', node);
|
|
1719
1903
|
}
|
|
1720
1904
|
calleeConnectionName = connectArg.value;
|
|
1721
1905
|
const noNamespace = callee[3].name === 'logics';
|
|
@@ -1730,7 +1914,7 @@ function transformCall2Connector(node, calleeName, callee, options) {
|
|
|
1730
1914
|
calleeNamespace = calleeNamespacePrefix;
|
|
1731
1915
|
}
|
|
1732
1916
|
else {
|
|
1733
|
-
(0, utils_1.throwError)(`调用 connector,参数数量不正确,当前参数数量为 ${callee.length},${calleeName}
|
|
1917
|
+
(0, utils_1.throwError)(`调用 connector,参数数量不正确,当前参数数量为 ${callee.length},${calleeName}`, node);
|
|
1734
1918
|
}
|
|
1735
1919
|
return new utils_1.naslTypes.CallConnector({
|
|
1736
1920
|
calleeConnectionName,
|
|
@@ -1743,6 +1927,8 @@ function transformCall2Connector(node, calleeName, callee, options) {
|
|
|
1743
1927
|
}
|
|
1744
1928
|
exports.transformCall2Connector = transformCall2Connector;
|
|
1745
1929
|
function transformCall2Extension(node, calleeName, callee, options) {
|
|
1930
|
+
if (options?.isRestricted)
|
|
1931
|
+
(0, utils_1.throwError)('调用扩展逻辑不支持在组件或默认值表达式中使用', node);
|
|
1746
1932
|
return new utils_1.naslTypes.CallLogic({
|
|
1747
1933
|
calleeNamespace: (0, utils_1.generate)(node?.callee?.object)?.code,
|
|
1748
1934
|
calleeName: callee?.[callee?.length - 1]?.name,
|
|
@@ -1752,55 +1938,6 @@ function transformCall2Extension(node, calleeName, callee, options) {
|
|
|
1752
1938
|
});
|
|
1753
1939
|
}
|
|
1754
1940
|
exports.transformCall2Extension = transformCall2Extension;
|
|
1755
|
-
function transformArrowFunction2Match(node, calleeName, callee, options) {
|
|
1756
|
-
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
1757
|
-
// NOTE: 适用于 if else
|
|
1758
|
-
const newCallee = node.callee.body.body;
|
|
1759
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFunction') {
|
|
1760
|
-
const match = new utils_1.naslTypes.Match({
|
|
1761
|
-
expression: fixExpression(newCallee[0], options),
|
|
1762
|
-
isExpression: options.transformType !== 'logic',
|
|
1763
|
-
cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new utils_1.naslTypes.MatchCase({
|
|
1764
|
-
patterns: !_case.test ? [] : flatMatchPatternsExpression(transformNodeFunction(_case.test, options)),
|
|
1765
|
-
body: transformBlockBody(_case.consequent.body.filter((item) => item.type !== 'BreakStatement'), options),
|
|
1766
|
-
})),
|
|
1767
|
-
});
|
|
1768
|
-
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
1769
|
-
match.cases.push(new utils_1.naslTypes.MatchCase({
|
|
1770
|
-
patterns: [],
|
|
1771
|
-
body: [],
|
|
1772
|
-
}));
|
|
1773
|
-
}
|
|
1774
|
-
match.cases.forEach((case_) => {
|
|
1775
|
-
if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
|
|
1776
|
-
case_.isMatchedTypeEnumable = true;
|
|
1777
|
-
}
|
|
1778
|
-
if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
|
|
1779
|
-
case_.isMatchedTypeEnumable = true;
|
|
1780
|
-
case_.patterns[0] = new utils_1.naslTypes.MemberExpression({
|
|
1781
|
-
object: {
|
|
1782
|
-
concept: 'Identifier',
|
|
1783
|
-
name: case_.patterns[0].object.property.name,
|
|
1784
|
-
folded: false,
|
|
1785
|
-
namespace: 'app.enums'
|
|
1786
|
-
},
|
|
1787
|
-
property: {
|
|
1788
|
-
concept: 'Identifier',
|
|
1789
|
-
name: case_.patterns[0].property.value,
|
|
1790
|
-
folded: false,
|
|
1791
|
-
},
|
|
1792
|
-
});
|
|
1793
|
-
}
|
|
1794
|
-
});
|
|
1795
|
-
return match;
|
|
1796
|
-
}
|
|
1797
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
|
|
1798
|
-
const switchStatement = transformNodeFunction(newCallee[0].body.body[0], options);
|
|
1799
|
-
return switchStatement;
|
|
1800
|
-
}
|
|
1801
|
-
(0, utils_1.throwError)(`Unhandled ArrowFunctionExpression node ${node.type}`);
|
|
1802
|
-
}
|
|
1803
|
-
exports.transformArrowFunction2Match = transformArrowFunction2Match;
|
|
1804
1941
|
function transformTSAsExpression(node, options) {
|
|
1805
1942
|
if (node.expression.type === 'NumericLiteral') {
|
|
1806
1943
|
return transform2NumericLiteral(node.expression, { ...options, typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation) });
|
|
@@ -1811,11 +1948,16 @@ function transformTSAsExpression(node, options) {
|
|
|
1811
1948
|
(0, utils_1.throwError)(`列表 as 必须为 List 类型`);
|
|
1812
1949
|
return transformArrayExpression(node.expression, { ...options, typeAnnotation });
|
|
1813
1950
|
}
|
|
1951
|
+
else if (node.expression.type === 'NullLiteral') {
|
|
1952
|
+
return transform2NullLiteral(node.expression, options);
|
|
1953
|
+
}
|
|
1814
1954
|
else {
|
|
1815
|
-
(0, utils_1.throwError)(
|
|
1955
|
+
(0, utils_1.throwError)('表达式不支持使用 as 关键字', node.expression.type, node.expression);
|
|
1816
1956
|
}
|
|
1817
1957
|
}
|
|
1818
1958
|
function transformCall2CallViewLogic(node, calleeName, callee, options) {
|
|
1959
|
+
if (options?.isRestricted)
|
|
1960
|
+
(0, utils_1.throwError)('调用页面逻辑不支持在组件或默认值表达式中使用', node);
|
|
1819
1961
|
return new utils_1.naslTypes.CallLogic({
|
|
1820
1962
|
calleeNamespace: '',
|
|
1821
1963
|
calleeName: calleeName.slice('viewLogic_'.length),
|
|
@@ -1826,11 +1968,13 @@ function transformCall2CallViewLogic(node, calleeName, callee, options) {
|
|
|
1826
1968
|
}
|
|
1827
1969
|
exports.transformCall2CallViewLogic = transformCall2CallViewLogic;
|
|
1828
1970
|
function transformCall2Logic(node, calleeName, callee, options) {
|
|
1971
|
+
if (options?.isRestricted)
|
|
1972
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1829
1973
|
if (utils_1.callFunctionMap.includes(calleeName)) {
|
|
1830
1974
|
// 未带前缀,补一下
|
|
1831
1975
|
return transform2CallFunction(node, calleeName, node?.arguments || [], options);
|
|
1832
1976
|
}
|
|
1833
|
-
else if (
|
|
1977
|
+
else if (server_1.default.getSqlFunction('mysql', calleeName) || calleeName === 'COUNTD') {
|
|
1834
1978
|
return transform2SqlFunction(node, calleeName, node?.arguments || [], options);
|
|
1835
1979
|
}
|
|
1836
1980
|
let newCalleeName = calleeName?.includes('__IDENTIFIER__') ? undefined : calleeName;
|
|
@@ -1850,6 +1994,8 @@ function transformCall2Logic(node, calleeName, callee, options) {
|
|
|
1850
1994
|
}
|
|
1851
1995
|
exports.transformCall2Logic = transformCall2Logic;
|
|
1852
1996
|
function transformCall2LogicWithAuth(node, calleeName, callee, options) {
|
|
1997
|
+
if (options?.isRestricted)
|
|
1998
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1853
1999
|
return new utils_1.naslTypes.CallLogic({
|
|
1854
2000
|
calleeNamespace: `nasl.auth`,
|
|
1855
2001
|
calleeName: callee[callee.length - 1].name,
|
|
@@ -1874,10 +2020,10 @@ function flatCallQueryComponentChainNode(node, options) {
|
|
|
1874
2020
|
const calleeName = node.callee.name;
|
|
1875
2021
|
if (['FROM', 'INNER_JOIN', 'LEFT_JOIN', 'RIGHT_JOIN', 'OUTER_JOIN'].includes(calleeName)) {
|
|
1876
2022
|
if (node.arguments[1].type !== 'ArrowFunctionExpression')
|
|
1877
|
-
(0, utils_1.throwError)('FROM should have a ArrowFunctionExpression as the second argument');
|
|
2023
|
+
(0, utils_1.throwError)('FROM should have a ArrowFunctionExpression as the second argument', node.arguments[1]);
|
|
1878
2024
|
const arrowFunctionExpression = node.arguments[1];
|
|
1879
2025
|
if (arrowFunctionExpression.body.type !== 'CallExpression')
|
|
1880
|
-
(0, utils_1.throwError)('FROM should have a CallExpression as the body of ArrowFunctionExpression');
|
|
2026
|
+
(0, utils_1.throwError)('FROM should have a CallExpression as the body of ArrowFunctionExpression', arrowFunctionExpression.body);
|
|
1881
2027
|
const body = arrowFunctionExpression.body;
|
|
1882
2028
|
const callExpressions = flatChainCallExpression(body);
|
|
1883
2029
|
const joinNode = callExpressions?.filter((item) => item?.callee?.name.includes('_JOIN'));
|
|
@@ -1893,7 +2039,7 @@ FROM(T1Entity, T1 => ${name}(T2Entity, T2 => ON(T1.id == T2.id).SELECT(...))); /
|
|
|
1893
2039
|
const count = joinCode.match(/_JOIN/g)?.length || 0;
|
|
1894
2040
|
const errorOrder = count >= 1 && !callExpressions?.[callExpressions?.length - 1]?.callee?.name?.includes('_JOIN');
|
|
1895
2041
|
if (errorOrder) {
|
|
1896
|
-
(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 的调用顺序。'
|
|
2042
|
+
(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 的调用顺序。');
|
|
1897
2043
|
}
|
|
1898
2044
|
const result = [{
|
|
1899
2045
|
calleeName: calleeName,
|
|
@@ -1943,7 +2089,7 @@ function transformMemberExpression2Entity(node, node2) {
|
|
|
1943
2089
|
const entityNamespace = entityPath.slice(0, -1).map(n => n.name).join('.');
|
|
1944
2090
|
const entityName = entityPath[entityPath.length - 1].name.replace(/Entity$/, '');
|
|
1945
2091
|
if (!entityNamespace?.includes('.entities')) {
|
|
1946
|
-
(0, utils_1.throwError)(`${entityNamespace}.${entityName}
|
|
2092
|
+
(0, utils_1.throwError)(`${entityNamespace}.${entityName} 不是一个数据库表,无法使用数据查询`);
|
|
1947
2093
|
}
|
|
1948
2094
|
const asName = node2.name === entityName ? undefined : node2.name;
|
|
1949
2095
|
if (asName) {
|
|
@@ -1952,19 +2098,23 @@ function transformMemberExpression2Entity(node, node2) {
|
|
|
1952
2098
|
return { entityNamespace, entityName, asName };
|
|
1953
2099
|
}
|
|
1954
2100
|
function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
2101
|
+
if (options?.isInFrontend)
|
|
2102
|
+
(0, utils_1.throwError)('数据查询组件不支持在前端使用', node);
|
|
2103
|
+
if (options?.isRestricted)
|
|
2104
|
+
(0, utils_1.throwError)('数据查询组件不支持在组件或默认值表达式中使用', node);
|
|
1955
2105
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
1956
2106
|
const code = (0, utils_1.generate)(node)?.code || '';
|
|
1957
2107
|
if (code?.includes('nasl.util')) {
|
|
1958
|
-
(0, utils_1.throwError)('数据查询中不支持nasl.util内的库函数,请将对应操作放在数据查询外部进行处理');
|
|
2108
|
+
(0, utils_1.throwError)('数据查询中不支持nasl.util内的库函数,请将对应操作放在数据查询外部进行处理', code);
|
|
1959
2109
|
}
|
|
1960
2110
|
if (!code?.includes('.SELECT(') && !code?.includes('.AGGR_SELECT(')) {
|
|
1961
|
-
(0, utils_1.throwError)('缺少 SELECT 或 AGGR_SELECT 语句');
|
|
2111
|
+
(0, utils_1.throwError)('缺少 SELECT 或 AGGR_SELECT 语句', code);
|
|
1962
2112
|
}
|
|
1963
2113
|
const flatted = flatCallQueryComponentChainNode(node, options);
|
|
1964
2114
|
const calleeNames = flatted.map((item) => item?.calleeName).filter((name) => name !== '$');
|
|
1965
2115
|
const isOrderCorrect = (0, utils_1.checkOQLCalleeNameOrder)(calleeNames);
|
|
1966
2116
|
if (!isOrderCorrect) {
|
|
1967
|
-
(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 的调用顺序。'
|
|
2117
|
+
(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 的调用顺序。');
|
|
1968
2118
|
}
|
|
1969
2119
|
let from;
|
|
1970
2120
|
let where;
|
|
@@ -2025,16 +2175,35 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2025
2175
|
propertyName: '',
|
|
2026
2176
|
})],
|
|
2027
2177
|
});
|
|
2028
|
-
item.arguments[0].
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2178
|
+
if (item.arguments[0].type === 'ObjectExpression') {
|
|
2179
|
+
item.arguments[0].properties?.forEach((arg) => {
|
|
2180
|
+
if (arg?.value.type === 'CallExpression') {
|
|
2181
|
+
let selectElements = transform2QueryAggregateExpression(arg, { ...options, entityAsNames, inCallQueryComponentField: item.calleeName });
|
|
2182
|
+
const newSelectElements = [...select.selectElements, selectElements];
|
|
2183
|
+
select.setSelectElements(newSelectElements);
|
|
2184
|
+
}
|
|
2185
|
+
else {
|
|
2186
|
+
(0, utils_1.throwError)(`Unsupported expression type for QueryAggregateExpression`, arg?.value.type, arg?.value);
|
|
2187
|
+
}
|
|
2188
|
+
});
|
|
2189
|
+
}
|
|
2190
|
+
else if (item.arguments[0].type === 'CallExpression') { // 只有一个的简写:AGGR_SELECT(SUM(Entity1.age))
|
|
2191
|
+
const selectElements = transform2QueryAggregateExpression({
|
|
2192
|
+
type: 'ObjectProperty',
|
|
2193
|
+
key: {
|
|
2194
|
+
type: 'Identifier',
|
|
2195
|
+
name: 'resultItem',
|
|
2196
|
+
},
|
|
2197
|
+
value: item.arguments[0],
|
|
2198
|
+
computed: false,
|
|
2199
|
+
shorthand: false,
|
|
2200
|
+
}, { ...options, entityAsNames, inCallQueryComponentField: item.calleeName });
|
|
2201
|
+
const newSelectElements = [...select.selectElements, selectElements];
|
|
2202
|
+
select.setSelectElements(newSelectElements);
|
|
2203
|
+
}
|
|
2204
|
+
else {
|
|
2205
|
+
(0, utils_1.throwError)('Unsupported expression type for QueryAggregateExpression', item.arguments[0].type, item.arguments[0]);
|
|
2206
|
+
}
|
|
2038
2207
|
break;
|
|
2039
2208
|
case 'SELECT':
|
|
2040
2209
|
select = new utils_1.naslTypes.QuerySelectExpression({
|
|
@@ -2106,7 +2275,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2106
2275
|
}
|
|
2107
2276
|
}
|
|
2108
2277
|
else {
|
|
2109
|
-
(0, utils_1.throwError)('HAVING 不符合规范,请使用箭头函数');
|
|
2278
|
+
(0, utils_1.throwError)('HAVING 不符合规范,请使用箭头函数', havingNode);
|
|
2110
2279
|
}
|
|
2111
2280
|
having = transformNodeFunction(havingNode, { ...options, ...restParams });
|
|
2112
2281
|
break;
|
|
@@ -2121,7 +2290,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2121
2290
|
}
|
|
2122
2291
|
}
|
|
2123
2292
|
else {
|
|
2124
|
-
(0, utils_1.throwError)('ORDER_BY 不符合规范,请使用箭头函数');
|
|
2293
|
+
(0, utils_1.throwError)('ORDER_BY 不符合规范,请使用箭头函数', orderNode);
|
|
2125
2294
|
}
|
|
2126
2295
|
orderBy = orderNode.map((arg) => {
|
|
2127
2296
|
let orderElementCode = (0, utils_1.generate)(arg)?.code || '';
|
|
@@ -2165,6 +2334,8 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2165
2334
|
return callQueryComponent;
|
|
2166
2335
|
}
|
|
2167
2336
|
function transformCall2LaunchProcess(node, calleeName, callee, options) {
|
|
2337
|
+
if (options?.isRestricted)
|
|
2338
|
+
(0, utils_1.throwError)('调用流程逻辑不支持在组件或默认值表达式中使用', node);
|
|
2168
2339
|
const args = node.arguments;
|
|
2169
2340
|
const dataArg = args?.[0];
|
|
2170
2341
|
const procDefKeyArg = args?.[1];
|
|
@@ -2203,6 +2374,7 @@ function transform2LogicItem(node, options) {
|
|
|
2203
2374
|
transformManager.register('NumericLiteral', transform2NumericLiteral);
|
|
2204
2375
|
transformManager.register('NullLiteral', transform2NullLiteral);
|
|
2205
2376
|
transformManager.register('TemplateLiteral', transform2StringInterpolation);
|
|
2377
|
+
transformManager.register((node) => node.type === 'LogicalExpression' && node.operator === '??', transformDefaultExpression);
|
|
2206
2378
|
transformManager.register('BinaryExpression', transform2BinaryExpression);
|
|
2207
2379
|
transformManager.register('LogicalExpression', transform2BinaryExpression);
|
|
2208
2380
|
transformManager.register('UpdateExpression', transformUpdateExpression2Assignment);
|
|
@@ -2240,7 +2412,8 @@ function transform2LogicItem(node, options) {
|
|
|
2240
2412
|
}
|
|
2241
2413
|
});
|
|
2242
2414
|
transformManager.register('MemberExpression', transformMemberExpression);
|
|
2243
|
-
transformManager.register(
|
|
2415
|
+
transformManager.register('OptionalMemberExpression', transformMemberExpression);
|
|
2416
|
+
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && (node.callee.type === 'FunctionExpression' && node.callee.id?.name === 'match' || node.callee.type === 'ArrowFunctionExpression'), transformCallFunctionExpression2Match);
|
|
2244
2417
|
transformManager.registerCallExpression((node, calleeName) => /^\$refs\./.test(calleeName), transformCall2CallViewElementLogic);
|
|
2245
2418
|
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 2 && callee[0].type === 'Identifier' && callee[0].name.endsWith('Entity'), transformCall2CallEntityLogic);
|
|
2246
2419
|
transformManager.registerCallExpression('nasl.oql.query', transformCall2OQLQuery);
|
|
@@ -2262,12 +2435,11 @@ function transform2LogicItem(node, options) {
|
|
|
2262
2435
|
transformManager.registerCallExpression('extensions.lcap_process_framework.logics.launchProcess', transformCall2LaunchProcess);
|
|
2263
2436
|
transformManager.registerCallExpression((node, calleeName) => /extensions\./.test(calleeName), transformCall2Extension);
|
|
2264
2437
|
transformManager.registerCallExpression((node, calleeName) => /connectors\./.test(calleeName), transformCall2Connector);
|
|
2265
|
-
transformManager.registerCallExpression((node) => node.callee.type === 'ArrowFunctionExpression', transformArrowFunction2Match);
|
|
2266
2438
|
transformManager.registerCallExpression((node, calleeName) => ['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN', 'IS_NULL'].includes(calleeName), transformCallExpressionToBinaryExpression);
|
|
2267
2439
|
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && calleeName.startsWith('viewLogic_'), transformCall2CallViewLogic);
|
|
2268
2440
|
transformManager.registerCallExpression('PAGINATE', transformCall2Paginate);
|
|
2269
2441
|
transformManager.registerCallExpression('FROM', transformCall2DataQuery);
|
|
2270
|
-
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1, transformCall2Logic);
|
|
2442
|
+
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && !['ArrowFunctionExpression', 'FunctionExpression'].includes(callee[0].type), transformCall2Logic);
|
|
2271
2443
|
let result = transformManager.apply(node, options);
|
|
2272
2444
|
delete options.typeAnnotation;
|
|
2273
2445
|
return result;
|