@lcap/nasl 2.18.0 → 2.20.0-beta.1

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 (326) hide show
  1. package/out/automate/engine/index.js +3 -3
  2. package/out/automate/engine/index.js.map +1 -1
  3. package/out/bak/translator.js +85 -37
  4. package/out/bak/translator.js.map +1 -1
  5. package/out/common/BaseNode.d.ts +6 -10
  6. package/out/common/BaseNode.js +7 -52
  7. package/out/common/BaseNode.js.map +1 -1
  8. package/out/concepts/AnonymousFunction__.js.map +1 -1
  9. package/out/concepts/App__.d.ts +0 -10
  10. package/out/concepts/App__.js +0 -74
  11. package/out/concepts/App__.js.map +1 -1
  12. package/out/concepts/Assignee__.js.map +1 -1
  13. package/out/concepts/AssignmentLine__.d.ts +5 -5
  14. package/out/concepts/AssignmentLine__.js +6 -6
  15. package/out/concepts/AssignmentLine__.js.map +1 -1
  16. package/out/concepts/Assignment__.js +2 -1
  17. package/out/concepts/Assignment__.js.map +1 -1
  18. package/out/concepts/BatchAssignment__.d.ts +60 -60
  19. package/out/concepts/BatchAssignment__.js +11 -21
  20. package/out/concepts/BatchAssignment__.js.map +1 -1
  21. package/out/concepts/BindAttribute__.d.ts +0 -19
  22. package/out/concepts/BindAttribute__.js +2 -39
  23. package/out/concepts/BindAttribute__.js.map +1 -1
  24. package/out/concepts/BindEvent__.js.map +1 -1
  25. package/out/concepts/BindStyle__.d.ts +2 -2
  26. package/out/concepts/BindStyle__.js +3 -3
  27. package/out/concepts/BindStyle__.js.map +1 -1
  28. package/out/concepts/BooleanLiteral__.js +8 -0
  29. package/out/concepts/BooleanLiteral__.js.map +1 -1
  30. package/out/concepts/CallFunction__.js +25 -58
  31. package/out/concepts/CallFunction__.js.map +1 -1
  32. package/out/concepts/CallInterface__.d.ts +0 -7
  33. package/out/concepts/CallInterface__.js +7 -53
  34. package/out/concepts/CallInterface__.js.map +1 -1
  35. package/out/concepts/CallLogic__.js +14 -63
  36. package/out/concepts/CallLogic__.js.map +1 -1
  37. package/out/concepts/CallQueryComponent__.js +1 -13
  38. package/out/concepts/CallQueryComponent__.js.map +1 -1
  39. package/out/concepts/CompletionProperty__.js +0 -3
  40. package/out/concepts/CompletionProperty__.js.map +1 -1
  41. package/out/concepts/ConfigGroup__.js.map +1 -1
  42. package/out/concepts/ConfigProperty__.js.map +1 -1
  43. package/out/concepts/Configuration__.js.map +1 -1
  44. package/out/concepts/DataSource__.d.ts +0 -6
  45. package/out/concepts/DataSource__.js +0 -41
  46. package/out/concepts/DataSource__.js.map +1 -1
  47. package/out/concepts/Destination__.d.ts +1 -9
  48. package/out/concepts/Destination__.js +29 -61
  49. package/out/concepts/Destination__.js.map +1 -1
  50. package/out/concepts/EntityProperty__.d.ts +8 -21
  51. package/out/concepts/EntityProperty__.js +23 -109
  52. package/out/concepts/EntityProperty__.js.map +1 -1
  53. package/out/concepts/Entity__.d.ts +0 -32
  54. package/out/concepts/Entity__.js +2 -117
  55. package/out/concepts/Entity__.js.map +1 -1
  56. package/out/concepts/Enum__.js +4 -0
  57. package/out/concepts/Enum__.js.map +1 -1
  58. package/out/concepts/Event__.js.map +1 -1
  59. package/out/concepts/ForEachStatement__.d.ts +4 -0
  60. package/out/concepts/ForEachStatement__.js +8 -4
  61. package/out/concepts/ForEachStatement__.js.map +1 -1
  62. package/out/concepts/Function__.js.map +1 -1
  63. package/out/concepts/Identifier__.js +4 -16
  64. package/out/concepts/Identifier__.js.map +1 -1
  65. package/out/concepts/IfStatement__.d.ts +0 -8
  66. package/out/concepts/IfStatement__.js +0 -22
  67. package/out/concepts/IfStatement__.js.map +1 -1
  68. package/out/concepts/InterfaceParam__.js.map +1 -1
  69. package/out/concepts/Interface__.js.map +1 -1
  70. package/out/concepts/LogicItem__.d.ts +1 -1
  71. package/out/concepts/LogicItem__.js.map +1 -1
  72. package/out/concepts/Logic__.d.ts +1 -6
  73. package/out/concepts/Logic__.js +43 -144
  74. package/out/concepts/Logic__.js.map +1 -1
  75. package/out/concepts/MatchCase__.d.ts +1 -1
  76. package/out/concepts/MatchCase__.js +8 -15
  77. package/out/concepts/MatchCase__.js.map +1 -1
  78. package/out/concepts/Match__.d.ts +19 -21
  79. package/out/concepts/Match__.js +25 -112
  80. package/out/concepts/Match__.js.map +1 -1
  81. package/out/concepts/MemberExpression__.d.ts +1 -4
  82. package/out/concepts/MemberExpression__.js +15 -30
  83. package/out/concepts/MemberExpression__.js.map +1 -1
  84. package/out/concepts/Module__.js.map +1 -1
  85. package/out/concepts/Namespace__.js.map +1 -1
  86. package/out/concepts/NumericLiteral__.js +1 -1
  87. package/out/concepts/NumericLiteral__.js.map +1 -1
  88. package/out/concepts/OqlQueryComponent__.d.ts +3 -7
  89. package/out/concepts/OqlQueryComponent__.js +95 -56
  90. package/out/concepts/OqlQueryComponent__.js.map +1 -1
  91. package/out/concepts/Param__.d.ts +1 -1
  92. package/out/concepts/Param__.js +4 -40
  93. package/out/concepts/Param__.js.map +1 -1
  94. package/out/concepts/ProcessComponent__.js.map +1 -1
  95. package/out/concepts/ProcessElement__.js.map +1 -1
  96. package/out/concepts/Process__.js.map +1 -1
  97. package/out/concepts/QueryJoinExpression__.js.map +1 -1
  98. package/out/concepts/QueryOrderByExpression__.d.ts +3 -3
  99. package/out/concepts/QueryOrderByExpression__.js +3 -3
  100. package/out/concepts/QueryOrderByExpression__.js.map +1 -1
  101. package/out/concepts/QuerySelectExpression__.js.map +1 -1
  102. package/out/concepts/Return__.js +2 -38
  103. package/out/concepts/Return__.js.map +1 -1
  104. package/out/concepts/SelectMembers__.d.ts +1 -1
  105. package/out/concepts/SelectMembers__.js +2 -2
  106. package/out/concepts/SelectMembers__.js.map +1 -1
  107. package/out/concepts/SqlQueryComponent__.d.ts +4 -2
  108. package/out/concepts/SqlQueryComponent__.js +88 -9
  109. package/out/concepts/SqlQueryComponent__.js.map +1 -1
  110. package/out/concepts/StringLiteral__.js +7 -0
  111. package/out/concepts/StringLiteral__.js.map +1 -1
  112. package/out/concepts/StructureProperty__.js.map +1 -1
  113. package/out/concepts/Structure__.js.map +1 -1
  114. package/out/concepts/TypeAnnotation__.d.ts +0 -1
  115. package/out/concepts/TypeAnnotation__.js +12 -25
  116. package/out/concepts/TypeAnnotation__.js.map +1 -1
  117. package/out/concepts/TypeParam__.d.ts +0 -1
  118. package/out/concepts/TypeParam__.js +0 -2
  119. package/out/concepts/TypeParam__.js.map +1 -1
  120. package/out/concepts/UnaryExpression__.js +9 -6
  121. package/out/concepts/UnaryExpression__.js.map +1 -1
  122. package/out/concepts/ValidationRule__.js +23 -88
  123. package/out/concepts/ValidationRule__.js.map +1 -1
  124. package/out/concepts/Variable__.js +2 -38
  125. package/out/concepts/Variable__.js.map +1 -1
  126. package/out/concepts/ViewComponent__.js.map +1 -1
  127. package/out/concepts/ViewElement__.d.ts +29 -30
  128. package/out/concepts/ViewElement__.js +51 -117
  129. package/out/concepts/ViewElement__.js.map +1 -1
  130. package/out/concepts/View__.d.ts +3 -4
  131. package/out/concepts/View__.js +83 -93
  132. package/out/concepts/View__.js.map +1 -1
  133. package/out/concepts/WhileStatement__.js +1 -1
  134. package/out/concepts/WhileStatement__.js.map +1 -1
  135. package/out/concepts/basics/stdlib/nasl.browser.js +0 -50
  136. package/out/concepts/basics/stdlib/nasl.browser.js.map +1 -1
  137. package/out/concepts/basics/stdlib/nasl.ui.js +4 -36
  138. package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
  139. package/out/concepts/basics/stdlib/nasl.util.js +43 -63
  140. package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
  141. package/out/concepts/index__.d.ts +0 -2
  142. package/out/concepts/index__.js +0 -2
  143. package/out/concepts/index__.js.map +1 -1
  144. package/out/generator/genBundleFiles.d.ts +2 -5
  145. package/out/generator/genBundleFiles.js +45 -148
  146. package/out/generator/genBundleFiles.js.map +1 -1
  147. package/out/generator/index.d.ts +0 -1
  148. package/out/generator/index.js +0 -1
  149. package/out/generator/index.js.map +1 -1
  150. package/out/index.d.ts +2 -3
  151. package/out/index.js +1 -5
  152. package/out/index.js.map +1 -1
  153. package/out/server/entity2LogicNamespace.js +11 -11
  154. package/out/server/entity2LogicNamespace.js.map +1 -1
  155. package/out/server/extendBaseNode.js.map +1 -1
  156. package/out/server/formatTsUtils.js +17 -10
  157. package/out/server/formatTsUtils.js.map +1 -1
  158. package/out/server/getLogics.js +6 -13
  159. package/out/server/getLogics.js.map +1 -1
  160. package/out/server/getMemberIdentifier.js +7 -7
  161. package/out/server/getMemberIdentifier.js.map +1 -1
  162. package/out/server/getProcesses.d.ts +1 -1
  163. package/out/server/index.d.ts +1 -0
  164. package/out/server/index.js +27 -2
  165. package/out/server/index.js.map +1 -1
  166. package/out/server/naslServer.d.ts +7 -47
  167. package/out/server/naslServer.js +393 -591
  168. package/out/server/naslServer.js.map +1 -1
  169. package/out/server/naslStdlibMap.js +28 -30
  170. package/out/server/naslStdlibMap.js.map +1 -1
  171. package/out/server/translator.js +7 -40
  172. package/out/server/translator.js.map +1 -1
  173. package/out/service/storage/init.js +3 -33
  174. package/out/service/storage/init.js.map +1 -1
  175. package/out/templator/genCreateBlock.js +4 -6
  176. package/out/templator/genCreateBlock.js.map +1 -1
  177. package/out/templator/genCurdEditMultipleKeyBlock.js +4 -7
  178. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  179. package/out/templator/genCurdMultipleKeyBlock.js +5 -7
  180. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  181. package/out/templator/genEnumSelectBlock.js +2 -5
  182. package/out/templator/genEnumSelectBlock.js.map +1 -1
  183. package/out/templator/genGridViewBlock.js +2 -2
  184. package/out/templator/genGridViewBlock.js.map +1 -1
  185. package/out/templator/genListViewBlock.js +2 -2
  186. package/out/templator/genListViewBlock.js.map +1 -1
  187. package/out/templator/genQueryComponent.d.ts +2 -2
  188. package/out/templator/genQueryComponent.js +1 -4
  189. package/out/templator/genQueryComponent.js.map +1 -1
  190. package/out/templator/genTableBlock.js +2 -2
  191. package/out/templator/genTableBlock.js.map +1 -1
  192. package/out/templator/genUpdateBlock.js +3 -4
  193. package/out/templator/genUpdateBlock.js.map +1 -1
  194. package/out/templator/utils.js +1 -1
  195. package/out/templator/utils.js.map +1 -1
  196. package/out/test/integration/node-nasl-server.js +38 -10
  197. package/out/test/integration/node-nasl-server.js.map +1 -1
  198. package/out/translator/index.d.ts +0 -1
  199. package/out/translator/index.js +1 -1
  200. package/out/translator/index.js.map +1 -1
  201. package/out/utils/index.d.ts +0 -1
  202. package/out/utils/index.js +1 -38
  203. package/out/utils/index.js.map +1 -1
  204. package/out/utils/string.d.ts +2 -15
  205. package/out/utils/string.js +3 -18
  206. package/out/utils/string.js.map +1 -1
  207. package/package.json +2 -2
  208. package/sandbox/stdlib/nasl.auth.ts +1 -1
  209. package/sandbox/stdlib/nasl.core.ts +1 -0
  210. package/sandbox/stdlib/nasl.logging.ts +4 -4
  211. package/sandbox/stdlib/nasl.util.ts +9 -5
  212. package/src/automate/engine/index.js +4 -4
  213. package/src/automate/engine/uniqueName.js +3 -3
  214. package/src/automate/template/myProcess.js +1 -1
  215. package/src/automate/upgrader/2.20.js +41 -0
  216. package/src/bak/translator.js +4 -1
  217. package/src/common/BaseNode.ts +1 -0
  218. package/src/concepts/AnonymousFunction__.ts +48 -2
  219. package/src/concepts/App__.ts +288 -615
  220. package/src/concepts/BatchAssignment__.ts +111 -51
  221. package/src/concepts/BindAttribute__.ts +18 -25
  222. package/src/concepts/BindDirective__.ts +7 -0
  223. package/src/concepts/BindEvent__.ts +7 -0
  224. package/src/concepts/BindStyle__.ts +7 -0
  225. package/src/concepts/CallFunction__.ts +34 -45
  226. package/src/concepts/CallInterface__.ts +2 -1
  227. package/src/concepts/CallLogic__.ts +87 -55
  228. package/src/concepts/CallQueryComponent__.ts +4 -1
  229. package/src/concepts/Constant__.ts +7 -0
  230. package/src/concepts/DataSource__.ts +57 -5
  231. package/src/concepts/Destination__.ts +100 -43
  232. package/src/concepts/Frontend__.ts +937 -0
  233. package/src/concepts/Identifier__.ts +18 -16
  234. package/src/concepts/LogicItem__.ts +8 -1
  235. package/src/concepts/Logic__.ts +134 -149
  236. package/src/concepts/Match__.ts +13 -29
  237. package/src/concepts/NewComposite__.ts +1357 -0
  238. package/src/concepts/NewList__.ts +440 -0
  239. package/src/concepts/NewMap__.ts +666 -0
  240. package/src/concepts/New__.ts +73 -0
  241. package/src/concepts/Param__.ts +245 -199
  242. package/src/concepts/ProcessElement__.ts +43 -36
  243. package/src/concepts/ProcessOutcomes__.ts +90 -0
  244. package/src/concepts/Process__.ts +1 -23
  245. package/src/concepts/Return__.ts +11 -1
  246. package/src/concepts/SelectMembers__.ts +3 -3
  247. package/src/concepts/Transactional__.ts +7 -0
  248. package/src/concepts/TypeAnnotation__.ts +54 -49
  249. package/src/concepts/ValidationRule__.ts +19 -1
  250. package/src/concepts/Variable__.ts +12 -6
  251. package/src/concepts/ViewElement__.ts +26 -3
  252. package/src/concepts/View__.ts +25 -25
  253. package/src/concepts/basics/stdlib/nasl.auth.ts +1 -1
  254. package/src/concepts/basics/stdlib/nasl.logging.ts +5 -0
  255. package/src/concepts/basics/stdlib/nasl.ui.ts +2 -0
  256. package/src/concepts/basics/stdlib/nasl.util.ts +153 -19
  257. package/src/concepts/index__.ts +7 -0
  258. package/src/enums/KEYWORDS.ts +9 -0
  259. package/src/generator/genBundleFiles.ts +74 -245
  260. package/src/generator/genMetaData.ts +178 -78
  261. package/src/generator/genReleaseBody.ts +87 -44
  262. package/src/generator/index.ts +1 -0
  263. package/src/generator/permission.ts +261 -0
  264. package/src/index.ts +1 -1
  265. package/src/server/entity2LogicNamespace.ts +90 -10
  266. package/src/server/extendBaseNode.ts +33 -22
  267. package/src/server/formatTsUtils.ts +36 -46
  268. package/src/server/getLogics.ts +13 -1
  269. package/src/server/getMemberIdentifier.ts +5 -5
  270. package/src/server/getProcesses.ts +1 -1
  271. package/src/server/naslServer.ts +254 -71
  272. package/src/server/process2LogicNamespace.ts +8 -0
  273. package/src/server/translator.ts +51 -5
  274. package/src/service/creator/add.configs.js +4 -0
  275. package/src/service/datasource/api.js +11 -0
  276. package/src/service/datasource/index.js +6 -0
  277. package/src/service/storage/init.ts +12 -0
  278. package/src/service/video/VideoTranscribe.js +1 -0
  279. package/src/templator/genEditTableBlock.ts +8 -16
  280. package/src/templator/genGetBlock.ts +18 -19
  281. package/src/templator/genGridViewBlock.ts +18 -18
  282. package/src/templator/genListViewBlock.ts +8 -11
  283. package/src/templator/genTableBlock.ts +6 -10
  284. package/ts-worker/lib/tsserver.js +8 -1
  285. package/out/automate/engine/2.14-components.d.ts +0 -1115
  286. package/out/automate/engine/2.14-components.js +0 -1087
  287. package/out/automate/engine/2.14-components.js.map +0 -1
  288. package/out/concepts/ExternalDestination__.d.ts +0 -73
  289. package/out/concepts/ExternalDestination__.js +0 -264
  290. package/out/concepts/ExternalDestination__.js.map +0 -1
  291. package/out/concepts/MatchExpression__.d.ts +0 -97
  292. package/out/concepts/MatchExpression__.js +0 -281
  293. package/out/concepts/MatchExpression__.js.map +0 -1
  294. package/out/concepts/StringInterpolation__.d.ts +0 -113
  295. package/out/concepts/StringInterpolation__.js +0 -227
  296. package/out/concepts/StringInterpolation__.js.map +0 -1
  297. package/out/generator/genReleaseBody.d.ts +0 -41
  298. package/out/generator/genReleaseBody.js +0 -340
  299. package/out/generator/genReleaseBody.js.map +0 -1
  300. package/out/service/defaultErrorMessage.json +0 -97
  301. package/out/service/logic/api.d.ts +0 -9
  302. package/out/service/logic/api.js +0 -11
  303. package/out/service/logic/api.js.map +0 -1
  304. package/out/service/logic/index.d.ts +0 -2
  305. package/out/service/logic/index.js +0 -10
  306. package/out/service/logic/index.js.map +0 -1
  307. package/src/automate/engine/dist/index.dev.js +0 -517
  308. package/src/common/dist/BaseNode.js +0 -1101
  309. package/src/concepts/basics/stdlib/dist/reference2TypeAnnotationList.js +0 -24
  310. package/src/concepts/dist/Anchor__.js +0 -179
  311. package/src/concepts/dist/Assignment__.js +0 -301
  312. package/src/concepts/dist/CallFunction__.js +0 -473
  313. package/src/concepts/dist/CallInterface__.js +0 -533
  314. package/src/concepts/dist/CallLogic__.js +0 -864
  315. package/src/concepts/dist/ForEachStatement__.js +0 -426
  316. package/src/concepts/dist/MatchCase__.js +0 -587
  317. package/src/concepts/dist/MemberExpression__.js +0 -348
  318. package/src/concepts/dist/Param__.js +0 -537
  319. package/src/concepts/dist/Return__.js +0 -493
  320. package/src/generator/dist/genBundleFiles.js +0 -414
  321. package/src/server/dist/formatTsUtils.js +0 -683
  322. package/src/server/dist/naslServer.js +0 -3396
  323. package/src/service/storage/dist/init.js +0 -541
  324. package/ts-worker/dist/webpack.config.dev.js +0 -104
  325. package/ts-worker/lib/dist/tsserver.dev.js +0 -22953
  326. package/ts-worker/sources/lib/dist/tsserver.dev.js +0 -22912
@@ -1,65 +1,99 @@
1
- import { App, View, BaseNode, Module, Interface, Entity, Structure, Enum, uiStructures, collectionStructures, processStructures, Logic, Process, DataSource } from '../concepts';
2
-
3
- export function genMetaData(app: App,
4
- config: {
5
- tenant: string;
6
- env: string;
7
- nuimsDomain: string;
8
- envNuimsDomain: Object;
9
- STATIC_URL: string;
10
- USER_STATIC_URL: string;
11
- extendedConfig: string;
12
- lowcodeDomain: string;
13
- }) {
1
+ import {
2
+ App, Module, View, Entity, Structure, Enum,
3
+ uiStructures, collectionStructures, interfaceStructures, processStructures,
4
+ Logic, Interface, Process, BaseNode, Frontend,
5
+ } from '../concepts';
6
+ import * as utils from '../utils';
7
+
8
+ // 生成typeKey
9
+ function genSortedTypeKey(typeAnnotation: any) {
10
+ const {
11
+ typeKind, typeNamespace, typeName,
12
+ typeArguments, properties,
13
+ } = typeAnnotation || {};
14
+ const typeKeyArr = [];
15
+ if (typeKind === 'union') { // 联合类型
16
+ if (Array.isArray(typeArguments)) {
17
+ // 按返回的每个具体项排序
18
+ const childTypeArgs: any = typeArguments.map((typeArg) => genSortedTypeKey(typeArg)).sort((name1, name2) => name1 > name2 ? 1 : -1);
19
+ typeKeyArr.push(childTypeArgs.join(' | '));
20
+ }
21
+ } else if (typeKind === 'anonymousStructure') { // 匿名数据结构
22
+ typeKeyArr.push('{');
23
+ if (Array.isArray(properties)) {
24
+ // 按匿名数据结构的key排序
25
+ const childTypeArgs: any = properties.sort(({ name: name1 }, { name: name2 }) => name1 > name2 ? 1 : -1).map((typeArg) => {
26
+ const { name: typeArgName, typeAnnotation: typeArgTypeAnnotation } = typeArg || {};
27
+ return `${typeArgName}: ${genSortedTypeKey(typeArgTypeAnnotation)}`;
28
+ });
29
+ typeKeyArr.push(childTypeArgs.join(', '));
30
+ }
31
+ typeKeyArr.push('}');
32
+ } else {
33
+ const typeArr = [];
34
+ typeNamespace && typeArr.push(typeNamespace);
35
+ typeName && typeArr.push(typeName);
36
+ const typeKey = typeArr.join('.');
37
+ typeKey && typeKeyArr.push(typeKey);
38
+ if (typeKind === 'generic') {
39
+ typeKeyArr.push('<');
40
+ if (Array.isArray(typeArguments)) {
41
+ // 必须按typeArguments定义的顺序,否则实参位置不对
42
+ const childTypeArgs: any = typeArguments.map((typeArg) => genSortedTypeKey(typeArg));
43
+ typeKeyArr.push(childTypeArgs.join(', '));
44
+ }
45
+ typeKeyArr.push('>');
46
+ }
47
+ }
48
+ return typeKeyArr.join('');
49
+ }
50
+
51
+ export function genMetaData(app: App, frontend: Frontend) {
14
52
  const modules: Module[] = [];
15
53
  const views: View[] = [];
16
- const dataSources: DataSource[] = [];
54
+ const entities: Entity[] = [];
17
55
  const structures: Structure[] = [];
18
56
  const enums: Enum[] = [];
19
57
  const logics: Logic[] = [];
20
58
  const interfaces: Interface[] = [];
21
59
  const processes: Process[] = [];
22
60
 
23
- const {
24
- dataSources: appDataSources = [],
25
- structures: appStructures = [],
26
- enums: appEnums = [],
27
- logics: appLogics = [],
28
- interfaceDependencies: appInterfaceDependencies = [],
29
- dependencies: appDependencies = [],
30
- processes: appProcesses = [],
31
- } = app || {};
32
- dataSources.push(...appDataSources);
33
- structures.push(...appStructures);
34
- enums.push(...appEnums);
35
- logics.push(...appLogics);
36
- processes.push(...appProcesses);
37
- if (Array.isArray(appDependencies)) {
38
- modules.push(...appDependencies);
39
- }
40
- if (Array.isArray(appInterfaceDependencies)) {
41
- modules.push(...appInterfaceDependencies);
61
+ frontend.views && views.push(...frontend.views);
62
+ if (Array.isArray(app.dataSources)) {
63
+ app.dataSources.forEach((dataSource) => {
64
+ if (Array.isArray(dataSource.entities)) {
65
+ entities.push(...dataSource.entities);
66
+ }
67
+ });
42
68
  }
69
+ app.structures && structures.push(...app.structures);
70
+ app.enums && enums.push(...app.enums);
71
+ app.logics && logics.push(...app.logics);
72
+ app.processes && processes.push(...app.processes);
73
+
74
+ app.dependencies && modules.push(...app.dependencies);
75
+ app.interfaceDependencies && modules.push(...app.interfaceDependencies);
76
+
43
77
  modules.forEach((module: Module) => {
44
- const {
45
- views: moduleViews = [],
46
- structures: moduleStructures = [],
47
- enums: moduleEnums = [],
48
- logics: moduleLogics = [],
49
- interfaces: moduleInterfaces = [],
50
- } = module;
51
- views.push(...moduleViews);
52
- structures.push(...moduleStructures);
53
- enums.push(...moduleEnums);
54
- logics.push(...moduleLogics);
55
- interfaces.push(...moduleInterfaces);
78
+ module.views && views.push(...module.views);
79
+ module.structures && structures.push(...module.structures);
80
+ module.enums && enums.push(...module.enums);
81
+ module.logics && logics.push(...module.logics);
82
+ module.interfaces && interfaces.push(...module.interfaces);
83
+ if (Array.isArray(module.dataSources)) {
84
+ module.dataSources.forEach((dataSource) => {
85
+ if (Array.isArray(dataSource.entities)) {
86
+ entities.push(...dataSource.entities);
87
+ }
88
+ });
89
+ }
56
90
  });
57
91
  const dataTypes: (Entity | Structure | Enum)[] = [];
58
92
 
59
93
  const dataTypesMap: {
60
94
  [id: string]: BaseNode;
61
95
  } = {};
62
- const frontendVariables = app.frontendVariables;
96
+ const frontendVariables = frontend.variables;
63
97
  const enumsMap: {
64
98
  [name: string]: {
65
99
  [label: string]: string;
@@ -80,6 +114,7 @@ export function genMetaData(app: App,
80
114
  [id: string]: any;
81
115
  } = {};
82
116
  const allLogics: Logic[] = [];
117
+
83
118
  if (Array.isArray(enums)) {
84
119
  dataTypes.push(...enums);
85
120
  enums.forEach((node) => {
@@ -96,17 +131,17 @@ export function genMetaData(app: App,
96
131
  enumsMap[name] = enumObj;
97
132
  });
98
133
  }
99
- if (Array.isArray(dataSources)) {
100
- dataSources.forEach((dataSource) => {
101
- dataSource.entities.forEach((entity) => {
102
- dataTypes.push(entity);
103
- const ns = entity.ns;
104
- if (Array.isArray(ns?.logics)) {
105
- allLogics.push(...ns.logics);
106
- }
107
- });
134
+
135
+ if (Array.isArray(entities)) {
136
+ dataTypes.push(...entities);
137
+ entities.forEach((entity) => {
138
+ const ns = entity.ns;
139
+ if (Array.isArray(ns?.logics)) {
140
+ allLogics.push(...ns.logics);
141
+ }
108
142
  });
109
143
  }
144
+
110
145
  if (Array.isArray(structures)) {
111
146
  dataTypes.push(...structures);
112
147
  }
@@ -114,31 +149,47 @@ export function genMetaData(app: App,
114
149
  dataTypes.forEach((node) => {
115
150
  const namespace = node.getNamespace();
116
151
  const id = `${namespace}.${node.name}`;
117
- dataTypesMap[id] = node;
152
+ dataTypesMap[id] = node.toJSON?.();
153
+ const { properties } = (node) as any;
154
+ if (Array.isArray(properties)) {
155
+ properties.forEach((property) => {
156
+ collectTypeAnnotation(property?.typeAnnotation);
157
+ });
158
+ }
118
159
  });
119
- if (Array.isArray(uiStructures)) {
120
- const namespace = 'nasl.ui';
121
- uiStructures.forEach((node) => {
122
- const id = `${namespace}.${node.name}`;
123
- dataTypesMap[id] = node;
124
- });
125
- }
126
160
 
127
- if (Array.isArray(collectionStructures)) {
128
- const namespace = 'nasl.collection';
129
- collectionStructures.forEach((node) => {
130
- const id = `${namespace}.${node.name}`;
131
- dataTypesMap[id] = node;
132
- });
133
- }
134
-
135
- if (Array.isArray(processStructures)) {
136
- const namespace = 'nasl.process';
137
- processStructures.forEach((node) => {
138
- const id = `${namespace}.${node.name}`;
139
- dataTypesMap[id] = node;
140
- });
141
- }
161
+ [
162
+ {
163
+ namespace: 'nasl.ui',
164
+ list: uiStructures,
165
+ },
166
+ {
167
+ namespace: 'nasl.collection',
168
+ list: collectionStructures,
169
+ },
170
+ {
171
+ namespace: 'nasl.interface',
172
+ list: interfaceStructures,
173
+ },
174
+ {
175
+ namespace: 'nasl.process',
176
+ list: processStructures,
177
+ },
178
+ ].forEach((item) => {
179
+ const { namespace, list } = item || {};
180
+ if (Array.isArray(list)) {
181
+ list.forEach((node) => {
182
+ const id = `${namespace}.${node.name}`;
183
+ dataTypesMap[id] = node.toJSON?.();
184
+ const { properties } = (node) as any;
185
+ if (Array.isArray(properties)) {
186
+ properties.forEach((property) => {
187
+ collectTypeAnnotation(property?.typeAnnotation);
188
+ });
189
+ }
190
+ });
191
+ }
192
+ });
142
193
 
143
194
  if (Array.isArray(logics)) {
144
195
  allLogics.push(...logics);
@@ -164,6 +215,55 @@ export function genMetaData(app: App,
164
215
  _custom[`${interfaceItem.getNamespace()}.${interfaceItem.name}`] = interfaceItem.toService();
165
216
  });
166
217
 
218
+ utils.traverse((current) => {
219
+ const { node } = current || {};
220
+ collectTypeAnnotation(node?.typeAnnotation || node?.__TypeAnnotation);
221
+ }, {
222
+ node: {
223
+ children: views,
224
+ } as any,
225
+ }, {
226
+ mode: 'anyObject',
227
+ excludedKeySet: new Set([
228
+ 'parentNode',
229
+ 'sourceMap',
230
+ 'storageJSON',
231
+ 'tsErrorDetail',
232
+ 'NaslAnnotatedJSON',
233
+ 'calledFrom',
234
+ '_events',
235
+ '_collectingList',
236
+ '_historyList',
237
+ ]),
238
+ });
239
+
240
+ if (Array.isArray(frontendVariables)) {
241
+ frontendVariables.forEach((frontendVariable) => {
242
+ const typeAnnotation = frontendVariable.typeAnnotation || frontendVariable.__TypeAnnotation;
243
+ collectTypeAnnotation(typeAnnotation);
244
+ });
245
+ }
246
+
247
+ function collectTypeAnnotation(typeAnnotation: any) {
248
+ if (typeAnnotation) {
249
+ const sortedTypeKey = genSortedTypeKey(typeAnnotation);
250
+ if (!dataTypesMap[sortedTypeKey]) {
251
+ dataTypesMap[sortedTypeKey] = typeAnnotation?.toJSON?.() ?? typeAnnotation;
252
+ const { properties, typeArguments } = (dataTypesMap[sortedTypeKey] || {}) as any;
253
+ if (Array.isArray(properties)) {
254
+ properties.forEach((property) => {
255
+ collectTypeAnnotation(property?.typeAnnotation);
256
+ });
257
+ }
258
+ if (Array.isArray(typeArguments)) {
259
+ typeArguments.forEach((typeArg) => {
260
+ collectTypeAnnotation(typeArg);
261
+ });
262
+ }
263
+ }
264
+ }
265
+ }
266
+
167
267
  return {
168
268
  frontendVariables,
169
269
  dataTypesMap,
@@ -1,5 +1,6 @@
1
- import { App, Assignment, BatchAssignment, CallFunction, CallInterface, CallLogic, ForEachStatement, IfStatement, Logic, LogicItem, Match, MatchCase, Role, SwitchCase, SwitchStatement, View, ViewElement, WhileStatement } from '../concepts';
2
- import { genBundleFiles } from './genBundleFiles';
1
+ import { App, Assignment, BatchAssignment, CallFunction, CallInterface, CallLogic, ForEachStatement, IfStatement, Logic, LogicItem, Match, MatchCase, Role, SwitchCase, SwitchStatement, View, ViewElement, WhileStatement, Frontend } from '../concepts';
2
+ import { genFrontendBundleFiles } from './genBundleFiles';
3
+ import { genPermissionData } from './permission';
3
4
 
4
5
  export async function genReleaseBody(app: App, {
5
6
  env,
@@ -8,6 +9,7 @@ export async function genReleaseBody(app: App, {
8
9
  realRelease,
9
10
  appInfo,
10
11
  staticUrl,
12
+ frontends = [],
11
13
  }: {
12
14
  env: string,
13
15
  replicas: number,
@@ -26,21 +28,48 @@ export async function genReleaseBody(app: App, {
26
28
  tenantLabel: string,
27
29
  },
28
30
  staticUrl?: string,
31
+ frontends: Array<Frontend>,
29
32
  }) {
33
+ let authReport: ReturnType<typeof getAuthReport>;
34
+ let logicPageResourceDtoList;
35
+ if (realRelease) {
36
+ authReport = getAuthReport(app, frontends);
37
+ const permissionData = await genPermissionData(app);
38
+ authReport.resourceDataList = authReport.resourceDataList.concat(permissionData.resourceDataList);
39
+ authReport.resourceList = authReport.resourceList.concat(permissionData.resourceList);
40
+
41
+ logicPageResourceDtoList = permissionData.logicPageResourceDtoList;
42
+ }
43
+
44
+ const releaseFrontends = app.frontends.map((frontend) => ({
45
+ name: frontend.name,
46
+ type: frontend.type,
47
+ path: frontend.path,
48
+ selected: frontends.includes(frontend),
49
+ }));
50
+
30
51
  const body = {
31
- ...(realRelease ? getAuthReport(app) : undefined), // 如果发布需要上报权限,导出源码不需要
32
- noAuthApiPathList: getAuthApiPathList(app),
33
- reportIdList: findAllReportIdList(app),
52
+ ...authReport, // 如果发布需要上报权限,导出源码不需要
53
+ logicPageResourceDtoList,
54
+ noAuthApiPathList: getAuthApiPathList(app, frontends),
55
+ reportIdList: findAllReportIdList(app, frontends),
34
56
  appId: app.id,
35
57
  env,
36
58
  replicas,
59
+ callbackLogicsName: app.getExtensionsCallbackLogics(),
37
60
  generateMini,
61
+ frontends: releaseFrontends,
38
62
  files: [] as Array<{ name: string, content: string }>,
39
63
  };
64
+ let NaslAnnotatedJSON;
65
+ try {
66
+ NaslAnnotatedJSON = await (app as any).naslServer.getNaslAnnotatedJSON(app, true);
67
+ } catch (err) {
68
+ console.error(err);
69
+ throw new Error('代码标注失败');
70
+ }
40
71
 
41
- const NaslAnnotatedJSON = await (app as any).naslServer.getNaslAnnotatedJSON(app, true);
42
-
43
- let files = genBundleFiles(app, Object.assign({}, appInfo, {
72
+ let files = genFrontendBundleFiles(app, frontends, Object.assign({}, appInfo, {
44
73
  env,
45
74
  appid: app.id,
46
75
  devDnsAddr: (app as any).devDnsAddr,
@@ -59,7 +88,9 @@ export async function genReleaseBody(app: App, {
59
88
  const jsonString = JSON.stringify(NaslAnnotatedJSON);
60
89
 
61
90
  // 打印传给服务端的nasl,为了服务端排查问题方便
62
- // console.warn(NaslAnnotatedJSON, '标注后的nasl');
91
+ if (globalThis.window) {
92
+ console.log(NaslAnnotatedJSON, '标注后的nasl');
93
+ }
63
94
  files.push({ name: 'nasl-annotated.json', content: jsonString });
64
95
 
65
96
  body.files = files;
@@ -69,11 +100,11 @@ export async function genReleaseBody(app: App, {
69
100
  /**
70
101
  * 权限上报数据
71
102
  */
72
- function getAuthReport(app: App) {
103
+ function getAuthReport(app: App, frontends: Array<Frontend>) {
73
104
  const result = {
74
105
  roleList: [] as Array<Role>,
75
106
  resourceList: [] as Array<string>,
76
- resourceDataList: [] as Array<{ value: string, description: string }>,
107
+ resourceDataList: [] as Array<{ value: string, description: string, type: 'page' | 'component' | 'logic', clientType?: string }>,
77
108
  roleResourceMappingList: [] as Array<{ roleName: string, resourcePath: string }>,
78
109
  };
79
110
 
@@ -84,12 +115,12 @@ function getAuthReport(app: App) {
84
115
  return authDirective?.value;
85
116
  };
86
117
 
87
- const loopViews = (view: View | ViewElement, isMain: boolean) => {
118
+ const loopViews = (view: View | ViewElement, isMain: boolean, frontend: Frontend) => {
88
119
  if (view.children) {
89
- view.children.forEach((item) => loopViews(item, false));
120
+ view.children.forEach((item) => loopViews(item, false, frontend));
90
121
  }
91
122
  if (view.concept === 'View' && view.elements) {
92
- view.elements.forEach((item) => loopViews(item, false));
123
+ view.elements.forEach((item) => loopViews(item, false, frontend));
93
124
  }
94
125
 
95
126
  if ((view.concept === 'View' && view.auth)
@@ -100,6 +131,8 @@ function getAuthReport(app: App) {
100
131
  result.resourceDataList.push({
101
132
  value: view.authPath,
102
133
  description: view.authDescription,
134
+ type: view.concept === 'View' ? 'page' : 'component',
135
+ clientType: frontend.name,
103
136
  });
104
137
  if (view.bindRoles) {
105
138
  const _arr = view.bindRoles.map((it) => ({
@@ -111,7 +144,9 @@ function getAuthReport(app: App) {
111
144
  }
112
145
  }
113
146
  };
114
- app.views.forEach((view) => loopViews(view, true));
147
+ frontends.forEach((frontend) => {
148
+ frontend.views.forEach((view) => loopViews(view, true, frontend));
149
+ });
115
150
 
116
151
  return result;
117
152
  }
@@ -120,8 +155,8 @@ function getAuthReport(app: App) {
120
155
  /**
121
156
  * 上报白名单
122
157
  */
123
- function getAuthApiPathList(app: App) {
124
- const thisDiffLogicList: Array<string> = [];
158
+ function getAuthApiPathList(app: App, frontends: Array<Frontend>) {
159
+ const thisDiffLogicList: Array<{logicName:string, frontendName: string}> = [];
125
160
 
126
161
  /* 转换Path */
127
162
  function getPathMethods(logicNameSpace: string) {
@@ -213,7 +248,7 @@ function getAuthApiPathList(app: App) {
213
248
  }
214
249
  }
215
250
  /* 获取LogicITEM */
216
- function getStatement(state: LogicItem) {
251
+ function getStatement(state: LogicItem, frontend: Frontend) {
217
252
  let logicItems: Array<LogicItem> = [];
218
253
  if (state instanceof Assignment) {
219
254
  logicItems = [state.left, state.right];
@@ -224,18 +259,18 @@ function getAuthApiPathList(app: App) {
224
259
  } else if (state instanceof ForEachStatement) {
225
260
  logicItems = [...state.body, state.each, state.start, state.end];
226
261
  } else if (state instanceof Match) {
227
- logicItems = state.cases.map(getStatement).flat(1);
262
+ logicItems = state.cases.map((case1) => getStatement(case1, frontend)).flat(1);
228
263
  } else if (state instanceof MatchCase) {
229
264
  logicItems = [...state.patterns as LogicItem[], ...state.body];
230
265
  } else if (state instanceof SwitchStatement) {
231
- logicItems = state.cases.map(getStatement).flat(1);
266
+ logicItems = state.cases.map((case1) => getStatement(case1, frontend)).flat(1);
232
267
  } else if (state instanceof SwitchCase) {
233
268
  logicItems = [state.test, ...state.consequent];
234
269
  } else if (state instanceof WhileStatement) {
235
270
  logicItems = [state.test, ...state.body];
236
271
  } else if (state instanceof CallLogic) {
237
272
  logicItems = state.arguments?.map((item) => item.expression);
238
- getLogic(state.calleewholeKey);
273
+ getLogic(state.calleewholeKey, frontend);
239
274
  } else if (state instanceof CallFunction) {
240
275
  logicItems = state.arguments?.map((item) => item.expression);
241
276
  } else if (state instanceof CallInterface) {
@@ -245,27 +280,27 @@ function getAuthApiPathList(app: App) {
245
280
  return logicItems.filter((item) => !!item);
246
281
  }
247
282
  /* 获取非鉴权全局逻辑 */
248
- function getLogic(key: string) {
249
- if (!thisDiffLogicList.includes(key)) {
250
- thisDiffLogicList.push(key);
283
+ function getLogic(key: string, frontend: Frontend) {
284
+ if (!thisDiffLogicList.find((diffLogic) => diffLogic.logicName === key && diffLogic.frontendName === frontend.name)) {
285
+ thisDiffLogicList.push({ logicName: key, frontendName: frontend.name });
251
286
  const logic: Logic = app.findNodeByCompleteName(key);
252
287
  if (logic && logic.body && logic.body.length > 2) {
253
- logic.body.map((item) => getStatement(item));
288
+ logic.body.map((item) => getStatement(item, frontend));
254
289
  }
255
290
  }
256
291
  }
257
292
 
258
293
  const importList: Array<string> = [];
259
- const itemloop = (state: LogicItem, view: View | ViewElement) => {
260
- const logicItems = getStatement(state);
294
+ const itemloop = (state: LogicItem, view: View | ViewElement, frontend: Frontend) => {
295
+ const logicItems = getStatement(state, frontend);
261
296
  if (logicItems.length) {
262
- logicItems.map((item) => itemloop(item, view));
297
+ logicItems.map((item) => itemloop(item, view, frontend));
263
298
  }
264
299
  };
265
300
 
266
- const loopEle = (view: View | ViewElement) => {
267
- view?.children?.forEach(loopEle);
268
- view.concept === 'View' && view?.elements?.forEach(loopEle);
301
+ const loopEle = (view: View | ViewElement, frontend: Frontend) => {
302
+ view?.children?.forEach((vitem) => loopEle(vitem, frontend));
303
+ view.concept === 'View' && view?.elements?.forEach((ele) => loopEle(ele, frontend));
269
304
  if (!view.parentAuth) {
270
305
  if (view.bindEvents) {
271
306
  view.bindEvents.forEach((item) => {
@@ -273,7 +308,7 @@ function getAuthApiPathList(app: App) {
273
308
  item.logics.forEach((logic) => {
274
309
  if (logic.body.length > 2) {
275
310
  logic.body.forEach((it) => {
276
- itemloop(it, view);
311
+ itemloop(it, view, frontend);
277
312
  });
278
313
  }
279
314
  });
@@ -288,14 +323,14 @@ function getAuthApiPathList(app: App) {
288
323
  }
289
324
  }
290
325
  };
291
- const loopViews = (view: View, isChild: boolean) => {
326
+ const loopViews = (view: View, isChild: boolean, frontend:Frontend) => {
292
327
  // 有权限的页面下的逻辑都不需要上报白名单
293
328
  if (!view.auth) {
294
329
  if (view.logics) {
295
330
  view.logics.forEach((logic) => {
296
331
  if (logic.body.length > 2) {
297
332
  logic.body.forEach((it) => {
298
- itemloop(it, view);
333
+ itemloop(it, view, frontend);
299
334
  });
300
335
  }
301
336
  });
@@ -306,7 +341,7 @@ function getAuthApiPathList(app: App) {
306
341
  item.logics.forEach((logic) => {
307
342
  if (logic.body.length > 2) {
308
343
  logic.body.forEach((it) => {
309
- itemloop(it, view);
344
+ itemloop(it, view, frontend);
310
345
  });
311
346
  }
312
347
  });
@@ -314,27 +349,35 @@ function getAuthApiPathList(app: App) {
314
349
  });
315
350
  }
316
351
 
317
- view.children.forEach((item) => loopViews(item, true));
352
+ view.children.forEach((item) => loopViews(item, true, frontend));
318
353
  }
319
354
  if (!isChild) {
320
- view.children.forEach(loopEle);
321
- view.elements.forEach(loopEle);
355
+ view.children.forEach((vitem) => loopEle(vitem, frontend));
356
+ view.elements.forEach((vele) => loopEle(vele, frontend));
322
357
  }
323
358
  };
324
- app.views.map((item) => loopViews(item, false));
359
+ frontends.forEach((frontend) => {
360
+ frontend.views.forEach((view) => loopViews(view, true, frontend));
361
+ });
325
362
 
326
- const diffLogicList = thisDiffLogicList.filter((item) => item.startsWith('app') || item.startsWith('extensions'));
327
- const authApiList = [...diffLogicList.map(getPathMethods), ...Array.from(new Set(importList.map((item) => item + ':POST')))].filter((item) => !!item);
363
+ const diffLogicList = thisDiffLogicList.filter((item) => item.logicName.startsWith('app') || item.logicName.startsWith('extensions'));
364
+ const authApiList = [
365
+ ...diffLogicList.map((diffLogic) => {
366
+ const path = getPathMethods(diffLogic.logicName);
367
+ return `${path}:${diffLogic.frontendName}`;
368
+ }),
369
+ ...Array.from(new Set(importList.map((item) => item + ':POST'))),
370
+ ].filter((item) => !!item);
328
371
  return authApiList;
329
372
  }
330
373
 
331
374
  /**
332
375
  * 获取页面中所有 分析报告组件 的reportId
333
376
  */
334
- function findAllReportIdList(app: App) {
377
+ function findAllReportIdList(app: App, frontends: Array<Frontend>) {
335
378
  const reportIds: string[] = [];
336
- app?.views.forEach((view) => {
337
- loop(view);
379
+ frontends.forEach((frontend) => {
380
+ frontend.views.forEach((view) => loop(view));
338
381
  });
339
382
 
340
383
  function loop(root: View | ViewElement) {
@@ -4,3 +4,4 @@ export * from './styleReplacer';
4
4
  export * from './genBundleFiles';
5
5
  export * from './genMetaData';
6
6
  export * from './genReleaseBody';
7
+ export * from './permission';