@lcap/nasl 3.9.0-beta.2 → 3.9.0-beta.20
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 +145 -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 +51 -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 +42 -31
- 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 +25 -5
- package/out/generator/permission.js.map +1 -1
- package/out/generator/release-body/body.d.ts +3 -1
- package/out/generator/release-body/body.d.ts.map +1 -1
- package/out/generator/release-body/body.js +40 -28
- package/out/generator/release-body/body.js.map +1 -1
- package/out/generator/release-body/data.d.ts +1 -0
- package/out/generator/release-body/data.d.ts.map +1 -1
- package/out/generator/release-body/data.js +10 -2
- 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 +4 -3
- package/out/generator/release-body/utils.d.ts.map +1 -1
- package/out/generator/release-body/utils.js +60 -10
- package/out/generator/release-body/utils.js.map +1 -1
- package/out/generator/ui-library-declaration/basic.d.ts +7 -0
- package/out/generator/ui-library-declaration/basic.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/basic.js +114 -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 +30 -0
- package/out/generator/ui-library-declaration/format.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/format.js +382 -0
- package/out/generator/ui-library-declaration/format.js.map +1 -0
- package/out/generator/ui-library-declaration/index.d.ts +3 -0
- package/out/generator/ui-library-declaration/index.d.ts.map +1 -0
- package/out/generator/ui-library-declaration/index.js +19 -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 +45 -10
- package/out/natural/genNaturalTS.d.ts.map +1 -1
- package/out/natural/genNaturalTS.js +57 -33
- package/out/natural/genNaturalTS.js.map +1 -1
- package/out/natural/getContext/getUILib.d.ts.map +1 -1
- package/out/natural/getContext/getUILib.js +7 -3
- package/out/natural/getContext/getUILib.js.map +1 -1
- package/out/natural/getContext/index.d.ts +20 -7
- package/out/natural/getContext/index.d.ts.map +1 -1
- package/out/natural/getContext/index.js +150 -22
- 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 +21 -0
- package/out/natural/tools.d.ts.map +1 -1
- package/out/natural/tools.js +143 -2
- package/out/natural/tools.js.map +1 -1
- package/out/natural/transformTS2UI.d.ts.map +1 -1
- package/out/natural/transformTS2UI.js +378 -307
- 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 -1089
- 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 +1262 -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/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 +10 -3
- package/out/server/naslServer.d.ts.map +1 -1
- package/out/server/naslServer.js +221 -126
- 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 +89 -53
- 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 +19 -36
- 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/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 +122 -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 +185 -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/out/utils/uiPathId.d.ts +2 -0
- package/out/utils/uiPathId.d.ts.map +1 -0
- package/out/utils/uiPathId.js +34 -0
- package/out/utils/uiPathId.js.map +1 -0
- package/package.json +13 -25
- package/sandbox/stdlib/nasl.processV2.ts +19 -0
- package/sandbox/stdlib/nasl.ui.components.pc.ts +16 -0
- package/sandbox/stdlib/nasl.ui.definition.ts +41 -1
- package/sandbox/stdlib/nasl.ui.ts +24 -8
- package/sandbox/stdlib/nasl.util.ts +6 -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 +78 -0
- package/sandbox-natural/stdlib/nasl.ui.h5.d.ts +1684 -1643
- package/sandbox-natural/stdlib/nasl.ui.h5.json +15746 -15045
- package/sandbox-natural/stdlib/nasl.ui.pc.d.ts +5341 -5154
- package/sandbox-natural/stdlib/nasl.ui.pc.json +31176 -30681
- package/sandbox-natural/stdlib/{nasl.util.ts → nasl.util.d.ts} +50 -45
- package/ts-worker/bundle.js +2 -2
- package/ts-worker/lib/Messager.js +8 -1
- package/ts-worker/lib/tsserver.js +6 -6
- 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,1087 +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
|
-
if (calleeName === 'nasl.util.consoleLog' || calleeName === 'console.log') {
|
|
487
|
-
if (isPageLogic(contextLogicName)) {
|
|
488
|
-
return new naslTypes.CallLogic({
|
|
489
|
-
calleeNamespace: 'nasl.util',
|
|
490
|
-
calleeName: 'consoleLog',
|
|
491
|
-
shortcut: true,
|
|
492
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
493
|
-
expression: transformLogicNode(arg),
|
|
494
|
-
})),
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
return new naslTypes.CallLogic({
|
|
498
|
-
calleeNamespace: 'nasl.logging',
|
|
499
|
-
calleeName: 'INFO',
|
|
500
|
-
shortcut: true,
|
|
501
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
502
|
-
expression: transformLogicNode(arg),
|
|
503
|
-
})),
|
|
504
|
-
});
|
|
505
|
-
}
|
|
506
|
-
if (calleeName.startsWith('nasl.logging.')) {
|
|
507
|
-
return new naslTypes.CallLogic({
|
|
508
|
-
calleeNamespace: 'nasl.logging',
|
|
509
|
-
calleeName: callee[2].name,
|
|
510
|
-
shortcut: true,
|
|
511
|
-
arguments: node.arguments.map((arg) => new naslTypes.Argument({
|
|
512
|
-
expression: transformLogicNode(arg),
|
|
513
|
-
})),
|
|
514
|
-
});
|
|
515
|
-
}
|
|
516
|
-
if (calleeName === 'nasl.util.jsonSerialize' || calleeName === 'nasl.util.jsonDeserialize') {
|
|
517
|
-
const curCalleeName = node.callee.property.name;
|
|
518
|
-
return new naslTypes.CallLogic({
|
|
519
|
-
calleeNamespace: 'nasl.util',
|
|
520
|
-
calleeName: curCalleeName,
|
|
521
|
-
shortcut: true,
|
|
522
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
523
|
-
expression: transformLogicNode(arg),
|
|
524
|
-
})),
|
|
525
|
-
typeArguments: node?.typeParameters?.params.map((curType) => transformTypeAnnotation({ ...curType })),
|
|
526
|
-
});
|
|
527
|
-
}
|
|
528
|
-
;
|
|
529
|
-
if (calleeName.startsWith('nasl.util.')) {
|
|
530
|
-
let curCalleeName;
|
|
531
|
-
if (callee.length === 3)
|
|
532
|
-
curCalleeName = callee[callee.length - 1].name;
|
|
533
|
-
else {
|
|
534
|
-
let _callee = callee[0].callee;
|
|
535
|
-
while (_callee.type === 'CallExpression')
|
|
536
|
-
_callee = _callee.callee;
|
|
537
|
-
curCalleeName = _callee.property.name;
|
|
538
|
-
}
|
|
539
|
-
const argument = callee.length === 3 ? node.arguments : callee[0].arguments;
|
|
540
|
-
if (['plus', 'minus', 'multiply', 'divide', 'remainder'].includes(curCalleeName)) {
|
|
541
|
-
return handleBinaryExpression(curCalleeName, argument);
|
|
542
|
-
}
|
|
543
|
-
;
|
|
544
|
-
if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
|
|
545
|
-
return handleNewExpression(curCalleeName, node);
|
|
546
|
-
}
|
|
547
|
-
// let typeNamespace: string;
|
|
548
|
-
// if (argument?.[argument.length - 1]?.type === 'ObjectExpression') {
|
|
549
|
-
// typeNamespace = argument.splice(-1)[0].properties[0].value.value;
|
|
550
|
-
// }
|
|
551
|
-
const nodeElement = new naslTypes.CallFunction({
|
|
552
|
-
calleeNamespace: 'nasl.util',
|
|
553
|
-
calleeName: curCalleeName,
|
|
554
|
-
arguments: argument.map((arg, index) => new naslTypes.Argument({
|
|
555
|
-
expression: transformLogicNode(arg),
|
|
556
|
-
keyword: `str${index + 1}`,
|
|
557
|
-
})),
|
|
558
|
-
typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
|
|
559
|
-
// typeArguments: node?.typeParameters?.params.map((curType: any) => transformTypeAnnotation({ ...curType, typeNamespace })),
|
|
560
|
-
});
|
|
561
|
-
// console.log('lemon ~ callFunction ~ 3:', nodeElement);
|
|
562
|
-
return nodeElement;
|
|
563
|
-
}
|
|
564
|
-
if (callee.length === 3 && calleeName.startsWith('nasl.ui.')) {
|
|
565
|
-
if (callee[2].name === 'destination') {
|
|
566
|
-
const namespace = node.arguments[0].value;
|
|
567
|
-
const nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
|
|
568
|
-
const pageType = nsArr.shift();
|
|
569
|
-
const viewName = nsArr.pop();
|
|
570
|
-
return new naslTypes.Destination({
|
|
571
|
-
viewNamespace: `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`, // viewNamespace
|
|
572
|
-
viewName, // viewName
|
|
573
|
-
arguments: node.arguments.slice(1).map((arg) => new naslTypes.Argument({
|
|
574
|
-
expression: transformLogicNode(arg),
|
|
575
|
-
})),
|
|
576
|
-
});
|
|
577
|
-
}
|
|
578
|
-
return new naslTypes.CallLogic({
|
|
579
|
-
calleeNamespace: 'nasl.ui',
|
|
580
|
-
calleeName: callee[2].name,
|
|
581
|
-
shortcut: true,
|
|
582
|
-
/**
|
|
583
|
-
* 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
|
|
584
|
-
* @param node
|
|
585
|
-
* @returns
|
|
586
|
-
*/
|
|
587
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
588
|
-
expression: transformLogicNode(arg),
|
|
589
|
-
})),
|
|
590
|
-
});
|
|
591
|
-
}
|
|
592
|
-
if (calleeName.endsWith('.map')) {
|
|
593
|
-
return new naslTypes.CallFunction({
|
|
594
|
-
calleeNamespace: 'nasl.util',
|
|
595
|
-
calleeName: 'ListTransform',
|
|
596
|
-
arguments: [new naslTypes.Argument({
|
|
597
|
-
expression: transformLogicNode(node.callee.object),
|
|
598
|
-
}), ...node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
599
|
-
expression: transformLogicNode(arg),
|
|
600
|
-
}))],
|
|
601
|
-
});
|
|
602
|
-
}
|
|
603
|
-
if (calleeName === 'PAGINATE') {
|
|
604
|
-
const newCallee = node?.arguments || [];
|
|
605
|
-
return new naslTypes.Paginate({
|
|
606
|
-
list: newCallee?.[0] && transformLogicNode(newCallee?.[0]),
|
|
607
|
-
page: newCallee?.[1] && transformLogicNode(newCallee?.[1]),
|
|
608
|
-
size: newCallee?.[2] && transformLogicNode(newCallee?.[2]),
|
|
609
|
-
});
|
|
610
|
-
}
|
|
611
|
-
if (calleeName === 'ForEach') {
|
|
612
|
-
const newCallee = node.arguments;
|
|
613
|
-
const arrowFunction = node.arguments[3];
|
|
614
|
-
const nodeElement = new naslTypes.ForEachStatement({
|
|
615
|
-
each: transformLogicNode(newCallee[0]),
|
|
616
|
-
start: transformLogicNode(newCallee[1]),
|
|
617
|
-
end: transformLogicNode(newCallee[2]),
|
|
618
|
-
item: transformParam(arrowFunction.params[0]),
|
|
619
|
-
index: arrowFunction.params[1] ? transformParam(arrowFunction.params[1]) : new naslTypes.Param({
|
|
620
|
-
name: 'index', typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Long'),
|
|
621
|
-
}),
|
|
622
|
-
body: arrowFunction.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
623
|
-
});
|
|
624
|
-
return nodeElement;
|
|
625
|
-
}
|
|
626
|
-
if (callee.length === 2) {
|
|
627
|
-
const curCalleeName = node.callee.property.name;
|
|
628
|
-
if (curCalleeName === 'forEach') {
|
|
629
|
-
const newCallee = node.callee.object;
|
|
630
|
-
const arrowFunction = node.arguments[0];
|
|
631
|
-
const nodeElement = new naslTypes.ForEachStatement({
|
|
632
|
-
each: transformLogicNode(newCallee.callee.object),
|
|
633
|
-
start: transformLogicNode(newCallee?.arguments?.[0]),
|
|
634
|
-
end: transformLogicNode(newCallee?.arguments?.[1]),
|
|
635
|
-
item: transformParam(arrowFunction.params[0]),
|
|
636
|
-
index: arrowFunction.params[1] ? transformParam(arrowFunction.params[1]) : new naslTypes.Param({
|
|
637
|
-
name: 'index', typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Long'),
|
|
638
|
-
}),
|
|
639
|
-
body: arrowFunction.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
640
|
-
});
|
|
641
|
-
return nodeElement;
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
else if (['plus', 'minus', 'multiply', 'divide', 'remainder'].includes(calleeName)) {
|
|
645
|
-
return handleBinaryExpression(calleeName, node?.arguments);
|
|
646
|
-
}
|
|
647
|
-
else if (calleeName === 'alert') {
|
|
648
|
-
return new naslTypes.CallLogic({
|
|
649
|
-
calleeNamespace: 'nasl.ui',
|
|
650
|
-
calleeName: 'showMessage',
|
|
651
|
-
shortcut: true,
|
|
652
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
653
|
-
expression: transformLogicNode(arg),
|
|
654
|
-
})),
|
|
655
|
-
});
|
|
656
|
-
}
|
|
657
|
-
else if (/^app.dataSources|app.logics/.test(calleeName)) {
|
|
658
|
-
if (calleeName?.includes('.entities.')) {
|
|
659
|
-
const calleeNamespace = (0, generator_1.default)(node?.callee?.object?.object)?.code;
|
|
660
|
-
const entityName = node?.callee?.object?.property?.name?.replace(/Entity$/, '');
|
|
661
|
-
return new naslTypes.CallLogic({
|
|
662
|
-
calleeNamespace: `${calleeNamespace}.${entityName}.logics`,
|
|
663
|
-
calleeName: node?.callee?.property?.name,
|
|
664
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
665
|
-
expression: transformLogicNode(arg),
|
|
666
|
-
})),
|
|
667
|
-
});
|
|
668
|
-
}
|
|
669
|
-
return new naslTypes.CallLogic({
|
|
670
|
-
calleeNamespace: (0, generator_1.default)(node.callee.object).code,
|
|
671
|
-
calleeName: callee[callee.length - 1].name,
|
|
672
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
673
|
-
expression: transformLogicNode(arg),
|
|
674
|
-
})),
|
|
675
|
-
});
|
|
676
|
-
}
|
|
677
|
-
else if (callee.length === 1) {
|
|
678
|
-
if (calleeName.startsWith('viewLogic_')) {
|
|
679
|
-
return new naslTypes.CallLogic({
|
|
680
|
-
calleeNamespace: '',
|
|
681
|
-
calleeName: calleeName.slice('viewLogic_'.length),
|
|
682
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
683
|
-
expression: transformLogicNode(arg),
|
|
684
|
-
})),
|
|
685
|
-
});
|
|
686
|
-
}
|
|
687
|
-
if (calleeName === 'FROM') {
|
|
688
|
-
// TODO
|
|
689
|
-
return new naslTypes.CallLogic({
|
|
690
|
-
calleeNamespace: `app.logics`,
|
|
691
|
-
calleeName,
|
|
692
|
-
arguments: [],
|
|
693
|
-
});
|
|
694
|
-
}
|
|
695
|
-
return new naslTypes.CallLogic({
|
|
696
|
-
calleeNamespace: `app.logics`,
|
|
697
|
-
calleeName,
|
|
698
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
699
|
-
expression: transformLogicNode(arg),
|
|
700
|
-
})),
|
|
701
|
-
});
|
|
702
|
-
}
|
|
703
|
-
else if (/interfaces/.test(calleeName)) {
|
|
704
|
-
return new naslTypes.CallInterface({
|
|
705
|
-
calleeNamespace: (0, generator_1.default)(node.callee.object).code,
|
|
706
|
-
calleeName: callee[callee.length - 1].name,
|
|
707
|
-
arguments: node?.arguments?.map((arg) => arg?.properties?.map((item) => new naslTypes.Argument({
|
|
708
|
-
keyword: item?.key?.name,
|
|
709
|
-
expression: transformLogicNode(item?.value),
|
|
710
|
-
}))).flat(),
|
|
711
|
-
});
|
|
712
|
-
}
|
|
713
|
-
else if (/connector./.test(calleeName)) {
|
|
714
|
-
let flatCalleeKey = (0, generator_1.default)(node?.callee)?.code;
|
|
715
|
-
if (flatCalleeKey?.startsWith('connector.')) {
|
|
716
|
-
flatCalleeKey = flatCalleeKey?.replace('connector.', '');
|
|
717
|
-
}
|
|
718
|
-
const [, calleeConnectionName, calleeNamespace, calleeFunName] = flatCalleeKey?.match(/^(\w+)\.([\w.]+)\.(\w+)$/);
|
|
719
|
-
return new naslTypes.CallConnector({
|
|
720
|
-
calleeConnectionName,
|
|
721
|
-
calleeNamespace,
|
|
722
|
-
calleeName: calleeFunName,
|
|
723
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
724
|
-
expression: transformLogicNode(arg),
|
|
725
|
-
})),
|
|
726
|
-
});
|
|
727
|
-
}
|
|
728
|
-
else if (/extensions./.test(calleeName)) {
|
|
729
|
-
return new naslTypes.CallLogic({
|
|
730
|
-
calleeNamespace: (0, generator_1.default)(node?.callee?.object)?.code,
|
|
731
|
-
calleeName: callee?.[callee?.length - 1]?.name,
|
|
732
|
-
handleError: true,
|
|
733
|
-
arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
|
|
734
|
-
expression: transformLogicNode(arg),
|
|
735
|
-
})),
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
// else if (/destination/.test(calleeName)) {
|
|
739
|
-
// const newCallee = flatMemberExpression((node.callee as any).object);
|
|
740
|
-
// return new naslTypes.Destination({
|
|
741
|
-
// viewNamespace: generate((node.callee as any).object.object).code,
|
|
742
|
-
// viewName: (newCallee[newCallee.length - 1] as babelTypes.Identifier).name,
|
|
743
|
-
// target: (node.arguments[0] as any).properties[1].value.value,
|
|
744
|
-
// anchor: new naslTypes.Anchor({
|
|
745
|
-
// expression: transformLogicNode((node.arguments[0] as any).properties[0].value),
|
|
746
|
-
// }),
|
|
747
|
-
// });
|
|
748
|
-
// }
|
|
749
|
-
else if (node.callee.type === 'ArrowFunctionExpression') {
|
|
750
|
-
// NOTE: 适用于 if else
|
|
751
|
-
const newCallee = node.callee.body.body;
|
|
752
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFuntion') {
|
|
753
|
-
const match = new naslTypes.Match({
|
|
754
|
-
expression: transformLogicNode(newCallee[0]),
|
|
755
|
-
isExpression: type === 'expression',
|
|
756
|
-
cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new naslTypes.MatchCase({
|
|
757
|
-
patterns: !_case.test ? [] : flatMatchPatternsExpression(transformLogicNode(_case.test)),
|
|
758
|
-
body: _case.consequent.body.filter((item) => item.type !== 'BreakStatement').map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
759
|
-
})),
|
|
760
|
-
});
|
|
761
|
-
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
762
|
-
match.cases.push(new naslTypes.MatchCase({
|
|
763
|
-
patterns: [],
|
|
764
|
-
body: [],
|
|
765
|
-
}));
|
|
766
|
-
}
|
|
767
|
-
match.cases.forEach((case_) => {
|
|
768
|
-
if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
|
|
769
|
-
case_.isMatchedTypeEnumable = true;
|
|
770
|
-
}
|
|
771
|
-
if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
|
|
772
|
-
case_.isMatchedTypeEnumable = true;
|
|
773
|
-
case_.patterns[0] = new naslTypes.MemberExpression({
|
|
774
|
-
object: {
|
|
775
|
-
concept: 'Identifier',
|
|
776
|
-
name: case_.patterns[0].object.property.name,
|
|
777
|
-
folded: false,
|
|
778
|
-
namespace: 'app.enums'
|
|
779
|
-
},
|
|
780
|
-
property: {
|
|
781
|
-
concept: 'Identifier',
|
|
782
|
-
name: case_.patterns[0].property.value,
|
|
783
|
-
folded: false,
|
|
784
|
-
},
|
|
785
|
-
});
|
|
786
|
-
}
|
|
787
|
-
});
|
|
788
|
-
return match;
|
|
789
|
-
}
|
|
790
|
-
if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
|
|
791
|
-
const switchStatement = transformLogicNode(newCallee[0].body.body[0]);
|
|
792
|
-
return switchStatement;
|
|
793
|
-
}
|
|
794
|
-
throwError(`Unhandled ArrowFunctionExpression node ${node.type}`);
|
|
795
|
-
}
|
|
796
|
-
else {
|
|
797
|
-
throwError(`Unhandled node ${callee.map((item) => item.name).join('.')} ${node.type}`);
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
else if (node.type === 'IfStatement') {
|
|
801
|
-
if (node.alternate && node.alternate.type === 'IfStatement') {
|
|
802
|
-
const switchStatement = new naslTypes.SwitchStatement({
|
|
803
|
-
cases: [],
|
|
804
|
-
});
|
|
805
|
-
pushElseIf(node, switchStatement);
|
|
806
|
-
return switchStatement;
|
|
807
|
-
}
|
|
808
|
-
let consequentIndex;
|
|
809
|
-
let alternateIndex;
|
|
810
|
-
const naslNode = new naslTypes.IfStatement({
|
|
811
|
-
test: transformLogicNode(node.test),
|
|
812
|
-
consequent: !node.consequent ? [] : node.consequent.body.map((item, index) => {
|
|
813
|
-
if (item?.type === 'ReturnStatement') {
|
|
814
|
-
item.ends = true;
|
|
815
|
-
if (item?.argument) {
|
|
816
|
-
consequentIndex = index;
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
return transformLogicNode(item);
|
|
820
|
-
}).filter((item) => !!item),
|
|
821
|
-
alternate: !node.alternate ? [] : node.alternate.body.map((item, index) => {
|
|
822
|
-
if (item?.type === 'ReturnStatement') {
|
|
823
|
-
item.ends = true;
|
|
824
|
-
if (item?.argument) {
|
|
825
|
-
alternateIndex = index;
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
return transformLogicNode(item);
|
|
829
|
-
}).filter((item) => !!item),
|
|
830
|
-
});
|
|
831
|
-
if (consequentIndex !== undefined) {
|
|
832
|
-
naslNode?.consequent?.splice(consequentIndex + 1, 0, new naslTypes.End());
|
|
833
|
-
}
|
|
834
|
-
if (alternateIndex !== undefined) {
|
|
835
|
-
naslNode?.alternate?.splice(alternateIndex + 1, 0, new naslTypes.End());
|
|
836
|
-
}
|
|
837
|
-
return naslNode;
|
|
838
|
-
}
|
|
839
|
-
else if (node.type === 'WhileStatement') {
|
|
840
|
-
return new naslTypes.WhileStatement({
|
|
841
|
-
test: transformLogicNode(node.test),
|
|
842
|
-
body: node.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
843
|
-
});
|
|
844
|
-
}
|
|
845
|
-
else if (node.type === 'SwitchStatement') {
|
|
846
|
-
const match = new naslTypes.Match({
|
|
847
|
-
expression: transformLogicNode(node.discriminant),
|
|
848
|
-
isExpression: type === 'expression',
|
|
849
|
-
cases: node.cases.map((_case) => new naslTypes.MatchCase({
|
|
850
|
-
patterns: !_case.test ? [] : [transformLogicNode(_case.test)],
|
|
851
|
-
body: _case.consequent.filter((item) => item.type !== 'BreakStatement').map((item) => transformLogicNode(item)).filter((item) => !!item),
|
|
852
|
-
})),
|
|
853
|
-
});
|
|
854
|
-
if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
|
|
855
|
-
match.cases.push(new naslTypes.MatchCase({
|
|
856
|
-
patterns: [],
|
|
857
|
-
body: [],
|
|
858
|
-
}));
|
|
859
|
-
}
|
|
860
|
-
match.cases.forEach((case_) => {
|
|
861
|
-
if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
|
|
862
|
-
case_.isMatchedTypeEnumable = true;
|
|
863
|
-
}
|
|
864
|
-
if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
|
|
865
|
-
case_.isMatchedTypeEnumable = true;
|
|
866
|
-
case_.patterns[0].object.namespace = 'app.enums';
|
|
867
|
-
}
|
|
868
|
-
});
|
|
869
|
-
return match;
|
|
870
|
-
}
|
|
871
|
-
else if (node.type === 'MemberExpression') {
|
|
872
|
-
const callee = flatMemberExpression(node);
|
|
873
|
-
const calleeName = (0, generator_1.default)(node)?.code;
|
|
874
|
-
if (calleeName?.includes('app.enums')) {
|
|
875
|
-
const name = callee?.[3]?.value || callee?.[3]?.name || callee?.[3]?.value;
|
|
876
|
-
return new naslTypes.MemberExpression({
|
|
877
|
-
object: new naslTypes.Identifier({
|
|
878
|
-
namespace: 'app.enums',
|
|
879
|
-
name: callee?.[2]?.name,
|
|
880
|
-
}),
|
|
881
|
-
property: new naslTypes.Identifier({
|
|
882
|
-
name: String(name),
|
|
883
|
-
}),
|
|
884
|
-
});
|
|
885
|
-
}
|
|
886
|
-
if (node.property.type === 'NumericLiteral') {
|
|
887
|
-
return new naslTypes.CallFunction({
|
|
888
|
-
calleeNamespace: 'nasl.util',
|
|
889
|
-
calleeName: 'Get',
|
|
890
|
-
arguments: [
|
|
891
|
-
new naslTypes.Argument({
|
|
892
|
-
expression: transformLogicNode(node.object),
|
|
893
|
-
}),
|
|
894
|
-
new naslTypes.Argument({
|
|
895
|
-
expression: transformLogicNode(node.property),
|
|
896
|
-
}),
|
|
897
|
-
],
|
|
898
|
-
});
|
|
899
|
-
}
|
|
900
|
-
return new naslTypes.MemberExpression({
|
|
901
|
-
object: transformLogicNode(node.object),
|
|
902
|
-
property: transformLogicNode(node.property),
|
|
903
|
-
});
|
|
904
|
-
}
|
|
905
|
-
else if (node.type === 'Identifier') {
|
|
906
|
-
return new naslTypes.Identifier({
|
|
907
|
-
name: node.name,
|
|
908
|
-
});
|
|
909
|
-
}
|
|
910
|
-
else if (node.type === 'ExpressionStatement') {
|
|
911
|
-
return transformLogicNode(node.expression);
|
|
912
|
-
}
|
|
913
|
-
else if (node.type === 'AssignmentExpression') {
|
|
914
|
-
if (node.operator === '+=' || node.operator === '-=') {
|
|
915
|
-
if (type === 'expression') {
|
|
916
|
-
return new naslTypes.BinaryExpression({
|
|
917
|
-
operator: node.operator[0],
|
|
918
|
-
left: transformLogicNode(node.left),
|
|
919
|
-
right: transformLogicNode(node.right),
|
|
920
|
-
});
|
|
921
|
-
}
|
|
922
|
-
return new naslTypes.Assignment({
|
|
923
|
-
left: transformLogicNode(node.left),
|
|
924
|
-
right: new naslTypes.BinaryExpression({
|
|
925
|
-
operator: node.operator[0],
|
|
926
|
-
left: transformLogicNode(node.left),
|
|
927
|
-
right: transformLogicNode(node.right),
|
|
928
|
-
}),
|
|
929
|
-
});
|
|
930
|
-
}
|
|
931
|
-
if (type === 'expression') {
|
|
932
|
-
return transformLogicNode(node.right);
|
|
933
|
-
}
|
|
934
|
-
return new naslTypes.Assignment({
|
|
935
|
-
left: transformLogicNode(node.left),
|
|
936
|
-
right: transformLogicNode(node.right),
|
|
937
|
-
});
|
|
938
|
-
}
|
|
939
|
-
else if (node.type === 'NewExpression') {
|
|
940
|
-
const calleeName = (0, generator_1.default)(node.callee).code;
|
|
941
|
-
if (['Boolean', 'Integer', 'Double', 'Decimal', 'Long'].includes(calleeName)) {
|
|
942
|
-
return transformLogicNode(node.arguments[0], naslTypes.TypeAnnotation.createPrimitive(calleeName));
|
|
943
|
-
}
|
|
944
|
-
throwError(`Unhandled node ${node.type}`);
|
|
945
|
-
}
|
|
946
|
-
else if (node.type === 'ArrowFunctionExpression') {
|
|
947
|
-
return new naslTypes.AnonymousFunction({
|
|
948
|
-
params: node.params.map((param) => transformParam(param)),
|
|
949
|
-
body: transformLogicNode(node.body),
|
|
950
|
-
});
|
|
951
|
-
}
|
|
952
|
-
else if (node.type === 'BooleanLiteral') {
|
|
953
|
-
return new naslTypes.BooleanLiteral({
|
|
954
|
-
value: String(node.value),
|
|
955
|
-
});
|
|
956
|
-
}
|
|
957
|
-
else if (node.type === 'StringLiteral') {
|
|
958
|
-
return new naslTypes.StringLiteral({
|
|
959
|
-
value: node.value,
|
|
960
|
-
});
|
|
961
|
-
}
|
|
962
|
-
else if (node.type === 'NumericLiteral') {
|
|
963
|
-
const literal = new naslTypes.NumericLiteral({
|
|
964
|
-
value: String(node.value),
|
|
965
|
-
typeAnnotation: typeAnnotation || naslTypes.TypeAnnotation.createPrimitive('Integer'),
|
|
966
|
-
});
|
|
967
|
-
literal.typeAnnotation.typeName = literal.changeType(String(node.value));
|
|
968
|
-
return literal;
|
|
969
|
-
}
|
|
970
|
-
else if (node.type === 'NullLiteral') {
|
|
971
|
-
return new naslTypes.NullLiteral();
|
|
972
|
-
}
|
|
973
|
-
else if (node.type === 'TemplateLiteral') {
|
|
974
|
-
const expressions = [...node.expressions, ...node.quasis.map((element) => ({
|
|
975
|
-
type: 'StringLiteral',
|
|
976
|
-
value: element.value.raw,
|
|
977
|
-
start: element.start,
|
|
978
|
-
end: element.end,
|
|
979
|
-
}))];
|
|
980
|
-
expressions.sort((a, b) => a.start - b.start);
|
|
981
|
-
return new naslTypes.StringInterpolation({
|
|
982
|
-
expressions: expressions.map((item) => transformLogicNode(item)),
|
|
983
|
-
});
|
|
984
|
-
}
|
|
985
|
-
else if (node.type === 'BinaryExpression' || node.type === 'LogicalExpression') {
|
|
986
|
-
if (node.operator === '===')
|
|
987
|
-
node.operator = '==';
|
|
988
|
-
if (node.operator === '!==')
|
|
989
|
-
node.operator = '!=';
|
|
990
|
-
if (['+', '-', '*', '/', '%', '==', '!=', '>', '<', '>=', '<=', '&&', '||', 'startwith', 'endwith', 'like', 'in'].includes(node.operator)) {
|
|
991
|
-
return new naslTypes.BinaryExpression({
|
|
992
|
-
operator: node.operator,
|
|
993
|
-
left: transformLogicNode(node.left),
|
|
994
|
-
right: transformLogicNode(node.right),
|
|
995
|
-
});
|
|
996
|
-
}
|
|
997
|
-
throwError(`Unhandled node ${node.type}`);
|
|
998
|
-
}
|
|
999
|
-
else if (node.type === 'UnaryExpression') {
|
|
1000
|
-
if (['!'].includes(node.operator)) {
|
|
1001
|
-
return new naslTypes.UnaryExpression({
|
|
1002
|
-
operator: node.operator,
|
|
1003
|
-
argument: transformLogicNode(node.argument),
|
|
1004
|
-
});
|
|
1005
|
-
}
|
|
1006
|
-
if (['-'].includes(node.operator) && node.argument.type === 'NumericLiteral') {
|
|
1007
|
-
return transformLogicNode({
|
|
1008
|
-
type: 'NumericLiteral',
|
|
1009
|
-
value: -node.argument.value,
|
|
1010
|
-
});
|
|
1011
|
-
}
|
|
1012
|
-
throwError(`Unhandled node ${node.type}`);
|
|
1013
|
-
}
|
|
1014
|
-
else if (node.type === 'UpdateExpression') {
|
|
1015
|
-
if (node.operator === '++' || node.operator === '--') {
|
|
1016
|
-
return new naslTypes.Assignment({
|
|
1017
|
-
left: transformLogicNode(node.argument),
|
|
1018
|
-
right: new naslTypes.BinaryExpression({
|
|
1019
|
-
operator: node.operator[0],
|
|
1020
|
-
left: transformLogicNode(node.argument),
|
|
1021
|
-
right: new naslTypes.NumericLiteral({
|
|
1022
|
-
value: '1',
|
|
1023
|
-
typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Integer'),
|
|
1024
|
-
}),
|
|
1025
|
-
}),
|
|
1026
|
-
});
|
|
1027
|
-
}
|
|
1028
|
-
}
|
|
1029
|
-
else if (node.type === 'ReturnStatement') {
|
|
1030
|
-
if (node.argument) {
|
|
1031
|
-
if (type === 'expression') {
|
|
1032
|
-
return transformLogicNode(node.argument);
|
|
1033
|
-
}
|
|
1034
|
-
if (!logic.returns.length) {
|
|
1035
|
-
logic.returns.push(new naslTypes.Return({
|
|
1036
|
-
name: 'result',
|
|
1037
|
-
}));
|
|
1038
|
-
}
|
|
1039
|
-
return new naslTypes.Assignment({
|
|
1040
|
-
left: new naslTypes.Identifier({
|
|
1041
|
-
name: logic.returns[0].name,
|
|
1042
|
-
}),
|
|
1043
|
-
right: transformLogicNode(node.argument),
|
|
1044
|
-
});
|
|
1045
|
-
}
|
|
1046
|
-
if (node?.ends) {
|
|
1047
|
-
return new naslTypes.End();
|
|
1048
|
-
}
|
|
1049
|
-
}
|
|
1050
|
-
else if (node.type === 'EmptyStatement') {
|
|
1051
|
-
return node.leadingComments && new naslTypes.Comment({
|
|
1052
|
-
value: String(node.leadingComments[0].value),
|
|
1053
|
-
});
|
|
1054
|
-
}
|
|
1055
|
-
else if (node.type === 'BlockStatement') {
|
|
1056
|
-
return transformLogicNode(node?.body?.[0]);
|
|
1057
|
-
}
|
|
1058
|
-
else if (node.type === 'ObjectExpression' && node?.properties?.length > 0) {
|
|
1059
|
-
const properties = [];
|
|
1060
|
-
const rights = [];
|
|
1061
|
-
const structureProperties = [];
|
|
1062
|
-
const assignmentLines = [];
|
|
1063
|
-
node?.properties?.forEach((arg, index) => {
|
|
1064
|
-
properties.push(transformLogicNode(arg.key));
|
|
1065
|
-
if (arg.value.type === 'MemberExpression') {
|
|
1066
|
-
const expression = flatMemberExpression(arg.value);
|
|
1067
|
-
const members = flatMembers(transformLogicNode(arg.value));
|
|
1068
|
-
rights.push(new naslTypes.SelectMembers({
|
|
1069
|
-
expression: transformLogicNode(expression[0]),
|
|
1070
|
-
members,
|
|
1071
|
-
}));
|
|
1072
|
-
if (arg?.value) {
|
|
1073
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
1074
|
-
leftIndex: [0, index],
|
|
1075
|
-
rightIndex: [index, members.length - 1],
|
|
1076
|
-
}));
|
|
1077
|
-
}
|
|
1078
|
-
}
|
|
1079
|
-
else {
|
|
1080
|
-
rights.push(new naslTypes.SelectMembers({
|
|
1081
|
-
expression: transformLogicNode(arg?.value)
|
|
1082
|
-
}));
|
|
1083
|
-
if (arg?.value) {
|
|
1084
|
-
assignmentLines.push(new naslTypes.AssignmentLine({
|
|
1085
|
-
leftIndex: [0, index],
|
|
1086
|
-
rightIndex: [index],
|
|
1087
|
-
}));
|
|
1088
|
-
}
|
|
1089
|
-
}
|
|
1090
|
-
structureProperties.push(new naslTypes.StructureProperty({
|
|
1091
|
-
name: arg?.key?.name,
|
|
1092
|
-
typeAnnotation: null
|
|
1093
|
-
}));
|
|
1094
|
-
});
|
|
1095
|
-
return new naslTypes.NewComposite({
|
|
1096
|
-
typeAnnotation: naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
|
|
1097
|
-
properties,
|
|
1098
|
-
rights,
|
|
1099
|
-
assignmentLines
|
|
1100
|
-
});
|
|
1101
|
-
}
|
|
1102
|
-
else {
|
|
1103
|
-
throwError(`Unhandled node ${node.type}`);
|
|
43
|
+
(0, utils_1.throwError)('无法解析函数名');
|
|
1104
44
|
}
|
|
1105
45
|
}
|
|
46
|
+
const logic = new utils_1.naslTypes.Logic();
|
|
47
|
+
logic.name = contextLogicName;
|
|
48
|
+
logic.body = [
|
|
49
|
+
new utils_1.naslTypes.Start(),
|
|
50
|
+
];
|
|
1106
51
|
const root = babel.parseSync(tsCode, {
|
|
1107
52
|
filename: 'result.ts',
|
|
1108
53
|
presets: [require('@babel/preset-typescript')],
|
|
@@ -1127,26 +72,22 @@ function transformTSCode(tsCode, contextLogicName, type) {
|
|
|
1127
72
|
if (currentPositionComment) {
|
|
1128
73
|
statements = statements.filter((stat) => stat.start > currentPositionComment.start);
|
|
1129
74
|
}
|
|
1130
|
-
// traverse<babelTypes.Node>((current) => {
|
|
1131
|
-
// if (!current.node.type)
|
|
1132
|
-
// console.log(current.key, current.node);
|
|
1133
|
-
// // console.log(current.node.type);
|
|
1134
|
-
// }, { node: {
|
|
1135
|
-
// type: 'BlockStatement',
|
|
1136
|
-
// body: statements,
|
|
1137
|
-
// } as babelTypes.BlockStatement }, {
|
|
1138
|
-
// mode: 'anyObject',
|
|
1139
|
-
// depthFirst: true,
|
|
1140
|
-
// excludedKeySet: new Set(['loc']),
|
|
1141
|
-
// });
|
|
1142
75
|
parameters.forEach((node) => {
|
|
1143
|
-
const param =
|
|
76
|
+
const param = (0, transform2LogicItem_1.transform2Param)(node);
|
|
1144
77
|
param && logic.params.push(param);
|
|
1145
78
|
});
|
|
1146
79
|
statements.forEach((node) => {
|
|
1147
|
-
const item =
|
|
80
|
+
const item = (0, transform2LogicItem_1.transform2LogicItem)(node, {
|
|
81
|
+
logic,
|
|
82
|
+
isPageLogic: isPageLogic(contextLogicName),
|
|
83
|
+
});
|
|
1148
84
|
item && logic.body.push(item);
|
|
1149
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
|
+
}
|
|
1150
91
|
// console.log(JSON.stringify(logic));
|
|
1151
92
|
// try {
|
|
1152
93
|
// console.log(logic.toNaturalTS());
|
|
@@ -1156,13 +97,13 @@ function transformTSCode(tsCode, contextLogicName, type) {
|
|
|
1156
97
|
return logic;
|
|
1157
98
|
}
|
|
1158
99
|
exports.transformTSCode = transformTSCode;
|
|
1159
|
-
function tryTransformTSCode(tsCode, contextLogicName
|
|
100
|
+
function tryTransformTSCode(tsCode, contextLogicName) {
|
|
1160
101
|
if (tsCode.includes('```')) {
|
|
1161
102
|
const cap = tsCode.match(/```.*\n([\s\S]+?)```/);
|
|
1162
103
|
if (cap)
|
|
1163
104
|
tsCode = cap[1].trim();
|
|
1164
105
|
}
|
|
1165
|
-
return transformTSCode(tsCode, contextLogicName
|
|
106
|
+
return transformTSCode(tsCode, contextLogicName);
|
|
1166
107
|
}
|
|
1167
108
|
exports.tryTransformTSCode = tryTransformTSCode;
|
|
1168
109
|
function transformTSCodeEx(answer, activeLogic, context) {
|
|
@@ -1200,7 +141,7 @@ exports.transformTSCodeEx = transformTSCodeEx;
|
|
|
1200
141
|
function transformTSCodeToExpression(answer, context) {
|
|
1201
142
|
let logic;
|
|
1202
143
|
try {
|
|
1203
|
-
logic = tryTransformTSCode(answer, ''
|
|
144
|
+
logic = tryTransformTSCode(answer, '');
|
|
1204
145
|
}
|
|
1205
146
|
catch (error) {
|
|
1206
147
|
throw new Error(error);
|