@lcap/nasl 4.1.0-beta.8 → 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/memory-optimization.d.ts.map +1 -1
- package/out/generator/release-body/memory-optimization.js +3 -2
- package/out/generator/release-body/memory-optimization.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 +333 -151
- 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 +125 -64
- 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,17 +123,21 @@ 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) {
|
|
131
130
|
let expression;
|
|
132
131
|
if (options.transformType === 'logic' && supportSubLogic &&
|
|
133
|
-
(arg?.type === 'FunctionExpression' ||
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
(arg?.type === 'FunctionExpression' || (arg?.type === 'ArrowFunctionExpression'))) {
|
|
133
|
+
if (arg?.body?.type === 'BlockStatement') {
|
|
134
|
+
expression = transformTSCode2SubLogic(arg, options);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
const babelReturnStatement = utils_1.babelTypes.returnStatement(arg.body);
|
|
138
|
+
arg.body = utils_1.babelTypes.blockStatement([babelReturnStatement]);
|
|
139
|
+
expression = transformTSCode2SubLogic(arg, options);
|
|
140
|
+
}
|
|
138
141
|
}
|
|
139
142
|
else {
|
|
140
143
|
if (arg?.body?.type === 'ReturnStatement') {
|
|
@@ -228,16 +231,29 @@ function flatMatchPatternsExpression(node) {
|
|
|
228
231
|
}
|
|
229
232
|
return [node];
|
|
230
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
|
+
}
|
|
231
242
|
return [node];
|
|
232
243
|
}
|
|
233
244
|
exports.flatMatchPatternsExpression = flatMatchPatternsExpression;
|
|
234
|
-
function
|
|
245
|
+
function flatIfStatementForMatch(node) {
|
|
235
246
|
if (node.alternate.type === 'IfStatement') {
|
|
236
|
-
return [...
|
|
247
|
+
return [node, ...flatIfStatementForMatch(node.alternate)];
|
|
237
248
|
}
|
|
238
|
-
return [node
|
|
249
|
+
return [node, {
|
|
250
|
+
type: 'IfStatement',
|
|
251
|
+
test: null,
|
|
252
|
+
consequent: node.alternate,
|
|
253
|
+
alternate: node.alternate,
|
|
254
|
+
}];
|
|
239
255
|
}
|
|
240
|
-
exports.
|
|
256
|
+
exports.flatIfStatementForMatch = flatIfStatementForMatch;
|
|
241
257
|
/**
|
|
242
258
|
* 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
|
|
243
259
|
* @param node
|
|
@@ -265,7 +281,7 @@ function transform2Param(node) {
|
|
|
265
281
|
name,
|
|
266
282
|
typeAnnotation,
|
|
267
283
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
268
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
284
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
269
285
|
}),
|
|
270
286
|
});
|
|
271
287
|
}
|
|
@@ -279,7 +295,7 @@ function transform2Param(node) {
|
|
|
279
295
|
name,
|
|
280
296
|
typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
|
|
281
297
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
282
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
298
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
283
299
|
}),
|
|
284
300
|
});
|
|
285
301
|
}
|
|
@@ -294,7 +310,7 @@ function transform2Param(node) {
|
|
|
294
310
|
required: !node.optional,
|
|
295
311
|
typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
|
|
296
312
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
297
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
313
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
298
314
|
}),
|
|
299
315
|
});
|
|
300
316
|
}
|
|
@@ -317,12 +333,12 @@ function transform2Param(node) {
|
|
|
317
333
|
name,
|
|
318
334
|
typeAnnotation: typeAnnotation ? (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(typeAnnotation) : null,
|
|
319
335
|
defaultValue: defaultValueExpression && new utils_1.naslTypes.DefaultValue({
|
|
320
|
-
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr' }),
|
|
336
|
+
expression: transform2LogicItem(defaultValueExpression, { transformType: 'attr', isRestricted: true }),
|
|
321
337
|
}),
|
|
322
338
|
});
|
|
323
339
|
}
|
|
324
340
|
else {
|
|
325
|
-
(0, utils_1.throwError)(
|
|
341
|
+
(0, utils_1.throwError)('Unhandled node', node);
|
|
326
342
|
}
|
|
327
343
|
}
|
|
328
344
|
exports.transform2Param = transform2Param;
|
|
@@ -341,6 +357,12 @@ function transformCallExpressionToBinaryExpression(node, calleeName, callee, opt
|
|
|
341
357
|
IN: 'in',
|
|
342
358
|
IS_NULL: 'isNull',
|
|
343
359
|
};
|
|
360
|
+
if (calleeName === 'IS_NULL') {
|
|
361
|
+
return new utils_1.naslTypes.UnaryExpression({
|
|
362
|
+
operator: 'isNull',
|
|
363
|
+
argument: transformNodeFunction(argument?.[0], options),
|
|
364
|
+
});
|
|
365
|
+
}
|
|
344
366
|
return new utils_1.naslTypes.BinaryExpression({
|
|
345
367
|
operator: map[calleeName],
|
|
346
368
|
left: transformNodeFunction(argument?.[0], options),
|
|
@@ -420,11 +442,21 @@ function transform2BinaryExpression(node, options) {
|
|
|
420
442
|
right: transformNodeFunction(node.right, options),
|
|
421
443
|
});
|
|
422
444
|
}
|
|
423
|
-
(0, utils_1.throwError)(
|
|
445
|
+
(0, utils_1.throwError)('Unhandled node', node.type, node);
|
|
424
446
|
}
|
|
425
447
|
exports.transform2BinaryExpression = transform2BinaryExpression;
|
|
448
|
+
function transformDefaultExpression(node, options) {
|
|
449
|
+
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
450
|
+
return transformNodeFunction(node.left, options);
|
|
451
|
+
}
|
|
426
452
|
function transformConditionalExpression(node, options) {
|
|
427
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
|
+
}
|
|
428
460
|
const test = transformNodeFunction(node.test, options);
|
|
429
461
|
const consequent = transformNodeFunction(node.consequent, options);
|
|
430
462
|
const alternate = transformNodeFunction(node.alternate, options);
|
|
@@ -451,7 +483,7 @@ function transformConditionalExpression(node, options) {
|
|
|
451
483
|
isMatchedTypeEnumable: true,
|
|
452
484
|
}),
|
|
453
485
|
new utils_1.naslTypes.MatchCase({
|
|
454
|
-
patterns: [
|
|
486
|
+
patterns: [],
|
|
455
487
|
body: [alternate],
|
|
456
488
|
}),
|
|
457
489
|
],
|
|
@@ -467,13 +499,30 @@ function transformArrayExpression(node, options) {
|
|
|
467
499
|
});
|
|
468
500
|
}
|
|
469
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
|
+
}
|
|
470
519
|
const newComposite = transform2PartialNewComposite(node, options);
|
|
471
520
|
const newProperties = node.properties.filter((prop) => prop.type === 'ObjectProperty' && prop.value.type !== 'ConditionalExpression');
|
|
472
521
|
const structureProperties = [];
|
|
473
522
|
newProperties.forEach((arg, index) => {
|
|
474
523
|
structureProperties.push(new utils_1.naslTypes.StructureProperty({
|
|
475
524
|
name: arg.key.name,
|
|
476
|
-
typeAnnotation: null
|
|
525
|
+
typeAnnotation: arg.naslType || null,
|
|
477
526
|
}));
|
|
478
527
|
});
|
|
479
528
|
newComposite.typeAnnotation = utils_1.naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties);
|
|
@@ -500,7 +549,7 @@ function transform2NewExpression(calleeName, node, options) {
|
|
|
500
549
|
});
|
|
501
550
|
}
|
|
502
551
|
if (node?.arguments && node?.arguments?.[0]?.type !== 'ArrayExpression') {
|
|
503
|
-
(0, utils_1.throwError)(
|
|
552
|
+
(0, utils_1.throwError)('Not allowed code in NewList', node);
|
|
504
553
|
}
|
|
505
554
|
return new utils_1.naslTypes.NewList({
|
|
506
555
|
typeAnnotation: node?.typeParameters ? typeAnnotation : undefined,
|
|
@@ -533,13 +582,13 @@ function transform2NewExpression(calleeName, node, options) {
|
|
|
533
582
|
const typeParam = node.typeParameters?.params[0];
|
|
534
583
|
const typeNamespaceAndName = typeParam ? (0, utils_1.generate)(typeParam).code : '';
|
|
535
584
|
if (!typeNamespaceAndName)
|
|
536
|
-
(0, utils_1.throwError)(
|
|
585
|
+
(0, utils_1.throwError)('Not allowed empty namespace in NewEntity', node);
|
|
537
586
|
return transform2NewStructure(typeNamespaceAndName, node.arguments[0], options);
|
|
538
587
|
}
|
|
539
588
|
if (calleeName === 'NewAnonymousStructure') {
|
|
540
589
|
return transform2NewAnonymousStructure(node.arguments[0], options);
|
|
541
590
|
}
|
|
542
|
-
(0, utils_1.throwError)(
|
|
591
|
+
(0, utils_1.throwError)('Unhandled ArrowFunctionExpression node', node.type, node);
|
|
543
592
|
}
|
|
544
593
|
function pushElseIf(ifNode, switchStatement, options) {
|
|
545
594
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
@@ -636,7 +685,7 @@ function transform2VariableAndAddAssignment(node, options) {
|
|
|
636
685
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
637
686
|
const declList = node?.declarations || [];
|
|
638
687
|
let newNode;
|
|
639
|
-
declList
|
|
688
|
+
declList.forEach((decl) => {
|
|
640
689
|
const variableName = decl.id.name;
|
|
641
690
|
const isArrayPattern = decl.id?.type === 'ArrayPattern';
|
|
642
691
|
if (isArrayPattern && decl.init) {
|
|
@@ -773,6 +822,16 @@ function transformIdentifier(node, options) {
|
|
|
773
822
|
if (placeholderMap.includes(node.name)) {
|
|
774
823
|
return new utils_1.naslTypes.Identifier({});
|
|
775
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
|
+
}
|
|
776
835
|
return new utils_1.naslTypes.Identifier({
|
|
777
836
|
name: node.name,
|
|
778
837
|
});
|
|
@@ -801,7 +860,7 @@ function transform2SelectQueryFieldExpression(node, options) {
|
|
|
801
860
|
// @TODO
|
|
802
861
|
}
|
|
803
862
|
else {
|
|
804
|
-
(0, utils_1.throwError)(
|
|
863
|
+
(0, utils_1.throwError)('Unsupported expression type for QueryFieldExpression', expression.type, expression);
|
|
805
864
|
}
|
|
806
865
|
}
|
|
807
866
|
function transform2QueryAggregateExpression(node, options) {
|
|
@@ -823,7 +882,7 @@ function transform2QueryAggregateExpression(node, options) {
|
|
|
823
882
|
}
|
|
824
883
|
function transform2AnonymousFunction(node, options) {
|
|
825
884
|
if (node.body.type === 'BlockStatement')
|
|
826
|
-
(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);
|
|
827
886
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
828
887
|
return new utils_1.naslTypes.AnonymousFunction({
|
|
829
888
|
params: node.params.map((param) => transform2Param(param)),
|
|
@@ -990,7 +1049,7 @@ function transform2PartialNewComposite(node, options) {
|
|
|
990
1049
|
const rights = [];
|
|
991
1050
|
const structureProperties = [];
|
|
992
1051
|
const assignmentLines = [];
|
|
993
|
-
const newProperties = (node?.properties || node?.arguments?.[0]?.properties)
|
|
1052
|
+
const newProperties = (node?.properties || node?.arguments?.[0]?.properties);
|
|
994
1053
|
let idx = 0;
|
|
995
1054
|
newProperties?.forEach((arg, index) => {
|
|
996
1055
|
properties.push(transformNodeFunction(arg.key, options));
|
|
@@ -1083,8 +1142,7 @@ function transformNewExpression(node, options) {
|
|
|
1083
1142
|
else if (calleeName.includes('.entities.') || calleeName.includes('.structures.')) {
|
|
1084
1143
|
return transform2NewStructure(calleeName, node.arguments[0], options);
|
|
1085
1144
|
}
|
|
1086
|
-
|
|
1087
|
-
(0, utils_1.throwError)(`Unhandled node ${node.type}: ${errCode}`);
|
|
1145
|
+
(0, utils_1.throwError)('Unhandled node', node.type, node);
|
|
1088
1146
|
}
|
|
1089
1147
|
exports.transformNewExpression = transformNewExpression;
|
|
1090
1148
|
function transformMemberExpression(node, options) {
|
|
@@ -1121,18 +1179,31 @@ function transformMemberExpression(node, options) {
|
|
|
1121
1179
|
});
|
|
1122
1180
|
}
|
|
1123
1181
|
if (calleeName?.startsWith('$refs.')) {
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
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
|
+
}
|
|
1136
1207
|
}
|
|
1137
1208
|
const regex = /^(app\..+?)\.variables\.(.+)$/;
|
|
1138
1209
|
if (regex.test(calleeName)) {
|
|
@@ -1187,12 +1258,87 @@ function transformMemberExpression(node, options) {
|
|
|
1187
1258
|
});
|
|
1188
1259
|
}
|
|
1189
1260
|
exports.transformMemberExpression = transformMemberExpression;
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
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;
|
|
1193
1337
|
}
|
|
1194
|
-
exports.
|
|
1338
|
+
exports.transformCallFunctionExpression2Match = transformCallFunctionExpression2Match;
|
|
1195
1339
|
function transformCall2CallViewElementLogic(node, calleeName, callee, options) {
|
|
1340
|
+
if (options?.isRestricted)
|
|
1341
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1196
1342
|
if (calleeName?.includes('getPropValue') || calleeName?.includes('setPropValue')) {
|
|
1197
1343
|
const componentName = callee?.[1]?.name;
|
|
1198
1344
|
const propertyName = node?.arguments?.[0]?.value;
|
|
@@ -1227,6 +1373,8 @@ function transformCall2CallViewElementLogic(node, calleeName, callee, options) {
|
|
|
1227
1373
|
}
|
|
1228
1374
|
exports.transformCall2CallViewElementLogic = transformCall2CallViewElementLogic;
|
|
1229
1375
|
function transformCall2CallEntityLogic(node, calleeName, callee, options) {
|
|
1376
|
+
if (options?.isRestricted)
|
|
1377
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1230
1378
|
const entityName = callee[0].name.replace(/Entity$/, '');
|
|
1231
1379
|
// console.log('callee', callee);
|
|
1232
1380
|
return new utils_1.naslTypes.CallLogic({
|
|
@@ -1239,6 +1387,8 @@ function transformCall2CallEntityLogic(node, calleeName, callee, options) {
|
|
|
1239
1387
|
}
|
|
1240
1388
|
exports.transformCall2CallEntityLogic = transformCall2CallEntityLogic;
|
|
1241
1389
|
function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
|
|
1390
|
+
if (options?.isRestricted)
|
|
1391
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1242
1392
|
if (calleeName?.includes('.entities.')) {
|
|
1243
1393
|
const calleeNamespace = (0, utils_1.generate)(node?.callee?.object?.object)?.code;
|
|
1244
1394
|
const entityName = node?.callee?.object?.property?.name?.replace(/Entity$/, '');
|
|
@@ -1297,6 +1447,10 @@ function transformCall2CallDataSourceLogic(node, calleeName, callee, options) {
|
|
|
1297
1447
|
}
|
|
1298
1448
|
exports.transformCall2CallDataSourceLogic = transformCall2CallDataSourceLogic;
|
|
1299
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);
|
|
1300
1454
|
if (options.transformType === 'logic' && options?.logicType === 'global_logic') {
|
|
1301
1455
|
// const _typeAnnotation = node?.typeParameters?.params?.length > 0 ? naslTypes.TypeAnnotation.createGeneric('List', {
|
|
1302
1456
|
// typeArguments: node?.typeParameters?.params.map((curType: any) => transform2TypeAnnotation({ ...curType })),
|
|
@@ -1311,6 +1465,8 @@ function transformCall2OQLQuery(node, calleeName, callee, options) {
|
|
|
1311
1465
|
}
|
|
1312
1466
|
}
|
|
1313
1467
|
function transformCall2ConsoleLog(node, calleeName, callee, options) {
|
|
1468
|
+
if (options?.isRestricted)
|
|
1469
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1314
1470
|
return new utils_1.naslTypes.CallLogic({
|
|
1315
1471
|
calleeNamespace: 'nasl.logging',
|
|
1316
1472
|
calleeName: 'INFO',
|
|
@@ -1322,6 +1478,8 @@ function transformCall2ConsoleLog(node, calleeName, callee, options) {
|
|
|
1322
1478
|
}
|
|
1323
1479
|
exports.transformCall2ConsoleLog = transformCall2ConsoleLog;
|
|
1324
1480
|
function transformCall2Logging(node, calleeName, callee, options) {
|
|
1481
|
+
if (options?.isRestricted)
|
|
1482
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1325
1483
|
const newArguments = node.arguments.map((arg) => new utils_1.naslTypes.Argument({
|
|
1326
1484
|
expression: arg?.name === "undefined" ?
|
|
1327
1485
|
new utils_1.naslTypes.StringLiteral()
|
|
@@ -1360,16 +1518,22 @@ exports.transformCall2JSONFunctions = transformCall2JSONFunctions;
|
|
|
1360
1518
|
function transform2CallFunction(node, calleeName, argument, options) {
|
|
1361
1519
|
calleeName = utils_1.replaceCallFunctionMap?.[calleeName] || calleeName;
|
|
1362
1520
|
const func = server_1.default ? server_1.default.getBuildInFunction(calleeName) : null;
|
|
1363
|
-
let newArguments = argument.map((arg, index) =>
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1521
|
+
let newArguments = argument.map((arg, index) => {
|
|
1522
|
+
let supportSubLogic = false;
|
|
1523
|
+
if (arg?.type === 'FunctionExpression' || (arg?.type === 'ArrowFunctionExpression' && arg?.body?.type === 'BlockStatement')) {
|
|
1524
|
+
supportSubLogic = true;
|
|
1525
|
+
}
|
|
1526
|
+
return new utils_1.naslTypes.Argument({
|
|
1527
|
+
expression: fixExpression(arg, options, supportSubLogic),
|
|
1528
|
+
keyword: func && func?.params[index]?.name || `param${index + 1}`,
|
|
1529
|
+
});
|
|
1530
|
+
});
|
|
1367
1531
|
let newTypeArguments = node?.typeParameters?.params.map(transform2TypeAnnotation_1.transform2TypeAnnotation);
|
|
1368
|
-
if (calleeName === 'ListRepeat') {
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
}
|
|
1532
|
+
// if (calleeName === 'ListRepeat') {
|
|
1533
|
+
// newTypeArguments = [
|
|
1534
|
+
// new naslTypes.TypeAnnotation()
|
|
1535
|
+
// ];
|
|
1536
|
+
// }
|
|
1373
1537
|
if (calleeName === 'Concat') {
|
|
1374
1538
|
const expressions = newArguments.map((item) => item.expression);
|
|
1375
1539
|
return new utils_1.naslTypes.StringInterpolation({
|
|
@@ -1431,7 +1595,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
|
|
|
1431
1595
|
});
|
|
1432
1596
|
}
|
|
1433
1597
|
else {
|
|
1434
|
-
(0, utils_1.throwError)(`函数${calleeName}
|
|
1598
|
+
(0, utils_1.throwError)(`函数${calleeName}不存在`, node.callee);
|
|
1435
1599
|
}
|
|
1436
1600
|
if (!func.params?.length) {
|
|
1437
1601
|
const needDefaultParam = ['CurrDate', 'CurrTime', 'CurrDateTime'];
|
|
@@ -1473,7 +1637,7 @@ function transform2CallFunction(node, calleeName, argument, options) {
|
|
|
1473
1637
|
return new utils_1.naslTypes.CallFunction((0, utils_1.handleListSort)(nodeElement?.toJSON()));
|
|
1474
1638
|
}
|
|
1475
1639
|
if (options.transformType === 'logic' && options?.inCallQueryComponentField) {
|
|
1476
|
-
(0, utils_1.throwError)(
|
|
1640
|
+
(0, utils_1.throwError)('数据查询中不支持使用内置函数', nodeElement.calleeName, node);
|
|
1477
1641
|
}
|
|
1478
1642
|
return nodeElement;
|
|
1479
1643
|
}
|
|
@@ -1483,6 +1647,8 @@ function transform2SqlFunction(node, calleeName, argument, options) {
|
|
|
1483
1647
|
(0, utils_1.throwError)(`数据查询中只有 WHERE, HAVING, ORDER_BY 支持 SQL 函数,而当前字段为 ${options.inCallQueryComponentField}`);
|
|
1484
1648
|
}
|
|
1485
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;
|
|
1486
1652
|
let addArguments = [];
|
|
1487
1653
|
if (specFunList.includes(calleeName)) {
|
|
1488
1654
|
const value = calleeName === 'COUNTD' ? 'DISTINCT' : 'ALL';
|
|
@@ -1495,7 +1661,7 @@ function transform2SqlFunction(node, calleeName, argument, options) {
|
|
|
1495
1661
|
}
|
|
1496
1662
|
const newArguments = argument.map((arg, index) => new utils_1.naslTypes.Argument({
|
|
1497
1663
|
expression: fixExpression(arg, options),
|
|
1498
|
-
keyword:
|
|
1664
|
+
keyword: func?.params[index]?.name || `param${index + 1}`,
|
|
1499
1665
|
}));
|
|
1500
1666
|
const nodeElement = new utils_1.naslTypes.CallFunction({
|
|
1501
1667
|
calleeNamespace: 'nasl.sqlFunction',
|
|
@@ -1508,7 +1674,7 @@ function transform2SqlFunction(node, calleeName, argument, options) {
|
|
|
1508
1674
|
}
|
|
1509
1675
|
function transformCall2CallFunction(node, calleeName, callee, options) {
|
|
1510
1676
|
let curCalleeName;
|
|
1511
|
-
if (callee.length
|
|
1677
|
+
if (callee.length >= 3)
|
|
1512
1678
|
curCalleeName = callee[callee.length - 1].name;
|
|
1513
1679
|
else {
|
|
1514
1680
|
let _callee = callee[0].callee;
|
|
@@ -1516,11 +1682,10 @@ function transformCall2CallFunction(node, calleeName, callee, options) {
|
|
|
1516
1682
|
_callee = _callee.callee;
|
|
1517
1683
|
curCalleeName = _callee.property.name;
|
|
1518
1684
|
}
|
|
1519
|
-
const argument = callee.length
|
|
1520
|
-
if (['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN'].includes(curCalleeName)) {
|
|
1521
|
-
|
|
1522
|
-
}
|
|
1523
|
-
;
|
|
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
|
+
// };
|
|
1524
1689
|
if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
|
|
1525
1690
|
return transform2NewExpression(curCalleeName, node, options);
|
|
1526
1691
|
}
|
|
@@ -1529,10 +1694,31 @@ function transformCall2CallFunction(node, calleeName, callee, options) {
|
|
|
1529
1694
|
exports.transformCall2CallFunction = transformCall2CallFunction;
|
|
1530
1695
|
function transform2UIFunction(node, calleeName, callee, options) {
|
|
1531
1696
|
if (callee[2].name === 'destination') {
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
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
|
+
}
|
|
1536
1722
|
const newArguments = node?.arguments?.slice(1);
|
|
1537
1723
|
let argument = [];
|
|
1538
1724
|
if (newArguments?.[0]?.type === 'ObjectExpression') {
|
|
@@ -1548,7 +1734,7 @@ function transform2UIFunction(node, calleeName, callee, options) {
|
|
|
1548
1734
|
}));
|
|
1549
1735
|
}
|
|
1550
1736
|
return new utils_1.naslTypes.Destination({
|
|
1551
|
-
viewNamespace
|
|
1737
|
+
viewNamespace,
|
|
1552
1738
|
viewName,
|
|
1553
1739
|
arguments: argument,
|
|
1554
1740
|
});
|
|
@@ -1558,6 +1744,8 @@ function transform2UIFunction(node, calleeName, callee, options) {
|
|
|
1558
1744
|
link: fixExpression(node?.arguments[0], options),
|
|
1559
1745
|
});
|
|
1560
1746
|
}
|
|
1747
|
+
if (options?.isRestricted)
|
|
1748
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1561
1749
|
return new utils_1.naslTypes.CallLogic({
|
|
1562
1750
|
calleeNamespace: 'nasl.ui',
|
|
1563
1751
|
calleeName: callee[2].name,
|
|
@@ -1677,6 +1865,8 @@ function transformForEach2ForEachStatement(node, calleeName, callee, options) {
|
|
|
1677
1865
|
}
|
|
1678
1866
|
exports.transformForEach2ForEachStatement = transformForEach2ForEachStatement;
|
|
1679
1867
|
function transformAlert2ShowMessage(node, calleeName, callee, options) {
|
|
1868
|
+
if (options?.isRestricted)
|
|
1869
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1680
1870
|
return new utils_1.naslTypes.CallLogic({
|
|
1681
1871
|
calleeNamespace: 'nasl.ui',
|
|
1682
1872
|
calleeName: 'showMessage',
|
|
@@ -1688,6 +1878,8 @@ function transformAlert2ShowMessage(node, calleeName, callee, options) {
|
|
|
1688
1878
|
}
|
|
1689
1879
|
exports.transformAlert2ShowMessage = transformAlert2ShowMessage;
|
|
1690
1880
|
function transformCall2Interface(node, calleeName, callee, options) {
|
|
1881
|
+
if (options?.isRestricted)
|
|
1882
|
+
(0, utils_1.throwError)('调用接口不支持在组件或默认值表达式中使用', node);
|
|
1691
1883
|
return new utils_1.naslTypes.CallInterface({
|
|
1692
1884
|
calleeNamespace: (0, utils_1.generate)(node.callee.object).code,
|
|
1693
1885
|
calleeName: callee[callee.length - 1].name,
|
|
@@ -1699,13 +1891,15 @@ function transformCall2Interface(node, calleeName, callee, options) {
|
|
|
1699
1891
|
}
|
|
1700
1892
|
exports.transformCall2Interface = transformCall2Interface;
|
|
1701
1893
|
function transformCall2Connector(node, calleeName, callee, options) {
|
|
1894
|
+
if (options?.isRestricted)
|
|
1895
|
+
(0, utils_1.throwError)('调用连接器不支持在组件或默认值表达式中使用', node);
|
|
1702
1896
|
let calleeConnectionName = undefined;
|
|
1703
1897
|
let calleeNamespace = undefined;
|
|
1704
1898
|
let calleeNamespacePrefix = `connector.${callee[1].name}`;
|
|
1705
1899
|
if (callee.length === 5) {
|
|
1706
1900
|
const connectArg = callee[2].arguments[0];
|
|
1707
1901
|
if (!connectArg || connectArg.type !== 'StringLiteral') {
|
|
1708
|
-
(0, utils_1.throwError)(
|
|
1902
|
+
(0, utils_1.throwError)('调用 connector 的 connect 参数不正确,只允许使用字符串字面量', node);
|
|
1709
1903
|
}
|
|
1710
1904
|
calleeConnectionName = connectArg.value;
|
|
1711
1905
|
const noNamespace = callee[3].name === 'logics';
|
|
@@ -1720,7 +1914,7 @@ function transformCall2Connector(node, calleeName, callee, options) {
|
|
|
1720
1914
|
calleeNamespace = calleeNamespacePrefix;
|
|
1721
1915
|
}
|
|
1722
1916
|
else {
|
|
1723
|
-
(0, utils_1.throwError)(`调用 connector,参数数量不正确,当前参数数量为 ${callee.length},${calleeName}
|
|
1917
|
+
(0, utils_1.throwError)(`调用 connector,参数数量不正确,当前参数数量为 ${callee.length},${calleeName}`, node);
|
|
1724
1918
|
}
|
|
1725
1919
|
return new utils_1.naslTypes.CallConnector({
|
|
1726
1920
|
calleeConnectionName,
|
|
@@ -1733,64 +1927,17 @@ function transformCall2Connector(node, calleeName, callee, options) {
|
|
|
1733
1927
|
}
|
|
1734
1928
|
exports.transformCall2Connector = transformCall2Connector;
|
|
1735
1929
|
function transformCall2Extension(node, calleeName, callee, options) {
|
|
1930
|
+
if (options?.isRestricted)
|
|
1931
|
+
(0, utils_1.throwError)('调用扩展逻辑不支持在组件或默认值表达式中使用', node);
|
|
1736
1932
|
return new utils_1.naslTypes.CallLogic({
|
|
1737
1933
|
calleeNamespace: (0, utils_1.generate)(node?.callee?.object)?.code,
|
|
1738
1934
|
calleeName: callee?.[callee?.length - 1]?.name,
|
|
1739
1935
|
arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
|
|
1740
|
-
expression: fixExpression(arg, options),
|
|
1936
|
+
expression: fixExpression(arg, options, true),
|
|
1741
1937
|
})),
|
|
1742
1938
|
});
|
|
1743
1939
|
}
|
|
1744
1940
|
exports.transformCall2Extension = transformCall2Extension;
|
|
1745
|
-
function transformArrowFunction2Match(node, calleeName, callee, options) {
|
|
1746
|
-
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
1747
|
-
// NOTE: 适用于 if else
|
|
1748
|
-
const newCallee = node.callee.body.body;
|
|
1749
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFunction') {
|
|
1750
|
-
const match = new utils_1.naslTypes.Match({
|
|
1751
|
-
expression: fixExpression(newCallee[0], options),
|
|
1752
|
-
isExpression: options.transformType !== 'logic',
|
|
1753
|
-
cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new utils_1.naslTypes.MatchCase({
|
|
1754
|
-
patterns: !_case.test ? [] : flatMatchPatternsExpression(transformNodeFunction(_case.test, options)),
|
|
1755
|
-
body: transformBlockBody(_case.consequent.body.filter((item) => item.type !== 'BreakStatement'), options),
|
|
1756
|
-
})),
|
|
1757
|
-
});
|
|
1758
|
-
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
1759
|
-
match.cases.push(new utils_1.naslTypes.MatchCase({
|
|
1760
|
-
patterns: [],
|
|
1761
|
-
body: [],
|
|
1762
|
-
}));
|
|
1763
|
-
}
|
|
1764
|
-
match.cases.forEach((case_) => {
|
|
1765
|
-
if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
|
|
1766
|
-
case_.isMatchedTypeEnumable = true;
|
|
1767
|
-
}
|
|
1768
|
-
if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
|
|
1769
|
-
case_.isMatchedTypeEnumable = true;
|
|
1770
|
-
case_.patterns[0] = new utils_1.naslTypes.MemberExpression({
|
|
1771
|
-
object: {
|
|
1772
|
-
concept: 'Identifier',
|
|
1773
|
-
name: case_.patterns[0].object.property.name,
|
|
1774
|
-
folded: false,
|
|
1775
|
-
namespace: 'app.enums'
|
|
1776
|
-
},
|
|
1777
|
-
property: {
|
|
1778
|
-
concept: 'Identifier',
|
|
1779
|
-
name: case_.patterns[0].property.value,
|
|
1780
|
-
folded: false,
|
|
1781
|
-
},
|
|
1782
|
-
});
|
|
1783
|
-
}
|
|
1784
|
-
});
|
|
1785
|
-
return match;
|
|
1786
|
-
}
|
|
1787
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
|
|
1788
|
-
const switchStatement = transformNodeFunction(newCallee[0].body.body[0], options);
|
|
1789
|
-
return switchStatement;
|
|
1790
|
-
}
|
|
1791
|
-
(0, utils_1.throwError)(`Unhandled ArrowFunctionExpression node ${node.type}`);
|
|
1792
|
-
}
|
|
1793
|
-
exports.transformArrowFunction2Match = transformArrowFunction2Match;
|
|
1794
1941
|
function transformTSAsExpression(node, options) {
|
|
1795
1942
|
if (node.expression.type === 'NumericLiteral') {
|
|
1796
1943
|
return transform2NumericLiteral(node.expression, { ...options, typeAnnotation: (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation) });
|
|
@@ -1801,11 +1948,16 @@ function transformTSAsExpression(node, options) {
|
|
|
1801
1948
|
(0, utils_1.throwError)(`列表 as 必须为 List 类型`);
|
|
1802
1949
|
return transformArrayExpression(node.expression, { ...options, typeAnnotation });
|
|
1803
1950
|
}
|
|
1951
|
+
else if (node.expression.type === 'NullLiteral') {
|
|
1952
|
+
return transform2NullLiteral(node.expression, options);
|
|
1953
|
+
}
|
|
1804
1954
|
else {
|
|
1805
|
-
(0, utils_1.throwError)(
|
|
1955
|
+
(0, utils_1.throwError)('表达式不支持使用 as 关键字', node.expression.type, node.expression);
|
|
1806
1956
|
}
|
|
1807
1957
|
}
|
|
1808
1958
|
function transformCall2CallViewLogic(node, calleeName, callee, options) {
|
|
1959
|
+
if (options?.isRestricted)
|
|
1960
|
+
(0, utils_1.throwError)('调用页面逻辑不支持在组件或默认值表达式中使用', node);
|
|
1809
1961
|
return new utils_1.naslTypes.CallLogic({
|
|
1810
1962
|
calleeNamespace: '',
|
|
1811
1963
|
calleeName: calleeName.slice('viewLogic_'.length),
|
|
@@ -1816,11 +1968,13 @@ function transformCall2CallViewLogic(node, calleeName, callee, options) {
|
|
|
1816
1968
|
}
|
|
1817
1969
|
exports.transformCall2CallViewLogic = transformCall2CallViewLogic;
|
|
1818
1970
|
function transformCall2Logic(node, calleeName, callee, options) {
|
|
1971
|
+
if (options?.isRestricted)
|
|
1972
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1819
1973
|
if (utils_1.callFunctionMap.includes(calleeName)) {
|
|
1820
1974
|
// 未带前缀,补一下
|
|
1821
1975
|
return transform2CallFunction(node, calleeName, node?.arguments || [], options);
|
|
1822
1976
|
}
|
|
1823
|
-
else if (
|
|
1977
|
+
else if (server_1.default.getSqlFunction('mysql', calleeName) || calleeName === 'COUNTD') {
|
|
1824
1978
|
return transform2SqlFunction(node, calleeName, node?.arguments || [], options);
|
|
1825
1979
|
}
|
|
1826
1980
|
let newCalleeName = calleeName?.includes('__IDENTIFIER__') ? undefined : calleeName;
|
|
@@ -1834,12 +1988,14 @@ function transformCall2Logic(node, calleeName, callee, options) {
|
|
|
1834
1988
|
calleeNamespace,
|
|
1835
1989
|
calleeName: newCalleeName,
|
|
1836
1990
|
arguments: node?.arguments?.map((arg) => new utils_1.naslTypes.Argument({
|
|
1837
|
-
expression: fixExpression(arg, options),
|
|
1991
|
+
expression: fixExpression(arg, options, true),
|
|
1838
1992
|
})),
|
|
1839
1993
|
});
|
|
1840
1994
|
}
|
|
1841
1995
|
exports.transformCall2Logic = transformCall2Logic;
|
|
1842
1996
|
function transformCall2LogicWithAuth(node, calleeName, callee, options) {
|
|
1997
|
+
if (options?.isRestricted)
|
|
1998
|
+
(0, utils_1.throwError)('调用逻辑不支持在组件或默认值表达式中使用', node);
|
|
1843
1999
|
return new utils_1.naslTypes.CallLogic({
|
|
1844
2000
|
calleeNamespace: `nasl.auth`,
|
|
1845
2001
|
calleeName: callee[callee.length - 1].name,
|
|
@@ -1864,10 +2020,10 @@ function flatCallQueryComponentChainNode(node, options) {
|
|
|
1864
2020
|
const calleeName = node.callee.name;
|
|
1865
2021
|
if (['FROM', 'INNER_JOIN', 'LEFT_JOIN', 'RIGHT_JOIN', 'OUTER_JOIN'].includes(calleeName)) {
|
|
1866
2022
|
if (node.arguments[1].type !== 'ArrowFunctionExpression')
|
|
1867
|
-
(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]);
|
|
1868
2024
|
const arrowFunctionExpression = node.arguments[1];
|
|
1869
2025
|
if (arrowFunctionExpression.body.type !== 'CallExpression')
|
|
1870
|
-
(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);
|
|
1871
2027
|
const body = arrowFunctionExpression.body;
|
|
1872
2028
|
const callExpressions = flatChainCallExpression(body);
|
|
1873
2029
|
const joinNode = callExpressions?.filter((item) => item?.callee?.name.includes('_JOIN'));
|
|
@@ -1883,7 +2039,7 @@ FROM(T1Entity, T1 => ${name}(T2Entity, T2 => ON(T1.id == T2.id).SELECT(...))); /
|
|
|
1883
2039
|
const count = joinCode.match(/_JOIN/g)?.length || 0;
|
|
1884
2040
|
const errorOrder = count >= 1 && !callExpressions?.[callExpressions?.length - 1]?.callee?.name?.includes('_JOIN');
|
|
1885
2041
|
if (errorOrder) {
|
|
1886
|
-
(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 的调用顺序。');
|
|
1887
2043
|
}
|
|
1888
2044
|
const result = [{
|
|
1889
2045
|
calleeName: calleeName,
|
|
@@ -1933,7 +2089,7 @@ function transformMemberExpression2Entity(node, node2) {
|
|
|
1933
2089
|
const entityNamespace = entityPath.slice(0, -1).map(n => n.name).join('.');
|
|
1934
2090
|
const entityName = entityPath[entityPath.length - 1].name.replace(/Entity$/, '');
|
|
1935
2091
|
if (!entityNamespace?.includes('.entities')) {
|
|
1936
|
-
(0, utils_1.throwError)(`${entityNamespace}.${entityName}
|
|
2092
|
+
(0, utils_1.throwError)(`${entityNamespace}.${entityName} 不是一个数据库表,无法使用数据查询`);
|
|
1937
2093
|
}
|
|
1938
2094
|
const asName = node2.name === entityName ? undefined : node2.name;
|
|
1939
2095
|
if (asName) {
|
|
@@ -1942,19 +2098,23 @@ function transformMemberExpression2Entity(node, node2) {
|
|
|
1942
2098
|
return { entityNamespace, entityName, asName };
|
|
1943
2099
|
}
|
|
1944
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);
|
|
1945
2105
|
const transformNodeFunction = options?.transformNodeFunction || transform2LogicItem;
|
|
1946
2106
|
const code = (0, utils_1.generate)(node)?.code || '';
|
|
1947
2107
|
if (code?.includes('nasl.util')) {
|
|
1948
|
-
(0, utils_1.throwError)('数据查询中不支持nasl.util内的库函数,请将对应操作放在数据查询外部进行处理');
|
|
2108
|
+
(0, utils_1.throwError)('数据查询中不支持nasl.util内的库函数,请将对应操作放在数据查询外部进行处理', code);
|
|
1949
2109
|
}
|
|
1950
2110
|
if (!code?.includes('.SELECT(') && !code?.includes('.AGGR_SELECT(')) {
|
|
1951
|
-
(0, utils_1.throwError)('缺少 SELECT 或 AGGR_SELECT 语句');
|
|
2111
|
+
(0, utils_1.throwError)('缺少 SELECT 或 AGGR_SELECT 语句', code);
|
|
1952
2112
|
}
|
|
1953
2113
|
const flatted = flatCallQueryComponentChainNode(node, options);
|
|
1954
2114
|
const calleeNames = flatted.map((item) => item?.calleeName).filter((name) => name !== '$');
|
|
1955
2115
|
const isOrderCorrect = (0, utils_1.checkOQLCalleeNameOrder)(calleeNames);
|
|
1956
2116
|
if (!isOrderCorrect) {
|
|
1957
|
-
(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 的调用顺序。');
|
|
1958
2118
|
}
|
|
1959
2119
|
let from;
|
|
1960
2120
|
let where;
|
|
@@ -2015,16 +2175,35 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2015
2175
|
propertyName: '',
|
|
2016
2176
|
})],
|
|
2017
2177
|
});
|
|
2018
|
-
item.arguments[0].
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
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
|
+
}
|
|
2028
2207
|
break;
|
|
2029
2208
|
case 'SELECT':
|
|
2030
2209
|
select = new utils_1.naslTypes.QuerySelectExpression({
|
|
@@ -2096,7 +2275,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2096
2275
|
}
|
|
2097
2276
|
}
|
|
2098
2277
|
else {
|
|
2099
|
-
(0, utils_1.throwError)('HAVING 不符合规范,请使用箭头函数');
|
|
2278
|
+
(0, utils_1.throwError)('HAVING 不符合规范,请使用箭头函数', havingNode);
|
|
2100
2279
|
}
|
|
2101
2280
|
having = transformNodeFunction(havingNode, { ...options, ...restParams });
|
|
2102
2281
|
break;
|
|
@@ -2111,7 +2290,7 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2111
2290
|
}
|
|
2112
2291
|
}
|
|
2113
2292
|
else {
|
|
2114
|
-
(0, utils_1.throwError)('ORDER_BY 不符合规范,请使用箭头函数');
|
|
2293
|
+
(0, utils_1.throwError)('ORDER_BY 不符合规范,请使用箭头函数', orderNode);
|
|
2115
2294
|
}
|
|
2116
2295
|
orderBy = orderNode.map((arg) => {
|
|
2117
2296
|
let orderElementCode = (0, utils_1.generate)(arg)?.code || '';
|
|
@@ -2155,6 +2334,8 @@ function transformCall2DataQuery(node, calleeName, callee, options) {
|
|
|
2155
2334
|
return callQueryComponent;
|
|
2156
2335
|
}
|
|
2157
2336
|
function transformCall2LaunchProcess(node, calleeName, callee, options) {
|
|
2337
|
+
if (options?.isRestricted)
|
|
2338
|
+
(0, utils_1.throwError)('调用流程逻辑不支持在组件或默认值表达式中使用', node);
|
|
2158
2339
|
const args = node.arguments;
|
|
2159
2340
|
const dataArg = args?.[0];
|
|
2160
2341
|
const procDefKeyArg = args?.[1];
|
|
@@ -2193,6 +2374,7 @@ function transform2LogicItem(node, options) {
|
|
|
2193
2374
|
transformManager.register('NumericLiteral', transform2NumericLiteral);
|
|
2194
2375
|
transformManager.register('NullLiteral', transform2NullLiteral);
|
|
2195
2376
|
transformManager.register('TemplateLiteral', transform2StringInterpolation);
|
|
2377
|
+
transformManager.register((node) => node.type === 'LogicalExpression' && node.operator === '??', transformDefaultExpression);
|
|
2196
2378
|
transformManager.register('BinaryExpression', transform2BinaryExpression);
|
|
2197
2379
|
transformManager.register('LogicalExpression', transform2BinaryExpression);
|
|
2198
2380
|
transformManager.register('UpdateExpression', transformUpdateExpression2Assignment);
|
|
@@ -2230,7 +2412,8 @@ function transform2LogicItem(node, options) {
|
|
|
2230
2412
|
}
|
|
2231
2413
|
});
|
|
2232
2414
|
transformManager.register('MemberExpression', transformMemberExpression);
|
|
2233
|
-
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);
|
|
2234
2417
|
transformManager.registerCallExpression((node, calleeName) => /^\$refs\./.test(calleeName), transformCall2CallViewElementLogic);
|
|
2235
2418
|
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 2 && callee[0].type === 'Identifier' && callee[0].name.endsWith('Entity'), transformCall2CallEntityLogic);
|
|
2236
2419
|
transformManager.registerCallExpression('nasl.oql.query', transformCall2OQLQuery);
|
|
@@ -2252,12 +2435,11 @@ function transform2LogicItem(node, options) {
|
|
|
2252
2435
|
transformManager.registerCallExpression('extensions.lcap_process_framework.logics.launchProcess', transformCall2LaunchProcess);
|
|
2253
2436
|
transformManager.registerCallExpression((node, calleeName) => /extensions\./.test(calleeName), transformCall2Extension);
|
|
2254
2437
|
transformManager.registerCallExpression((node, calleeName) => /connectors\./.test(calleeName), transformCall2Connector);
|
|
2255
|
-
transformManager.registerCallExpression((node) => node.callee.type === 'ArrowFunctionExpression', transformArrowFunction2Match);
|
|
2256
2438
|
transformManager.registerCallExpression((node, calleeName) => ['plus', 'minus', 'multiply', 'divide', 'remainder', 'STARTS_WITH', 'ENDS_WITH', 'LIKE', 'IN', 'IS_NULL'].includes(calleeName), transformCallExpressionToBinaryExpression);
|
|
2257
2439
|
transformManager.registerCallExpression((node, calleeName, callee) => callee.length === 1 && calleeName.startsWith('viewLogic_'), transformCall2CallViewLogic);
|
|
2258
2440
|
transformManager.registerCallExpression('PAGINATE', transformCall2Paginate);
|
|
2259
2441
|
transformManager.registerCallExpression('FROM', transformCall2DataQuery);
|
|
2260
|
-
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);
|
|
2261
2443
|
let result = transformManager.apply(node, options);
|
|
2262
2444
|
delete options.typeAnnotation;
|
|
2263
2445
|
return result;
|