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