@lcap/nasl 3.6.0-alpha.1 → 3.6.0-alpha.2

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 (245) hide show
  1. package/out/bak/translator.js +119 -39
  2. package/out/bak/translator.js.map +1 -1
  3. package/out/breakpoint/generator/BreakpointNode.d.ts +3 -0
  4. package/out/breakpoint/generator/BreakpointNode.js +9 -0
  5. package/out/breakpoint/generator/BreakpointNode.js.map +1 -1
  6. package/out/breakpoint/shared/constants.js +1 -0
  7. package/out/breakpoint/shared/constants.js.map +1 -1
  8. package/out/breakpoint/shared/utils.js +12 -6
  9. package/out/breakpoint/shared/utils.js.map +1 -1
  10. package/out/breakpoint/store/core.js +1 -1
  11. package/out/breakpoint/store/core.js.map +1 -1
  12. package/out/common/BaseNode.d.ts +1 -4
  13. package/out/common/BaseNode.js +23 -37
  14. package/out/common/BaseNode.js.map +1 -1
  15. package/out/concepts/AnonymousFunction__.d.ts +6 -1
  16. package/out/concepts/AnonymousFunction__.js +34 -16
  17. package/out/concepts/AnonymousFunction__.js.map +1 -1
  18. package/out/concepts/App__.d.ts +55 -51
  19. package/out/concepts/App__.js +76 -80
  20. package/out/concepts/App__.js.map +1 -1
  21. package/out/concepts/BackendVariable__.js +10 -2
  22. package/out/concepts/BackendVariable__.js.map +1 -1
  23. package/out/concepts/BindAttribute__.js +16 -6
  24. package/out/concepts/BindAttribute__.js.map +1 -1
  25. package/out/concepts/BindDirective__.d.ts +1 -0
  26. package/out/concepts/BindDirective__.js +19 -4
  27. package/out/concepts/BindDirective__.js.map +1 -1
  28. package/out/concepts/BindEvent__.d.ts +3 -1
  29. package/out/concepts/BindEvent__.js +39 -14
  30. package/out/concepts/BindEvent__.js.map +1 -1
  31. package/out/concepts/BusinessComponent__.d.ts +641 -0
  32. package/out/concepts/BusinessComponent__.js +1921 -0
  33. package/out/concepts/BusinessComponent__.js.map +1 -0
  34. package/out/concepts/BusinessLogic__.d.ts +38 -0
  35. package/out/concepts/BusinessLogic__.js +358 -0
  36. package/out/concepts/BusinessLogic__.js.map +1 -0
  37. package/out/concepts/CallEvent__.d.ts +101 -0
  38. package/out/concepts/CallEvent__.js +280 -0
  39. package/out/concepts/CallEvent__.js.map +1 -0
  40. package/out/concepts/CallFunction__.d.ts +0 -1
  41. package/out/concepts/CallFunction__.js +10 -10
  42. package/out/concepts/CallFunction__.js.map +1 -1
  43. package/out/concepts/CallLogic__.d.ts +2 -0
  44. package/out/concepts/CallLogic__.js +38 -27
  45. package/out/concepts/CallLogic__.js.map +1 -1
  46. package/out/concepts/Constant__.js +7 -6
  47. package/out/concepts/Constant__.js.map +1 -1
  48. package/out/concepts/Destination__.d.ts +1 -1
  49. package/out/concepts/Destination__.js +7 -5
  50. package/out/concepts/Destination__.js.map +1 -1
  51. package/out/concepts/End__.js +2 -1
  52. package/out/concepts/End__.js.map +1 -1
  53. package/out/concepts/Event__.d.ts +14 -0
  54. package/out/concepts/Event__.js +61 -0
  55. package/out/concepts/Event__.js.map +1 -1
  56. package/out/concepts/FrontendType__.d.ts +308 -0
  57. package/out/concepts/FrontendType__.js +605 -0
  58. package/out/concepts/FrontendType__.js.map +1 -0
  59. package/out/concepts/Frontend__.d.ts +0 -88
  60. package/out/concepts/Frontend__.js +1 -143
  61. package/out/concepts/Frontend__.js.map +1 -1
  62. package/out/concepts/Identifier__.d.ts +5 -0
  63. package/out/concepts/Identifier__.js +19 -9
  64. package/out/concepts/Identifier__.js.map +1 -1
  65. package/out/concepts/LogicItem__.d.ts +1 -1
  66. package/out/concepts/LogicItem__.js.map +1 -1
  67. package/out/concepts/Logic__.d.ts +3 -1
  68. package/out/concepts/Logic__.js +31 -21
  69. package/out/concepts/Logic__.js.map +1 -1
  70. package/out/concepts/Match__.d.ts +1 -1
  71. package/out/concepts/MemberExpression__.d.ts +1 -1
  72. package/out/concepts/MemberExpression__.js +3 -3
  73. package/out/concepts/MemberExpression__.js.map +1 -1
  74. package/out/concepts/NewComposite__.js.map +1 -1
  75. package/out/concepts/ParamWithGroup__.d.ts +39 -0
  76. package/out/concepts/ParamWithGroup__.js +85 -0
  77. package/out/concepts/ParamWithGroup__.js.map +1 -0
  78. package/out/concepts/Param__.js +11 -3
  79. package/out/concepts/Param__.js.map +1 -1
  80. package/out/concepts/ProcessElement__.js +9 -1
  81. package/out/concepts/ProcessElement__.js.map +1 -1
  82. package/out/concepts/Return__.js +17 -9
  83. package/out/concepts/Return__.js.map +1 -1
  84. package/out/concepts/ValidationRule__.js +2 -1
  85. package/out/concepts/ValidationRule__.js.map +1 -1
  86. package/out/concepts/Variable__.js +17 -8
  87. package/out/concepts/Variable__.js.map +1 -1
  88. package/out/concepts/ViewElement__.d.ts +17 -1
  89. package/out/concepts/ViewElement__.js +145 -16
  90. package/out/concepts/ViewElement__.js.map +1 -1
  91. package/out/concepts/View__.js +21 -20
  92. package/out/concepts/View__.js.map +1 -1
  93. package/out/concepts/index__.d.ts +5 -0
  94. package/out/concepts/index__.js +5 -0
  95. package/out/concepts/index__.js.map +1 -1
  96. package/out/concepts/utils/asserts.d.ts +258 -3
  97. package/out/concepts/utils/asserts.js +351 -13
  98. package/out/concepts/utils/asserts.js.map +1 -1
  99. package/out/concepts/utils/types.d.ts +20 -3
  100. package/out/generator/genBundleFiles.js +25 -11
  101. package/out/generator/genBundleFiles.js.map +1 -1
  102. package/out/generator/genReleaseBody.js +12 -3
  103. package/out/generator/genReleaseBody.js.map +1 -1
  104. package/out/generator/permission.js +3 -3
  105. package/out/generator/permission.js.map +1 -1
  106. package/out/natural/transformTSCode.js +1 -1
  107. package/out/natural/transformTSCode.js.map +1 -1
  108. package/out/server/extendBaseNode.js +6 -4
  109. package/out/server/extendBaseNode.js.map +1 -1
  110. package/out/server/getLogics.js +62 -27
  111. package/out/server/getLogics.js.map +1 -1
  112. package/out/server/getMemberIdentifier.js +6 -1
  113. package/out/server/getMemberIdentifier.js.map +1 -1
  114. package/out/server/getProcesses.js +3 -3
  115. package/out/server/getProcesses.js.map +1 -1
  116. package/out/server/naslServer.js +40 -19
  117. package/out/server/naslServer.js.map +1 -1
  118. package/out/server/translator.js +6 -1
  119. package/out/server/translator.js.map +1 -1
  120. package/out/service/storage/init.js +1 -2
  121. package/out/service/storage/init.js.map +1 -1
  122. package/out/templator/genCreateBlock.js +6 -6
  123. package/out/templator/genCreateBlock.js.map +1 -1
  124. package/out/templator/genCurdEditMultipleKeyBlock.js +16 -16
  125. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  126. package/out/templator/genCurdMultipleKeyBlock.js +36 -36
  127. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  128. package/out/templator/genGetBlock.js +6 -5
  129. package/out/templator/genGetBlock.js.map +1 -1
  130. package/out/templator/genGridViewBlock.js +12 -12
  131. package/out/templator/genGridViewBlock.js.map +1 -1
  132. package/out/templator/genListViewBlock.js +4 -4
  133. package/out/templator/genListViewBlock.js.map +1 -1
  134. package/out/templator/genSelectBlock.js +3 -3
  135. package/out/templator/genSelectBlock.js.map +1 -1
  136. package/out/templator/genTableBlock.js +10 -10
  137. package/out/templator/genTableBlock.js.map +1 -1
  138. package/out/templator/genUpdateBlock.js +10 -9
  139. package/out/templator/genUpdateBlock.js.map +1 -1
  140. package/out/templator/utils.d.ts +2 -2
  141. package/out/templator/utils.js.map +1 -1
  142. package/out/translator/utils.js +12 -1
  143. package/out/translator/utils.js.map +1 -1
  144. package/out/utils/i18nInfo.js +7 -2
  145. package/out/utils/i18nInfo.js.map +1 -1
  146. package/out/utils/index.d.ts +17 -0
  147. package/out/utils/index.js +184 -1
  148. package/out/utils/index.js.map +1 -1
  149. package/package.json +2 -2
  150. package/src/bak/translator.js +121 -43
  151. package/src/breakpoint/generator/BreakpointNode.ts +12 -0
  152. package/src/breakpoint/shared/constants.ts +1 -0
  153. package/src/breakpoint/shared/utils.ts +13 -8
  154. package/src/breakpoint/store/core.ts +1 -1
  155. package/src/common/BaseNode.ts +22 -41
  156. package/src/concepts/AnonymousFunction__.ts +36 -18
  157. package/src/concepts/App__.ts +129 -130
  158. package/src/concepts/BackendVariable__.ts +10 -2
  159. package/src/concepts/BindAttribute__.ts +14 -6
  160. package/src/concepts/BindDirective__.ts +19 -4
  161. package/src/concepts/BindEvent__.ts +41 -13
  162. package/src/concepts/BusinessComponent__.ts +2693 -0
  163. package/src/concepts/BusinessLogic__.ts +376 -0
  164. package/src/concepts/CallEvent__.ts +351 -0
  165. package/src/concepts/CallFunction__.ts +10 -13
  166. package/src/concepts/CallLogic__.ts +45 -32
  167. package/src/concepts/Constant__.ts +5 -7
  168. package/src/concepts/Destination__.ts +7 -5
  169. package/src/concepts/End__.ts +1 -0
  170. package/src/concepts/Event__.ts +70 -0
  171. package/src/concepts/FrontendType__.ts +919 -0
  172. package/src/concepts/Frontend__.ts +3 -251
  173. package/src/concepts/Identifier__.ts +29 -13
  174. package/src/concepts/LogicItem__.ts +1 -0
  175. package/src/concepts/Logic__.ts +36 -23
  176. package/src/concepts/MemberExpression__.ts +3 -3
  177. package/src/concepts/NewComposite__.ts +4 -6
  178. package/src/concepts/ParamWithGroup__.ts +101 -0
  179. package/src/concepts/Param__.ts +11 -3
  180. package/src/concepts/ProcessElement__.ts +8 -1
  181. package/src/concepts/Return__.ts +15 -12
  182. package/src/concepts/ValidationRule__.ts +6 -1
  183. package/src/concepts/Variable__.ts +17 -9
  184. package/src/concepts/ViewElement__.ts +168 -33
  185. package/src/concepts/View__.ts +23 -20
  186. package/src/concepts/index__.ts +5 -0
  187. package/src/concepts/utils/asserts.ts +367 -4
  188. package/src/concepts/utils/types.ts +28 -0
  189. package/src/generator/genBundleFiles.ts +33 -15
  190. package/src/generator/genReleaseBody.ts +14 -3
  191. package/src/generator/permission.ts +8 -6
  192. package/src/natural/transformTSCode.ts +1 -1
  193. package/src/server/extendBaseNode.ts +22 -20
  194. package/src/server/getLogics.ts +79 -41
  195. package/src/server/getMemberIdentifier.ts +7 -1
  196. package/src/server/getProcesses.ts +3 -3
  197. package/src/server/naslServer.ts +44 -20
  198. package/src/server/translator.ts +7 -1
  199. package/src/service/storage/init.ts +1 -2
  200. package/src/templator/genCreateBlock.ts +6 -6
  201. package/src/templator/genCurdEditMultipleKeyBlock.ts +16 -16
  202. package/src/templator/genCurdMultipleKeyBlock.ts +36 -36
  203. package/src/templator/genGetBlock.ts +6 -5
  204. package/src/templator/genGridViewBlock.ts +12 -12
  205. package/src/templator/genListViewBlock.ts +4 -4
  206. package/src/templator/genSelectBlock.ts +3 -3
  207. package/src/templator/genTableBlock.ts +10 -10
  208. package/src/templator/genUpdateBlock.ts +10 -9
  209. package/src/templator/utils.ts +2 -2
  210. package/src/translator/utils.ts +12 -1
  211. package/src/utils/i18nInfo.ts +7 -2
  212. package/src/utils/index.ts +211 -1
  213. package/test/concepts/call-function/fixtures/from-string.json +68 -59
  214. package/test/concepts/call-function/fixtures/to-string-global-tz.json +67 -58
  215. package/test/concepts/call-function/fixtures/to-string-no-tz.json +57 -48
  216. package/test/concepts/call-function/fixtures/to-string-user-tz.json +69 -60
  217. package/test/concepts/call-function/fixtures/to-string-utc-tz.json +69 -60
  218. package/test/concepts/call-interface/fixtures/only-interface.json +81 -72
  219. package/test/concepts/call-interface/fixtures/with-body-complex-argument.json +223 -214
  220. package/test/concepts/call-interface/fixtures/with-body-no-argument.json +85 -76
  221. package/test/concepts/call-interface/fixtures/with-body-simple-argument.json +100 -91
  222. package/test/concepts/call-interface/fixtures/with-headers-no-argument.json +88 -79
  223. package/test/concepts/call-interface/fixtures/with-headers.json +90 -81
  224. package/test/concepts/call-interface/fixtures/with-query-no-argument.json +88 -79
  225. package/test/concepts/call-interface/fixtures/with-query.json +90 -81
  226. package/test/concepts/call-logic/__snapshots__/getQuickInfoOffset.spec.ts.snap +4 -2
  227. package/test/concepts/call-logic/fixtures/entries-get-with-arguments.json +104 -95
  228. package/test/concepts/call-logic/fixtures/entries-update-with-arguments.json +209 -200
  229. package/test/concepts/call-logic/fixtures/global-logic-argument-no-expression.json +97 -88
  230. package/test/concepts/call-logic/fixtures/global-logic-argument-some-expression.json +124 -115
  231. package/test/concepts/call-logic/fixtures/json-deserialize.json +120 -111
  232. package/test/concepts/call-logic/fixtures/json-serialize-with-string.json +124 -115
  233. package/test/concepts/call-logic/fixtures/json-serialize.json +124 -115
  234. package/test/concepts/call-logic/fixtures/view-buildin-logic-with-argument.json +91 -82
  235. package/test/concepts/call-logic/fixtures/view-component-logic-no-argument.json +88 -79
  236. package/test/concepts/call-logic/fixtures/view-component-with-validation.json +144 -135
  237. package/test/concepts/identifier/fixtures/view-variable.json +145 -136
  238. package/test/concepts/view-element/__snapshots__/toVue.spec.ts.snap +1 -1
  239. package/test/concepts/view-element/fixtures/default-login.json +221 -212
  240. package/test/concepts/view-element/fixtures/default-not-found.json +183 -174
  241. package/test/concepts/view-element/fixtures/with-role-auth.json +91 -82
  242. package/test/concepts/view-element/fixtures/with-table.json +1894 -1885
  243. package/test/concepts/view-element/toVue.spec.ts +1 -0
  244. package/ts-worker/package.json +1 -1
  245. package/ts-worker/src/index.js +1 -0
@@ -1,5 +1,5 @@
1
1
  import { utils } from '..';
2
- import { App, Module, Entity, EntityProperty, Logic, View, Namespace, TypeAnnotation } from '../concepts';
2
+ import { App, Module, Entity, EntityProperty, Logic, View, Namespace, TypeAnnotation, BusinessComponent } from '../concepts';
3
3
 
4
4
  export const filterProperty = (key: 'inTable' | 'inFilter' | 'inForm' | 'inDetail') => (property: EntityProperty) => {
5
5
  if (property.display) {
@@ -131,7 +131,7 @@ function capFirstLetter(word: string) {
131
131
  */
132
132
  export function genUniqueQueryNameGroup(
133
133
  scope: App | Module | Namespace,
134
- view: View,
134
+ view: View | BusinessComponent,
135
135
  componentName: string = '',
136
136
  defaultInView: boolean = true,
137
137
  suffix: string = ''
@@ -180,8 +180,19 @@ export function withSourceMapGenerator(target: any, key: string, descriptor: Pro
180
180
  const code = yield* oldMethod.call(this, state, ...args);
181
181
  yield;
182
182
 
183
+ const start = {
184
+ ...state.position
185
+ };
186
+ if (this.concept === 'BusinessComponent') {
187
+ const lines: string[] = code.split('\n');
188
+ const lineOffset = lines.findIndex((item) => item.startsWith('export class '));
189
+ if (lineOffset) {
190
+ start.line = start.line + lineOffset + 1;
191
+ start.offset = 13;
192
+ }
193
+ }
183
194
  state.sourceMap?.set(this, {
184
- start: state.position,
195
+ start,
185
196
  end: shiftPosition(state.position, code),
186
197
  });
187
198
 
@@ -1,14 +1,19 @@
1
1
  export const languageList = [
2
2
  {
3
3
  id: 'en-US',
4
- name: 'English (United States)',
5
- title: '英语(美国)',
4
+ name: 'English',
5
+ title: '英语',
6
6
  },
7
7
  {
8
8
  id: 'fr-FR',
9
9
  name: 'Français',
10
10
  title: '法语',
11
11
  },
12
+ {
13
+ id: 'ko-KR',
14
+ name: '한국어',
15
+ title: '韩语',
16
+ },
12
17
  {
13
18
  id: 'zh-CN',
14
19
  name: '中文 (简体)',
@@ -1,5 +1,8 @@
1
1
  import { compare } from 'compare-versions';
2
- import { BaseNode, LogicItem } from '..';
2
+ import { BaseNode, LogicItem, AnonymousFunction, Param } from '..';
3
+ import type { ForEachStatement, Logic, View } from '..';
4
+ import * as types from '../concepts/utils/types';
5
+ import { getConceptPropertyMap } from '../decorators/index';
3
6
  import { traverse } from './traverse';
4
7
  // import TypeAnnotation from '../concepts/TypeAnnotation__';
5
8
  // import App from '../concepts/App__';
@@ -202,3 +205,210 @@ export function attrConvertCamelCase(str: string) {
202
205
  });
203
206
  return strList.join('');
204
207
  }
208
+
209
+ export class AnonymousFnNode {
210
+ node: types.SyntaxNode;
211
+ descendants: AnonymousFnNode[];
212
+ }
213
+
214
+ /**
215
+ * 收集匿名函数
216
+ * @param param0
217
+ * @returns
218
+ */
219
+ function collectAnonymousFn({
220
+ anonymousFnNode,
221
+ cb
222
+ }: {
223
+ anonymousFnNode: AnonymousFnNode;
224
+ cb: (anonymousFnNode: AnonymousFnNode) => void
225
+ }) {
226
+ const descendantsAnonyList: any = cb(anonymousFnNode);
227
+ const { node } = anonymousFnNode;
228
+ const propertyMap = getConceptPropertyMap(node?.concept);
229
+ if (!propertyMap) {
230
+ return;
231
+ }
232
+ for (const property of propertyMap.keys()) {
233
+ const child = node[property as keyof BaseNode];
234
+ if (!child) {
235
+ continue;
236
+ } else if (Array.isArray(child)) {
237
+ child.forEach((node: types.SyntaxNode) => collectAnonymousFn({
238
+ anonymousFnNode: {
239
+ node,
240
+ descendants: descendantsAnonyList
241
+ },
242
+ cb
243
+ }));
244
+ } else {
245
+ collectAnonymousFn({
246
+ anonymousFnNode: {
247
+ node: child,
248
+ descendants: descendantsAnonyList
249
+ },
250
+ cb
251
+ });
252
+ }
253
+ }
254
+ }
255
+
256
+ function getAnonymousFnNodes(node: types.SyntaxNode) {
257
+ const anonymousFnNodes: AnonymousFnNode[] = [];
258
+ // 1.匿名函数可能在里层,如:ListDistinctBy
259
+ // 2.存在多级匿名数据结构
260
+ collectAnonymousFn({
261
+ anonymousFnNode: {
262
+ node,
263
+ descendants: anonymousFnNodes
264
+ },
265
+ cb: (anonymousFnNode) => {
266
+ const { node, descendants } = anonymousFnNode;
267
+ if (node?.concept === 'AnonymousFunction') {
268
+ const newAnonymousNode: any = {
269
+ node,
270
+ descendants: [],
271
+ };
272
+ descendants?.push(newAnonymousNode);
273
+ return newAnonymousNode.descendants;
274
+ }
275
+ return descendants;
276
+ }
277
+ });
278
+ return anonymousFnNodes;
279
+ }
280
+
281
+ /**
282
+ * 父链上存在的参数名字
283
+ * @returns
284
+ */
285
+ function getAncestorExistingParamNames(baseNode: types.SyntaxNode) {
286
+ let node: BaseNode = baseNode;
287
+ const names: Set<string> = new Set();
288
+ while (node) {
289
+ node = node.parentNode;
290
+ switch (node?.concept) {
291
+ case 'AnonymousFunction':
292
+ (node as AnonymousFunction).params.forEach((param: Param) => {
293
+ names.add(param.name);
294
+ });
295
+ break;
296
+ case 'ForEachStatement':
297
+ names.add((node as ForEachStatement).item?.name);
298
+ names.add((node as ForEachStatement).index?.name);
299
+ break;
300
+ case 'Logic':
301
+ case 'View':
302
+ const varList = [
303
+ ...((node as Logic | View).params || []),
304
+ ...((node as Logic).returns || []),
305
+ ...((node as Logic | View).variables || [])
306
+ ];
307
+ varList?.forEach((variable) => {
308
+ names.add(variable?.name);
309
+ });
310
+ break;
311
+ }
312
+ }
313
+ return names;
314
+ }
315
+
316
+ /**
317
+ * 确保匿名函数的参数名称都是不重复的,且更新内部的引用关系
318
+ * @param param0
319
+ */
320
+ function ensureAnonymousFnsParamName({
321
+ ancestorParamNames,
322
+ anonymousFnNodes,
323
+ }: {
324
+ ancestorParamNames: Set<string>;
325
+ anonymousFnNodes: AnonymousFnNode[];
326
+ }) {
327
+ const paramInfoMapList: Map<string, any>[] = [];
328
+ anonymousFnNodes.forEach((anonymousFnNode) => {
329
+ const { node: anonymousFn, descendants } = anonymousFnNode || {};
330
+ const tempParamInfoMap = (anonymousFn as AnonymousFunction)?.ensureParamName(ancestorParamNames);
331
+ paramInfoMapList.push(tempParamInfoMap);
332
+ if (Array.isArray(descendants)) {
333
+ const paramNames = new Set([...ancestorParamNames]);
334
+ tempParamInfoMap.forEach((value) => {
335
+ paramNames.add(value.newName);
336
+ });
337
+ const descendantTempParamInfoMap = ensureAnonymousFnsParamName({
338
+ ancestorParamNames: paramNames,
339
+ anonymousFnNodes: descendants,
340
+ });
341
+ paramInfoMapList.push(...descendantTempParamInfoMap);
342
+ }
343
+ });
344
+ return paramInfoMapList;
345
+ }
346
+
347
+ /**
348
+ * 校验匿名函数的局部变量是否重名
349
+ */
350
+ export function checkParamNameOfAnonymousFunction(node: types.SyntaxNode) {
351
+ const anonymousFnNodes: any = getAnonymousFnNodes(node);
352
+ // 从外到里计算更改的name
353
+ const paramInfoMapList = ensureAnonymousFnsParamName({
354
+ ancestorParamNames: getAncestorExistingParamNames(node),
355
+ anonymousFnNodes
356
+ });
357
+ paramInfoMapList?.forEach((paramInfoMap: Map<string, any>) => {
358
+ paramInfoMap.forEach((paramInfo) => {
359
+ const { newName, param, identifiers } = paramInfo || {};
360
+ param?.update({
361
+ name: newName,
362
+ });
363
+ if (Array.isArray(identifiers)) {
364
+ identifiers.forEach((identifier) => {
365
+ identifier?.update({
366
+ name: newName,
367
+ });
368
+ });
369
+ }
370
+ });
371
+ });
372
+ }
373
+
374
+ // 获取内部匿名函数的局部变量
375
+ function collectAnonymousFnNodesParams(node: types.SyntaxNode) {
376
+ const paramNames: Set<string> = new Set();
377
+ const anonymousFnNodes = getAnonymousFnNodes(node);
378
+ if (Array.isArray(anonymousFnNodes)) {
379
+ anonymousFnNodes.forEach((anonymousFnNode) => {
380
+ const { node: anonymousFn, descendants } = anonymousFnNode || {};
381
+ (anonymousFn as AnonymousFunction).params.forEach((param: Param) => {
382
+ paramNames.add(param.name);
383
+ });
384
+ if (Array.isArray(descendants)) {
385
+ descendants.forEach(({
386
+ node: descendantNode
387
+ }) => {
388
+ const descendantParamNames = collectAnonymousFnNodesParams(descendantNode);
389
+ descendantParamNames.forEach((descendantParamName) => {
390
+ paramNames.add(descendantParamName);
391
+ });
392
+ });
393
+ }
394
+ });
395
+ }
396
+ return paramNames;
397
+ }
398
+
399
+ /**
400
+ * 新的参数名是否存在同名
401
+ * @param param0
402
+ */
403
+ export function hasParamNameOfAnonymousFunction({
404
+ node,
405
+ newName,
406
+ }: {
407
+ node: types.SyntaxNode,
408
+ newName: string
409
+ }) {
410
+ const ancestorParamNames = getAncestorExistingParamNames(node);
411
+ const anonymousFnNodesParams = collectAnonymousFnNodesParams(node);
412
+ const paramNames = new Set([...ancestorParamNames.values(), ...anonymousFnNodesParams.values()]);
413
+ return paramNames.has(newName);
414
+ }
@@ -14,77 +14,86 @@
14
14
  "enums": [],
15
15
  "logics": [],
16
16
  "interfaces": [],
17
- "frontends": [
17
+ "frontendTypes": [
18
18
  {
19
- "concept": "Frontend",
19
+ "concept": "FrontendType",
20
20
  "name": "pc",
21
- "title": "PC端",
22
- "type": "pc",
23
- "path": "/",
24
- "documentTitle": null,
25
- "documentIcon": null,
26
- "views": [
21
+ "kind": "pc",
22
+ "frontends": [
27
23
  {
28
- "concept": "View",
29
- "changedTime": 1691568444284,
30
- "name": "test",
31
- "title": "测试",
32
- "crumb": null,
33
- "auth": false,
34
- "isIndex": true,
35
- "script": "",
36
- "params": [],
37
- "variables": [],
38
- "logics": [
24
+ "concept": "Frontend",
25
+ "name": "pc",
26
+ "title": "PC端",
27
+ "type": "pc",
28
+ "path": "/",
29
+ "documentTitle": null,
30
+ "documentIcon": null,
31
+ "views": [
39
32
  {
40
- "__$Selected": true,
41
- "concept": "CallFunction",
42
- "name": "",
43
- "label": "内置函数",
44
- "folded": false,
45
- "offsetX": 361.90234375,
46
- "offsetY": 198.10546875,
47
- "calleeNamespace": "nasl.util",
48
- "calleeName": "FromString",
49
- "typeArguments": [
33
+ "concept": "View",
34
+ "changedTime": 1691568444284,
35
+ "name": "test",
36
+ "title": "测试",
37
+ "crumb": null,
38
+ "auth": false,
39
+ "isIndex": true,
40
+ "script": "",
41
+ "params": [],
42
+ "variables": [],
43
+ "logics": [
50
44
  {
51
- "concept": "TypeAnnotation",
52
- "name": "",
53
- "typeKind": "primitive",
54
- "typeNamespace": "nasl.core",
55
- "typeName": "Boolean",
56
- "typeArguments": null,
57
- "returnType": null,
58
- "properties": null
59
- }
60
- ],
61
- "arguments": [
62
- {
63
- "concept": "Argument",
45
+ "__$Selected": true,
46
+ "concept": "CallFunction",
64
47
  "name": "",
48
+ "label": "内置函数",
65
49
  "folded": false,
66
- "keyword": "value",
67
- "expression": {
68
- "concept": "Identifier",
69
- "name": "str",
70
- "folded": false
71
- }
50
+ "offsetX": 361.90234375,
51
+ "offsetY": 198.10546875,
52
+ "calleeNamespace": "nasl.util",
53
+ "calleeName": "FromString",
54
+ "typeArguments": [
55
+ {
56
+ "concept": "TypeAnnotation",
57
+ "name": "",
58
+ "typeKind": "primitive",
59
+ "typeNamespace": "nasl.core",
60
+ "typeName": "Boolean",
61
+ "typeArguments": null,
62
+ "returnType": null,
63
+ "properties": null
64
+ }
65
+ ],
66
+ "arguments": [
67
+ {
68
+ "concept": "Argument",
69
+ "name": "",
70
+ "folded": false,
71
+ "keyword": "value",
72
+ "expression": {
73
+ "concept": "Identifier",
74
+ "name": "str",
75
+ "folded": false
76
+ }
77
+ }
78
+ ]
72
79
  }
73
- ]
80
+ ],
81
+ "bindEvents": [],
82
+ "bindRoles": [],
83
+ "children": []
74
84
  }
75
85
  ],
76
- "bindEvents": [],
77
- "bindRoles": [],
78
- "children": []
86
+ "variables": [],
87
+ "theme": {
88
+ "concept": "Theme",
89
+ "name": "",
90
+ "title": "默认主题样式",
91
+ "variableMap": {}
92
+ },
93
+ "componentDependencies": []
79
94
  }
80
95
  ],
81
- "variables": [],
82
- "theme": {
83
- "concept": "Theme",
84
- "name": "",
85
- "title": "默认主题样式",
86
- "variableMap": {}
87
- },
96
+ "businessComponents": [],
88
97
  "componentDependencies": []
89
98
  }
90
99
  ],
@@ -14,76 +14,85 @@
14
14
  "enums": [],
15
15
  "logics": [],
16
16
  "interfaces": [],
17
- "frontends": [
17
+ "frontendTypes": [
18
18
  {
19
- "concept": "Frontend",
19
+ "concept": "FrontendType",
20
20
  "name": "pc",
21
- "title": "PC端",
22
- "type": "pc",
23
- "path": "/",
24
- "documentTitle": null,
25
- "documentIcon": null,
26
- "views": [
21
+ "kind": "pc",
22
+ "frontends": [
27
23
  {
28
- "concept": "View",
29
- "changedTime": 1691568444284,
30
- "name": "test",
31
- "title": "测试",
32
- "crumb": null,
33
- "auth": false,
34
- "isIndex": true,
35
- "script": "",
36
- "params": [],
37
- "variables": [],
38
- "logics": [
24
+ "concept": "Frontend",
25
+ "name": "pc",
26
+ "title": "PC端",
27
+ "type": "pc",
28
+ "path": "/",
29
+ "documentTitle": null,
30
+ "documentIcon": null,
31
+ "views": [
39
32
  {
40
- "__$Selected": true,
41
- "concept": "CallFunction",
42
- "name": "",
43
- "label": "内置函数",
44
- "folded": false,
45
- "calleeNamespace": "nasl.util",
46
- "calleeName": "ToString",
47
- "typeArguments": [],
48
- "arguments": [
33
+ "concept": "View",
34
+ "changedTime": 1691568444284,
35
+ "name": "test",
36
+ "title": "测试",
37
+ "crumb": null,
38
+ "auth": false,
39
+ "isIndex": true,
40
+ "script": "",
41
+ "params": [],
42
+ "variables": [],
43
+ "logics": [
49
44
  {
50
- "concept": "Argument",
45
+ "__$Selected": true,
46
+ "concept": "CallFunction",
51
47
  "name": "",
48
+ "label": "内置函数",
52
49
  "folded": false,
53
- "keyword": "value",
54
- "expression": {
55
- "concept": "Identifier",
56
- "name": "dt",
57
- "folded": false
58
- }
59
- },
60
- {
61
- "concept": "Argument",
62
- "name": "",
63
- "folded": false,
64
- "keyword": "时区",
65
- "expression": {
66
- "concept": "StringLiteral",
67
- "name": "ToStringTimeZoneDefaultExpression",
68
- "folded": false,
69
- "value": "global"
70
- }
50
+ "calleeNamespace": "nasl.util",
51
+ "calleeName": "ToString",
52
+ "typeArguments": [],
53
+ "arguments": [
54
+ {
55
+ "concept": "Argument",
56
+ "name": "",
57
+ "folded": false,
58
+ "keyword": "value",
59
+ "expression": {
60
+ "concept": "Identifier",
61
+ "name": "dt",
62
+ "folded": false
63
+ }
64
+ },
65
+ {
66
+ "concept": "Argument",
67
+ "name": "",
68
+ "folded": false,
69
+ "keyword": "时区",
70
+ "expression": {
71
+ "concept": "StringLiteral",
72
+ "name": "ToStringTimeZoneDefaultExpression",
73
+ "folded": false,
74
+ "value": "global"
75
+ }
76
+ }
77
+ ]
71
78
  }
72
- ]
79
+ ],
80
+ "bindEvents": [],
81
+ "bindRoles": [],
82
+ "children": []
73
83
  }
74
84
  ],
75
- "bindEvents": [],
76
- "bindRoles": [],
77
- "children": []
85
+ "variables": [],
86
+ "theme": {
87
+ "concept": "Theme",
88
+ "name": "",
89
+ "title": "默认主题样式",
90
+ "variableMap": {}
91
+ },
92
+ "componentDependencies": []
78
93
  }
79
94
  ],
80
- "variables": [],
81
- "theme": {
82
- "concept": "Theme",
83
- "name": "",
84
- "title": "默认主题样式",
85
- "variableMap": {}
86
- },
95
+ "businessComponents": [],
87
96
  "componentDependencies": []
88
97
  }
89
98
  ],