@lcap/nasl 3.9.0-beta.4 → 3.9.0-beta.40
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/automate/engine/utils.d.ts +0 -5
- package/out/automate/engine/utils.d.ts.map +1 -1
- package/out/automate/engine/utils.js +1 -123
- package/out/automate/engine/utils.js.map +1 -1
- package/out/automate/upgrader/2.18.js +1 -1
- package/out/automate/upgrader/2.18.js.map +1 -1
- package/out/common/Command.js +1 -1
- package/out/common/Command.js.map +1 -1
- package/out/common/Messager.d.ts.map +1 -1
- package/out/common/Messager.js +15 -5
- package/out/common/Messager.js.map +1 -1
- package/out/config.d.ts +2 -0
- package/out/config.d.ts.map +1 -1
- package/out/config.js +5 -2
- package/out/config.js.map +1 -1
- package/out/generator/annotation/full.d.ts +6 -0
- package/out/generator/annotation/full.d.ts.map +1 -0
- package/out/generator/annotation/full.js +28 -0
- package/out/generator/annotation/full.js.map +1 -0
- package/out/generator/annotation/incremental.d.ts +7 -0
- package/out/generator/annotation/incremental.d.ts.map +1 -0
- package/out/generator/annotation/incremental.js +168 -0
- package/out/generator/annotation/incremental.js.map +1 -0
- package/out/generator/annotation/index.d.ts +5 -0
- package/out/generator/annotation/index.d.ts.map +1 -0
- package/out/generator/annotation/index.js +21 -0
- package/out/generator/annotation/index.js.map +1 -0
- package/out/generator/annotation/types.d.ts +14 -0
- package/out/generator/annotation/types.d.ts.map +1 -0
- package/out/generator/annotation/types.js +3 -0
- package/out/generator/annotation/types.js.map +1 -0
- package/out/generator/annotation/utils.d.ts +14 -0
- package/out/generator/annotation/utils.d.ts.map +1 -0
- package/out/generator/annotation/utils.js +52 -0
- package/out/generator/annotation/utils.js.map +1 -0
- package/out/generator/compileComponent.d.ts.map +1 -1
- package/out/generator/compileComponent.js +2 -0
- package/out/generator/compileComponent.js.map +1 -1
- package/out/generator/genBundleFiles.d.ts +5 -2
- package/out/generator/genBundleFiles.d.ts.map +1 -1
- package/out/generator/genBundleFiles.js +73 -38
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/generator/index.d.ts +2 -0
- package/out/generator/index.d.ts.map +1 -1
- package/out/generator/index.js +2 -0
- package/out/generator/index.js.map +1 -1
- package/out/generator/permission.d.ts.map +1 -1
- package/out/generator/permission.js +26 -6
- package/out/generator/permission.js.map +1 -1
- package/out/generator/release-body/body.d.ts +2 -1
- package/out/generator/release-body/body.d.ts.map +1 -1
- package/out/generator/release-body/body.js +39 -29
- package/out/generator/release-body/body.js.map +1 -1
- package/out/generator/release-body/data.d.ts.map +1 -1
- package/out/generator/release-body/data.js +4 -5
- package/out/generator/release-body/data.js.map +1 -1
- package/out/generator/release-body/internal.d.ts.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 +44 -36
- package/out/generator/release-body/utils.js.map +1 -1
- package/out/generator/ui-library-declaration/basic.d.ts +11 -0
- package/out/generator/ui-library-declaration/basic.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/basic.js +118 -0
- package/out/generator/ui-library-declaration/basic.js.map +1 -0
- package/out/generator/ui-library-declaration/custom.d.ts +11 -0
- package/out/generator/ui-library-declaration/custom.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/custom.js +149 -0
- package/out/generator/ui-library-declaration/custom.js.map +1 -0
- package/out/generator/ui-library-declaration/dependency.d.ts +8 -0
- package/out/generator/ui-library-declaration/dependency.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/dependency.js +169 -0
- package/out/generator/ui-library-declaration/dependency.js.map +1 -0
- package/out/generator/ui-library-declaration/format.d.ts +32 -0
- package/out/generator/ui-library-declaration/format.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/format.js +387 -0
- package/out/generator/ui-library-declaration/format.js.map +1 -0
- package/out/generator/ui-library-declaration/index.d.ts +4 -0
- package/out/generator/ui-library-declaration/index.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/index.js +20 -0
- package/out/generator/ui-library-declaration/index.js.map +1 -0
- package/out/generator/ui-library-declaration/manifest.d.ts +5 -0
- package/out/generator/ui-library-declaration/manifest.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/manifest.js +27 -0
- package/out/generator/ui-library-declaration/manifest.js.map +1 -0
- package/out/generator/ui-library-declaration/material.d.ts +6 -0
- package/out/generator/ui-library-declaration/material.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/material.js +90 -0
- package/out/generator/ui-library-declaration/material.js.map +1 -0
- package/out/generator/ui-library-declaration/types.d.ts +458 -0
- package/out/generator/ui-library-declaration/types.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/types.js +3 -0
- package/out/generator/ui-library-declaration/types.js.map +1 -0
- package/out/generator/ui-library-declaration/utils.d.ts +3 -0
- package/out/generator/ui-library-declaration/utils.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/utils.js +20 -0
- package/out/generator/ui-library-declaration/utils.js.map +1 -0
- package/out/manager/diagnostic.d.ts +2 -0
- package/out/manager/diagnostic.d.ts.map +1 -1
- package/out/manager/diagnostic.js +9 -0
- package/out/manager/diagnostic.js.map +1 -1
- package/out/natural/genNaturalTS.d.ts +50 -10
- package/out/natural/genNaturalTS.d.ts.map +1 -1
- package/out/natural/genNaturalTS.js +63 -33
- package/out/natural/genNaturalTS.js.map +1 -1
- package/out/natural/getContext/getUILib.d.ts +4 -1
- package/out/natural/getContext/getUILib.d.ts.map +1 -1
- package/out/natural/getContext/getUILib.js +59 -17
- package/out/natural/getContext/getUILib.js.map +1 -1
- package/out/natural/getContext/index.d.ts +35 -15
- package/out/natural/getContext/index.d.ts.map +1 -1
- package/out/natural/getContext/index.js +178 -35
- package/out/natural/getContext/index.js.map +1 -1
- package/out/natural/getContext/naslStdlibMap.js +8 -8
- package/out/natural/getContext/naslStdlibMap.js.map +1 -1
- package/out/natural/tools.d.ts +16 -0
- package/out/natural/tools.d.ts.map +1 -1
- package/out/natural/tools.js +114 -2
- package/out/natural/tools.js.map +1 -1
- package/out/natural/transformTS2UI.d.ts.map +1 -1
- package/out/natural/transformTS2UI.js +412 -304
- package/out/natural/transformTS2UI.js.map +1 -1
- package/out/natural/transformTSCode.d.ts +3 -5
- package/out/natural/transformTSCode.d.ts.map +1 -1
- package/out/natural/transformTSCode.js +30 -1080
- 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/transform2LogicItem.d.ts +25 -0
- package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -0
- package/out/natural/transforms/transform2LogicItem.js +1300 -0
- package/out/natural/transforms/transform2LogicItem.js.map +1 -0
- package/out/natural/transforms/transform2TypeAnnotation.d.ts +3 -0
- package/out/natural/transforms/transform2TypeAnnotation.d.ts.map +1 -0
- package/out/natural/transforms/transform2TypeAnnotation.js +86 -0
- package/out/natural/transforms/transform2TypeAnnotation.js.map +1 -0
- package/out/natural/transforms/utils.d.ts +9 -0
- package/out/natural/transforms/utils.d.ts.map +1 -0
- package/out/natural/transforms/utils.js +59 -0
- package/out/natural/transforms/utils.js.map +1 -0
- package/out/server/OQL/oql-cache.d.ts +12 -0
- package/out/server/OQL/oql-cache.d.ts.map +1 -0
- package/out/server/OQL/oql-cache.js +232 -0
- package/out/server/OQL/oql-cache.js.map +1 -0
- package/out/server/extendBaseNode.d.ts.map +1 -1
- package/out/server/extendBaseNode.js +3 -6
- package/out/server/extendBaseNode.js.map +1 -1
- package/out/server/index.d.ts +1 -2
- package/out/server/index.d.ts.map +1 -1
- package/out/server/index.js +2 -2
- package/out/server/index.js.map +1 -1
- package/out/server/naslServer.d.ts +19 -3
- package/out/server/naslServer.d.ts.map +1 -1
- package/out/server/naslServer.js +276 -175
- package/out/server/naslServer.js.map +1 -1
- package/out/server/translator.d.ts +1 -1
- package/out/server/translator.d.ts.map +1 -1
- package/out/server/translator.js +104 -54
- package/out/server/translator.js.map +1 -1
- package/out/service/storage/init.d.ts +1 -25
- package/out/service/storage/init.d.ts.map +1 -1
- package/out/service/storage/init.js +12 -37
- package/out/service/storage/init.js.map +1 -1
- package/out/service/storage/types.d.ts +41 -0
- package/out/service/storage/types.d.ts.map +1 -0
- package/out/service/storage/types.js +10 -0
- package/out/service/storage/types.js.map +1 -0
- package/out/service/storage/utils.d.ts +15 -0
- package/out/service/storage/utils.d.ts.map +1 -0
- package/out/service/storage/utils.js +68 -0
- package/out/service/storage/utils.js.map +1 -0
- package/out/service/video/BaseService.d.ts.map +1 -1
- package/out/service/video/BaseService.js +0 -3
- package/out/service/video/BaseService.js.map +1 -1
- package/out/service/video/MainCallbackService.d.ts.map +1 -1
- package/out/service/video/MainCallbackService.js +0 -3
- package/out/service/video/MainCallbackService.js.map +1 -1
- package/out/templator/block2nasl/jsx2nasl/index.d.ts +6 -0
- package/out/templator/block2nasl/jsx2nasl/index.d.ts.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/index.js +15 -0
- package/out/templator/block2nasl/jsx2nasl/index.js.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts +4 -0
- package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js +213 -0
- package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts +15 -0
- package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js +201 -0
- package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts +5 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js +186 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts +29 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js +336 -0
- package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/utils.d.ts +3 -0
- package/out/templator/block2nasl/jsx2nasl/utils.d.ts.map +1 -0
- package/out/templator/block2nasl/jsx2nasl/utils.js +26 -0
- package/out/templator/block2nasl/jsx2nasl/utils.js.map +1 -0
- package/out/templator/block2nasl/transformBlock2Nasl.d.ts +11 -0
- package/out/templator/block2nasl/transformBlock2Nasl.d.ts.map +1 -0
- package/out/templator/block2nasl/transformBlock2Nasl.js +120 -0
- package/out/templator/block2nasl/transformBlock2Nasl.js.map +1 -0
- package/out/templator/block2nasl/viewMergeBlock.d.ts +17 -0
- package/out/templator/block2nasl/viewMergeBlock.d.ts.map +1 -0
- package/out/templator/block2nasl/viewMergeBlock.js +126 -0
- package/out/templator/block2nasl/viewMergeBlock.js.map +1 -0
- package/out/templator/utils.js +1 -1
- package/out/templator/utils.js.map +1 -1
- package/out/utils/node.d.ts.map +1 -1
- package/out/utils/node.js +0 -4
- package/out/utils/node.js.map +1 -1
- package/package.json +17 -26
- package/sandbox/stdlib/nasl.processV2.ts +2 -2
- package/sandbox/stdlib/nasl.ui.definition.ts +41 -1
- package/sandbox/stdlib/nasl.ui.ts +15 -0
- package/sandbox/stdlib/nasl.util.ts +5 -15
- package/sandbox-natural/stdlib/nasl.core.d.ts +54 -0
- package/sandbox-natural/stdlib/nasl.oql.d.ts +22 -0
- package/sandbox-natural/stdlib/nasl.ui.d.ts +90 -0
- package/sandbox-natural/stdlib/nasl.ui.h5.d.ts +4831 -1641
- package/sandbox-natural/stdlib/nasl.ui.h5.json +16595 -14941
- package/sandbox-natural/stdlib/nasl.ui.pc.d.ts +11837 -5153
- package/sandbox-natural/stdlib/nasl.ui.pc.json +54330 -30702
- package/sandbox-natural/stdlib/{nasl.util.ts → nasl.util.d.ts} +50 -44
- package/ts-worker/bundle.js +2 -2
- package/ts-worker/lib/Messager.js +8 -1
- package/ts-worker/lib/tsserver.js +6 -6
- package/out/utils/uiPathId.d.ts +0 -2
- package/out/utils/uiPathId.d.ts.map +0 -1
- package/out/utils/uiPathId.js +0 -32
- package/out/utils/uiPathId.js.map +0 -1
- package/sandbox/stdlib/nasl.ui.components.h5.ts +0 -1751
- package/sandbox/stdlib/nasl.ui.components.pc.ts +0 -3495
- package/sandbox-natural/stdlib/nasl.core.ts +0 -36
- package/sandbox-natural/stdlib/nasl.oql.ts +0 -14
- package/sandbox-natural/stdlib/nasl.ui.pre.d.ts +0 -90
- package/sandbox-natural/stdlib/nasl.ui.ts +0 -63
|
@@ -22,1078 +22,32 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.transformTSCodeToExpression = exports.transformTSCodeEx = exports.tryTransformTSCode = exports.transformTSCode =
|
|
26
|
+
exports.transformTSCodeToExpression = exports.transformTSCodeEx = exports.tryTransformTSCode = exports.transformTSCode = void 0;
|
|
30
27
|
/* eslint-disable global-require */
|
|
31
28
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
32
29
|
const babel = __importStar(require("@babel/core"));
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (DEBUG)
|
|
38
|
-
throw new Error(message);
|
|
39
|
-
else
|
|
40
|
-
console.error(message);
|
|
41
|
-
}
|
|
42
|
-
function tryParseTS(tsCode) {
|
|
43
|
-
try {
|
|
44
|
-
const root = babel.parseSync(tsCode, {
|
|
45
|
-
filename: 'result.ts',
|
|
46
|
-
presets: [require('@babel/preset-typescript')],
|
|
47
|
-
});
|
|
48
|
-
// console.log((root as any).program.body[0].body.body.map((item) => item.trailingComments));
|
|
49
|
-
return root;
|
|
50
|
-
}
|
|
51
|
-
catch (e) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.tryParseTS = tryParseTS;
|
|
56
|
-
function flatMemberExpression(node) {
|
|
57
|
-
if (node.type === 'MemberExpression')
|
|
58
|
-
return [...flatMemberExpression(node.object), node.property];
|
|
59
|
-
return [node];
|
|
60
|
-
}
|
|
61
|
-
function flatMembers(node) {
|
|
62
|
-
if (node.concept === 'MemberExpression')
|
|
63
|
-
return [...flatMembers((node?.object)), node];
|
|
64
|
-
return [];
|
|
65
|
-
}
|
|
66
|
-
function flatMatchPatternsExpression(node) {
|
|
67
|
-
if (node.concept === 'BinaryExpression') {
|
|
68
|
-
if (node.operator === '||') {
|
|
69
|
-
return [...flatMatchPatternsExpression(node.left), ...flatMatchPatternsExpression(node.right)];
|
|
70
|
-
}
|
|
71
|
-
if (node.operator === '==') {
|
|
72
|
-
return [node.right];
|
|
73
|
-
}
|
|
74
|
-
return [node];
|
|
75
|
-
}
|
|
76
|
-
return [node];
|
|
77
|
-
}
|
|
78
|
-
function flatIfStatement(node) {
|
|
79
|
-
if (node.alternate.type === 'IfStatement') {
|
|
80
|
-
return [...flatIfStatement(node.alternate), node];
|
|
81
|
-
}
|
|
82
|
-
return [node];
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
|
|
86
|
-
* @param node
|
|
87
|
-
* @returns
|
|
88
|
-
*/
|
|
89
|
-
function fixLogicNode(node) {
|
|
90
|
-
if (node?.type === 'CallExpression') {
|
|
91
|
-
const calleeName = (0, generator_1.default)(node.callee).code;
|
|
92
|
-
if (calleeName === 'nasl.util.ForEach') {
|
|
93
|
-
const callee = flatMemberExpression(node.callee);
|
|
94
|
-
node.callee = callee[2];
|
|
95
|
-
}
|
|
96
|
-
}
|
|
30
|
+
const utils_1 = require("./transforms/utils");
|
|
31
|
+
const transform2LogicItem_1 = require("./transforms/transform2LogicItem");
|
|
32
|
+
function isPageLogic(logicName) {
|
|
33
|
+
return logicName.includes('on_') || logicName.includes('viewLogic_') || logicName.includes('businessLogic_');
|
|
97
34
|
}
|
|
98
|
-
function transformTSCode(tsCode, contextLogicName
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (
|
|
103
|
-
|
|
104
|
-
if (node.type === 'TSTypeReference') {
|
|
105
|
-
const typeName = node.typeName.name;
|
|
106
|
-
const primitiveType = naslTypes.primitiveTypeList.find((ta) => ta.typeName === typeName);
|
|
107
|
-
if (node?.typeNamespace) {
|
|
108
|
-
return naslTypes.TypeAnnotation.createReference(typeName, {
|
|
109
|
-
typeNamespace: node.typeNamespace,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
if (['ValidateResult', 'ValidateEvent'].includes(typeName)) {
|
|
113
|
-
return naslTypes.TypeAnnotation.createReference(typeName, {
|
|
114
|
-
typeNamespace: 'nasl.ui'
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
if (typeName === 'Any' || typeName === 'any') {
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
if (typeName === 'Integer') {
|
|
121
|
-
return naslTypes.TypeAnnotation.createPrimitive('Long');
|
|
122
|
-
}
|
|
123
|
-
if (primitiveType) {
|
|
124
|
-
return naslTypes.TypeAnnotation.createPrimitive(typeName);
|
|
125
|
-
}
|
|
126
|
-
if (['List', 'Map', 'Current'].includes(typeName) && node?.typeParameters) {
|
|
127
|
-
return naslTypes.TypeAnnotation.createGeneric(typeName, {
|
|
128
|
-
typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
if (node?.typeName?.type === 'TSQualifiedName' && node?.typeParameters) {
|
|
132
|
-
const curTypeName = node?.typeName?.right?.name;
|
|
133
|
-
return naslTypes.TypeAnnotation.createGeneric(curTypeName, {
|
|
134
|
-
typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
if (!node.typeParameters) {
|
|
138
|
-
if (node?.typeName?.type === 'TSQualifiedName') {
|
|
139
|
-
const allTypeName = (0, generator_1.default)(node?.typeName?.left)?.code;
|
|
140
|
-
// 实体、枚举、结构体
|
|
141
|
-
if (/^app.dataSources|.enums|.structures|nasl.ui/.test(allTypeName)) {
|
|
142
|
-
const curTypeName = node?.typeName?.right?.name;
|
|
143
|
-
return naslTypes.TypeAnnotation.createReference(curTypeName, {
|
|
144
|
-
typeNamespace: allTypeName,
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return naslTypes.TypeAnnotation.createReference(typeName, {
|
|
149
|
-
typeNamespace: null,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
throwError(`Unhandled node ${node.type}`);
|
|
153
|
-
}
|
|
154
|
-
else if (node.type === 'TSTypeLiteral') {
|
|
155
|
-
return naslTypes.TypeAnnotation.createTypeAnonymousStructure(node.members.map((member) => new naslTypes.StructureProperty({
|
|
156
|
-
name: member.key.name,
|
|
157
|
-
typeAnnotation: transformTypeAnnotation(member.typeAnnotation.typeAnnotation),
|
|
158
|
-
})));
|
|
159
|
-
}
|
|
160
|
-
else if (node.type === 'TSBooleanKeyword') {
|
|
161
|
-
return naslTypes.TypeAnnotation.createPrimitive('Boolean');
|
|
162
|
-
}
|
|
163
|
-
else if (node.type === 'TSStringKeyword') {
|
|
164
|
-
return naslTypes.TypeAnnotation.createPrimitive('String');
|
|
165
|
-
}
|
|
166
|
-
else if (node.type === 'TSNumberKeyword') {
|
|
167
|
-
return naslTypes.TypeAnnotation.createPrimitive('Double');
|
|
168
|
-
}
|
|
169
|
-
else if (node.type === 'TSUnionType') {
|
|
170
|
-
const union = naslTypes.TypeAnnotation.createPrimitive('Union');
|
|
171
|
-
union.typeArguments = [];
|
|
172
|
-
node.types.forEach((curType) => {
|
|
173
|
-
union.typeArguments.push(transformTypeAnnotation(curType));
|
|
174
|
-
});
|
|
175
|
-
return union;
|
|
35
|
+
function transformTSCode(tsCode, contextLogicName) {
|
|
36
|
+
if (!contextLogicName) {
|
|
37
|
+
const functionRE = /function\s+(\w+)\s*\(/;
|
|
38
|
+
const cap = tsCode.match(functionRE);
|
|
39
|
+
if (cap) {
|
|
40
|
+
contextLogicName = cap[1];
|
|
176
41
|
}
|
|
177
42
|
else {
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
function transformParam(node) {
|
|
182
|
-
const typeAnnotation = node.typeAnnotation?.typeAnnotation;
|
|
183
|
-
const exclude = ['event'];
|
|
184
|
-
if (exclude.includes(node.name))
|
|
185
|
-
return null;
|
|
186
|
-
return new naslTypes.Param({
|
|
187
|
-
name: node.name,
|
|
188
|
-
typeAnnotation: typeAnnotation ? transformTypeAnnotation(typeAnnotation) : null,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
function pushElseIf(ifNode, switchStatement) {
|
|
192
|
-
switchStatement.cases.push(new naslTypes.SwitchCase({
|
|
193
|
-
test: transformLogicNode(ifNode.test),
|
|
194
|
-
consequent: !ifNode.consequent ? [] : ifNode.consequent.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
195
|
-
}));
|
|
196
|
-
if (ifNode.alternate && ifNode.alternate.type === 'IfStatement') {
|
|
197
|
-
pushElseIf(ifNode.alternate, switchStatement);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
switchStatement.cases.push(new naslTypes.SwitchCase({
|
|
201
|
-
test: undefined,
|
|
202
|
-
consequent: !ifNode?.alternate ? [] : ifNode?.alternate?.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
203
|
-
}));
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
function handleBinaryExpression(calleeName, argument) {
|
|
207
|
-
const map = {
|
|
208
|
-
plus: '+',
|
|
209
|
-
minus: '-',
|
|
210
|
-
multiply: '*',
|
|
211
|
-
divide: '/',
|
|
212
|
-
remainder: '%',
|
|
213
|
-
};
|
|
214
|
-
return new naslTypes.BinaryExpression({
|
|
215
|
-
operator: map?.[calleeName],
|
|
216
|
-
left: transformLogicNode(argument?.[0]),
|
|
217
|
-
right: transformLogicNode(argument?.[1]),
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
function handleNewExpression(calleeName, node) {
|
|
221
|
-
if (calleeName === 'NewList') {
|
|
222
|
-
return new naslTypes.NewList({
|
|
223
|
-
typeAnnotation: naslTypes.TypeAnnotation.createGeneric('List', {
|
|
224
|
-
typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
|
|
225
|
-
}),
|
|
226
|
-
items: node?.arguments?.[0]?.elements?.map((arg) => transformLogicNode(arg)),
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
if (calleeName === 'NewMap') {
|
|
230
|
-
const keys = [];
|
|
231
|
-
const values = [];
|
|
232
|
-
node?.arguments?.[0]?.properties.forEach((arg) => {
|
|
233
|
-
keys.push(transformLogicNode(arg.key));
|
|
234
|
-
values.push(transformLogicNode(arg.value));
|
|
235
|
-
});
|
|
236
|
-
return new naslTypes.NewMap({
|
|
237
|
-
typeAnnotation: naslTypes.TypeAnnotation.createGeneric('Map', {
|
|
238
|
-
typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
|
|
239
|
-
}),
|
|
240
|
-
keys,
|
|
241
|
-
values,
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
if (calleeName === 'NewEntity') {
|
|
245
|
-
const properties = [];
|
|
246
|
-
const rights = [];
|
|
247
|
-
const assignmentLines = [];
|
|
248
|
-
node?.arguments?.[0]?.properties.forEach((arg, index) => {
|
|
249
|
-
properties.push(transformLogicNode(arg.key));
|
|
250
|
-
if (arg.value.type === 'MemberExpression') {
|
|
251
|
-
const expression = flatMemberExpression(arg.value);
|
|
252
|
-
const members = flatMembers(transformLogicNode(arg.value));
|
|
253
|
-
rights.push(new naslTypes.SelectMembers({
|
|
254
|
-
expression: transformLogicNode(expression[0]),
|
|
255
|
-
members,
|
|
256
|
-
}));
|
|
257
|
-
if (arg?.value) {
|
|
258
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
259
|
-
leftIndex: [0, index],
|
|
260
|
-
rightIndex: [index, members.length - 1],
|
|
261
|
-
}));
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
rights.push(new naslTypes.SelectMembers({
|
|
266
|
-
expression: transformLogicNode(arg.value)
|
|
267
|
-
}));
|
|
268
|
-
if (arg?.value) {
|
|
269
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
270
|
-
leftIndex: [0, index],
|
|
271
|
-
rightIndex: [index],
|
|
272
|
-
}));
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
const parameters = node?.typeParameters?.params?.[0] || {};
|
|
277
|
-
if (parameters && parameters?.type === 'TSTypeReference' && parameters?.typeName?.type === 'TSQualifiedName') {
|
|
278
|
-
const { left, right } = parameters?.typeName || {};
|
|
279
|
-
const typeNamespace = (0, generator_1.default)(left)?.code;
|
|
280
|
-
const typeName = right?.name;
|
|
281
|
-
return new naslTypes.NewComposite({
|
|
282
|
-
typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
|
|
283
|
-
typeNamespace,
|
|
284
|
-
typeName
|
|
285
|
-
}),
|
|
286
|
-
properties,
|
|
287
|
-
rights,
|
|
288
|
-
assignmentLines
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
const typeName = parameters?.typeName?.name;
|
|
292
|
-
return new naslTypes.NewComposite({
|
|
293
|
-
typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
|
|
294
|
-
typeNamespace: 'app.dataSources.defaultDS.entities',
|
|
295
|
-
typeName
|
|
296
|
-
}),
|
|
297
|
-
properties,
|
|
298
|
-
rights,
|
|
299
|
-
assignmentLines
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
if (calleeName === 'NewStructure') {
|
|
303
|
-
const properties = [];
|
|
304
|
-
const rights = [];
|
|
305
|
-
const assignmentLines = [];
|
|
306
|
-
node?.arguments?.[0]?.properties.forEach((arg, index) => {
|
|
307
|
-
properties.push(transformLogicNode(arg.key));
|
|
308
|
-
if (arg.value.type === 'MemberExpression') {
|
|
309
|
-
const expression = flatMemberExpression(arg.value);
|
|
310
|
-
const members = flatMembers(transformLogicNode(arg.value));
|
|
311
|
-
rights.push(new naslTypes.SelectMembers({
|
|
312
|
-
expression: transformLogicNode(expression[0]),
|
|
313
|
-
members,
|
|
314
|
-
}));
|
|
315
|
-
if (arg?.value) {
|
|
316
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
317
|
-
leftIndex: [0, index],
|
|
318
|
-
rightIndex: [index, members.length - 1],
|
|
319
|
-
}));
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
rights.push(new naslTypes.SelectMembers({
|
|
324
|
-
expression: transformLogicNode(arg.value)
|
|
325
|
-
}));
|
|
326
|
-
if (arg?.value) {
|
|
327
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
328
|
-
leftIndex: [0, index],
|
|
329
|
-
rightIndex: [index],
|
|
330
|
-
}));
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
const parameters = node?.typeParameters?.params?.[0] || {};
|
|
335
|
-
if (parameters && parameters?.type === 'TSTypeReference' && parameters?.typeName?.type === 'TSQualifiedName') {
|
|
336
|
-
const { left, right } = parameters?.typeName || {};
|
|
337
|
-
const typeNamespace = (0, generator_1.default)(left)?.code;
|
|
338
|
-
const typeName = right?.name;
|
|
339
|
-
return new naslTypes.NewComposite({
|
|
340
|
-
typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
|
|
341
|
-
typeNamespace,
|
|
342
|
-
typeName
|
|
343
|
-
}),
|
|
344
|
-
properties,
|
|
345
|
-
rights,
|
|
346
|
-
assignmentLines
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
const typeName = parameters?.typeName?.name;
|
|
350
|
-
return new naslTypes.NewComposite({
|
|
351
|
-
typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
|
|
352
|
-
typeNamespace: 'app.structures',
|
|
353
|
-
typeName
|
|
354
|
-
}),
|
|
355
|
-
properties,
|
|
356
|
-
rights,
|
|
357
|
-
assignmentLines
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
if (calleeName === 'NewAnonymousStructure') {
|
|
361
|
-
const properties = [];
|
|
362
|
-
const rights = [];
|
|
363
|
-
const structureProperties = [];
|
|
364
|
-
const assignmentLines = [];
|
|
365
|
-
node?.arguments?.[0]?.properties?.forEach((arg, index) => {
|
|
366
|
-
properties.push(transformLogicNode(arg.key));
|
|
367
|
-
if (arg.value.type === 'MemberExpression') {
|
|
368
|
-
const expression = flatMemberExpression(arg.value);
|
|
369
|
-
const members = flatMembers(transformLogicNode(arg.value));
|
|
370
|
-
rights.push(new naslTypes.SelectMembers({
|
|
371
|
-
expression: transformLogicNode(expression[0]),
|
|
372
|
-
members,
|
|
373
|
-
}));
|
|
374
|
-
if (arg?.value) {
|
|
375
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
376
|
-
leftIndex: [0, index],
|
|
377
|
-
rightIndex: [index, members.length - 1],
|
|
378
|
-
}));
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
else {
|
|
382
|
-
rights.push(new naslTypes.SelectMembers({
|
|
383
|
-
expression: transformLogicNode(arg.value)
|
|
384
|
-
}));
|
|
385
|
-
if (arg?.value) {
|
|
386
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
387
|
-
leftIndex: [0, index],
|
|
388
|
-
rightIndex: [index],
|
|
389
|
-
}));
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
structureProperties.push(new naslTypes.StructureProperty({
|
|
393
|
-
name: arg?.key?.name,
|
|
394
|
-
typeAnnotation: null
|
|
395
|
-
}));
|
|
396
|
-
});
|
|
397
|
-
return new naslTypes.NewComposite({
|
|
398
|
-
typeAnnotation: naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
|
|
399
|
-
properties,
|
|
400
|
-
rights,
|
|
401
|
-
assignmentLines
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
return node;
|
|
405
|
-
}
|
|
406
|
-
function isPageLogic(logicName) {
|
|
407
|
-
return logicName.includes('on_') || logicName.includes('viewLogic_') || logicName.includes('businessLogic_');
|
|
408
|
-
}
|
|
409
|
-
function transformLogicNode(node, typeAnnotation) {
|
|
410
|
-
fixLogicNode(node);
|
|
411
|
-
// console.log('lemon ~~~ node--1:', node);
|
|
412
|
-
if (node.type === 'VariableDeclaration') { // 拆成局部变量和赋值
|
|
413
|
-
const declList = node?.declarations || [];
|
|
414
|
-
let newNode;
|
|
415
|
-
declList?.forEach((decl) => {
|
|
416
|
-
const variableName = decl.id.name;
|
|
417
|
-
if (!logic.variables.find((variable) => variable.name === variableName)) {
|
|
418
|
-
const varTypeAnnotation = decl.id.typeAnnotation?.typeAnnotation;
|
|
419
|
-
logic.variables.push(new naslTypes.Variable({
|
|
420
|
-
name: variableName,
|
|
421
|
-
typeAnnotation: varTypeAnnotation && transformTypeAnnotation(varTypeAnnotation),
|
|
422
|
-
}));
|
|
423
|
-
}
|
|
424
|
-
if (decl.init) {
|
|
425
|
-
if (decl.init.type !== 'ArrayExpression' && decl.init.type !== 'ObjectExpression') {
|
|
426
|
-
const calleeName = (0, generator_1.default)(decl?.init?.callee).code;
|
|
427
|
-
if (type === 'expression') {
|
|
428
|
-
return transformLogicNode(decl.init);
|
|
429
|
-
}
|
|
430
|
-
const varTypeAnnotation = decl?.id?.typeAnnotation?.typeAnnotation;
|
|
431
|
-
if (calleeName === 'nasl.oql.query' && varTypeAnnotation) {
|
|
432
|
-
decl.init.typeAnnotations = varTypeAnnotation;
|
|
433
|
-
}
|
|
434
|
-
newNode = new naslTypes.Assignment({
|
|
435
|
-
left: new naslTypes.Identifier({
|
|
436
|
-
name: variableName,
|
|
437
|
-
}),
|
|
438
|
-
right: transformLogicNode(decl.init),
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
});
|
|
443
|
-
if (newNode)
|
|
444
|
-
return newNode;
|
|
445
|
-
}
|
|
446
|
-
else if (node.type === 'CallExpression' && node.callee.type === 'CallExpression') {
|
|
447
|
-
// (function match() {})(...) 的情况
|
|
448
|
-
}
|
|
449
|
-
else if (node.type === 'CallExpression') {
|
|
450
|
-
const callee = flatMemberExpression(node.callee);
|
|
451
|
-
const calleeName = (0, generator_1.default)(node.callee).code;
|
|
452
|
-
// console.log('lemon ~~~ node--2', node, callee, calleeName);
|
|
453
|
-
if (/^\$refs\./.test(calleeName)) {
|
|
454
|
-
return new naslTypes.CallLogic({
|
|
455
|
-
calleeNamespace: `elements.${callee[1].name}.logics`,
|
|
456
|
-
calleeName: callee[2].name,
|
|
457
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
458
|
-
expression: transformLogicNode(arg),
|
|
459
|
-
})),
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
if (callee.length === 2 && callee[0].type === 'Identifier' && callee[0].name.endsWith('Entity')) {
|
|
463
|
-
const entityName = callee[0].name.replace(/Entity$/, '');
|
|
464
|
-
return new naslTypes.CallLogic({
|
|
465
|
-
calleeNamespace: `app.dataSources.defaultDS.entities.${entityName}.logics`,
|
|
466
|
-
calleeName: callee[1].name,
|
|
467
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
468
|
-
expression: transformLogicNode(arg),
|
|
469
|
-
})),
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
if (calleeName === 'nasl.oql.query') {
|
|
473
|
-
if (!isPageLogic(contextLogicName)) {
|
|
474
|
-
// const _typeAnnotation = node?.typeParameters?.params?.length > 0 ? naslTypes.TypeAnnotation.createGeneric('List', {
|
|
475
|
-
// typeArguments: node?.typeParameters?.params.map((curType: any) => transformTypeAnnotation({ ...curType })),
|
|
476
|
-
// }) : null;
|
|
477
|
-
let code = (0, generator_1.default)(node.arguments[0]).code.trim().slice(1, -1);
|
|
478
|
-
code = code?.replace(/app\.enums\.(\w+)\[(\d+)\]/g, "app.enums.$1.$2").replace(/app\.enums\.(\w+)\['(\w+)'\]/g, "app.enums.$1.$2");
|
|
479
|
-
return new naslTypes.OqlQueryComponent({
|
|
480
|
-
dataSource: 'app.dataSources.defaultDS',
|
|
481
|
-
code,
|
|
482
|
-
typeAnnotation: transformTypeAnnotation(node?.typeAnnotations)
|
|
483
|
-
});
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
// 需求变更 consoleLog 都转成nasl.logging
|
|
487
|
-
if (calleeName === 'nasl.util.consoleLog' || calleeName === 'console.log') {
|
|
488
|
-
return new naslTypes.CallLogic({
|
|
489
|
-
calleeNamespace: 'nasl.logging',
|
|
490
|
-
calleeName: 'INFO',
|
|
491
|
-
shortcut: true,
|
|
492
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
493
|
-
expression: transformLogicNode(arg),
|
|
494
|
-
})),
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
if (calleeName.startsWith('nasl.logging.')) {
|
|
498
|
-
return new naslTypes.CallLogic({
|
|
499
|
-
calleeNamespace: 'nasl.logging',
|
|
500
|
-
calleeName: callee[2].name,
|
|
501
|
-
shortcut: true,
|
|
502
|
-
arguments: node.arguments.map((arg) => new naslTypes.Argument({
|
|
503
|
-
expression: transformLogicNode(arg),
|
|
504
|
-
})),
|
|
505
|
-
});
|
|
506
|
-
}
|
|
507
|
-
if (calleeName === 'nasl.util.jsonSerialize' || calleeName === 'nasl.util.jsonDeserialize') {
|
|
508
|
-
const curCalleeName = node.callee.property.name;
|
|
509
|
-
return new naslTypes.CallLogic({
|
|
510
|
-
calleeNamespace: 'nasl.util',
|
|
511
|
-
calleeName: curCalleeName,
|
|
512
|
-
shortcut: true,
|
|
513
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
514
|
-
expression: transformLogicNode(arg),
|
|
515
|
-
})),
|
|
516
|
-
typeArguments: node?.typeParameters?.params.map((curType) => transformTypeAnnotation({ ...curType })),
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
;
|
|
520
|
-
if (calleeName.startsWith('nasl.util.')) {
|
|
521
|
-
let curCalleeName;
|
|
522
|
-
if (callee.length === 3)
|
|
523
|
-
curCalleeName = callee[callee.length - 1].name;
|
|
524
|
-
else {
|
|
525
|
-
let _callee = callee[0].callee;
|
|
526
|
-
while (_callee.type === 'CallExpression')
|
|
527
|
-
_callee = _callee.callee;
|
|
528
|
-
curCalleeName = _callee.property.name;
|
|
529
|
-
}
|
|
530
|
-
const argument = callee.length === 3 ? node.arguments : callee[0].arguments;
|
|
531
|
-
if (['plus', 'minus', 'multiply', 'divide', 'remainder'].includes(curCalleeName)) {
|
|
532
|
-
return handleBinaryExpression(curCalleeName, argument);
|
|
533
|
-
}
|
|
534
|
-
;
|
|
535
|
-
if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
|
|
536
|
-
return handleNewExpression(curCalleeName, node);
|
|
537
|
-
}
|
|
538
|
-
// let typeNamespace: string;
|
|
539
|
-
// if (argument?.[argument.length - 1]?.type === 'ObjectExpression') {
|
|
540
|
-
// typeNamespace = argument.splice(-1)[0].properties[0].value.value;
|
|
541
|
-
// }
|
|
542
|
-
const nodeElement = new naslTypes.CallFunction({
|
|
543
|
-
calleeNamespace: 'nasl.util',
|
|
544
|
-
calleeName: curCalleeName,
|
|
545
|
-
arguments: argument.map((arg, index) => new naslTypes.Argument({
|
|
546
|
-
expression: transformLogicNode(arg),
|
|
547
|
-
keyword: `str${index + 1}`,
|
|
548
|
-
})),
|
|
549
|
-
typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
|
|
550
|
-
// typeArguments: node?.typeParameters?.params.map((curType: any) => transformTypeAnnotation({ ...curType, typeNamespace })),
|
|
551
|
-
});
|
|
552
|
-
// console.log('lemon ~ callFunction ~ 3:', nodeElement);
|
|
553
|
-
return nodeElement;
|
|
554
|
-
}
|
|
555
|
-
if (callee.length === 3 && calleeName.startsWith('nasl.ui.')) {
|
|
556
|
-
if (callee[2].name === 'destination') {
|
|
557
|
-
const namespace = node.arguments[0].value;
|
|
558
|
-
const nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
|
|
559
|
-
const pageType = nsArr.shift();
|
|
560
|
-
const viewName = nsArr.pop();
|
|
561
|
-
return new naslTypes.Destination({
|
|
562
|
-
viewNamespace: `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`, // viewNamespace
|
|
563
|
-
viewName, // viewName
|
|
564
|
-
arguments: node.arguments.slice(1).map((arg) => new naslTypes.Argument({
|
|
565
|
-
expression: transformLogicNode(arg),
|
|
566
|
-
})),
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
return new naslTypes.CallLogic({
|
|
570
|
-
calleeNamespace: 'nasl.ui',
|
|
571
|
-
calleeName: callee[2].name,
|
|
572
|
-
shortcut: true,
|
|
573
|
-
/**
|
|
574
|
-
* 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
|
|
575
|
-
* @param node
|
|
576
|
-
* @returns
|
|
577
|
-
*/
|
|
578
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
579
|
-
expression: transformLogicNode(arg),
|
|
580
|
-
})),
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
if (calleeName.endsWith('.map')) {
|
|
584
|
-
return new naslTypes.CallFunction({
|
|
585
|
-
calleeNamespace: 'nasl.util',
|
|
586
|
-
calleeName: 'ListTransform',
|
|
587
|
-
arguments: [new naslTypes.Argument({
|
|
588
|
-
expression: transformLogicNode(node.callee.object),
|
|
589
|
-
}), ...node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
590
|
-
expression: transformLogicNode(arg),
|
|
591
|
-
}))],
|
|
592
|
-
});
|
|
593
|
-
}
|
|
594
|
-
if (calleeName === 'PAGINATE') {
|
|
595
|
-
const newCallee = node?.arguments || [];
|
|
596
|
-
return new naslTypes.Paginate({
|
|
597
|
-
list: newCallee?.[0] && transformLogicNode(newCallee?.[0]),
|
|
598
|
-
page: newCallee?.[1] && transformLogicNode(newCallee?.[1]),
|
|
599
|
-
size: newCallee?.[2] && transformLogicNode(newCallee?.[2]),
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
if (calleeName === 'ForEach') {
|
|
603
|
-
const newCallee = node.arguments;
|
|
604
|
-
const arrowFunction = node.arguments[3];
|
|
605
|
-
const nodeElement = new naslTypes.ForEachStatement({
|
|
606
|
-
each: transformLogicNode(newCallee[0]),
|
|
607
|
-
start: transformLogicNode(newCallee[1]),
|
|
608
|
-
end: transformLogicNode(newCallee[2]),
|
|
609
|
-
item: transformParam(arrowFunction.params[0]),
|
|
610
|
-
index: arrowFunction.params[1] ? transformParam(arrowFunction.params[1]) : new naslTypes.Param({
|
|
611
|
-
name: 'index', typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Long'),
|
|
612
|
-
}),
|
|
613
|
-
body: arrowFunction.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
614
|
-
});
|
|
615
|
-
return nodeElement;
|
|
616
|
-
}
|
|
617
|
-
if (callee.length === 2) {
|
|
618
|
-
const curCalleeName = node.callee.property.name;
|
|
619
|
-
if (curCalleeName === 'forEach') {
|
|
620
|
-
const newCallee = node.callee.object;
|
|
621
|
-
const arrowFunction = node.arguments[0];
|
|
622
|
-
const nodeElement = new naslTypes.ForEachStatement({
|
|
623
|
-
each: transformLogicNode(newCallee.callee.object),
|
|
624
|
-
start: transformLogicNode(newCallee?.arguments?.[0]),
|
|
625
|
-
end: transformLogicNode(newCallee?.arguments?.[1]),
|
|
626
|
-
item: transformParam(arrowFunction.params[0]),
|
|
627
|
-
index: arrowFunction.params[1] ? transformParam(arrowFunction.params[1]) : new naslTypes.Param({
|
|
628
|
-
name: 'index', typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Long'),
|
|
629
|
-
}),
|
|
630
|
-
body: arrowFunction.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
631
|
-
});
|
|
632
|
-
return nodeElement;
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
else if (['plus', 'minus', 'multiply', 'divide', 'remainder'].includes(calleeName)) {
|
|
636
|
-
return handleBinaryExpression(calleeName, node?.arguments);
|
|
637
|
-
}
|
|
638
|
-
else if (calleeName === 'alert') {
|
|
639
|
-
return new naslTypes.CallLogic({
|
|
640
|
-
calleeNamespace: 'nasl.ui',
|
|
641
|
-
calleeName: 'showMessage',
|
|
642
|
-
shortcut: true,
|
|
643
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
644
|
-
expression: transformLogicNode(arg),
|
|
645
|
-
})),
|
|
646
|
-
});
|
|
647
|
-
}
|
|
648
|
-
else if (/^app.dataSources|app.logics/.test(calleeName)) {
|
|
649
|
-
if (calleeName?.includes('.entities.')) {
|
|
650
|
-
const calleeNamespace = (0, generator_1.default)(node?.callee?.object?.object)?.code;
|
|
651
|
-
const entityName = node?.callee?.object?.property?.name?.replace(/Entity$/, '');
|
|
652
|
-
return new naslTypes.CallLogic({
|
|
653
|
-
calleeNamespace: `${calleeNamespace}.${entityName}.logics`,
|
|
654
|
-
calleeName: node?.callee?.property?.name,
|
|
655
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
656
|
-
expression: transformLogicNode(arg),
|
|
657
|
-
})),
|
|
658
|
-
});
|
|
659
|
-
}
|
|
660
|
-
return new naslTypes.CallLogic({
|
|
661
|
-
calleeNamespace: (0, generator_1.default)(node.callee.object).code,
|
|
662
|
-
calleeName: callee[callee.length - 1].name,
|
|
663
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
664
|
-
expression: transformLogicNode(arg),
|
|
665
|
-
})),
|
|
666
|
-
});
|
|
667
|
-
}
|
|
668
|
-
else if (callee.length === 1) {
|
|
669
|
-
if (calleeName.startsWith('viewLogic_')) {
|
|
670
|
-
return new naslTypes.CallLogic({
|
|
671
|
-
calleeNamespace: '',
|
|
672
|
-
calleeName: calleeName.slice('viewLogic_'.length),
|
|
673
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
674
|
-
expression: transformLogicNode(arg),
|
|
675
|
-
})),
|
|
676
|
-
});
|
|
677
|
-
}
|
|
678
|
-
if (calleeName === 'FROM') {
|
|
679
|
-
// TODO
|
|
680
|
-
return new naslTypes.CallLogic({
|
|
681
|
-
calleeNamespace: `app.logics`,
|
|
682
|
-
calleeName,
|
|
683
|
-
arguments: [],
|
|
684
|
-
});
|
|
685
|
-
}
|
|
686
|
-
return new naslTypes.CallLogic({
|
|
687
|
-
calleeNamespace: `app.logics`,
|
|
688
|
-
calleeName,
|
|
689
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
690
|
-
expression: transformLogicNode(arg),
|
|
691
|
-
})),
|
|
692
|
-
});
|
|
693
|
-
}
|
|
694
|
-
else if (/interfaces/.test(calleeName)) {
|
|
695
|
-
return new naslTypes.CallInterface({
|
|
696
|
-
calleeNamespace: (0, generator_1.default)(node.callee.object).code,
|
|
697
|
-
calleeName: callee[callee.length - 1].name,
|
|
698
|
-
arguments: node?.arguments?.map((arg) => arg?.properties?.map((item) => new naslTypes.Argument({
|
|
699
|
-
keyword: item?.key?.name,
|
|
700
|
-
expression: transformLogicNode(item?.value),
|
|
701
|
-
}))).flat(),
|
|
702
|
-
});
|
|
703
|
-
}
|
|
704
|
-
else if (/connector./.test(calleeName)) {
|
|
705
|
-
let flatCalleeKey = (0, generator_1.default)(node?.callee)?.code;
|
|
706
|
-
if (flatCalleeKey?.startsWith('connector.')) {
|
|
707
|
-
flatCalleeKey = flatCalleeKey?.replace('connector.', '');
|
|
708
|
-
}
|
|
709
|
-
const [, calleeConnectionName, calleeNamespace, calleeFunName] = flatCalleeKey?.match(/^(\w+)\.([\w.]+)\.(\w+)$/);
|
|
710
|
-
return new naslTypes.CallConnector({
|
|
711
|
-
calleeConnectionName,
|
|
712
|
-
calleeNamespace,
|
|
713
|
-
calleeName: calleeFunName,
|
|
714
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
715
|
-
expression: transformLogicNode(arg),
|
|
716
|
-
})),
|
|
717
|
-
});
|
|
718
|
-
}
|
|
719
|
-
else if (/extensions./.test(calleeName)) {
|
|
720
|
-
return new naslTypes.CallLogic({
|
|
721
|
-
calleeNamespace: (0, generator_1.default)(node?.callee?.object)?.code,
|
|
722
|
-
calleeName: callee?.[callee?.length - 1]?.name,
|
|
723
|
-
handleError: true,
|
|
724
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
725
|
-
expression: transformLogicNode(arg),
|
|
726
|
-
})),
|
|
727
|
-
});
|
|
728
|
-
}
|
|
729
|
-
// else if (/destination/.test(calleeName)) {
|
|
730
|
-
// const newCallee = flatMemberExpression((node.callee as any).object);
|
|
731
|
-
// return new naslTypes.Destination({
|
|
732
|
-
// viewNamespace: generate((node.callee as any).object.object).code,
|
|
733
|
-
// viewName: (newCallee[newCallee.length - 1] as babelTypes.Identifier).name,
|
|
734
|
-
// target: (node.arguments[0] as any).properties[1].value.value,
|
|
735
|
-
// anchor: new naslTypes.Anchor({
|
|
736
|
-
// expression: transformLogicNode((node.arguments[0] as any).properties[0].value),
|
|
737
|
-
// }),
|
|
738
|
-
// });
|
|
739
|
-
// }
|
|
740
|
-
else if (node.callee.type === 'ArrowFunctionExpression') {
|
|
741
|
-
// NOTE: 适用于 if else
|
|
742
|
-
const newCallee = node.callee.body.body;
|
|
743
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFuntion') {
|
|
744
|
-
const match = new naslTypes.Match({
|
|
745
|
-
expression: transformLogicNode(newCallee[0]),
|
|
746
|
-
isExpression: type === 'expression',
|
|
747
|
-
cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new naslTypes.MatchCase({
|
|
748
|
-
patterns: !_case.test ? [] : flatMatchPatternsExpression(transformLogicNode(_case.test)),
|
|
749
|
-
body: _case.consequent.body.filter((item) => item.type !== 'BreakStatement').map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
750
|
-
})),
|
|
751
|
-
});
|
|
752
|
-
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
753
|
-
match.cases.push(new naslTypes.MatchCase({
|
|
754
|
-
patterns: [],
|
|
755
|
-
body: [],
|
|
756
|
-
}));
|
|
757
|
-
}
|
|
758
|
-
match.cases.forEach((case_) => {
|
|
759
|
-
if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
|
|
760
|
-
case_.isMatchedTypeEnumable = true;
|
|
761
|
-
}
|
|
762
|
-
if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
|
|
763
|
-
case_.isMatchedTypeEnumable = true;
|
|
764
|
-
case_.patterns[0] = new naslTypes.MemberExpression({
|
|
765
|
-
object: {
|
|
766
|
-
concept: 'Identifier',
|
|
767
|
-
name: case_.patterns[0].object.property.name,
|
|
768
|
-
folded: false,
|
|
769
|
-
namespace: 'app.enums'
|
|
770
|
-
},
|
|
771
|
-
property: {
|
|
772
|
-
concept: 'Identifier',
|
|
773
|
-
name: case_.patterns[0].property.value,
|
|
774
|
-
folded: false,
|
|
775
|
-
},
|
|
776
|
-
});
|
|
777
|
-
}
|
|
778
|
-
});
|
|
779
|
-
return match;
|
|
780
|
-
}
|
|
781
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
|
|
782
|
-
const switchStatement = transformLogicNode(newCallee[0].body.body[0]);
|
|
783
|
-
return switchStatement;
|
|
784
|
-
}
|
|
785
|
-
throwError(`Unhandled ArrowFunctionExpression node ${node.type}`);
|
|
786
|
-
}
|
|
787
|
-
else {
|
|
788
|
-
throwError(`Unhandled node ${callee.map((item) => item.name).join('.')} ${node.type}`);
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
else if (node.type === 'IfStatement') {
|
|
792
|
-
if (node.alternate && node.alternate.type === 'IfStatement') {
|
|
793
|
-
const switchStatement = new naslTypes.SwitchStatement({
|
|
794
|
-
cases: [],
|
|
795
|
-
});
|
|
796
|
-
pushElseIf(node, switchStatement);
|
|
797
|
-
return switchStatement;
|
|
798
|
-
}
|
|
799
|
-
let consequentIndex;
|
|
800
|
-
let alternateIndex;
|
|
801
|
-
const naslNode = new naslTypes.IfStatement({
|
|
802
|
-
test: transformLogicNode(node.test),
|
|
803
|
-
consequent: !node.consequent ? [] : node.consequent.body.map((item, index) => {
|
|
804
|
-
if (item?.type === 'ReturnStatement') {
|
|
805
|
-
item.ends = true;
|
|
806
|
-
if (item?.argument) {
|
|
807
|
-
consequentIndex = index;
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
return transformLogicNode(item);
|
|
811
|
-
}).filter((item) => !!item),
|
|
812
|
-
alternate: !node.alternate ? [] : node.alternate.body.map((item, index) => {
|
|
813
|
-
if (item?.type === 'ReturnStatement') {
|
|
814
|
-
item.ends = true;
|
|
815
|
-
if (item?.argument) {
|
|
816
|
-
alternateIndex = index;
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
return transformLogicNode(item);
|
|
820
|
-
}).filter((item) => !!item),
|
|
821
|
-
});
|
|
822
|
-
if (consequentIndex !== undefined) {
|
|
823
|
-
naslNode?.consequent?.splice(consequentIndex + 1, 0, new naslTypes.End());
|
|
824
|
-
}
|
|
825
|
-
if (alternateIndex !== undefined) {
|
|
826
|
-
naslNode?.alternate?.splice(alternateIndex + 1, 0, new naslTypes.End());
|
|
827
|
-
}
|
|
828
|
-
return naslNode;
|
|
829
|
-
}
|
|
830
|
-
else if (node.type === 'WhileStatement') {
|
|
831
|
-
return new naslTypes.WhileStatement({
|
|
832
|
-
test: transformLogicNode(node.test),
|
|
833
|
-
body: node.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
834
|
-
});
|
|
835
|
-
}
|
|
836
|
-
else if (node.type === 'SwitchStatement') {
|
|
837
|
-
const match = new naslTypes.Match({
|
|
838
|
-
expression: transformLogicNode(node.discriminant),
|
|
839
|
-
isExpression: type === 'expression',
|
|
840
|
-
cases: node.cases.map((_case) => new naslTypes.MatchCase({
|
|
841
|
-
patterns: !_case.test ? [] : [transformLogicNode(_case.test)],
|
|
842
|
-
body: _case.consequent.filter((item) => item.type !== 'BreakStatement').map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
843
|
-
})),
|
|
844
|
-
});
|
|
845
|
-
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
846
|
-
match.cases.push(new naslTypes.MatchCase({
|
|
847
|
-
patterns: [],
|
|
848
|
-
body: [],
|
|
849
|
-
}));
|
|
850
|
-
}
|
|
851
|
-
match.cases.forEach((case_) => {
|
|
852
|
-
if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
|
|
853
|
-
case_.isMatchedTypeEnumable = true;
|
|
854
|
-
}
|
|
855
|
-
if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
|
|
856
|
-
case_.isMatchedTypeEnumable = true;
|
|
857
|
-
case_.patterns[0].object.namespace = 'app.enums';
|
|
858
|
-
}
|
|
859
|
-
});
|
|
860
|
-
return match;
|
|
861
|
-
}
|
|
862
|
-
else if (node.type === 'MemberExpression') {
|
|
863
|
-
const callee = flatMemberExpression(node);
|
|
864
|
-
const calleeName = (0, generator_1.default)(node)?.code;
|
|
865
|
-
if (calleeName?.includes('app.enums')) {
|
|
866
|
-
const name = callee?.[3]?.value || callee?.[3]?.name || callee?.[3]?.value;
|
|
867
|
-
return new naslTypes.MemberExpression({
|
|
868
|
-
object: new naslTypes.Identifier({
|
|
869
|
-
namespace: 'app.enums',
|
|
870
|
-
name: callee?.[2]?.name,
|
|
871
|
-
}),
|
|
872
|
-
property: new naslTypes.Identifier({
|
|
873
|
-
name: String(name),
|
|
874
|
-
}),
|
|
875
|
-
});
|
|
876
|
-
}
|
|
877
|
-
if (node.property.type === 'NumericLiteral') {
|
|
878
|
-
return new naslTypes.CallFunction({
|
|
879
|
-
calleeNamespace: 'nasl.util',
|
|
880
|
-
calleeName: 'Get',
|
|
881
|
-
arguments: [
|
|
882
|
-
new naslTypes.Argument({
|
|
883
|
-
expression: transformLogicNode(node.object),
|
|
884
|
-
}),
|
|
885
|
-
new naslTypes.Argument({
|
|
886
|
-
expression: transformLogicNode(node.property),
|
|
887
|
-
}),
|
|
888
|
-
],
|
|
889
|
-
});
|
|
890
|
-
}
|
|
891
|
-
return new naslTypes.MemberExpression({
|
|
892
|
-
object: transformLogicNode(node.object),
|
|
893
|
-
property: transformLogicNode(node.property),
|
|
894
|
-
});
|
|
895
|
-
}
|
|
896
|
-
else if (node.type === 'Identifier') {
|
|
897
|
-
return new naslTypes.Identifier({
|
|
898
|
-
name: node.name,
|
|
899
|
-
});
|
|
900
|
-
}
|
|
901
|
-
else if (node.type === 'ExpressionStatement') {
|
|
902
|
-
return transformLogicNode(node.expression);
|
|
903
|
-
}
|
|
904
|
-
else if (node.type === 'AssignmentExpression') {
|
|
905
|
-
if (node.operator === '+=' || node.operator === '-=') {
|
|
906
|
-
if (type === 'expression') {
|
|
907
|
-
return new naslTypes.BinaryExpression({
|
|
908
|
-
operator: node.operator[0],
|
|
909
|
-
left: transformLogicNode(node.left),
|
|
910
|
-
right: transformLogicNode(node.right),
|
|
911
|
-
});
|
|
912
|
-
}
|
|
913
|
-
return new naslTypes.Assignment({
|
|
914
|
-
left: transformLogicNode(node.left),
|
|
915
|
-
right: new naslTypes.BinaryExpression({
|
|
916
|
-
operator: node.operator[0],
|
|
917
|
-
left: transformLogicNode(node.left),
|
|
918
|
-
right: transformLogicNode(node.right),
|
|
919
|
-
}),
|
|
920
|
-
});
|
|
921
|
-
}
|
|
922
|
-
if (type === 'expression') {
|
|
923
|
-
return transformLogicNode(node.right);
|
|
924
|
-
}
|
|
925
|
-
return new naslTypes.Assignment({
|
|
926
|
-
left: transformLogicNode(node.left),
|
|
927
|
-
right: transformLogicNode(node.right),
|
|
928
|
-
});
|
|
929
|
-
}
|
|
930
|
-
else if (node.type === 'NewExpression') {
|
|
931
|
-
const calleeName = (0, generator_1.default)(node.callee).code;
|
|
932
|
-
if (['Boolean', 'Integer', 'Double', 'Decimal', 'Long'].includes(calleeName)) {
|
|
933
|
-
return transformLogicNode(node.arguments[0], naslTypes.TypeAnnotation.createPrimitive(calleeName));
|
|
934
|
-
}
|
|
935
|
-
throwError(`Unhandled node ${node.type}`);
|
|
936
|
-
}
|
|
937
|
-
else if (node.type === 'ArrowFunctionExpression') {
|
|
938
|
-
return new naslTypes.AnonymousFunction({
|
|
939
|
-
params: node.params.map((param) => transformParam(param)),
|
|
940
|
-
body: transformLogicNode(node.body),
|
|
941
|
-
});
|
|
942
|
-
}
|
|
943
|
-
else if (node.type === 'BooleanLiteral') {
|
|
944
|
-
return new naslTypes.BooleanLiteral({
|
|
945
|
-
value: String(node.value),
|
|
946
|
-
});
|
|
947
|
-
}
|
|
948
|
-
else if (node.type === 'StringLiteral') {
|
|
949
|
-
return new naslTypes.StringLiteral({
|
|
950
|
-
value: node.value,
|
|
951
|
-
});
|
|
952
|
-
}
|
|
953
|
-
else if (node.type === 'NumericLiteral') {
|
|
954
|
-
const literal = new naslTypes.NumericLiteral({
|
|
955
|
-
value: String(node.value),
|
|
956
|
-
typeAnnotation: typeAnnotation || naslTypes.TypeAnnotation.createPrimitive('Integer'),
|
|
957
|
-
});
|
|
958
|
-
literal.typeAnnotation.typeName = literal.changeType(String(node.value));
|
|
959
|
-
return literal;
|
|
960
|
-
}
|
|
961
|
-
else if (node.type === 'NullLiteral') {
|
|
962
|
-
return new naslTypes.NullLiteral();
|
|
963
|
-
}
|
|
964
|
-
else if (node.type === 'TemplateLiteral') {
|
|
965
|
-
const expressions = [...node.expressions, ...node.quasis.map((element) => ({
|
|
966
|
-
type: 'StringLiteral',
|
|
967
|
-
value: element.value.raw,
|
|
968
|
-
start: element.start,
|
|
969
|
-
end: element.end,
|
|
970
|
-
}))];
|
|
971
|
-
expressions.sort((a, b) => a.start - b.start);
|
|
972
|
-
return new naslTypes.StringInterpolation({
|
|
973
|
-
expressions: expressions.map((item) => transformLogicNode(item)),
|
|
974
|
-
});
|
|
975
|
-
}
|
|
976
|
-
else if (node.type === 'BinaryExpression' || node.type === 'LogicalExpression') {
|
|
977
|
-
if (node.operator === '===')
|
|
978
|
-
node.operator = '==';
|
|
979
|
-
if (node.operator === '!==')
|
|
980
|
-
node.operator = '!=';
|
|
981
|
-
if (['+', '-', '*', '/', '%', '==', '!=', '>', '<', '>=', '<=', '&&', '||', 'startwith', 'endwith', 'like', 'in'].includes(node.operator)) {
|
|
982
|
-
return new naslTypes.BinaryExpression({
|
|
983
|
-
operator: node.operator,
|
|
984
|
-
left: transformLogicNode(node.left),
|
|
985
|
-
right: transformLogicNode(node.right),
|
|
986
|
-
});
|
|
987
|
-
}
|
|
988
|
-
throwError(`Unhandled node ${node.type}`);
|
|
989
|
-
}
|
|
990
|
-
else if (node.type === 'UnaryExpression') {
|
|
991
|
-
if (['!'].includes(node.operator)) {
|
|
992
|
-
return new naslTypes.UnaryExpression({
|
|
993
|
-
operator: node.operator,
|
|
994
|
-
argument: transformLogicNode(node.argument),
|
|
995
|
-
});
|
|
996
|
-
}
|
|
997
|
-
if (['-'].includes(node.operator) && node.argument.type === 'NumericLiteral') {
|
|
998
|
-
return transformLogicNode({
|
|
999
|
-
type: 'NumericLiteral',
|
|
1000
|
-
value: -node.argument.value,
|
|
1001
|
-
});
|
|
1002
|
-
}
|
|
1003
|
-
throwError(`Unhandled node ${node.type}`);
|
|
1004
|
-
}
|
|
1005
|
-
else if (node.type === 'UpdateExpression') {
|
|
1006
|
-
if (node.operator === '++' || node.operator === '--') {
|
|
1007
|
-
return new naslTypes.Assignment({
|
|
1008
|
-
left: transformLogicNode(node.argument),
|
|
1009
|
-
right: new naslTypes.BinaryExpression({
|
|
1010
|
-
operator: node.operator[0],
|
|
1011
|
-
left: transformLogicNode(node.argument),
|
|
1012
|
-
right: new naslTypes.NumericLiteral({
|
|
1013
|
-
value: '1',
|
|
1014
|
-
typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Integer'),
|
|
1015
|
-
}),
|
|
1016
|
-
}),
|
|
1017
|
-
});
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
else if (node.type === 'ReturnStatement') {
|
|
1021
|
-
if (node.argument) {
|
|
1022
|
-
if (type === 'expression') {
|
|
1023
|
-
return transformLogicNode(node.argument);
|
|
1024
|
-
}
|
|
1025
|
-
if (!logic.returns.length) {
|
|
1026
|
-
logic.returns.push(new naslTypes.Return({
|
|
1027
|
-
name: 'result',
|
|
1028
|
-
}));
|
|
1029
|
-
}
|
|
1030
|
-
return new naslTypes.Assignment({
|
|
1031
|
-
left: new naslTypes.Identifier({
|
|
1032
|
-
name: logic.returns[0].name,
|
|
1033
|
-
}),
|
|
1034
|
-
right: transformLogicNode(node.argument),
|
|
1035
|
-
});
|
|
1036
|
-
}
|
|
1037
|
-
if (node?.ends) {
|
|
1038
|
-
return new naslTypes.End();
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
else if (node.type === 'EmptyStatement') {
|
|
1042
|
-
return node.leadingComments && new naslTypes.Comment({
|
|
1043
|
-
value: String(node.leadingComments[0].value),
|
|
1044
|
-
});
|
|
1045
|
-
}
|
|
1046
|
-
else if (node.type === 'BlockStatement') {
|
|
1047
|
-
return transformLogicNode(node?.body?.[0]);
|
|
1048
|
-
}
|
|
1049
|
-
else if (node.type === 'ObjectExpression' && node?.properties?.length > 0) {
|
|
1050
|
-
const properties = [];
|
|
1051
|
-
const rights = [];
|
|
1052
|
-
const structureProperties = [];
|
|
1053
|
-
const assignmentLines = [];
|
|
1054
|
-
node?.properties?.forEach((arg, index) => {
|
|
1055
|
-
properties.push(transformLogicNode(arg.key));
|
|
1056
|
-
if (arg.value.type === 'MemberExpression') {
|
|
1057
|
-
const expression = flatMemberExpression(arg.value);
|
|
1058
|
-
const members = flatMembers(transformLogicNode(arg.value));
|
|
1059
|
-
rights.push(new naslTypes.SelectMembers({
|
|
1060
|
-
expression: transformLogicNode(expression[0]),
|
|
1061
|
-
members,
|
|
1062
|
-
}));
|
|
1063
|
-
if (arg?.value) {
|
|
1064
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
1065
|
-
leftIndex: [0, index],
|
|
1066
|
-
rightIndex: [index, members.length - 1],
|
|
1067
|
-
}));
|
|
1068
|
-
}
|
|
1069
|
-
}
|
|
1070
|
-
else {
|
|
1071
|
-
rights.push(new naslTypes.SelectMembers({
|
|
1072
|
-
expression: transformLogicNode(arg?.value)
|
|
1073
|
-
}));
|
|
1074
|
-
if (arg?.value) {
|
|
1075
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
1076
|
-
leftIndex: [0, index],
|
|
1077
|
-
rightIndex: [index],
|
|
1078
|
-
}));
|
|
1079
|
-
}
|
|
1080
|
-
}
|
|
1081
|
-
structureProperties.push(new naslTypes.StructureProperty({
|
|
1082
|
-
name: arg?.key?.name,
|
|
1083
|
-
typeAnnotation: null
|
|
1084
|
-
}));
|
|
1085
|
-
});
|
|
1086
|
-
return new naslTypes.NewComposite({
|
|
1087
|
-
typeAnnotation: naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
|
|
1088
|
-
properties,
|
|
1089
|
-
rights,
|
|
1090
|
-
assignmentLines
|
|
1091
|
-
});
|
|
1092
|
-
}
|
|
1093
|
-
else {
|
|
1094
|
-
throwError(`Unhandled node ${node.type}`);
|
|
43
|
+
(0, utils_1.throwError)('无法解析函数名');
|
|
1095
44
|
}
|
|
1096
45
|
}
|
|
46
|
+
const logic = new utils_1.naslTypes.Logic();
|
|
47
|
+
logic.name = contextLogicName;
|
|
48
|
+
logic.body = [
|
|
49
|
+
new utils_1.naslTypes.Start(),
|
|
50
|
+
];
|
|
1097
51
|
const root = babel.parseSync(tsCode, {
|
|
1098
52
|
filename: 'result.ts',
|
|
1099
53
|
presets: [require('@babel/preset-typescript')],
|
|
@@ -1118,26 +72,22 @@ function transformTSCode(tsCode, contextLogicName, type) {
|
|
|
1118
72
|
if (currentPositionComment) {
|
|
1119
73
|
statements = statements.filter((stat) => stat.start > currentPositionComment.start);
|
|
1120
74
|
}
|
|
1121
|
-
// traverse<babelTypes.Node>((current) => {
|
|
1122
|
-
// if (!current.node.type)
|
|
1123
|
-
// console.log(current.key, current.node);
|
|
1124
|
-
// // console.log(current.node.type);
|
|
1125
|
-
// }, { node: {
|
|
1126
|
-
// type: 'BlockStatement',
|
|
1127
|
-
// body: statements,
|
|
1128
|
-
// } as babelTypes.BlockStatement }, {
|
|
1129
|
-
// mode: 'anyObject',
|
|
1130
|
-
// depthFirst: true,
|
|
1131
|
-
// excludedKeySet: new Set(['loc']),
|
|
1132
|
-
// });
|
|
1133
75
|
parameters.forEach((node) => {
|
|
1134
|
-
const param =
|
|
76
|
+
const param = (0, transform2LogicItem_1.transform2Param)(node);
|
|
1135
77
|
param && logic.params.push(param);
|
|
1136
78
|
});
|
|
1137
79
|
statements.forEach((node) => {
|
|
1138
|
-
const item =
|
|
80
|
+
const item = (0, transform2LogicItem_1.transform2LogicItem)(node, {
|
|
81
|
+
logic,
|
|
82
|
+
isPageLogic: isPageLogic(contextLogicName),
|
|
83
|
+
});
|
|
1139
84
|
item && logic.body.push(item);
|
|
1140
85
|
});
|
|
86
|
+
if (logic.returns[0]?.name) {
|
|
87
|
+
const index = logic.variables.findIndex((variable) => variable.name === logic.returns[0].name);
|
|
88
|
+
if (index >= 0)
|
|
89
|
+
logic.variables.splice(index, 1);
|
|
90
|
+
}
|
|
1141
91
|
// console.log(JSON.stringify(logic));
|
|
1142
92
|
// try {
|
|
1143
93
|
// console.log(logic.toNaturalTS());
|
|
@@ -1147,13 +97,13 @@ function transformTSCode(tsCode, contextLogicName, type) {
|
|
|
1147
97
|
return logic;
|
|
1148
98
|
}
|
|
1149
99
|
exports.transformTSCode = transformTSCode;
|
|
1150
|
-
function tryTransformTSCode(tsCode, contextLogicName
|
|
100
|
+
function tryTransformTSCode(tsCode, contextLogicName) {
|
|
1151
101
|
if (tsCode.includes('```')) {
|
|
1152
102
|
const cap = tsCode.match(/```.*\n([\s\S]+?)```/);
|
|
1153
103
|
if (cap)
|
|
1154
104
|
tsCode = cap[1].trim();
|
|
1155
105
|
}
|
|
1156
|
-
return transformTSCode(tsCode, contextLogicName
|
|
106
|
+
return transformTSCode(tsCode, contextLogicName);
|
|
1157
107
|
}
|
|
1158
108
|
exports.tryTransformTSCode = tryTransformTSCode;
|
|
1159
109
|
function transformTSCodeEx(answer, activeLogic, context) {
|
|
@@ -1191,7 +141,7 @@ exports.transformTSCodeEx = transformTSCodeEx;
|
|
|
1191
141
|
function transformTSCodeToExpression(answer, context) {
|
|
1192
142
|
let logic;
|
|
1193
143
|
try {
|
|
1194
|
-
logic = tryTransformTSCode(answer, ''
|
|
144
|
+
logic = tryTransformTSCode(answer, '');
|
|
1195
145
|
}
|
|
1196
146
|
catch (error) {
|
|
1197
147
|
throw new Error(error);
|