@lcap/nasl 3.9.0-beta.4 → 3.9.0-beta.40

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 (242) hide show
  1. package/out/automate/engine/utils.d.ts +0 -5
  2. package/out/automate/engine/utils.d.ts.map +1 -1
  3. package/out/automate/engine/utils.js +1 -123
  4. package/out/automate/engine/utils.js.map +1 -1
  5. package/out/automate/upgrader/2.18.js +1 -1
  6. package/out/automate/upgrader/2.18.js.map +1 -1
  7. package/out/common/Command.js +1 -1
  8. package/out/common/Command.js.map +1 -1
  9. package/out/common/Messager.d.ts.map +1 -1
  10. package/out/common/Messager.js +15 -5
  11. package/out/common/Messager.js.map +1 -1
  12. package/out/config.d.ts +2 -0
  13. package/out/config.d.ts.map +1 -1
  14. package/out/config.js +5 -2
  15. package/out/config.js.map +1 -1
  16. package/out/generator/annotation/full.d.ts +6 -0
  17. package/out/generator/annotation/full.d.ts.map +1 -0
  18. package/out/generator/annotation/full.js +28 -0
  19. package/out/generator/annotation/full.js.map +1 -0
  20. package/out/generator/annotation/incremental.d.ts +7 -0
  21. package/out/generator/annotation/incremental.d.ts.map +1 -0
  22. package/out/generator/annotation/incremental.js +168 -0
  23. package/out/generator/annotation/incremental.js.map +1 -0
  24. package/out/generator/annotation/index.d.ts +5 -0
  25. package/out/generator/annotation/index.d.ts.map +1 -0
  26. package/out/generator/annotation/index.js +21 -0
  27. package/out/generator/annotation/index.js.map +1 -0
  28. package/out/generator/annotation/types.d.ts +14 -0
  29. package/out/generator/annotation/types.d.ts.map +1 -0
  30. package/out/generator/annotation/types.js +3 -0
  31. package/out/generator/annotation/types.js.map +1 -0
  32. package/out/generator/annotation/utils.d.ts +14 -0
  33. package/out/generator/annotation/utils.d.ts.map +1 -0
  34. package/out/generator/annotation/utils.js +52 -0
  35. package/out/generator/annotation/utils.js.map +1 -0
  36. package/out/generator/compileComponent.d.ts.map +1 -1
  37. package/out/generator/compileComponent.js +2 -0
  38. package/out/generator/compileComponent.js.map +1 -1
  39. package/out/generator/genBundleFiles.d.ts +5 -2
  40. package/out/generator/genBundleFiles.d.ts.map +1 -1
  41. package/out/generator/genBundleFiles.js +73 -38
  42. package/out/generator/genBundleFiles.js.map +1 -1
  43. package/out/generator/index.d.ts +2 -0
  44. package/out/generator/index.d.ts.map +1 -1
  45. package/out/generator/index.js +2 -0
  46. package/out/generator/index.js.map +1 -1
  47. package/out/generator/permission.d.ts.map +1 -1
  48. package/out/generator/permission.js +26 -6
  49. package/out/generator/permission.js.map +1 -1
  50. package/out/generator/release-body/body.d.ts +2 -1
  51. package/out/generator/release-body/body.d.ts.map +1 -1
  52. package/out/generator/release-body/body.js +39 -29
  53. package/out/generator/release-body/body.js.map +1 -1
  54. package/out/generator/release-body/data.d.ts.map +1 -1
  55. package/out/generator/release-body/data.js +4 -5
  56. package/out/generator/release-body/data.js.map +1 -1
  57. package/out/generator/release-body/internal.d.ts.map +1 -1
  58. package/out/generator/release-body/utils.d.ts +7 -3
  59. package/out/generator/release-body/utils.d.ts.map +1 -1
  60. package/out/generator/release-body/utils.js +44 -36
  61. package/out/generator/release-body/utils.js.map +1 -1
  62. package/out/generator/ui-library-declaration/basic.d.ts +11 -0
  63. package/out/generator/ui-library-declaration/basic.d.ts.map +1 -0
  64. package/out/generator/ui-library-declaration/basic.js +118 -0
  65. package/out/generator/ui-library-declaration/basic.js.map +1 -0
  66. package/out/generator/ui-library-declaration/custom.d.ts +11 -0
  67. package/out/generator/ui-library-declaration/custom.d.ts.map +1 -0
  68. package/out/generator/ui-library-declaration/custom.js +149 -0
  69. package/out/generator/ui-library-declaration/custom.js.map +1 -0
  70. package/out/generator/ui-library-declaration/dependency.d.ts +8 -0
  71. package/out/generator/ui-library-declaration/dependency.d.ts.map +1 -0
  72. package/out/generator/ui-library-declaration/dependency.js +169 -0
  73. package/out/generator/ui-library-declaration/dependency.js.map +1 -0
  74. package/out/generator/ui-library-declaration/format.d.ts +32 -0
  75. package/out/generator/ui-library-declaration/format.d.ts.map +1 -0
  76. package/out/generator/ui-library-declaration/format.js +387 -0
  77. package/out/generator/ui-library-declaration/format.js.map +1 -0
  78. package/out/generator/ui-library-declaration/index.d.ts +4 -0
  79. package/out/generator/ui-library-declaration/index.d.ts.map +1 -0
  80. package/out/generator/ui-library-declaration/index.js +20 -0
  81. package/out/generator/ui-library-declaration/index.js.map +1 -0
  82. package/out/generator/ui-library-declaration/manifest.d.ts +5 -0
  83. package/out/generator/ui-library-declaration/manifest.d.ts.map +1 -0
  84. package/out/generator/ui-library-declaration/manifest.js +27 -0
  85. package/out/generator/ui-library-declaration/manifest.js.map +1 -0
  86. package/out/generator/ui-library-declaration/material.d.ts +6 -0
  87. package/out/generator/ui-library-declaration/material.d.ts.map +1 -0
  88. package/out/generator/ui-library-declaration/material.js +90 -0
  89. package/out/generator/ui-library-declaration/material.js.map +1 -0
  90. package/out/generator/ui-library-declaration/types.d.ts +458 -0
  91. package/out/generator/ui-library-declaration/types.d.ts.map +1 -0
  92. package/out/generator/ui-library-declaration/types.js +3 -0
  93. package/out/generator/ui-library-declaration/types.js.map +1 -0
  94. package/out/generator/ui-library-declaration/utils.d.ts +3 -0
  95. package/out/generator/ui-library-declaration/utils.d.ts.map +1 -0
  96. package/out/generator/ui-library-declaration/utils.js +20 -0
  97. package/out/generator/ui-library-declaration/utils.js.map +1 -0
  98. package/out/manager/diagnostic.d.ts +2 -0
  99. package/out/manager/diagnostic.d.ts.map +1 -1
  100. package/out/manager/diagnostic.js +9 -0
  101. package/out/manager/diagnostic.js.map +1 -1
  102. package/out/natural/genNaturalTS.d.ts +50 -10
  103. package/out/natural/genNaturalTS.d.ts.map +1 -1
  104. package/out/natural/genNaturalTS.js +63 -33
  105. package/out/natural/genNaturalTS.js.map +1 -1
  106. package/out/natural/getContext/getUILib.d.ts +4 -1
  107. package/out/natural/getContext/getUILib.d.ts.map +1 -1
  108. package/out/natural/getContext/getUILib.js +59 -17
  109. package/out/natural/getContext/getUILib.js.map +1 -1
  110. package/out/natural/getContext/index.d.ts +35 -15
  111. package/out/natural/getContext/index.d.ts.map +1 -1
  112. package/out/natural/getContext/index.js +178 -35
  113. package/out/natural/getContext/index.js.map +1 -1
  114. package/out/natural/getContext/naslStdlibMap.js +8 -8
  115. package/out/natural/getContext/naslStdlibMap.js.map +1 -1
  116. package/out/natural/tools.d.ts +16 -0
  117. package/out/natural/tools.d.ts.map +1 -1
  118. package/out/natural/tools.js +114 -2
  119. package/out/natural/tools.js.map +1 -1
  120. package/out/natural/transformTS2UI.d.ts.map +1 -1
  121. package/out/natural/transformTS2UI.js +412 -304
  122. package/out/natural/transformTS2UI.js.map +1 -1
  123. package/out/natural/transformTSCode.d.ts +3 -5
  124. package/out/natural/transformTSCode.d.ts.map +1 -1
  125. package/out/natural/transformTSCode.js +30 -1080
  126. package/out/natural/transformTSCode.js.map +1 -1
  127. package/out/natural/transforms/registerTransform.d.ts +8 -0
  128. package/out/natural/transforms/registerTransform.d.ts.map +1 -0
  129. package/out/natural/transforms/registerTransform.js +24 -0
  130. package/out/natural/transforms/registerTransform.js.map +1 -0
  131. package/out/natural/transforms/transform2LogicItem.d.ts +25 -0
  132. package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -0
  133. package/out/natural/transforms/transform2LogicItem.js +1300 -0
  134. package/out/natural/transforms/transform2LogicItem.js.map +1 -0
  135. package/out/natural/transforms/transform2TypeAnnotation.d.ts +3 -0
  136. package/out/natural/transforms/transform2TypeAnnotation.d.ts.map +1 -0
  137. package/out/natural/transforms/transform2TypeAnnotation.js +86 -0
  138. package/out/natural/transforms/transform2TypeAnnotation.js.map +1 -0
  139. package/out/natural/transforms/utils.d.ts +9 -0
  140. package/out/natural/transforms/utils.d.ts.map +1 -0
  141. package/out/natural/transforms/utils.js +59 -0
  142. package/out/natural/transforms/utils.js.map +1 -0
  143. package/out/server/OQL/oql-cache.d.ts +12 -0
  144. package/out/server/OQL/oql-cache.d.ts.map +1 -0
  145. package/out/server/OQL/oql-cache.js +232 -0
  146. package/out/server/OQL/oql-cache.js.map +1 -0
  147. package/out/server/extendBaseNode.d.ts.map +1 -1
  148. package/out/server/extendBaseNode.js +3 -6
  149. package/out/server/extendBaseNode.js.map +1 -1
  150. package/out/server/index.d.ts +1 -2
  151. package/out/server/index.d.ts.map +1 -1
  152. package/out/server/index.js +2 -2
  153. package/out/server/index.js.map +1 -1
  154. package/out/server/naslServer.d.ts +19 -3
  155. package/out/server/naslServer.d.ts.map +1 -1
  156. package/out/server/naslServer.js +276 -175
  157. package/out/server/naslServer.js.map +1 -1
  158. package/out/server/translator.d.ts +1 -1
  159. package/out/server/translator.d.ts.map +1 -1
  160. package/out/server/translator.js +104 -54
  161. package/out/server/translator.js.map +1 -1
  162. package/out/service/storage/init.d.ts +1 -25
  163. package/out/service/storage/init.d.ts.map +1 -1
  164. package/out/service/storage/init.js +12 -37
  165. package/out/service/storage/init.js.map +1 -1
  166. package/out/service/storage/types.d.ts +41 -0
  167. package/out/service/storage/types.d.ts.map +1 -0
  168. package/out/service/storage/types.js +10 -0
  169. package/out/service/storage/types.js.map +1 -0
  170. package/out/service/storage/utils.d.ts +15 -0
  171. package/out/service/storage/utils.d.ts.map +1 -0
  172. package/out/service/storage/utils.js +68 -0
  173. package/out/service/storage/utils.js.map +1 -0
  174. package/out/service/video/BaseService.d.ts.map +1 -1
  175. package/out/service/video/BaseService.js +0 -3
  176. package/out/service/video/BaseService.js.map +1 -1
  177. package/out/service/video/MainCallbackService.d.ts.map +1 -1
  178. package/out/service/video/MainCallbackService.js +0 -3
  179. package/out/service/video/MainCallbackService.js.map +1 -1
  180. package/out/templator/block2nasl/jsx2nasl/index.d.ts +6 -0
  181. package/out/templator/block2nasl/jsx2nasl/index.d.ts.map +1 -0
  182. package/out/templator/block2nasl/jsx2nasl/index.js +15 -0
  183. package/out/templator/block2nasl/jsx2nasl/index.js.map +1 -0
  184. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts +4 -0
  185. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.d.ts.map +1 -0
  186. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js +213 -0
  187. package/out/templator/block2nasl/jsx2nasl/transform-expression2nasl.js.map +1 -0
  188. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts +15 -0
  189. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.d.ts.map +1 -0
  190. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js +201 -0
  191. package/out/templator/block2nasl/jsx2nasl/transform-func2nasl.js.map +1 -0
  192. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts +5 -0
  193. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.d.ts.map +1 -0
  194. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js +186 -0
  195. package/out/templator/block2nasl/jsx2nasl/transform-tstype2nasl.js.map +1 -0
  196. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts +29 -0
  197. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.d.ts.map +1 -0
  198. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js +336 -0
  199. package/out/templator/block2nasl/jsx2nasl/transform-tsx2nasl.js.map +1 -0
  200. package/out/templator/block2nasl/jsx2nasl/utils.d.ts +3 -0
  201. package/out/templator/block2nasl/jsx2nasl/utils.d.ts.map +1 -0
  202. package/out/templator/block2nasl/jsx2nasl/utils.js +26 -0
  203. package/out/templator/block2nasl/jsx2nasl/utils.js.map +1 -0
  204. package/out/templator/block2nasl/transformBlock2Nasl.d.ts +11 -0
  205. package/out/templator/block2nasl/transformBlock2Nasl.d.ts.map +1 -0
  206. package/out/templator/block2nasl/transformBlock2Nasl.js +120 -0
  207. package/out/templator/block2nasl/transformBlock2Nasl.js.map +1 -0
  208. package/out/templator/block2nasl/viewMergeBlock.d.ts +17 -0
  209. package/out/templator/block2nasl/viewMergeBlock.d.ts.map +1 -0
  210. package/out/templator/block2nasl/viewMergeBlock.js +126 -0
  211. package/out/templator/block2nasl/viewMergeBlock.js.map +1 -0
  212. package/out/templator/utils.js +1 -1
  213. package/out/templator/utils.js.map +1 -1
  214. package/out/utils/node.d.ts.map +1 -1
  215. package/out/utils/node.js +0 -4
  216. package/out/utils/node.js.map +1 -1
  217. package/package.json +17 -26
  218. package/sandbox/stdlib/nasl.processV2.ts +2 -2
  219. package/sandbox/stdlib/nasl.ui.definition.ts +41 -1
  220. package/sandbox/stdlib/nasl.ui.ts +15 -0
  221. package/sandbox/stdlib/nasl.util.ts +5 -15
  222. package/sandbox-natural/stdlib/nasl.core.d.ts +54 -0
  223. package/sandbox-natural/stdlib/nasl.oql.d.ts +22 -0
  224. package/sandbox-natural/stdlib/nasl.ui.d.ts +90 -0
  225. package/sandbox-natural/stdlib/nasl.ui.h5.d.ts +4831 -1641
  226. package/sandbox-natural/stdlib/nasl.ui.h5.json +16595 -14941
  227. package/sandbox-natural/stdlib/nasl.ui.pc.d.ts +11837 -5153
  228. package/sandbox-natural/stdlib/nasl.ui.pc.json +54330 -30702
  229. package/sandbox-natural/stdlib/{nasl.util.ts → nasl.util.d.ts} +50 -44
  230. package/ts-worker/bundle.js +2 -2
  231. package/ts-worker/lib/Messager.js +8 -1
  232. package/ts-worker/lib/tsserver.js +6 -6
  233. package/out/utils/uiPathId.d.ts +0 -2
  234. package/out/utils/uiPathId.d.ts.map +0 -1
  235. package/out/utils/uiPathId.js +0 -32
  236. package/out/utils/uiPathId.js.map +0 -1
  237. package/sandbox/stdlib/nasl.ui.components.h5.ts +0 -1751
  238. package/sandbox/stdlib/nasl.ui.components.pc.ts +0 -3495
  239. package/sandbox-natural/stdlib/nasl.core.ts +0 -36
  240. package/sandbox-natural/stdlib/nasl.oql.ts +0 -14
  241. package/sandbox-natural/stdlib/nasl.ui.pre.d.ts +0 -90
  242. package/sandbox-natural/stdlib/nasl.ui.ts +0 -63
@@ -22,1078 +22,32 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.transformTSCodeToExpression = exports.transformTSCodeEx = exports.tryTransformTSCode = exports.transformTSCode = exports.tryParseTS = void 0;
26
+ exports.transformTSCodeToExpression = exports.transformTSCodeEx = exports.tryTransformTSCode = exports.transformTSCode = void 0;
30
27
  /* eslint-disable global-require */
31
28
  /* eslint-disable @typescript-eslint/no-use-before-define */
32
29
  const babel = __importStar(require("@babel/core"));
33
- const generator_1 = __importDefault(require("@babel/generator"));
34
- const naslTypes = __importStar(require("../concepts"));
35
- const DEBUG = false;
36
- function throwError(message) {
37
- if (DEBUG)
38
- throw new Error(message);
39
- else
40
- console.error(message);
41
- }
42
- function tryParseTS(tsCode) {
43
- try {
44
- const root = babel.parseSync(tsCode, {
45
- filename: 'result.ts',
46
- presets: [require('@babel/preset-typescript')],
47
- });
48
- // console.log((root as any).program.body[0].body.body.map((item) => item.trailingComments));
49
- return root;
50
- }
51
- catch (e) {
52
- return null;
53
- }
54
- }
55
- exports.tryParseTS = tryParseTS;
56
- function flatMemberExpression(node) {
57
- if (node.type === 'MemberExpression')
58
- return [...flatMemberExpression(node.object), node.property];
59
- return [node];
60
- }
61
- function flatMembers(node) {
62
- if (node.concept === 'MemberExpression')
63
- return [...flatMembers((node?.object)), node];
64
- return [];
65
- }
66
- function flatMatchPatternsExpression(node) {
67
- if (node.concept === 'BinaryExpression') {
68
- if (node.operator === '||') {
69
- return [...flatMatchPatternsExpression(node.left), ...flatMatchPatternsExpression(node.right)];
70
- }
71
- if (node.operator === '==') {
72
- return [node.right];
73
- }
74
- return [node];
75
- }
76
- return [node];
77
- }
78
- function flatIfStatement(node) {
79
- if (node.alternate.type === 'IfStatement') {
80
- return [...flatIfStatement(node.alternate), node];
81
- }
82
- return [node];
83
- }
84
- /**
85
- * 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
86
- * @param node
87
- * @returns
88
- */
89
- function fixLogicNode(node) {
90
- if (node?.type === 'CallExpression') {
91
- const calleeName = (0, generator_1.default)(node.callee).code;
92
- if (calleeName === 'nasl.util.ForEach') {
93
- const callee = flatMemberExpression(node.callee);
94
- node.callee = callee[2];
95
- }
96
- }
30
+ const utils_1 = require("./transforms/utils");
31
+ const transform2LogicItem_1 = require("./transforms/transform2LogicItem");
32
+ function isPageLogic(logicName) {
33
+ return logicName.includes('on_') || logicName.includes('viewLogic_') || logicName.includes('businessLogic_');
97
34
  }
98
- function transformTSCode(tsCode, contextLogicName, type) {
99
- const logic = new naslTypes.Logic();
100
- logic.body = [];
101
- function transformTypeAnnotation(node) {
102
- if (!node)
103
- return null;
104
- if (node.type === 'TSTypeReference') {
105
- const typeName = node.typeName.name;
106
- const primitiveType = naslTypes.primitiveTypeList.find((ta) => ta.typeName === typeName);
107
- if (node?.typeNamespace) {
108
- return naslTypes.TypeAnnotation.createReference(typeName, {
109
- typeNamespace: node.typeNamespace,
110
- });
111
- }
112
- if (['ValidateResult', 'ValidateEvent'].includes(typeName)) {
113
- return naslTypes.TypeAnnotation.createReference(typeName, {
114
- typeNamespace: 'nasl.ui'
115
- });
116
- }
117
- if (typeName === 'Any' || typeName === 'any') {
118
- return undefined;
119
- }
120
- if (typeName === 'Integer') {
121
- return naslTypes.TypeAnnotation.createPrimitive('Long');
122
- }
123
- if (primitiveType) {
124
- return naslTypes.TypeAnnotation.createPrimitive(typeName);
125
- }
126
- if (['List', 'Map', 'Current'].includes(typeName) && node?.typeParameters) {
127
- return naslTypes.TypeAnnotation.createGeneric(typeName, {
128
- typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
129
- });
130
- }
131
- if (node?.typeName?.type === 'TSQualifiedName' && node?.typeParameters) {
132
- const curTypeName = node?.typeName?.right?.name;
133
- return naslTypes.TypeAnnotation.createGeneric(curTypeName, {
134
- typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
135
- });
136
- }
137
- if (!node.typeParameters) {
138
- if (node?.typeName?.type === 'TSQualifiedName') {
139
- const allTypeName = (0, generator_1.default)(node?.typeName?.left)?.code;
140
- // 实体、枚举、结构体
141
- if (/^app.dataSources|.enums|.structures|nasl.ui/.test(allTypeName)) {
142
- const curTypeName = node?.typeName?.right?.name;
143
- return naslTypes.TypeAnnotation.createReference(curTypeName, {
144
- typeNamespace: allTypeName,
145
- });
146
- }
147
- }
148
- return naslTypes.TypeAnnotation.createReference(typeName, {
149
- typeNamespace: null,
150
- });
151
- }
152
- throwError(`Unhandled node ${node.type}`);
153
- }
154
- else if (node.type === 'TSTypeLiteral') {
155
- return naslTypes.TypeAnnotation.createTypeAnonymousStructure(node.members.map((member) => new naslTypes.StructureProperty({
156
- name: member.key.name,
157
- typeAnnotation: transformTypeAnnotation(member.typeAnnotation.typeAnnotation),
158
- })));
159
- }
160
- else if (node.type === 'TSBooleanKeyword') {
161
- return naslTypes.TypeAnnotation.createPrimitive('Boolean');
162
- }
163
- else if (node.type === 'TSStringKeyword') {
164
- return naslTypes.TypeAnnotation.createPrimitive('String');
165
- }
166
- else if (node.type === 'TSNumberKeyword') {
167
- return naslTypes.TypeAnnotation.createPrimitive('Double');
168
- }
169
- else if (node.type === 'TSUnionType') {
170
- const union = naslTypes.TypeAnnotation.createPrimitive('Union');
171
- union.typeArguments = [];
172
- node.types.forEach((curType) => {
173
- union.typeArguments.push(transformTypeAnnotation(curType));
174
- });
175
- return union;
35
+ function transformTSCode(tsCode, contextLogicName) {
36
+ if (!contextLogicName) {
37
+ const functionRE = /function\s+(\w+)\s*\(/;
38
+ const cap = tsCode.match(functionRE);
39
+ if (cap) {
40
+ contextLogicName = cap[1];
176
41
  }
177
42
  else {
178
- throwError(`Unhandled node ${node.type}`);
179
- }
180
- }
181
- function transformParam(node) {
182
- const typeAnnotation = node.typeAnnotation?.typeAnnotation;
183
- const exclude = ['event'];
184
- if (exclude.includes(node.name))
185
- return null;
186
- return new naslTypes.Param({
187
- name: node.name,
188
- typeAnnotation: typeAnnotation ? transformTypeAnnotation(typeAnnotation) : null,
189
- });
190
- }
191
- function pushElseIf(ifNode, switchStatement) {
192
- switchStatement.cases.push(new naslTypes.SwitchCase({
193
- test: transformLogicNode(ifNode.test),
194
- consequent: !ifNode.consequent ? [] : ifNode.consequent.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
195
- }));
196
- if (ifNode.alternate && ifNode.alternate.type === 'IfStatement') {
197
- pushElseIf(ifNode.alternate, switchStatement);
198
- }
199
- else {
200
- switchStatement.cases.push(new naslTypes.SwitchCase({
201
- test: undefined,
202
- consequent: !ifNode?.alternate ? [] : ifNode?.alternate?.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
203
- }));
204
- }
205
- }
206
- function handleBinaryExpression(calleeName, argument) {
207
- const map = {
208
- plus: '+',
209
- minus: '-',
210
- multiply: '*',
211
- divide: '/',
212
- remainder: '%',
213
- };
214
- return new naslTypes.BinaryExpression({
215
- operator: map?.[calleeName],
216
- left: transformLogicNode(argument?.[0]),
217
- right: transformLogicNode(argument?.[1]),
218
- });
219
- }
220
- function handleNewExpression(calleeName, node) {
221
- if (calleeName === 'NewList') {
222
- return new naslTypes.NewList({
223
- typeAnnotation: naslTypes.TypeAnnotation.createGeneric('List', {
224
- typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
225
- }),
226
- items: node?.arguments?.[0]?.elements?.map((arg) => transformLogicNode(arg)),
227
- });
228
- }
229
- if (calleeName === 'NewMap') {
230
- const keys = [];
231
- const values = [];
232
- node?.arguments?.[0]?.properties.forEach((arg) => {
233
- keys.push(transformLogicNode(arg.key));
234
- values.push(transformLogicNode(arg.value));
235
- });
236
- return new naslTypes.NewMap({
237
- typeAnnotation: naslTypes.TypeAnnotation.createGeneric('Map', {
238
- typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
239
- }),
240
- keys,
241
- values,
242
- });
243
- }
244
- if (calleeName === 'NewEntity') {
245
- const properties = [];
246
- const rights = [];
247
- const assignmentLines = [];
248
- node?.arguments?.[0]?.properties.forEach((arg, index) => {
249
- properties.push(transformLogicNode(arg.key));
250
- if (arg.value.type === 'MemberExpression') {
251
- const expression = flatMemberExpression(arg.value);
252
- const members = flatMembers(transformLogicNode(arg.value));
253
- rights.push(new naslTypes.SelectMembers({
254
- expression: transformLogicNode(expression[0]),
255
- members,
256
- }));
257
- if (arg?.value) {
258
- assignmentLines.push(new naslTypes.AssignmentLine({
259
- leftIndex: [0, index],
260
- rightIndex: [index, members.length - 1],
261
- }));
262
- }
263
- }
264
- else {
265
- rights.push(new naslTypes.SelectMembers({
266
- expression: transformLogicNode(arg.value)
267
- }));
268
- if (arg?.value) {
269
- assignmentLines.push(new naslTypes.AssignmentLine({
270
- leftIndex: [0, index],
271
- rightIndex: [index],
272
- }));
273
- }
274
- }
275
- });
276
- const parameters = node?.typeParameters?.params?.[0] || {};
277
- if (parameters && parameters?.type === 'TSTypeReference' && parameters?.typeName?.type === 'TSQualifiedName') {
278
- const { left, right } = parameters?.typeName || {};
279
- const typeNamespace = (0, generator_1.default)(left)?.code;
280
- const typeName = right?.name;
281
- return new naslTypes.NewComposite({
282
- typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
283
- typeNamespace,
284
- typeName
285
- }),
286
- properties,
287
- rights,
288
- assignmentLines
289
- });
290
- }
291
- const typeName = parameters?.typeName?.name;
292
- return new naslTypes.NewComposite({
293
- typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
294
- typeNamespace: 'app.dataSources.defaultDS.entities',
295
- typeName
296
- }),
297
- properties,
298
- rights,
299
- assignmentLines
300
- });
301
- }
302
- if (calleeName === 'NewStructure') {
303
- const properties = [];
304
- const rights = [];
305
- const assignmentLines = [];
306
- node?.arguments?.[0]?.properties.forEach((arg, index) => {
307
- properties.push(transformLogicNode(arg.key));
308
- if (arg.value.type === 'MemberExpression') {
309
- const expression = flatMemberExpression(arg.value);
310
- const members = flatMembers(transformLogicNode(arg.value));
311
- rights.push(new naslTypes.SelectMembers({
312
- expression: transformLogicNode(expression[0]),
313
- members,
314
- }));
315
- if (arg?.value) {
316
- assignmentLines.push(new naslTypes.AssignmentLine({
317
- leftIndex: [0, index],
318
- rightIndex: [index, members.length - 1],
319
- }));
320
- }
321
- }
322
- else {
323
- rights.push(new naslTypes.SelectMembers({
324
- expression: transformLogicNode(arg.value)
325
- }));
326
- if (arg?.value) {
327
- assignmentLines.push(new naslTypes.AssignmentLine({
328
- leftIndex: [0, index],
329
- rightIndex: [index],
330
- }));
331
- }
332
- }
333
- });
334
- const parameters = node?.typeParameters?.params?.[0] || {};
335
- if (parameters && parameters?.type === 'TSTypeReference' && parameters?.typeName?.type === 'TSQualifiedName') {
336
- const { left, right } = parameters?.typeName || {};
337
- const typeNamespace = (0, generator_1.default)(left)?.code;
338
- const typeName = right?.name;
339
- return new naslTypes.NewComposite({
340
- typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
341
- typeNamespace,
342
- typeName
343
- }),
344
- properties,
345
- rights,
346
- assignmentLines
347
- });
348
- }
349
- const typeName = parameters?.typeName?.name;
350
- return new naslTypes.NewComposite({
351
- typeAnnotation: naslTypes.TypeAnnotation.createReference(typeName, {
352
- typeNamespace: 'app.structures',
353
- typeName
354
- }),
355
- properties,
356
- rights,
357
- assignmentLines
358
- });
359
- }
360
- if (calleeName === 'NewAnonymousStructure') {
361
- const properties = [];
362
- const rights = [];
363
- const structureProperties = [];
364
- const assignmentLines = [];
365
- node?.arguments?.[0]?.properties?.forEach((arg, index) => {
366
- properties.push(transformLogicNode(arg.key));
367
- if (arg.value.type === 'MemberExpression') {
368
- const expression = flatMemberExpression(arg.value);
369
- const members = flatMembers(transformLogicNode(arg.value));
370
- rights.push(new naslTypes.SelectMembers({
371
- expression: transformLogicNode(expression[0]),
372
- members,
373
- }));
374
- if (arg?.value) {
375
- assignmentLines.push(new naslTypes.AssignmentLine({
376
- leftIndex: [0, index],
377
- rightIndex: [index, members.length - 1],
378
- }));
379
- }
380
- }
381
- else {
382
- rights.push(new naslTypes.SelectMembers({
383
- expression: transformLogicNode(arg.value)
384
- }));
385
- if (arg?.value) {
386
- assignmentLines.push(new naslTypes.AssignmentLine({
387
- leftIndex: [0, index],
388
- rightIndex: [index],
389
- }));
390
- }
391
- }
392
- structureProperties.push(new naslTypes.StructureProperty({
393
- name: arg?.key?.name,
394
- typeAnnotation: null
395
- }));
396
- });
397
- return new naslTypes.NewComposite({
398
- typeAnnotation: naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
399
- properties,
400
- rights,
401
- assignmentLines
402
- });
403
- }
404
- return node;
405
- }
406
- function isPageLogic(logicName) {
407
- return logicName.includes('on_') || logicName.includes('viewLogic_') || logicName.includes('businessLogic_');
408
- }
409
- function transformLogicNode(node, typeAnnotation) {
410
- fixLogicNode(node);
411
- // console.log('lemon ~~~ node--1:', node);
412
- if (node.type === 'VariableDeclaration') { // 拆成局部变量和赋值
413
- const declList = node?.declarations || [];
414
- let newNode;
415
- declList?.forEach((decl) => {
416
- const variableName = decl.id.name;
417
- if (!logic.variables.find((variable) => variable.name === variableName)) {
418
- const varTypeAnnotation = decl.id.typeAnnotation?.typeAnnotation;
419
- logic.variables.push(new naslTypes.Variable({
420
- name: variableName,
421
- typeAnnotation: varTypeAnnotation && transformTypeAnnotation(varTypeAnnotation),
422
- }));
423
- }
424
- if (decl.init) {
425
- if (decl.init.type !== 'ArrayExpression' && decl.init.type !== 'ObjectExpression') {
426
- const calleeName = (0, generator_1.default)(decl?.init?.callee).code;
427
- if (type === 'expression') {
428
- return transformLogicNode(decl.init);
429
- }
430
- const varTypeAnnotation = decl?.id?.typeAnnotation?.typeAnnotation;
431
- if (calleeName === 'nasl.oql.query' && varTypeAnnotation) {
432
- decl.init.typeAnnotations = varTypeAnnotation;
433
- }
434
- newNode = new naslTypes.Assignment({
435
- left: new naslTypes.Identifier({
436
- name: variableName,
437
- }),
438
- right: transformLogicNode(decl.init),
439
- });
440
- }
441
- }
442
- });
443
- if (newNode)
444
- return newNode;
445
- }
446
- else if (node.type === 'CallExpression' && node.callee.type === 'CallExpression') {
447
- // (function match() {})(...) 的情况
448
- }
449
- else if (node.type === 'CallExpression') {
450
- const callee = flatMemberExpression(node.callee);
451
- const calleeName = (0, generator_1.default)(node.callee).code;
452
- // console.log('lemon ~~~ node--2', node, callee, calleeName);
453
- if (/^\$refs\./.test(calleeName)) {
454
- return new naslTypes.CallLogic({
455
- calleeNamespace: `elements.${callee[1].name}.logics`,
456
- calleeName: callee[2].name,
457
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
458
- expression: transformLogicNode(arg),
459
- })),
460
- });
461
- }
462
- if (callee.length === 2 && callee[0].type === 'Identifier' && callee[0].name.endsWith('Entity')) {
463
- const entityName = callee[0].name.replace(/Entity$/, '');
464
- return new naslTypes.CallLogic({
465
- calleeNamespace: `app.dataSources.defaultDS.entities.${entityName}.logics`,
466
- calleeName: callee[1].name,
467
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
468
- expression: transformLogicNode(arg),
469
- })),
470
- });
471
- }
472
- if (calleeName === 'nasl.oql.query') {
473
- if (!isPageLogic(contextLogicName)) {
474
- // const _typeAnnotation = node?.typeParameters?.params?.length > 0 ? naslTypes.TypeAnnotation.createGeneric('List', {
475
- // typeArguments: node?.typeParameters?.params.map((curType: any) => transformTypeAnnotation({ ...curType })),
476
- // }) : null;
477
- let code = (0, generator_1.default)(node.arguments[0]).code.trim().slice(1, -1);
478
- code = code?.replace(/app\.enums\.(\w+)\[(\d+)\]/g, "app.enums.$1.$2").replace(/app\.enums\.(\w+)\['(\w+)'\]/g, "app.enums.$1.$2");
479
- return new naslTypes.OqlQueryComponent({
480
- dataSource: 'app.dataSources.defaultDS',
481
- code,
482
- typeAnnotation: transformTypeAnnotation(node?.typeAnnotations)
483
- });
484
- }
485
- }
486
- // 需求变更 consoleLog 都转成nasl.logging
487
- if (calleeName === 'nasl.util.consoleLog' || calleeName === 'console.log') {
488
- return new naslTypes.CallLogic({
489
- calleeNamespace: 'nasl.logging',
490
- calleeName: 'INFO',
491
- shortcut: true,
492
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
493
- expression: transformLogicNode(arg),
494
- })),
495
- });
496
- }
497
- if (calleeName.startsWith('nasl.logging.')) {
498
- return new naslTypes.CallLogic({
499
- calleeNamespace: 'nasl.logging',
500
- calleeName: callee[2].name,
501
- shortcut: true,
502
- arguments: node.arguments.map((arg) => new naslTypes.Argument({
503
- expression: transformLogicNode(arg),
504
- })),
505
- });
506
- }
507
- if (calleeName === 'nasl.util.jsonSerialize' || calleeName === 'nasl.util.jsonDeserialize') {
508
- const curCalleeName = node.callee.property.name;
509
- return new naslTypes.CallLogic({
510
- calleeNamespace: 'nasl.util',
511
- calleeName: curCalleeName,
512
- shortcut: true,
513
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
514
- expression: transformLogicNode(arg),
515
- })),
516
- typeArguments: node?.typeParameters?.params.map((curType) => transformTypeAnnotation({ ...curType })),
517
- });
518
- }
519
- ;
520
- if (calleeName.startsWith('nasl.util.')) {
521
- let curCalleeName;
522
- if (callee.length === 3)
523
- curCalleeName = callee[callee.length - 1].name;
524
- else {
525
- let _callee = callee[0].callee;
526
- while (_callee.type === 'CallExpression')
527
- _callee = _callee.callee;
528
- curCalleeName = _callee.property.name;
529
- }
530
- const argument = callee.length === 3 ? node.arguments : callee[0].arguments;
531
- if (['plus', 'minus', 'multiply', 'divide', 'remainder'].includes(curCalleeName)) {
532
- return handleBinaryExpression(curCalleeName, argument);
533
- }
534
- ;
535
- if (['NewList', 'NewMap', 'NewEntity', 'NewStructure', 'NewAnonymousStructure'].includes(curCalleeName)) {
536
- return handleNewExpression(curCalleeName, node);
537
- }
538
- // let typeNamespace: string;
539
- // if (argument?.[argument.length - 1]?.type === 'ObjectExpression') {
540
- // typeNamespace = argument.splice(-1)[0].properties[0].value.value;
541
- // }
542
- const nodeElement = new naslTypes.CallFunction({
543
- calleeNamespace: 'nasl.util',
544
- calleeName: curCalleeName,
545
- arguments: argument.map((arg, index) => new naslTypes.Argument({
546
- expression: transformLogicNode(arg),
547
- keyword: `str${index + 1}`,
548
- })),
549
- typeArguments: node?.typeParameters?.params.map(transformTypeAnnotation),
550
- // typeArguments: node?.typeParameters?.params.map((curType: any) => transformTypeAnnotation({ ...curType, typeNamespace })),
551
- });
552
- // console.log('lemon ~ callFunction ~ 3:', nodeElement);
553
- return nodeElement;
554
- }
555
- if (callee.length === 3 && calleeName.startsWith('nasl.ui.')) {
556
- if (callee[2].name === 'destination') {
557
- const namespace = node.arguments[0].value;
558
- const nsArr = namespace.split('.').map((item) => item.replace(/_view$/, ''));
559
- const pageType = nsArr.shift();
560
- const viewName = nsArr.pop();
561
- return new naslTypes.Destination({
562
- viewNamespace: `app.frontendTypes.${pageType}.frontends.${pageType}.views${nsArr?.map((item) => `.${item}.views`)?.join('')}`, // viewNamespace
563
- viewName, // viewName
564
- arguments: node.arguments.slice(1).map((arg) => new naslTypes.Argument({
565
- expression: transformLogicNode(arg),
566
- })),
567
- });
568
- }
569
- return new naslTypes.CallLogic({
570
- calleeNamespace: 'nasl.ui',
571
- calleeName: callee[2].name,
572
- shortcut: true,
573
- /**
574
- * 这个函数是修复 AI 翻译出错的情况,与正常的 transform 做个区分
575
- * @param node
576
- * @returns
577
- */
578
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
579
- expression: transformLogicNode(arg),
580
- })),
581
- });
582
- }
583
- if (calleeName.endsWith('.map')) {
584
- return new naslTypes.CallFunction({
585
- calleeNamespace: 'nasl.util',
586
- calleeName: 'ListTransform',
587
- arguments: [new naslTypes.Argument({
588
- expression: transformLogicNode(node.callee.object),
589
- }), ...node?.arguments?.map((arg) => new naslTypes.Argument({
590
- expression: transformLogicNode(arg),
591
- }))],
592
- });
593
- }
594
- if (calleeName === 'PAGINATE') {
595
- const newCallee = node?.arguments || [];
596
- return new naslTypes.Paginate({
597
- list: newCallee?.[0] && transformLogicNode(newCallee?.[0]),
598
- page: newCallee?.[1] && transformLogicNode(newCallee?.[1]),
599
- size: newCallee?.[2] && transformLogicNode(newCallee?.[2]),
600
- });
601
- }
602
- if (calleeName === 'ForEach') {
603
- const newCallee = node.arguments;
604
- const arrowFunction = node.arguments[3];
605
- const nodeElement = new naslTypes.ForEachStatement({
606
- each: transformLogicNode(newCallee[0]),
607
- start: transformLogicNode(newCallee[1]),
608
- end: transformLogicNode(newCallee[2]),
609
- item: transformParam(arrowFunction.params[0]),
610
- index: arrowFunction.params[1] ? transformParam(arrowFunction.params[1]) : new naslTypes.Param({
611
- name: 'index', typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Long'),
612
- }),
613
- body: arrowFunction.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
614
- });
615
- return nodeElement;
616
- }
617
- if (callee.length === 2) {
618
- const curCalleeName = node.callee.property.name;
619
- if (curCalleeName === 'forEach') {
620
- const newCallee = node.callee.object;
621
- const arrowFunction = node.arguments[0];
622
- const nodeElement = new naslTypes.ForEachStatement({
623
- each: transformLogicNode(newCallee.callee.object),
624
- start: transformLogicNode(newCallee?.arguments?.[0]),
625
- end: transformLogicNode(newCallee?.arguments?.[1]),
626
- item: transformParam(arrowFunction.params[0]),
627
- index: arrowFunction.params[1] ? transformParam(arrowFunction.params[1]) : new naslTypes.Param({
628
- name: 'index', typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Long'),
629
- }),
630
- body: arrowFunction.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
631
- });
632
- return nodeElement;
633
- }
634
- }
635
- else if (['plus', 'minus', 'multiply', 'divide', 'remainder'].includes(calleeName)) {
636
- return handleBinaryExpression(calleeName, node?.arguments);
637
- }
638
- else if (calleeName === 'alert') {
639
- return new naslTypes.CallLogic({
640
- calleeNamespace: 'nasl.ui',
641
- calleeName: 'showMessage',
642
- shortcut: true,
643
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
644
- expression: transformLogicNode(arg),
645
- })),
646
- });
647
- }
648
- else if (/^app.dataSources|app.logics/.test(calleeName)) {
649
- if (calleeName?.includes('.entities.')) {
650
- const calleeNamespace = (0, generator_1.default)(node?.callee?.object?.object)?.code;
651
- const entityName = node?.callee?.object?.property?.name?.replace(/Entity$/, '');
652
- return new naslTypes.CallLogic({
653
- calleeNamespace: `${calleeNamespace}.${entityName}.logics`,
654
- calleeName: node?.callee?.property?.name,
655
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
656
- expression: transformLogicNode(arg),
657
- })),
658
- });
659
- }
660
- return new naslTypes.CallLogic({
661
- calleeNamespace: (0, generator_1.default)(node.callee.object).code,
662
- calleeName: callee[callee.length - 1].name,
663
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
664
- expression: transformLogicNode(arg),
665
- })),
666
- });
667
- }
668
- else if (callee.length === 1) {
669
- if (calleeName.startsWith('viewLogic_')) {
670
- return new naslTypes.CallLogic({
671
- calleeNamespace: '',
672
- calleeName: calleeName.slice('viewLogic_'.length),
673
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
674
- expression: transformLogicNode(arg),
675
- })),
676
- });
677
- }
678
- if (calleeName === 'FROM') {
679
- // TODO
680
- return new naslTypes.CallLogic({
681
- calleeNamespace: `app.logics`,
682
- calleeName,
683
- arguments: [],
684
- });
685
- }
686
- return new naslTypes.CallLogic({
687
- calleeNamespace: `app.logics`,
688
- calleeName,
689
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
690
- expression: transformLogicNode(arg),
691
- })),
692
- });
693
- }
694
- else if (/interfaces/.test(calleeName)) {
695
- return new naslTypes.CallInterface({
696
- calleeNamespace: (0, generator_1.default)(node.callee.object).code,
697
- calleeName: callee[callee.length - 1].name,
698
- arguments: node?.arguments?.map((arg) => arg?.properties?.map((item) => new naslTypes.Argument({
699
- keyword: item?.key?.name,
700
- expression: transformLogicNode(item?.value),
701
- }))).flat(),
702
- });
703
- }
704
- else if (/connector./.test(calleeName)) {
705
- let flatCalleeKey = (0, generator_1.default)(node?.callee)?.code;
706
- if (flatCalleeKey?.startsWith('connector.')) {
707
- flatCalleeKey = flatCalleeKey?.replace('connector.', '');
708
- }
709
- const [, calleeConnectionName, calleeNamespace, calleeFunName] = flatCalleeKey?.match(/^(\w+)\.([\w.]+)\.(\w+)$/);
710
- return new naslTypes.CallConnector({
711
- calleeConnectionName,
712
- calleeNamespace,
713
- calleeName: calleeFunName,
714
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
715
- expression: transformLogicNode(arg),
716
- })),
717
- });
718
- }
719
- else if (/extensions./.test(calleeName)) {
720
- return new naslTypes.CallLogic({
721
- calleeNamespace: (0, generator_1.default)(node?.callee?.object)?.code,
722
- calleeName: callee?.[callee?.length - 1]?.name,
723
- handleError: true,
724
- arguments: node?.arguments?.map((arg) => new naslTypes.Argument({
725
- expression: transformLogicNode(arg),
726
- })),
727
- });
728
- }
729
- // else if (/destination/.test(calleeName)) {
730
- // const newCallee = flatMemberExpression((node.callee as any).object);
731
- // return new naslTypes.Destination({
732
- // viewNamespace: generate((node.callee as any).object.object).code,
733
- // viewName: (newCallee[newCallee.length - 1] as babelTypes.Identifier).name,
734
- // target: (node.arguments[0] as any).properties[1].value.value,
735
- // anchor: new naslTypes.Anchor({
736
- // expression: transformLogicNode((node.arguments[0] as any).properties[0].value),
737
- // }),
738
- // });
739
- // }
740
- else if (node.callee.type === 'ArrowFunctionExpression') {
741
- // NOTE: 适用于 if else
742
- const newCallee = node.callee.body.body;
743
- if (newCallee[newCallee.length - 1].argument?.callee?.name === '__MatchExpressionFuntion') {
744
- const match = new naslTypes.Match({
745
- expression: transformLogicNode(newCallee[0]),
746
- isExpression: type === 'expression',
747
- cases: flatIfStatement(newCallee[1].body.body[0]).map((_case) => new naslTypes.MatchCase({
748
- patterns: !_case.test ? [] : flatMatchPatternsExpression(transformLogicNode(_case.test)),
749
- body: _case.consequent.body.filter((item) => item.type !== 'BreakStatement').map((item) => transformLogicNode(item)).filter((item) => !!item),
750
- })),
751
- });
752
- if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
753
- match.cases.push(new naslTypes.MatchCase({
754
- patterns: [],
755
- body: [],
756
- }));
757
- }
758
- match.cases.forEach((case_) => {
759
- if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
760
- case_.isMatchedTypeEnumable = true;
761
- }
762
- if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
763
- case_.isMatchedTypeEnumable = true;
764
- case_.patterns[0] = new naslTypes.MemberExpression({
765
- object: {
766
- concept: 'Identifier',
767
- name: case_.patterns[0].object.property.name,
768
- folded: false,
769
- namespace: 'app.enums'
770
- },
771
- property: {
772
- concept: 'Identifier',
773
- name: case_.patterns[0].property.value,
774
- folded: false,
775
- },
776
- });
777
- }
778
- });
779
- return match;
780
- }
781
- if (newCallee[newCallee.length - 1].argument?.callee?.name === '__SwitchExpressionFuntion') {
782
- const switchStatement = transformLogicNode(newCallee[0].body.body[0]);
783
- return switchStatement;
784
- }
785
- throwError(`Unhandled ArrowFunctionExpression node ${node.type}`);
786
- }
787
- else {
788
- throwError(`Unhandled node ${callee.map((item) => item.name).join('.')} ${node.type}`);
789
- }
790
- }
791
- else if (node.type === 'IfStatement') {
792
- if (node.alternate && node.alternate.type === 'IfStatement') {
793
- const switchStatement = new naslTypes.SwitchStatement({
794
- cases: [],
795
- });
796
- pushElseIf(node, switchStatement);
797
- return switchStatement;
798
- }
799
- let consequentIndex;
800
- let alternateIndex;
801
- const naslNode = new naslTypes.IfStatement({
802
- test: transformLogicNode(node.test),
803
- consequent: !node.consequent ? [] : node.consequent.body.map((item, index) => {
804
- if (item?.type === 'ReturnStatement') {
805
- item.ends = true;
806
- if (item?.argument) {
807
- consequentIndex = index;
808
- }
809
- }
810
- return transformLogicNode(item);
811
- }).filter((item) => !!item),
812
- alternate: !node.alternate ? [] : node.alternate.body.map((item, index) => {
813
- if (item?.type === 'ReturnStatement') {
814
- item.ends = true;
815
- if (item?.argument) {
816
- alternateIndex = index;
817
- }
818
- }
819
- return transformLogicNode(item);
820
- }).filter((item) => !!item),
821
- });
822
- if (consequentIndex !== undefined) {
823
- naslNode?.consequent?.splice(consequentIndex + 1, 0, new naslTypes.End());
824
- }
825
- if (alternateIndex !== undefined) {
826
- naslNode?.alternate?.splice(alternateIndex + 1, 0, new naslTypes.End());
827
- }
828
- return naslNode;
829
- }
830
- else if (node.type === 'WhileStatement') {
831
- return new naslTypes.WhileStatement({
832
- test: transformLogicNode(node.test),
833
- body: node.body.body.map((item) => transformLogicNode(item)).filter((item) => !!item),
834
- });
835
- }
836
- else if (node.type === 'SwitchStatement') {
837
- const match = new naslTypes.Match({
838
- expression: transformLogicNode(node.discriminant),
839
- isExpression: type === 'expression',
840
- cases: node.cases.map((_case) => new naslTypes.MatchCase({
841
- patterns: !_case.test ? [] : [transformLogicNode(_case.test)],
842
- body: _case.consequent.filter((item) => item.type !== 'BreakStatement').map((item) => transformLogicNode(item)).filter((item) => !!item),
843
- })),
844
- });
845
- if (!match.cases.length || match.cases[match.cases.length - 1].patterns.length) {
846
- match.cases.push(new naslTypes.MatchCase({
847
- patterns: [],
848
- body: [],
849
- }));
850
- }
851
- match.cases.forEach((case_) => {
852
- if (case_.body.length && (case_.body[0].concept === 'BooleanLiteral' || case_.body[0].concept === 'StringLiteral')) {
853
- case_.isMatchedTypeEnumable = true;
854
- }
855
- if (case_.patterns.length && case_.patterns[0].concept === 'MemberExpression') {
856
- case_.isMatchedTypeEnumable = true;
857
- case_.patterns[0].object.namespace = 'app.enums';
858
- }
859
- });
860
- return match;
861
- }
862
- else if (node.type === 'MemberExpression') {
863
- const callee = flatMemberExpression(node);
864
- const calleeName = (0, generator_1.default)(node)?.code;
865
- if (calleeName?.includes('app.enums')) {
866
- const name = callee?.[3]?.value || callee?.[3]?.name || callee?.[3]?.value;
867
- return new naslTypes.MemberExpression({
868
- object: new naslTypes.Identifier({
869
- namespace: 'app.enums',
870
- name: callee?.[2]?.name,
871
- }),
872
- property: new naslTypes.Identifier({
873
- name: String(name),
874
- }),
875
- });
876
- }
877
- if (node.property.type === 'NumericLiteral') {
878
- return new naslTypes.CallFunction({
879
- calleeNamespace: 'nasl.util',
880
- calleeName: 'Get',
881
- arguments: [
882
- new naslTypes.Argument({
883
- expression: transformLogicNode(node.object),
884
- }),
885
- new naslTypes.Argument({
886
- expression: transformLogicNode(node.property),
887
- }),
888
- ],
889
- });
890
- }
891
- return new naslTypes.MemberExpression({
892
- object: transformLogicNode(node.object),
893
- property: transformLogicNode(node.property),
894
- });
895
- }
896
- else if (node.type === 'Identifier') {
897
- return new naslTypes.Identifier({
898
- name: node.name,
899
- });
900
- }
901
- else if (node.type === 'ExpressionStatement') {
902
- return transformLogicNode(node.expression);
903
- }
904
- else if (node.type === 'AssignmentExpression') {
905
- if (node.operator === '+=' || node.operator === '-=') {
906
- if (type === 'expression') {
907
- return new naslTypes.BinaryExpression({
908
- operator: node.operator[0],
909
- left: transformLogicNode(node.left),
910
- right: transformLogicNode(node.right),
911
- });
912
- }
913
- return new naslTypes.Assignment({
914
- left: transformLogicNode(node.left),
915
- right: new naslTypes.BinaryExpression({
916
- operator: node.operator[0],
917
- left: transformLogicNode(node.left),
918
- right: transformLogicNode(node.right),
919
- }),
920
- });
921
- }
922
- if (type === 'expression') {
923
- return transformLogicNode(node.right);
924
- }
925
- return new naslTypes.Assignment({
926
- left: transformLogicNode(node.left),
927
- right: transformLogicNode(node.right),
928
- });
929
- }
930
- else if (node.type === 'NewExpression') {
931
- const calleeName = (0, generator_1.default)(node.callee).code;
932
- if (['Boolean', 'Integer', 'Double', 'Decimal', 'Long'].includes(calleeName)) {
933
- return transformLogicNode(node.arguments[0], naslTypes.TypeAnnotation.createPrimitive(calleeName));
934
- }
935
- throwError(`Unhandled node ${node.type}`);
936
- }
937
- else if (node.type === 'ArrowFunctionExpression') {
938
- return new naslTypes.AnonymousFunction({
939
- params: node.params.map((param) => transformParam(param)),
940
- body: transformLogicNode(node.body),
941
- });
942
- }
943
- else if (node.type === 'BooleanLiteral') {
944
- return new naslTypes.BooleanLiteral({
945
- value: String(node.value),
946
- });
947
- }
948
- else if (node.type === 'StringLiteral') {
949
- return new naslTypes.StringLiteral({
950
- value: node.value,
951
- });
952
- }
953
- else if (node.type === 'NumericLiteral') {
954
- const literal = new naslTypes.NumericLiteral({
955
- value: String(node.value),
956
- typeAnnotation: typeAnnotation || naslTypes.TypeAnnotation.createPrimitive('Integer'),
957
- });
958
- literal.typeAnnotation.typeName = literal.changeType(String(node.value));
959
- return literal;
960
- }
961
- else if (node.type === 'NullLiteral') {
962
- return new naslTypes.NullLiteral();
963
- }
964
- else if (node.type === 'TemplateLiteral') {
965
- const expressions = [...node.expressions, ...node.quasis.map((element) => ({
966
- type: 'StringLiteral',
967
- value: element.value.raw,
968
- start: element.start,
969
- end: element.end,
970
- }))];
971
- expressions.sort((a, b) => a.start - b.start);
972
- return new naslTypes.StringInterpolation({
973
- expressions: expressions.map((item) => transformLogicNode(item)),
974
- });
975
- }
976
- else if (node.type === 'BinaryExpression' || node.type === 'LogicalExpression') {
977
- if (node.operator === '===')
978
- node.operator = '==';
979
- if (node.operator === '!==')
980
- node.operator = '!=';
981
- if (['+', '-', '*', '/', '%', '==', '!=', '>', '<', '>=', '<=', '&&', '||', 'startwith', 'endwith', 'like', 'in'].includes(node.operator)) {
982
- return new naslTypes.BinaryExpression({
983
- operator: node.operator,
984
- left: transformLogicNode(node.left),
985
- right: transformLogicNode(node.right),
986
- });
987
- }
988
- throwError(`Unhandled node ${node.type}`);
989
- }
990
- else if (node.type === 'UnaryExpression') {
991
- if (['!'].includes(node.operator)) {
992
- return new naslTypes.UnaryExpression({
993
- operator: node.operator,
994
- argument: transformLogicNode(node.argument),
995
- });
996
- }
997
- if (['-'].includes(node.operator) && node.argument.type === 'NumericLiteral') {
998
- return transformLogicNode({
999
- type: 'NumericLiteral',
1000
- value: -node.argument.value,
1001
- });
1002
- }
1003
- throwError(`Unhandled node ${node.type}`);
1004
- }
1005
- else if (node.type === 'UpdateExpression') {
1006
- if (node.operator === '++' || node.operator === '--') {
1007
- return new naslTypes.Assignment({
1008
- left: transformLogicNode(node.argument),
1009
- right: new naslTypes.BinaryExpression({
1010
- operator: node.operator[0],
1011
- left: transformLogicNode(node.argument),
1012
- right: new naslTypes.NumericLiteral({
1013
- value: '1',
1014
- typeAnnotation: naslTypes.TypeAnnotation.createPrimitive('Integer'),
1015
- }),
1016
- }),
1017
- });
1018
- }
1019
- }
1020
- else if (node.type === 'ReturnStatement') {
1021
- if (node.argument) {
1022
- if (type === 'expression') {
1023
- return transformLogicNode(node.argument);
1024
- }
1025
- if (!logic.returns.length) {
1026
- logic.returns.push(new naslTypes.Return({
1027
- name: 'result',
1028
- }));
1029
- }
1030
- return new naslTypes.Assignment({
1031
- left: new naslTypes.Identifier({
1032
- name: logic.returns[0].name,
1033
- }),
1034
- right: transformLogicNode(node.argument),
1035
- });
1036
- }
1037
- if (node?.ends) {
1038
- return new naslTypes.End();
1039
- }
1040
- }
1041
- else if (node.type === 'EmptyStatement') {
1042
- return node.leadingComments && new naslTypes.Comment({
1043
- value: String(node.leadingComments[0].value),
1044
- });
1045
- }
1046
- else if (node.type === 'BlockStatement') {
1047
- return transformLogicNode(node?.body?.[0]);
1048
- }
1049
- else if (node.type === 'ObjectExpression' && node?.properties?.length > 0) {
1050
- const properties = [];
1051
- const rights = [];
1052
- const structureProperties = [];
1053
- const assignmentLines = [];
1054
- node?.properties?.forEach((arg, index) => {
1055
- properties.push(transformLogicNode(arg.key));
1056
- if (arg.value.type === 'MemberExpression') {
1057
- const expression = flatMemberExpression(arg.value);
1058
- const members = flatMembers(transformLogicNode(arg.value));
1059
- rights.push(new naslTypes.SelectMembers({
1060
- expression: transformLogicNode(expression[0]),
1061
- members,
1062
- }));
1063
- if (arg?.value) {
1064
- assignmentLines.push(new naslTypes.AssignmentLine({
1065
- leftIndex: [0, index],
1066
- rightIndex: [index, members.length - 1],
1067
- }));
1068
- }
1069
- }
1070
- else {
1071
- rights.push(new naslTypes.SelectMembers({
1072
- expression: transformLogicNode(arg?.value)
1073
- }));
1074
- if (arg?.value) {
1075
- assignmentLines.push(new naslTypes.AssignmentLine({
1076
- leftIndex: [0, index],
1077
- rightIndex: [index],
1078
- }));
1079
- }
1080
- }
1081
- structureProperties.push(new naslTypes.StructureProperty({
1082
- name: arg?.key?.name,
1083
- typeAnnotation: null
1084
- }));
1085
- });
1086
- return new naslTypes.NewComposite({
1087
- typeAnnotation: naslTypes.TypeAnnotation.createTypeAnonymousStructure(structureProperties),
1088
- properties,
1089
- rights,
1090
- assignmentLines
1091
- });
1092
- }
1093
- else {
1094
- throwError(`Unhandled node ${node.type}`);
43
+ (0, utils_1.throwError)('无法解析函数名');
1095
44
  }
1096
45
  }
46
+ const logic = new utils_1.naslTypes.Logic();
47
+ logic.name = contextLogicName;
48
+ logic.body = [
49
+ new utils_1.naslTypes.Start(),
50
+ ];
1097
51
  const root = babel.parseSync(tsCode, {
1098
52
  filename: 'result.ts',
1099
53
  presets: [require('@babel/preset-typescript')],
@@ -1118,26 +72,22 @@ function transformTSCode(tsCode, contextLogicName, type) {
1118
72
  if (currentPositionComment) {
1119
73
  statements = statements.filter((stat) => stat.start > currentPositionComment.start);
1120
74
  }
1121
- // traverse<babelTypes.Node>((current) => {
1122
- // if (!current.node.type)
1123
- // console.log(current.key, current.node);
1124
- // // console.log(current.node.type);
1125
- // }, { node: {
1126
- // type: 'BlockStatement',
1127
- // body: statements,
1128
- // } as babelTypes.BlockStatement }, {
1129
- // mode: 'anyObject',
1130
- // depthFirst: true,
1131
- // excludedKeySet: new Set(['loc']),
1132
- // });
1133
75
  parameters.forEach((node) => {
1134
- const param = transformParam(node);
76
+ const param = (0, transform2LogicItem_1.transform2Param)(node);
1135
77
  param && logic.params.push(param);
1136
78
  });
1137
79
  statements.forEach((node) => {
1138
- const item = transformLogicNode(node);
80
+ const item = (0, transform2LogicItem_1.transform2LogicItem)(node, {
81
+ logic,
82
+ isPageLogic: isPageLogic(contextLogicName),
83
+ });
1139
84
  item && logic.body.push(item);
1140
85
  });
86
+ if (logic.returns[0]?.name) {
87
+ const index = logic.variables.findIndex((variable) => variable.name === logic.returns[0].name);
88
+ if (index >= 0)
89
+ logic.variables.splice(index, 1);
90
+ }
1141
91
  // console.log(JSON.stringify(logic));
1142
92
  // try {
1143
93
  // console.log(logic.toNaturalTS());
@@ -1147,13 +97,13 @@ function transformTSCode(tsCode, contextLogicName, type) {
1147
97
  return logic;
1148
98
  }
1149
99
  exports.transformTSCode = transformTSCode;
1150
- function tryTransformTSCode(tsCode, contextLogicName, type) {
100
+ function tryTransformTSCode(tsCode, contextLogicName) {
1151
101
  if (tsCode.includes('```')) {
1152
102
  const cap = tsCode.match(/```.*\n([\s\S]+?)```/);
1153
103
  if (cap)
1154
104
  tsCode = cap[1].trim();
1155
105
  }
1156
- return transformTSCode(tsCode, contextLogicName, type);
106
+ return transformTSCode(tsCode, contextLogicName);
1157
107
  }
1158
108
  exports.tryTransformTSCode = tryTransformTSCode;
1159
109
  function transformTSCodeEx(answer, activeLogic, context) {
@@ -1191,7 +141,7 @@ exports.transformTSCodeEx = transformTSCodeEx;
1191
141
  function transformTSCodeToExpression(answer, context) {
1192
142
  let logic;
1193
143
  try {
1194
- logic = tryTransformTSCode(answer, '', 'expression');
144
+ logic = tryTransformTSCode(answer, '');
1195
145
  }
1196
146
  catch (error) {
1197
147
  throw new Error(error);