@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.
Files changed (88) hide show
  1. package/out/common/BaseNode.d.ts +9 -4
  2. package/out/common/BaseNode.js +73 -18
  3. package/out/common/BaseNode.js.map +1 -1
  4. package/out/concepts/App__.js +17 -13
  5. package/out/concepts/App__.js.map +1 -1
  6. package/out/concepts/AuthLogicForCallInterface__.js +2 -50
  7. package/out/concepts/AuthLogicForCallInterface__.js.map +1 -1
  8. package/out/concepts/BusinessComponent__.js +2 -42
  9. package/out/concepts/BusinessComponent__.js.map +1 -1
  10. package/out/concepts/BusinessLogic__.js +2 -50
  11. package/out/concepts/BusinessLogic__.js.map +1 -1
  12. package/out/concepts/CallFunction__.d.ts +1 -1
  13. package/out/concepts/CallFunction__.js +1 -1
  14. package/out/concepts/CallLogic__.js +2 -2
  15. package/out/concepts/CallLogic__.js.map +1 -1
  16. package/out/concepts/Identifier__.d.ts +2 -0
  17. package/out/concepts/Identifier__.js +51 -5
  18. package/out/concepts/Identifier__.js.map +1 -1
  19. package/out/concepts/Logic__.js +6 -101
  20. package/out/concepts/Logic__.js.map +1 -1
  21. package/out/concepts/MemberExpression__.d.ts +1 -1
  22. package/out/concepts/MemberExpression__.js +15 -3
  23. package/out/concepts/MemberExpression__.js.map +1 -1
  24. package/out/concepts/OverriddenLogic__.js +2 -50
  25. package/out/concepts/OverriddenLogic__.js.map +1 -1
  26. package/out/concepts/ProcessElementV2__.js +4 -0
  27. package/out/concepts/ProcessElementV2__.js.map +1 -1
  28. package/out/concepts/ProcessElement__.js +4 -0
  29. package/out/concepts/ProcessElement__.js.map +1 -1
  30. package/out/concepts/ProcessV2__.js +4 -0
  31. package/out/concepts/ProcessV2__.js.map +1 -1
  32. package/out/concepts/Process__.js +4 -0
  33. package/out/concepts/Process__.js.map +1 -1
  34. package/out/concepts/SubLogic__.js +5 -50
  35. package/out/concepts/SubLogic__.js.map +1 -1
  36. package/out/concepts/TypeAnnotation__.js +1 -1
  37. package/out/concepts/TypeAnnotation__.js.map +1 -1
  38. package/out/concepts/View__.js +10 -49
  39. package/out/concepts/View__.js.map +1 -1
  40. package/out/generator/genBundleFiles.js +5 -5
  41. package/out/generator/permission.js +21 -5
  42. package/out/generator/permission.js.map +1 -1
  43. package/out/generator/release-body/body.js.map +1 -1
  44. package/out/natural/transformTS2UI.js +5 -5
  45. package/out/natural/transformTS2UI.js.map +1 -1
  46. package/out/natural/transforms/transform2LogicItem.js +4 -4
  47. package/out/natural/transforms/transform2LogicItem.js.map +1 -1
  48. package/out/server/naslServer.js +17 -2
  49. package/out/server/naslServer.js.map +1 -1
  50. package/out/server/semanticData.d.ts +32 -0
  51. package/out/server/semanticData.js +371 -0
  52. package/out/server/semanticData.js.map +1 -0
  53. package/out/templator/block2nasl/viewMergeBlock.js +2 -1
  54. package/out/templator/block2nasl/viewMergeBlock.js.map +1 -1
  55. package/package.json +1 -1
  56. package/src/common/BaseNode.ts +106 -36
  57. package/src/concepts/App__.ts +17 -13
  58. package/src/concepts/AuthLogicForCallInterface__.ts +3 -56
  59. package/src/concepts/BusinessComponent__.ts +6 -51
  60. package/src/concepts/BusinessLogic__.ts +4 -56
  61. package/src/concepts/CallFunction__.ts +1 -1
  62. package/src/concepts/CallLogic__.ts +8 -4
  63. package/src/concepts/Identifier__.ts +57 -6
  64. package/src/concepts/Logic__.ts +9 -111
  65. package/src/concepts/MemberExpression__.ts +21 -7
  66. package/src/concepts/OverriddenLogic__.ts +4 -56
  67. package/src/concepts/ProcessElementV2__.ts +4 -0
  68. package/src/concepts/ProcessElement__.ts +4 -0
  69. package/src/concepts/ProcessV2__.ts +5 -0
  70. package/src/concepts/Process__.ts +4 -0
  71. package/src/concepts/SubLogic__.ts +6 -56
  72. package/src/concepts/TypeAnnotation__.ts +1 -1
  73. package/src/concepts/View__.ts +14 -54
  74. package/src/generator/genBundleFiles.ts +5 -5
  75. package/src/generator/permission.ts +23 -5
  76. package/src/generator/release-body/body.ts +0 -1
  77. package/src/natural/transformTS2UI.ts +5 -5
  78. package/src/natural/transforms/transform2LogicItem.ts +4 -4
  79. package/src/server/naslServer.ts +22 -2
  80. package/src/server/semanticData.ts +447 -0
  81. package/src/templator/block2nasl/viewMergeBlock.ts +2 -1
  82. package/src/translator/utils.ts +1 -1
  83. package/test/concepts/logic/__snapshots__/toEmbeddedTS.spec.ts.snap +182 -0
  84. package/test/concepts/logic/constant.ts +5 -0
  85. package/test/concepts/logic/fixtures/variable-host-call-logic-member-expression.json +267 -0
  86. package/test/concepts/logic/fixtures/variable-host-call-logic-nested-member-expression copy.json +457 -0
  87. package/test/concepts/logic/fixtures/variable-host-call-logic-with-handle-error-member-expression.json +267 -0
  88. 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
- if (view?.parentNode?.parentNode?.frameworkKind === 'vue2') {
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":"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"}
1
+ {"version":3,"file":"viewMergeBlock.js","sourceRoot":"","sources":["../../../src/templator/block2nasl/viewMergeBlock.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lcap/nasl",
3
3
  "description": "NetEase Application Specific Language",
4
- "version": "3.8.3-beta.4",
4
+ "version": "3.8.3-beta.5",
5
5
  "author": "Forrest <rainforest92@126.com>",
6
6
  "main": "./out",
7
7
  "license": "MIT",
@@ -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 (isNode(node)) {
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
- this.traverseChildren((el) => {
1490
- if (asserts.isBaseNode(el)) {
1491
- cb(el as types.SyntaxNode);
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
- }, whitelist);
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
- traverseStrictChildrenStopWhen(cb: (el: types.SyntaxNode) => void, setStopFlag: (el: types.SyntaxNode) => boolean, whitelist?: string[]): void {
1502
- let shouldStop = false;
1531
+ traverseStrictChildrenStopWhen(cb: (el: types.SyntaxNode) => void, setStopFlag: (el: types.SyntaxNode) => boolean, whitelist?: string[]): void {
1532
+ let shouldStop = false;
1503
1533
 
1504
- // if ((node instanceof View || node instanceof ViewElement) && node.auth) flag = true;
1505
- function traverse(node: any) {
1506
- if (asserts.isBaseNode(node)) {
1507
- cb(node as types.SyntaxNode);
1508
- }
1534
+ function __traverse(node: any) {
1535
+ if (asserts.isBaseNode(node)) {
1536
+ cb(node as types.SyntaxNode);
1537
+ }
1509
1538
 
1510
- shouldStop = shouldStop || setStopFlag(node);
1511
- if (shouldStop) {
1512
- return;
1513
- }
1539
+ shouldStop = shouldStop || setStopFlag(node);
1514
1540
 
1515
- const propertyMap = getConceptPropertyMap(node?.concept);
1516
- if (!propertyMap) return;
1541
+ if (shouldStop) {
1542
+ return;
1543
+ }
1517
1544
 
1518
- const propertyKeys = [...propertyMap.keys()];
1519
- if (Array.isArray(whitelist) && whitelist.length) {
1520
- propertyKeys.push(...whitelist);
1521
- }
1522
- for (const property of propertyKeys) {
1523
- const child = node[property as keyof BaseNode];
1524
- if (!child) continue;
1525
- else if (Array.isArray(child)) child?.forEach?.((node: types.SyntaxNode) => traverse(node));
1526
- else traverse(child);
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
- traverse(this);
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
  */