@lcap/nasl 3.8.3-beta.4 → 3.8.3-beta.5
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/common/BaseNode.d.ts +9 -4
- package/out/common/BaseNode.js +73 -18
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/App__.js +17 -13
- package/out/concepts/App__.js.map +1 -1
- package/out/concepts/AuthLogicForCallInterface__.js +2 -50
- package/out/concepts/AuthLogicForCallInterface__.js.map +1 -1
- package/out/concepts/BusinessComponent__.js +2 -42
- package/out/concepts/BusinessComponent__.js.map +1 -1
- package/out/concepts/BusinessLogic__.js +2 -50
- package/out/concepts/BusinessLogic__.js.map +1 -1
- package/out/concepts/CallFunction__.d.ts +1 -1
- package/out/concepts/CallFunction__.js +1 -1
- package/out/concepts/CallLogic__.js +2 -2
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/Identifier__.d.ts +2 -0
- package/out/concepts/Identifier__.js +51 -5
- package/out/concepts/Identifier__.js.map +1 -1
- package/out/concepts/Logic__.js +6 -101
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/MemberExpression__.d.ts +1 -1
- package/out/concepts/MemberExpression__.js +15 -3
- package/out/concepts/MemberExpression__.js.map +1 -1
- package/out/concepts/OverriddenLogic__.js +2 -50
- package/out/concepts/OverriddenLogic__.js.map +1 -1
- package/out/concepts/ProcessElementV2__.js +4 -0
- package/out/concepts/ProcessElementV2__.js.map +1 -1
- package/out/concepts/ProcessElement__.js +4 -0
- package/out/concepts/ProcessElement__.js.map +1 -1
- package/out/concepts/ProcessV2__.js +4 -0
- package/out/concepts/ProcessV2__.js.map +1 -1
- package/out/concepts/Process__.js +4 -0
- package/out/concepts/Process__.js.map +1 -1
- package/out/concepts/SubLogic__.js +5 -50
- package/out/concepts/SubLogic__.js.map +1 -1
- package/out/concepts/TypeAnnotation__.js +1 -1
- package/out/concepts/TypeAnnotation__.js.map +1 -1
- package/out/concepts/View__.js +10 -49
- package/out/concepts/View__.js.map +1 -1
- package/out/generator/genBundleFiles.js +5 -5
- package/out/generator/permission.js +21 -5
- package/out/generator/permission.js.map +1 -1
- package/out/generator/release-body/body.js.map +1 -1
- package/out/natural/transformTS2UI.js +5 -5
- package/out/natural/transformTS2UI.js.map +1 -1
- package/out/natural/transforms/transform2LogicItem.js +4 -4
- package/out/natural/transforms/transform2LogicItem.js.map +1 -1
- package/out/server/naslServer.js +17 -2
- package/out/server/naslServer.js.map +1 -1
- package/out/server/semanticData.d.ts +32 -0
- package/out/server/semanticData.js +371 -0
- package/out/server/semanticData.js.map +1 -0
- package/out/templator/block2nasl/viewMergeBlock.js +2 -1
- package/out/templator/block2nasl/viewMergeBlock.js.map +1 -1
- package/package.json +1 -1
- package/src/common/BaseNode.ts +106 -36
- package/src/concepts/App__.ts +17 -13
- package/src/concepts/AuthLogicForCallInterface__.ts +3 -56
- package/src/concepts/BusinessComponent__.ts +6 -51
- package/src/concepts/BusinessLogic__.ts +4 -56
- package/src/concepts/CallFunction__.ts +1 -1
- package/src/concepts/CallLogic__.ts +8 -4
- package/src/concepts/Identifier__.ts +57 -6
- package/src/concepts/Logic__.ts +9 -111
- package/src/concepts/MemberExpression__.ts +21 -7
- package/src/concepts/OverriddenLogic__.ts +4 -56
- package/src/concepts/ProcessElementV2__.ts +4 -0
- package/src/concepts/ProcessElement__.ts +4 -0
- package/src/concepts/ProcessV2__.ts +5 -0
- package/src/concepts/Process__.ts +4 -0
- package/src/concepts/SubLogic__.ts +6 -56
- package/src/concepts/TypeAnnotation__.ts +1 -1
- package/src/concepts/View__.ts +14 -54
- package/src/generator/genBundleFiles.ts +5 -5
- package/src/generator/permission.ts +23 -5
- package/src/generator/release-body/body.ts +0 -1
- package/src/natural/transformTS2UI.ts +5 -5
- package/src/natural/transforms/transform2LogicItem.ts +4 -4
- package/src/server/naslServer.ts +22 -2
- package/src/server/semanticData.ts +447 -0
- package/src/templator/block2nasl/viewMergeBlock.ts +2 -1
- package/src/translator/utils.ts +1 -1
- package/test/concepts/logic/__snapshots__/toEmbeddedTS.spec.ts.snap +182 -0
- package/test/concepts/logic/constant.ts +5 -0
- package/test/concepts/logic/fixtures/variable-host-call-logic-member-expression.json +267 -0
- package/test/concepts/logic/fixtures/variable-host-call-logic-nested-member-expression copy.json +457 -0
- package/test/concepts/logic/fixtures/variable-host-call-logic-with-handle-error-member-expression.json +267 -0
- package/test/concepts/logic/toEmbeddedTS.spec.ts +15 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { App, Identifier, MemberExpression, View, ViewElement, Return, Variable, Assignment, BatchAssignment, CallFunction, AuthLogicForCallInterface, BusinessComponent, BusinessLogic, Logic, OverriddenLogic, SubLogic, Process, ProcessV2, ProcessElement, ProcessElementV2 } from '..';
|
|
2
|
+
declare type VarScopeCtx = {
|
|
3
|
+
app: App;
|
|
4
|
+
isFirstScreen: boolean;
|
|
5
|
+
frontendGlobalVars: Set<string>;
|
|
6
|
+
varInViewOrComponent: Set<string>;
|
|
7
|
+
logicInViewOrComponent: Set<string>;
|
|
8
|
+
idToView: Map<Identifier, View>;
|
|
9
|
+
ctxViewElement: Array<ViewElement>;
|
|
10
|
+
ctxView: Array<View>;
|
|
11
|
+
isInViewOrComponent: boolean;
|
|
12
|
+
memExprToViewElem: Map<MemberExpression, ViewElement>;
|
|
13
|
+
};
|
|
14
|
+
declare type TyInferCtx = {
|
|
15
|
+
inferViaAsgnMap: Map<Return | Variable, Assignment | BatchAssignment | CallFunction>;
|
|
16
|
+
inferViaFnCallMap: Map<Return | Variable, CallFunction>;
|
|
17
|
+
scope: Array<AuthLogicForCallInterface | BusinessComponent | BusinessLogic | Logic | OverriddenLogic | SubLogic | View>;
|
|
18
|
+
capturedVars: Map<string, Variable | Return>;
|
|
19
|
+
};
|
|
20
|
+
declare type SubLogicCtx = {
|
|
21
|
+
ctx: Logic | Process | ProcessV2 | ProcessElement | ProcessElementV2 | null;
|
|
22
|
+
viewSubLogics: Set<SubLogic>;
|
|
23
|
+
};
|
|
24
|
+
export declare const varScopeCtx: VarScopeCtx;
|
|
25
|
+
export declare const tyInferCtx: TyInferCtx;
|
|
26
|
+
export declare const subLogicCtx: SubLogicCtx;
|
|
27
|
+
export declare function collectAllSemanticCtx(app: App): Generator<never, void, unknown>;
|
|
28
|
+
declare type LogicContainer = AuthLogicForCallInterface | BusinessComponent | BusinessLogic | Logic | OverriddenLogic | SubLogic | View;
|
|
29
|
+
export declare function reCollectTyInferCtx(inferViaAsgn: Map<Return | Variable, Assignment | BatchAssignment | CallFunction>, inferViaFnCall: Map<Return | Variable, CallFunction>, self: LogicContainer): Generator<any, void, any>;
|
|
30
|
+
export declare const clearSemanticData: () => void;
|
|
31
|
+
export declare function printSemanticDataInfo(): void;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printSemanticDataInfo = exports.clearSemanticData = exports.reCollectTyInferCtx = exports.collectAllSemanticCtx = exports.subLogicCtx = exports.tyInferCtx = exports.varScopeCtx = void 0;
|
|
4
|
+
const translator_1 = require("../translator");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
// 前端全局变量很少,一般就十个以内,所以 map 大小可以忽略不计
|
|
7
|
+
exports.varScopeCtx = {
|
|
8
|
+
app: null,
|
|
9
|
+
isFirstScreen: false,
|
|
10
|
+
frontendGlobalVars: new Set(),
|
|
11
|
+
// Collect all params, (local) variables, and logic names under business component
|
|
12
|
+
// Note that within a business component, one can only refer to the above variables, and cannot refer to
|
|
13
|
+
// frontend global variables and any other variables under Views; therefore, checking the Name already suffices.
|
|
14
|
+
// 收集业务组件下的所有参数、(局部)变量和逻辑名称,请注意,在业务组件中,只能引用上述变量,
|
|
15
|
+
// 而不能引用前端全局变量和其他任何 “视图 ”下的变量;因此,检查 “Name” 已经足够了。
|
|
16
|
+
varInViewOrComponent: new Set(),
|
|
17
|
+
logicInViewOrComponent: new Set(),
|
|
18
|
+
// Collect all params, (local) variables, and logic names under views
|
|
19
|
+
// Actually, frontendGlobalVars U idInView U idInComponent should be the complete set of accessible variables
|
|
20
|
+
// 事实上,frontendGlobalVars 并上 idInView 并上 idInComponent 应该是前端所有能访问到的变量(名的集合)
|
|
21
|
+
// 赫基 27w 应用,前端 View 下有 2000 个变量名字;56176 个变量引用,内存占用约 1M。
|
|
22
|
+
idToView: new Map(),
|
|
23
|
+
// 路径上的 ViewElement 节点
|
|
24
|
+
ctxViewElement: [],
|
|
25
|
+
// 路径上的 View 节点
|
|
26
|
+
ctxView: [],
|
|
27
|
+
isInViewOrComponent: false,
|
|
28
|
+
memExprToViewElem: new Map(),
|
|
29
|
+
};
|
|
30
|
+
exports.tyInferCtx = {
|
|
31
|
+
inferViaAsgnMap: new Map(),
|
|
32
|
+
inferViaFnCallMap: new Map(),
|
|
33
|
+
scope: [],
|
|
34
|
+
capturedVars: new Map(),
|
|
35
|
+
};
|
|
36
|
+
exports.subLogicCtx = {
|
|
37
|
+
// naslNodesCount: 0,
|
|
38
|
+
ctx: null,
|
|
39
|
+
viewSubLogics: new Set(), // 隶属于 view 的 SubLogic,需要排除掉隶属于 Logic 的 SubLogic。
|
|
40
|
+
};
|
|
41
|
+
const last = (arr) => arr[arr.length - 1];
|
|
42
|
+
function* collectAllSemanticCtx(app) {
|
|
43
|
+
exports.varScopeCtx.app = app;
|
|
44
|
+
exports.varScopeCtx.isFirstScreen = true;
|
|
45
|
+
const tasks = [
|
|
46
|
+
// collectFrontendVariablesTask, 这样不值得,能快一点还是快一点吧,
|
|
47
|
+
collectVarInViewOrComponentCtxTask,
|
|
48
|
+
collectLogicInViewOrComponentTask,
|
|
49
|
+
// collectMemExprToViewElemCtxTask, // 因为 $ce 的原因,暂时用不了
|
|
50
|
+
collectIdToViewCtxTask,
|
|
51
|
+
collectSubLogicCtxTask,
|
|
52
|
+
collectTyInferCtxTask
|
|
53
|
+
];
|
|
54
|
+
const cleanups = [
|
|
55
|
+
collectVarInViewOrComponentCtxCleanup,
|
|
56
|
+
// collectLogicInViewOrComponentCleanup,
|
|
57
|
+
// collectMemExprToViewElemCtxCleanup, // 因为 $ce 的原因,暂时用不了
|
|
58
|
+
collectIdToViewCtxCleanup,
|
|
59
|
+
collectSubLogicCtxCleanup,
|
|
60
|
+
collectTyInferCtxCleanup
|
|
61
|
+
];
|
|
62
|
+
(0, utils_1.runGeneratorSync)(collectFrontendVariablesTask(app));
|
|
63
|
+
(0, utils_1.runGeneratorSync)(app.traverseStrictChildrenDoMultiTasks(tasks, cleanups));
|
|
64
|
+
}
|
|
65
|
+
exports.collectAllSemanticCtx = collectAllSemanticCtx;
|
|
66
|
+
function* collectFrontendVariablesTask(app) {
|
|
67
|
+
app.frontendTypes.forEach(ft => {
|
|
68
|
+
ft.frontends.forEach(f => {
|
|
69
|
+
f.variables.forEach(v => {
|
|
70
|
+
exports.varScopeCtx.frontendGlobalVars.add(v.name);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function* collectVarInViewOrComponentCtxTask(nd) {
|
|
76
|
+
switch (nd.concept) {
|
|
77
|
+
case 'Variable': /* FALL THROUGH */
|
|
78
|
+
case 'Param': /* FALL THROUGH */
|
|
79
|
+
case 'Return': {
|
|
80
|
+
if (exports.varScopeCtx.isInViewOrComponent) {
|
|
81
|
+
exports.varScopeCtx.varInViewOrComponent.add(nd.name);
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case 'View': /* FALL THROUGH */
|
|
86
|
+
case 'BusinessComponent':
|
|
87
|
+
exports.varScopeCtx.isInViewOrComponent = true;
|
|
88
|
+
break;
|
|
89
|
+
default: break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function* collectVarInViewOrComponentCtxCleanup(nd) {
|
|
93
|
+
if (nd.concept === 'View' || nd.concept === 'BusinessComponent') {
|
|
94
|
+
exports.varScopeCtx.isInViewOrComponent = false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// component-like:业务组件下的变量引用
|
|
98
|
+
function* collectLogicInViewOrComponentTask(nd) {
|
|
99
|
+
if (nd.concept === 'Logic' || nd.concept === 'BusinessComponent') {
|
|
100
|
+
if (exports.varScopeCtx.isInViewOrComponent) {
|
|
101
|
+
exports.varScopeCtx.logicInViewOrComponent.add(nd.name);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// collectLogicInViewOrComponentCleanup 的事情被 collectVarInViewOrComponentCtxPost 做了
|
|
106
|
+
function* collectMemExprToViewElemCtxTask(nd) {
|
|
107
|
+
// view 下的 identifier 的 getAncestor 必定有 view
|
|
108
|
+
switch (nd.concept) {
|
|
109
|
+
case 'ViewElement': {
|
|
110
|
+
exports.varScopeCtx.ctxViewElement.push(nd);
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
case 'MemberExpression': {
|
|
114
|
+
if (exports.varScopeCtx.ctxViewElement) {
|
|
115
|
+
exports.varScopeCtx.memExprToViewElem.set(nd, last(exports.varScopeCtx.ctxViewElement));
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
default: break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function* collectMemExprToViewElemCtxCleanup(nd) {
|
|
123
|
+
if (nd.concept === 'ViewElement') {
|
|
124
|
+
exports.varScopeCtx.ctxViewElement.pop();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function* collectIdToViewCtxTask(nd) {
|
|
128
|
+
// view 下的 identifier 的 getAncestor 必定有 view
|
|
129
|
+
switch (nd.concept) {
|
|
130
|
+
case 'View':
|
|
131
|
+
exports.varScopeCtx.ctxView.push(nd);
|
|
132
|
+
break;
|
|
133
|
+
case 'Identifier': {
|
|
134
|
+
if (exports.varScopeCtx.ctxView.length > 0) {
|
|
135
|
+
exports.varScopeCtx.idToView.set(nd, last(exports.varScopeCtx.ctxView));
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
default: break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function* collectIdToViewCtxCleanup(nd) {
|
|
143
|
+
switch (nd.concept) {
|
|
144
|
+
case 'View':
|
|
145
|
+
exports.varScopeCtx.ctxView.pop();
|
|
146
|
+
break;
|
|
147
|
+
default: break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function* collectSubLogicCtxTask(nd) {
|
|
151
|
+
switch (nd.concept) {
|
|
152
|
+
case 'Logic': /* FALL THROUGH */
|
|
153
|
+
/* 流程支持子逻辑 */
|
|
154
|
+
/* 流程变量不支持类型推导 */
|
|
155
|
+
case 'Process': /* FALL THROUGH */
|
|
156
|
+
case 'ProcessV2': /* FALL THROUGH */
|
|
157
|
+
case 'ProcessElement': /* FALL THROUGH */
|
|
158
|
+
case 'ProcessElementV2': /* FALL THROUGH */
|
|
159
|
+
case 'BusinessLogic':
|
|
160
|
+
exports.subLogicCtx.ctx = nd;
|
|
161
|
+
break;
|
|
162
|
+
case 'SubLogic': {
|
|
163
|
+
// 收集子逻辑
|
|
164
|
+
if (exports.subLogicCtx.ctx) {
|
|
165
|
+
exports.subLogicCtx.ctx.subLogics.push(nd);
|
|
166
|
+
// console.log('逻辑或流程的子逻辑:', subLogicCtx.ctx)
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
exports.subLogicCtx.viewSubLogics.add(nd);
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
default: break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function* collectSubLogicCtxCleanup(nd) {
|
|
177
|
+
switch (nd.concept) {
|
|
178
|
+
/* 流程支持子逻辑 */
|
|
179
|
+
/* 流程变量不支持类型推导 */
|
|
180
|
+
case 'Logic': /* FALL THROUGH */
|
|
181
|
+
case 'Process': /* FALL THROUGH */
|
|
182
|
+
case 'ProcessV2': /* FALL THROUGH */
|
|
183
|
+
case 'ProcessElement': /* FALL THROUGH */
|
|
184
|
+
case 'ProcessElementV2':
|
|
185
|
+
exports.subLogicCtx.ctx = null;
|
|
186
|
+
break;
|
|
187
|
+
// 可能是有人忘了给业务组件加 subLogics?
|
|
188
|
+
case 'View': {
|
|
189
|
+
exports.subLogicCtx.viewSubLogics.forEach(sl => { nd.subLogics.push(sl); });
|
|
190
|
+
// console.log('View 的子逻辑:', nd.subLogics)
|
|
191
|
+
exports.subLogicCtx.viewSubLogics.clear();
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
default: break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const addVars = (nd, s) => {
|
|
198
|
+
nd.forEach(v => {
|
|
199
|
+
if (!v.typeAnnotation) {
|
|
200
|
+
s.set(v.name, v);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
const removeVars = (nd, s) => {
|
|
205
|
+
nd.forEach(v => s.delete(v.name));
|
|
206
|
+
};
|
|
207
|
+
// OQL 批量优化优化完成前请勿移除
|
|
208
|
+
// const oqlSet = new Set<string>();
|
|
209
|
+
function* collectTyInferCtxTask(nd) {
|
|
210
|
+
// ++subLogicCtx.naslNodesCount;
|
|
211
|
+
// if (nd.concept === 'OqlQueryComponent') {
|
|
212
|
+
// oqlSet.add(nd.code);
|
|
213
|
+
// }
|
|
214
|
+
switch (nd.concept) {
|
|
215
|
+
case 'Logic': /* FALL THROUGH */
|
|
216
|
+
case 'AuthLogicForCallInterface': /* FALL THROUGH */
|
|
217
|
+
case 'BusinessLogic': /* FALL THROUGH */
|
|
218
|
+
case 'OverriddenLogic': /* FALL THROUGH */
|
|
219
|
+
case 'SubLogic': {
|
|
220
|
+
// 全局变量不支持类型推导;逻辑的变量也不支持跨子逻辑推导
|
|
221
|
+
// addVars(nd.variables, tyInferCtx.capturedVars);
|
|
222
|
+
// addVars(nd.returns, tyInferCtx.capturedVars);
|
|
223
|
+
exports.tyInferCtx.scope.push(nd);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case 'View': /* FALL THROUGH */
|
|
227
|
+
case 'BusinessComponent': {
|
|
228
|
+
addVars(nd.variables, exports.tyInferCtx.capturedVars);
|
|
229
|
+
exports.tyInferCtx.scope.push(nd);
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
default: {
|
|
233
|
+
(0, utils_1.runGeneratorAsync)(collectAsgn(exports.tyInferCtx.inferViaAsgnMap, exports.tyInferCtx.inferViaFnCallMap, nd));
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function* collectTyInferCtxCleanup(nd) {
|
|
239
|
+
switch (nd.concept) {
|
|
240
|
+
case 'Logic': /* FALL THROUGH */
|
|
241
|
+
case 'AuthLogicForCallInterface': /* FALL THROUGH */
|
|
242
|
+
case 'BusinessLogic': /* FALL THROUGH */
|
|
243
|
+
case 'OverriddenLogic': /* FALL THROUGH */
|
|
244
|
+
case 'SubLogic': {
|
|
245
|
+
// removeVars(nd.variables, tyInferCtx.capturedVars);
|
|
246
|
+
// removeVars(nd.returns, tyInferCtx.capturedVars);
|
|
247
|
+
exports.tyInferCtx.scope.pop();
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
case 'View': /* FALL THROUGH */
|
|
251
|
+
case 'BusinessComponent': {
|
|
252
|
+
removeVars(nd.variables, exports.tyInferCtx.capturedVars);
|
|
253
|
+
exports.tyInferCtx.scope.pop();
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
default: break;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function* reCollectTyInferCtx(inferViaAsgn, inferViaFnCall, self) {
|
|
260
|
+
// No (types of) variables to be inferred
|
|
261
|
+
// @ts-ignore
|
|
262
|
+
const preTest = self.variables?.some((v) => !v.typeAnnotation) || self.returns?.some((v) => !v.typeAnnotation);
|
|
263
|
+
if (!preTest) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
// 非首次则清空脏 map,重新收集所需上下文
|
|
267
|
+
if (!exports.varScopeCtx.isFirstScreen) {
|
|
268
|
+
exports.tyInferCtx.inferViaAsgnMap.clear();
|
|
269
|
+
exports.tyInferCtx.inferViaFnCallMap.clear();
|
|
270
|
+
yield* self.traverseChildrenGenerator(collectTyInferCtxTask);
|
|
271
|
+
}
|
|
272
|
+
self.variables.forEach((locVar) => {
|
|
273
|
+
if (exports.tyInferCtx.inferViaAsgnMap.has(locVar)) {
|
|
274
|
+
inferViaAsgn.set(locVar, exports.tyInferCtx.inferViaAsgnMap.get(locVar));
|
|
275
|
+
}
|
|
276
|
+
else if (exports.tyInferCtx.inferViaFnCallMap.has(locVar)) {
|
|
277
|
+
inferViaFnCall.set(locVar, exports.tyInferCtx.inferViaFnCallMap.get(locVar));
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
// @ts-ignore
|
|
281
|
+
self.returns?.forEach((locRet) => {
|
|
282
|
+
if (exports.tyInferCtx.inferViaAsgnMap.has(locRet)) {
|
|
283
|
+
inferViaAsgn.set(locRet, exports.tyInferCtx.inferViaAsgnMap.get(locRet));
|
|
284
|
+
}
|
|
285
|
+
else if (exports.tyInferCtx.inferViaFnCallMap.has(locRet)) {
|
|
286
|
+
inferViaFnCall.set(locRet, exports.tyInferCtx.inferViaFnCallMap.get(locRet));
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
exports.reCollectTyInferCtx = reCollectTyInferCtx;
|
|
291
|
+
function* collectAsgn(inferViaAsgnMap, inferViaBuiltinFnMap, nd) {
|
|
292
|
+
const self = last(exports.tyInferCtx.scope); // 可能是 undefined
|
|
293
|
+
if (!nd || !self) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (nd.concept === 'Assignment' && nd.left?.name) {
|
|
297
|
+
if (!self) {
|
|
298
|
+
console.log('nd', nd);
|
|
299
|
+
}
|
|
300
|
+
const hoistVar = self.variables?.find(v => nd.left?.name === v.name && !v.typeAnnotation)
|
|
301
|
+
// View 和 BusinessComponent 没有 returns
|
|
302
|
+
// @ts-ignore
|
|
303
|
+
?? self.returns?.find(ret => nd.left?.name === ret.name && !ret.typeAnnotation)
|
|
304
|
+
?? exports.tyInferCtx.capturedVars.get(nd.left.name);
|
|
305
|
+
if (hoistVar && !inferViaAsgnMap.has(hoistVar)) {
|
|
306
|
+
inferViaAsgnMap.set(hoistVar, nd);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else if (nd.concept === 'BatchAssignment') {
|
|
310
|
+
yield* (0, utils_1.wrapForEachToGenerator)(nd.assignmentLines, function* warpForEachGenerator({ leftIndex }) {
|
|
311
|
+
const leftCode = leftIndex.length === 1
|
|
312
|
+
? yield* nd.left.expression.toEmbeddedTS((0, translator_1.shiftState)((0, translator_1.createCompilerState)(), '', { inline: true }))
|
|
313
|
+
: yield* nd.left.members[leftIndex[1]]?.toEmbeddedTS((0, translator_1.shiftState)((0, translator_1.createCompilerState)(), '', { inline: true })) ??
|
|
314
|
+
(0, utils_1.returnOrigin)('');
|
|
315
|
+
const hoistVar = self.variables?.find((v) => leftCode === v.name && !v.typeAnnotation)
|
|
316
|
+
// View 和 BusinessComponent 没有 returns
|
|
317
|
+
// @ts-ignore
|
|
318
|
+
?? self.returns?.find(ret => leftCode === ret.name && !ret.typeAnnotation)
|
|
319
|
+
?? exports.tyInferCtx.capturedVars.get(leftCode);
|
|
320
|
+
if (hoistVar && !inferViaAsgnMap.has(hoistVar)) {
|
|
321
|
+
inferViaAsgnMap.set(hoistVar, nd);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
else if (nd.concept === 'CallFunction' && nd.derivableCollection?.name) {
|
|
326
|
+
// 需要被推导的集合
|
|
327
|
+
const expr = nd.derivableCollection;
|
|
328
|
+
// 宽泛意义上的变量(变量+出参),View 和 BusinessComponent 没有 returns
|
|
329
|
+
const hoistVar = self.variables.find((v) => expr?.name === v.name && !v.typeAnnotation)
|
|
330
|
+
// @ts-ignore
|
|
331
|
+
?? self.returns?.find(ret => expr?.name === ret.name && !ret.typeAnnotation)
|
|
332
|
+
?? exports.tyInferCtx.capturedVars.get(expr.name);
|
|
333
|
+
if (hoistVar && !inferViaBuiltinFnMap.has(hoistVar)) {
|
|
334
|
+
inferViaBuiltinFnMap.set(hoistVar, nd);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const clearSemanticData = () => {
|
|
339
|
+
exports.varScopeCtx.isFirstScreen = false;
|
|
340
|
+
exports.varScopeCtx.frontendGlobalVars.clear();
|
|
341
|
+
exports.varScopeCtx.varInViewOrComponent.clear();
|
|
342
|
+
exports.varScopeCtx.logicInViewOrComponent.clear();
|
|
343
|
+
exports.varScopeCtx.idToView.clear();
|
|
344
|
+
exports.varScopeCtx.ctxViewElement = [];
|
|
345
|
+
exports.varScopeCtx.memExprToViewElem.clear();
|
|
346
|
+
exports.tyInferCtx.inferViaAsgnMap.clear();
|
|
347
|
+
exports.tyInferCtx.inferViaFnCallMap.clear();
|
|
348
|
+
exports.tyInferCtx.scope = [];
|
|
349
|
+
exports.tyInferCtx.capturedVars.clear();
|
|
350
|
+
exports.subLogicCtx.viewSubLogics.clear();
|
|
351
|
+
exports.subLogicCtx.ctx = null;
|
|
352
|
+
};
|
|
353
|
+
exports.clearSemanticData = clearSemanticData;
|
|
354
|
+
function printSemanticDataInfo() {
|
|
355
|
+
console.log('frontendGlobalVars', exports.varScopeCtx.frontendGlobalVars);
|
|
356
|
+
console.log('varInViewOrComponent', exports.varScopeCtx.varInViewOrComponent);
|
|
357
|
+
console.log('logicInViewOrComponent', exports.varScopeCtx.logicInViewOrComponent);
|
|
358
|
+
console.log('idToView', exports.varScopeCtx.idToView);
|
|
359
|
+
console.log('memExprToViewElem', exports.varScopeCtx.memExprToViewElem);
|
|
360
|
+
console.log('inferViaAsgnMap', exports.tyInferCtx.inferViaAsgnMap);
|
|
361
|
+
console.log('inferViaFnCallMap', exports.tyInferCtx.inferViaFnCallMap);
|
|
362
|
+
// console.log(oqlSet)
|
|
363
|
+
// console.log('capturedVars', tyInferCtx.capturedVars)
|
|
364
|
+
// console.log('viewSubLogics', subLogicCtx.viewSubLogics)
|
|
365
|
+
// console.log('naslNodesCount', subLogicCtx.naslNodesCount)
|
|
366
|
+
// console.log('ctx', subLogicCtx.ctx)
|
|
367
|
+
// console.log('scope', tyInferCtx.scope)
|
|
368
|
+
// console.log('isFirstScreen', varScopeCtx.isFirstScreen)
|
|
369
|
+
}
|
|
370
|
+
exports.printSemanticDataInfo = printSemanticDataInfo;
|
|
371
|
+
//# sourceMappingURL=semanticData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticData.js","sourceRoot":"","sources":["../../src/server/semanticData.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,8 @@ function viewMergeBlock({ app, view, code, nodePath, position, cb, }) {
|
|
|
25
25
|
const naslCode = (0, transformBlock2Nasl_1.tryTransformBlock2Nasl)(code);
|
|
26
26
|
const blockView = naslCode.view;
|
|
27
27
|
// vue2需要对tag进行转换 kebab-case
|
|
28
|
-
|
|
28
|
+
const frontendType = view?.getAncestor('FrontendType');
|
|
29
|
+
if (frontendType?.frameworkKind === 'vue2') {
|
|
29
30
|
(0, utils_1.traverse)(({ node }) => {
|
|
30
31
|
if (node.concept === 'ViewElement') {
|
|
31
32
|
node.tag = (0, string_1.Camel2kebab)(node.tag);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewMergeBlock.js","sourceRoot":"","sources":["../../../src/templator/block2nasl/viewMergeBlock.ts"],"names":[],"mappings":";;;AAAA,6CAA8H;AAC9H,+DAA+D;AAC/D,+CAAiD;AACjD,uCAAwC;AAGxC,SAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,EAAE,GAQH;IACC,IAAI,UAAU,GAAG,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAC5E,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,EAAE;QACjC,UAAU,GAAG,UAAU,CAAC;QACxB,IAAI,QAAQ,KAAK,cAAc,EAAE;YAC/B,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACrC;aAAM,IAAI,QAAQ,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;SAC3C;KACF;IACD,OAAO;IACP,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IACD,MAAM,QAAQ,GAAG,IAAA,4CAAsB,EAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;IAChC,4BAA4B;IAC5B,
|
|
1
|
+
{"version":3,"file":"viewMergeBlock.js","sourceRoot":"","sources":["../../../src/templator/block2nasl/viewMergeBlock.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/common/BaseNode.ts
CHANGED
|
@@ -20,6 +20,8 @@ export function setActionable(value: boolean) {
|
|
|
20
20
|
actionable = value;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
import { varScopeCtx } from '../server/semanticData';
|
|
24
|
+
|
|
23
25
|
const patchCompose = (node: BaseNode, type = 'add') => {
|
|
24
26
|
if (node?.composedBy) {
|
|
25
27
|
const app = (node as any)?.app;
|
|
@@ -942,7 +944,7 @@ export class BaseNode extends EventEmitter {
|
|
|
942
944
|
}
|
|
943
945
|
|
|
944
946
|
get app() {
|
|
945
|
-
return this.getAncestor('App') as App;
|
|
947
|
+
return varScopeCtx.isFirstScreen ? varScopeCtx.app : this.getAncestor('App') as App;
|
|
946
948
|
}
|
|
947
949
|
|
|
948
950
|
/**
|
|
@@ -1435,13 +1437,9 @@ export class BaseNode extends EventEmitter {
|
|
|
1435
1437
|
* @description 与`traverseChildren`不同,此方法会过滤掉非节点值
|
|
1436
1438
|
*/
|
|
1437
1439
|
*traverseChildrenGenerator(cb: (node: types.SyntaxNode) => (void | Generator<any, any, any>)) {
|
|
1438
|
-
const isNode = (node: unknown): node is types.SyntaxNode => {
|
|
1439
|
-
return Boolean(node) && typeof node === 'object' && ('concept' in node) && typeof (node as any).concept === 'string';
|
|
1440
|
-
};
|
|
1441
|
-
|
|
1442
1440
|
function* traverse(node: BaseNode): Generator<any, any, any> {
|
|
1443
|
-
if (
|
|
1444
|
-
const result = cb(node);
|
|
1441
|
+
if (asserts.isBaseNode(node)) {
|
|
1442
|
+
const result = cb(node as types.SyntaxNode);
|
|
1445
1443
|
|
|
1446
1444
|
if (utils.isGenerator(result)) {
|
|
1447
1445
|
yield* result;
|
|
@@ -1486,50 +1484,122 @@ export class BaseNode extends EventEmitter {
|
|
|
1486
1484
|
* @description 严格迭代所有子节点!排除属性!
|
|
1487
1485
|
*/
|
|
1488
1486
|
traverseStrictChildren(cb: (el: types.SyntaxNode) => void, whitelist?: string[]): void {
|
|
1489
|
-
|
|
1490
|
-
if (
|
|
1491
|
-
|
|
1487
|
+
function traverse(node: any) {
|
|
1488
|
+
if (!node) {
|
|
1489
|
+
return;
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
if (asserts.isBaseNode(node)) {
|
|
1493
|
+
cb(node as types.SyntaxNode);
|
|
1492
1494
|
}
|
|
1493
|
-
|
|
1495
|
+
|
|
1496
|
+
const propertyMap = getConceptPropertyMap(node?.concept);
|
|
1497
|
+
|
|
1498
|
+
if (!propertyMap) {
|
|
1499
|
+
return;
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
const keys = (whitelist && whitelist.length > 0)
|
|
1503
|
+
? Array.from(propertyMap.keys()).concat(whitelist)
|
|
1504
|
+
: propertyMap.keys();
|
|
1505
|
+
|
|
1506
|
+
for (const property of keys) {
|
|
1507
|
+
const prop = node[property as keyof BaseNode];
|
|
1508
|
+
|
|
1509
|
+
if (!prop) {
|
|
1510
|
+
continue;
|
|
1511
|
+
}
|
|
1512
|
+
else if (Array.isArray(prop)) {
|
|
1513
|
+
for (const child of prop) {
|
|
1514
|
+
traverse(child);
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
else {
|
|
1518
|
+
traverse(prop);
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
traverse(this);
|
|
1494
1524
|
}
|
|
1495
1525
|
|
|
1496
|
-
|
|
1526
|
+
/**
|
|
1497
1527
|
* 迭代所有子节点
|
|
1498
1528
|
*
|
|
1499
|
-
* @description
|
|
1529
|
+
* @description 严格迭代所有子节点!排除属性!条件满足时整个遍历全部终止!
|
|
1500
1530
|
*/
|
|
1501
|
-
|
|
1502
|
-
|
|
1531
|
+
traverseStrictChildrenStopWhen(cb: (el: types.SyntaxNode) => void, setStopFlag: (el: types.SyntaxNode) => boolean, whitelist?: string[]): void {
|
|
1532
|
+
let shouldStop = false;
|
|
1503
1533
|
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
}
|
|
1534
|
+
function __traverse(node: any) {
|
|
1535
|
+
if (asserts.isBaseNode(node)) {
|
|
1536
|
+
cb(node as types.SyntaxNode);
|
|
1537
|
+
}
|
|
1509
1538
|
|
|
1510
|
-
|
|
1511
|
-
if (shouldStop) {
|
|
1512
|
-
return;
|
|
1513
|
-
}
|
|
1539
|
+
shouldStop = shouldStop || setStopFlag(node);
|
|
1514
1540
|
|
|
1515
|
-
|
|
1516
|
-
|
|
1541
|
+
if (shouldStop) {
|
|
1542
|
+
return;
|
|
1543
|
+
}
|
|
1517
1544
|
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1545
|
+
const propertyMap = getConceptPropertyMap(node?.concept);
|
|
1546
|
+
if (!propertyMap) return;
|
|
1547
|
+
|
|
1548
|
+
const propertyKeys = [...propertyMap.keys()];
|
|
1549
|
+
if (Array.isArray(whitelist) && whitelist.length) {
|
|
1550
|
+
propertyKeys.push(...whitelist);
|
|
1551
|
+
}
|
|
1552
|
+
for (const property of propertyKeys) {
|
|
1553
|
+
const child = node[property as keyof BaseNode];
|
|
1554
|
+
if (!child) continue;
|
|
1555
|
+
else if (Array.isArray(child)) child?.forEach?.((node: types.SyntaxNode) => __traverse(node));
|
|
1556
|
+
else __traverse(child);
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
__traverse(this);
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
/**
|
|
1564
|
+
* 迭代所有子节点
|
|
1565
|
+
* @description 严格迭代所有子节点,排除属性;多函数特化版本,不做额外检查
|
|
1566
|
+
*/
|
|
1567
|
+
*traverseStrictChildrenDoMultiTasks(
|
|
1568
|
+
tasks: Array<(_: BaseNode) => Generator<any, any, any>>,
|
|
1569
|
+
cleanups: Array<(_: BaseNode) => Generator<any, any, any>>): Generator<any, any, any> {
|
|
1570
|
+
|
|
1571
|
+
function __traverse(nd: BaseNode) {
|
|
1572
|
+
if (!asserts.isBaseNode(nd)) {
|
|
1573
|
+
return;
|
|
1574
|
+
}
|
|
1575
|
+
tasks.forEach(task => utils.runGeneratorSync(task(nd)));
|
|
1576
|
+
|
|
1577
|
+
const props = getConceptPropertyMap(nd?.concept)?.keys();
|
|
1578
|
+
if (!props) {
|
|
1579
|
+
cleanups.forEach(task => utils.runGeneratorSync(task(nd)));
|
|
1580
|
+
return;
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
for (const p of props) {
|
|
1584
|
+
const child = nd[p as keyof BaseNode];
|
|
1585
|
+
if (!child) {
|
|
1586
|
+
continue;
|
|
1587
|
+
} else if (Array.isArray(child)) {
|
|
1588
|
+
child?.forEach?.((node: types.SyntaxNode) => {
|
|
1589
|
+
__traverse(node);
|
|
1590
|
+
});
|
|
1591
|
+
} else {
|
|
1592
|
+
__traverse(child);
|
|
1527
1593
|
}
|
|
1528
1594
|
}
|
|
1529
1595
|
|
|
1530
|
-
|
|
1596
|
+
cleanups.forEach(task => utils.runGeneratorSync(task(nd)));
|
|
1531
1597
|
}
|
|
1532
1598
|
|
|
1599
|
+
__traverse(this);
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
|
|
1533
1603
|
/**
|
|
1534
1604
|
* 获取当前节点在nasl标注节点上的节点
|
|
1535
1605
|
*/
|