@lcap/nasl 2.20.0-beta.3 → 2.20.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/out/automate/engine/index.d.ts +1 -1
  2. package/out/automate/engine/index.js +2 -3
  3. package/out/automate/engine/index.js.map +1 -1
  4. package/out/automate/engine/uniqueName.d.ts +1 -1
  5. package/out/automate/engine/uniqueName.js +2 -2
  6. package/out/automate/engine/uniqueName.js.map +1 -1
  7. package/out/automate/engine/utils.js +4 -1
  8. package/out/automate/engine/utils.js.map +1 -1
  9. package/out/automate/template/myProcess.d.ts +1 -1
  10. package/out/automate/template/myProcess.js +2 -2
  11. package/out/automate/template/myProcess.js.map +1 -1
  12. package/out/bak/translator.js +14 -22
  13. package/out/bak/translator.js.map +1 -1
  14. package/out/common/BaseNode.js +4 -1
  15. package/out/common/BaseNode.js.map +1 -1
  16. package/out/common/Command.d.ts +1 -0
  17. package/out/common/Command.js +5 -1
  18. package/out/common/Command.js.map +1 -1
  19. package/out/concepts/App__.d.ts +4 -0
  20. package/out/concepts/App__.js +30 -6
  21. package/out/concepts/App__.js.map +1 -1
  22. package/out/concepts/Assignee__.js +4 -3
  23. package/out/concepts/Assignee__.js.map +1 -1
  24. package/out/concepts/BatchAssignment__.js +3 -3
  25. package/out/concepts/BatchAssignment__.js.map +1 -1
  26. package/out/concepts/BindAttribute__.d.ts +7 -0
  27. package/out/concepts/BindAttribute__.js +271 -39
  28. package/out/concepts/BindAttribute__.js.map +1 -1
  29. package/out/concepts/BindDirective__.d.ts +7 -0
  30. package/out/concepts/BindDirective__.js +215 -16
  31. package/out/concepts/BindDirective__.js.map +1 -1
  32. package/out/concepts/BindStyle__.d.ts +7 -0
  33. package/out/concepts/BindStyle__.js +192 -2
  34. package/out/concepts/BindStyle__.js.map +1 -1
  35. package/out/concepts/CallFunction__.js +22 -8
  36. package/out/concepts/CallFunction__.js.map +1 -1
  37. package/out/concepts/CallInterface__.js +3 -2
  38. package/out/concepts/CallInterface__.js.map +1 -1
  39. package/out/concepts/CallLogic__.d.ts +3 -0
  40. package/out/concepts/CallLogic__.js +78 -89
  41. package/out/concepts/CallLogic__.js.map +1 -1
  42. package/out/concepts/CallQueryComponent__.js +20 -3
  43. package/out/concepts/CallQueryComponent__.js.map +1 -1
  44. package/out/concepts/ConfigGroup__.d.ts +1 -0
  45. package/out/concepts/ConfigGroup__.js +13 -0
  46. package/out/concepts/ConfigGroup__.js.map +1 -1
  47. package/out/concepts/ConfigProperty__.d.ts +19 -0
  48. package/out/concepts/ConfigProperty__.js +63 -0
  49. package/out/concepts/ConfigProperty__.js.map +1 -1
  50. package/out/concepts/Configuration__.d.ts +1 -0
  51. package/out/concepts/Configuration__.js +13 -0
  52. package/out/concepts/Configuration__.js.map +1 -1
  53. package/out/concepts/DataSource__.js +11 -3
  54. package/out/concepts/DataSource__.js.map +1 -1
  55. package/out/concepts/Destination__.d.ts +1 -0
  56. package/out/concepts/Destination__.js +61 -7
  57. package/out/concepts/Destination__.js.map +1 -1
  58. package/out/concepts/EntityProperty__.js +9 -1
  59. package/out/concepts/EntityProperty__.js.map +1 -1
  60. package/out/concepts/EnumItem__.d.ts +5 -5
  61. package/out/concepts/EnumItem__.js +6 -6
  62. package/out/concepts/Enum__.d.ts +20 -19
  63. package/out/concepts/Enum__.js +28 -1
  64. package/out/concepts/Enum__.js.map +1 -1
  65. package/out/concepts/ExternalDestination__.d.ts +1 -0
  66. package/out/concepts/ExternalDestination__.js +22 -4
  67. package/out/concepts/ExternalDestination__.js.map +1 -1
  68. package/out/concepts/ForEachStatement__.js +2 -0
  69. package/out/concepts/ForEachStatement__.js.map +1 -1
  70. package/out/concepts/Frontend__.d.ts +2 -1
  71. package/out/concepts/Frontend__.js.map +1 -1
  72. package/out/concepts/Identifier__.js +16 -5
  73. package/out/concepts/Identifier__.js.map +1 -1
  74. package/out/concepts/InterfaceParam__.js +9 -1
  75. package/out/concepts/InterfaceParam__.js.map +1 -1
  76. package/out/concepts/JSBlock__.js +5 -1
  77. package/out/concepts/JSBlock__.js.map +1 -1
  78. package/out/concepts/Logic__.d.ts +79 -79
  79. package/out/concepts/Logic__.js +30 -8
  80. package/out/concepts/Logic__.js.map +1 -1
  81. package/out/concepts/Match__.d.ts +2 -2
  82. package/out/concepts/Match__.js +29 -13
  83. package/out/concepts/Match__.js.map +1 -1
  84. package/out/concepts/MemberExpression__.js +9 -0
  85. package/out/concepts/MemberExpression__.js.map +1 -1
  86. package/out/concepts/Module__.d.ts +16 -0
  87. package/out/concepts/Module__.js +43 -0
  88. package/out/concepts/Module__.js.map +1 -1
  89. package/out/concepts/NewComposite__.d.ts +3 -4
  90. package/out/concepts/NewComposite__.js +99 -116
  91. package/out/concepts/NewComposite__.js.map +1 -1
  92. package/out/concepts/NewList__.d.ts +1 -0
  93. package/out/concepts/NewList__.js +22 -2
  94. package/out/concepts/NewList__.js.map +1 -1
  95. package/out/concepts/NewMap__.d.ts +1 -0
  96. package/out/concepts/NewMap__.js +43 -11
  97. package/out/concepts/NewMap__.js.map +1 -1
  98. package/out/concepts/OqlQueryComponent__.js +40 -12
  99. package/out/concepts/OqlQueryComponent__.js.map +1 -1
  100. package/out/concepts/Param__.js +10 -2
  101. package/out/concepts/Param__.js.map +1 -1
  102. package/out/concepts/ProcessElement__.js +2 -1
  103. package/out/concepts/ProcessElement__.js.map +1 -1
  104. package/out/concepts/ProcessOutcome__.js +1 -1
  105. package/out/concepts/ProcessOutcome__.js.map +1 -1
  106. package/out/concepts/ProcessOutcomes__.js +1 -1
  107. package/out/concepts/ProcessOutcomes__.js.map +1 -1
  108. package/out/concepts/Process__.js +1 -0
  109. package/out/concepts/Process__.js.map +1 -1
  110. package/out/concepts/Return__.js +13 -2
  111. package/out/concepts/Return__.js.map +1 -1
  112. package/out/concepts/StringInterpolation__.js +14 -2
  113. package/out/concepts/StringInterpolation__.js.map +1 -1
  114. package/out/concepts/StringLiteral__.js +6 -6
  115. package/out/concepts/StringLiteral__.js.map +1 -1
  116. package/out/concepts/StructureProperty__.js +9 -1
  117. package/out/concepts/StructureProperty__.js.map +1 -1
  118. package/out/concepts/TypeAnnotation__.d.ts +6 -3
  119. package/out/concepts/TypeAnnotation__.js +67 -13
  120. package/out/concepts/TypeAnnotation__.js.map +1 -1
  121. package/out/concepts/ValidationRule__.d.ts +1 -0
  122. package/out/concepts/ValidationRule__.js +53 -0
  123. package/out/concepts/ValidationRule__.js.map +1 -1
  124. package/out/concepts/Variable__.js +12 -1
  125. package/out/concepts/Variable__.js.map +1 -1
  126. package/out/concepts/ViewElement__.d.ts +1 -0
  127. package/out/concepts/ViewElement__.js +24 -1
  128. package/out/concepts/ViewElement__.js.map +1 -1
  129. package/out/concepts/View__.d.ts +1 -3
  130. package/out/concepts/View__.js +33 -12
  131. package/out/concepts/View__.js.map +1 -1
  132. package/out/concepts/basics/stdlib/nasl.collection.js +6 -1
  133. package/out/concepts/basics/stdlib/nasl.collection.js.map +1 -1
  134. package/out/concepts/basics/stdlib/nasl.configuration.js +3 -0
  135. package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -1
  136. package/out/concepts/basics/stdlib/nasl.core.d.ts +2 -0
  137. package/out/concepts/basics/stdlib/nasl.core.js +34 -0
  138. package/out/concepts/basics/stdlib/nasl.core.js.map +1 -1
  139. package/out/concepts/basics/stdlib/nasl.util.js +4 -2
  140. package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
  141. package/out/concepts/basics/types/index.d.ts +1 -0
  142. package/out/concepts/basics/types/index.js +3 -1
  143. package/out/concepts/basics/types/index.js.map +1 -1
  144. package/out/concepts/index__.d.ts +0 -1
  145. package/out/concepts/index__.js +0 -1
  146. package/out/concepts/index__.js.map +1 -1
  147. package/out/enums/KEYWORDS.js +8 -0
  148. package/out/enums/KEYWORDS.js.map +1 -1
  149. package/out/generator/genBundleFiles.js +24 -5
  150. package/out/generator/genBundleFiles.js.map +1 -1
  151. package/out/generator/genReleaseBody.d.ts +3 -3
  152. package/out/generator/genReleaseBody.js +98 -23
  153. package/out/generator/genReleaseBody.js.map +1 -1
  154. package/out/generator/permission.d.ts +3 -10
  155. package/out/generator/permission.js +43 -21
  156. package/out/generator/permission.js.map +1 -1
  157. package/out/index.d.ts +1 -1
  158. package/out/index.js +2 -1
  159. package/out/index.js.map +1 -1
  160. package/out/server/entity2LogicNamespace.js +2 -20
  161. package/out/server/entity2LogicNamespace.js.map +1 -1
  162. package/out/server/extendBaseNode.js +16 -5
  163. package/out/server/extendBaseNode.js.map +1 -1
  164. package/out/server/formatTsUtils.d.ts +2 -1
  165. package/out/server/formatTsUtils.js +40 -10
  166. package/out/server/formatTsUtils.js.map +1 -1
  167. package/out/server/getLogics.d.ts +2 -2
  168. package/out/server/getLogics.js +3 -3
  169. package/out/server/getLogics.js.map +1 -1
  170. package/out/server/getMemberIdentifier.d.ts +1 -0
  171. package/out/server/getMemberIdentifier.js +27 -1
  172. package/out/server/getMemberIdentifier.js.map +1 -1
  173. package/out/server/index.js +1 -0
  174. package/out/server/index.js.map +1 -1
  175. package/out/server/naslServer.d.ts +7 -1
  176. package/out/server/naslServer.js +558 -62
  177. package/out/server/naslServer.js.map +1 -1
  178. package/out/server/translator.js +109 -33
  179. package/out/server/translator.js.map +1 -1
  180. package/out/service/storage/init.js +22 -2
  181. package/out/service/storage/init.js.map +1 -1
  182. package/out/templator/genCreateBlock.js +1 -3
  183. package/out/templator/genCreateBlock.js.map +1 -1
  184. package/out/templator/genCurdEditMultipleKeyBlock.js +1 -3
  185. package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
  186. package/out/templator/genCurdMultipleKeyBlock.js +2 -4
  187. package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
  188. package/out/templator/genGetBlock.js +1 -1
  189. package/out/templator/genGetBlock.js.map +1 -1
  190. package/out/templator/genGridViewBlock.js +2 -2
  191. package/out/templator/genGridViewBlock.js.map +1 -1
  192. package/out/templator/genListViewBlock.js +7 -1
  193. package/out/templator/genListViewBlock.js.map +1 -1
  194. package/out/templator/genSelectBlock.js +1 -1
  195. package/out/templator/genSelectBlock.js.map +1 -1
  196. package/out/templator/genTableBlock.js +2 -2
  197. package/out/templator/genTableBlock.js.map +1 -1
  198. package/out/templator/genUpdateBlock.js +2 -3
  199. package/out/templator/genUpdateBlock.js.map +1 -1
  200. package/out/translator/index.js +4 -1
  201. package/out/translator/index.js.map +1 -1
  202. package/out/utils/traverse.js +8 -2
  203. package/out/utils/traverse.js.map +1 -1
  204. package/package.json +2 -2
  205. package/sandbox/stdlib/dist/nasl.logging.js +0 -0
  206. package/sandbox/stdlib/dist/nasl.util.js +0 -0
  207. package/sandbox/stdlib/nasl.collection.ts +1 -0
  208. package/sandbox/stdlib/nasl.core.ts +34 -0
  209. package/sandbox/stdlib/nasl.oql.ts +71 -15
  210. package/sandbox/stdlib/nasl.util.ts +9 -3
  211. package/src/automate/engine/dist/index.dev.js +517 -0
  212. package/src/automate/engine/index.js +2 -3
  213. package/src/automate/engine/uniqueName.js +2 -2
  214. package/src/automate/engine/utils.js +4 -2
  215. package/src/automate/template/myProcess.js +2 -2
  216. package/src/bak/translator.js +16 -25
  217. package/src/common/BaseNode.ts +3 -1
  218. package/src/common/Command.ts +4 -0
  219. package/src/common/dist/BaseNode.js +1101 -0
  220. package/src/concepts/App__.ts +36 -7
  221. package/src/concepts/Assignee__.ts +4 -3
  222. package/src/concepts/BatchAssignment__.ts +3 -3
  223. package/src/concepts/BindAttribute__.ts +301 -38
  224. package/src/concepts/BindDirective__.ts +205 -30
  225. package/src/concepts/BindStyle__.ts +188 -24
  226. package/src/concepts/CallFunction__.ts +55 -10
  227. package/src/concepts/CallInterface__.ts +3 -2
  228. package/src/concepts/CallLogic__.ts +110 -90
  229. package/src/concepts/CallQueryComponent__.ts +18 -3
  230. package/src/concepts/ConfigGroup__.ts +17 -4
  231. package/src/concepts/ConfigProperty__.ts +72 -4
  232. package/src/concepts/Configuration__.ts +14 -5
  233. package/src/concepts/DataSource__.ts +10 -3
  234. package/src/concepts/Destination__.ts +61 -7
  235. package/src/concepts/EntityProperty__.ts +7 -1
  236. package/src/concepts/EnumItem__.ts +6 -6
  237. package/src/concepts/Enum__.ts +22 -19
  238. package/src/concepts/ExternalDestination__.ts +29 -9
  239. package/src/concepts/ForEachStatement__.ts +2 -0
  240. package/src/concepts/Frontend__.ts +2 -1
  241. package/src/concepts/Identifier__.ts +16 -5
  242. package/src/concepts/InterfaceParam__.ts +7 -1
  243. package/src/concepts/JSBlock__.ts +3 -2
  244. package/src/concepts/Logic__.ts +110 -89
  245. package/src/concepts/Match__.ts +53 -14
  246. package/src/concepts/MemberExpression__.ts +6 -0
  247. package/src/concepts/Module__.ts +57 -0
  248. package/src/concepts/NewComposite__.ts +104 -131
  249. package/src/concepts/NewList__.ts +23 -2
  250. package/src/concepts/NewMap__.ts +48 -24
  251. package/src/concepts/OqlQueryComponent__.ts +40 -20
  252. package/src/concepts/Param__.ts +178 -176
  253. package/src/concepts/ProcessElement__.ts +2 -1
  254. package/src/concepts/ProcessOutcome__.ts +1 -1
  255. package/src/concepts/ProcessOutcomes__.ts +1 -1
  256. package/src/concepts/Process__.ts +1 -0
  257. package/src/concepts/Return__.ts +10 -2
  258. package/src/concepts/StringInterpolation__.ts +19 -7
  259. package/src/concepts/StringLiteral__.ts +7 -6
  260. package/src/concepts/StructureProperty__.ts +7 -1
  261. package/src/concepts/TypeAnnotation__.ts +102 -15
  262. package/src/concepts/ValidationRule__.ts +58 -9
  263. package/src/concepts/Variable__.ts +13 -1
  264. package/src/concepts/ViewElement__.ts +47 -2
  265. package/src/concepts/View__.ts +39 -18
  266. package/src/concepts/basics/stdlib/dist/nasl.util.js +1602 -0
  267. package/src/concepts/basics/stdlib/dist/reference2TypeAnnotationList.js +24 -0
  268. package/src/concepts/basics/stdlib/nasl.collection.ts +6 -1
  269. package/src/concepts/basics/stdlib/nasl.configuration.ts +3 -0
  270. package/src/concepts/basics/stdlib/nasl.core.ts +33 -2
  271. package/src/concepts/basics/stdlib/nasl.util.ts +4 -2
  272. package/src/concepts/basics/types/index.ts +1 -0
  273. package/src/concepts/dist/BindAttribute__.js +795 -0
  274. package/src/concepts/dist/BindEvent__.js +732 -0
  275. package/src/concepts/dist/CallFunction__.js +527 -0
  276. package/src/concepts/dist/CallLogic__.js +932 -0
  277. package/src/concepts/dist/Destination__.js +708 -0
  278. package/src/concepts/dist/ExternalDestination__.js +298 -0
  279. package/src/concepts/dist/Identifier__.js +311 -0
  280. package/src/concepts/dist/StringInterpolation__.js +231 -0
  281. package/src/concepts/dist/TypeAnnotation__.js +834 -0
  282. package/src/concepts/dist/ViewElement__.js +1692 -0
  283. package/src/concepts/dist/View__.js +1601 -0
  284. package/src/concepts/index__.ts +0 -1
  285. package/src/enums/KEYWORDS.ts +8 -0
  286. package/src/generator/dist/genBundleFiles.js +261 -0
  287. package/src/generator/dist/genMetaData.js +245 -0
  288. package/src/generator/dist/permission.js +405 -0
  289. package/src/generator/genBundleFiles.ts +24 -5
  290. package/src/generator/genReleaseBody.ts +77 -31
  291. package/src/generator/permission.ts +47 -21
  292. package/src/index.ts +1 -1
  293. package/src/server/entity2LogicNamespace.ts +2 -20
  294. package/src/server/extendBaseNode.ts +15 -5
  295. package/src/server/formatTsUtils.ts +41 -10
  296. package/src/server/getLogics.ts +4 -4
  297. package/src/server/getMemberIdentifier.ts +27 -1
  298. package/src/server/index.ts +2 -0
  299. package/src/server/naslServer.ts +555 -63
  300. package/src/server/translator.ts +96 -34
  301. package/src/service/storage/dist/init.js +579 -0
  302. package/src/service/storage/init.ts +23 -3
  303. package/src/templator/dist/genEditTableBlock.js +204 -0
  304. package/src/templator/dist/genGridViewBlock.js +265 -0
  305. package/src/templator/dist/genListViewBlock.js +84 -0
  306. package/src/templator/dist/genTableBlock.js +209 -0
  307. package/src/templator/dist/utils.js +527 -0
  308. package/src/templator/genCreateBlock.ts +1 -3
  309. package/src/templator/genCurdEditMultipleKeyBlock.ts +1 -3
  310. package/src/templator/genCurdMultipleKeyBlock.ts +2 -4
  311. package/src/templator/genGetBlock.ts +1 -1
  312. package/src/templator/genGridViewBlock.ts +3 -4
  313. package/src/templator/genListViewBlock.ts +9 -3
  314. package/src/templator/genSelectBlock.ts +1 -1
  315. package/src/templator/genTableBlock.ts +3 -3
  316. package/src/templator/genUpdateBlock.ts +2 -3
  317. package/src/translator/index.ts +3 -1
  318. package/src/utils/traverse.ts +10 -2
  319. package/ts-worker/lib/tsserver.js +10 -2
  320. package/ts-worker/package.json +1 -0
  321. package/ts-worker/webpack.config.js +11 -2
  322. package/out/concepts/ConstructArgument__.d.ts +0 -40
  323. package/out/concepts/ConstructArgument__.js +0 -108
  324. package/out/concepts/ConstructArgument__.js.map +0 -1
  325. package/out/concepts/Construct__.d.ts +0 -189
  326. package/out/concepts/Construct__.js +0 -340
  327. package/out/concepts/Construct__.js.map +0 -1
  328. package/out/templator/sql-parser/index.d.ts +0 -1
  329. package/out/templator/sql-parser/index.js +0 -228
  330. package/out/templator/sql-parser/index.js.map +0 -1
  331. package/out/templator/sql-parser/parser.js +0 -26664
  332. package/out/templator/sql-parser/parser.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { TranslatorState, shiftState, withSourceMap } from '../translator';
2
2
  import { ElementToVueOptions } from './ViewElement__';
3
+ import MemberExpression from './MemberExpression__';
3
4
  //================================================================================
4
5
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
5
6
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
@@ -147,10 +148,6 @@ export class BindDirective extends BaseNode {
147
148
  });
148
149
  }
149
150
 
150
-
151
-
152
-
153
-
154
151
  /**
155
152
  * 插入逻辑项
156
153
  * @internal
@@ -183,8 +180,6 @@ export class BindDirective extends BaseNode {
183
180
  return logicItem;
184
181
  }
185
182
 
186
-
187
-
188
183
  /**
189
184
  * 插入逻辑项
190
185
  * @param logicItemOptions 逻辑项参数
@@ -207,8 +202,6 @@ export class BindDirective extends BaseNode {
207
202
  return node;
208
203
  }
209
204
 
210
-
211
-
212
205
  /**
213
206
  * 添加逻辑项
214
207
  * @internal
@@ -228,8 +221,6 @@ export class BindDirective extends BaseNode {
228
221
  return this._insertItemInPlaygroundAt(options as any, index);
229
222
  }
230
223
 
231
-
232
-
233
224
  /**
234
225
  * 添加逻辑项
235
226
  * @param logicItemOptions 逻辑项参数
@@ -253,9 +244,6 @@ export class BindDirective extends BaseNode {
253
244
  return node;
254
245
  }
255
246
 
256
-
257
-
258
-
259
247
  /**
260
248
  * 删除逻辑项
261
249
  * @param name 逻辑项名称
@@ -281,8 +269,6 @@ export class BindDirective extends BaseNode {
281
269
  return expression.delete();
282
270
  }
283
271
 
284
-
285
-
286
272
  /**
287
273
  * 删除逻辑项
288
274
  * @param logicItem 已有的逻辑项实例
@@ -290,7 +276,7 @@ export class BindDirective extends BaseNode {
290
276
  removeItemInPlayground(logicItem: LogicItem): void;
291
277
 
292
278
  removeItemInPlayground(options: LogicItem) {
293
- let logicItem: LogicItem = options;
279
+ const logicItem: LogicItem = options;
294
280
  return logicItem.delete();
295
281
  }
296
282
 
@@ -335,24 +321,193 @@ export class BindDirective extends BaseNode {
335
321
  });
336
322
  }
337
323
 
324
+ // 属性上绑定的表达式
325
+ get bindExpressions() {
326
+ return [this.expression];
327
+ }
328
+
329
+ // 是否需要用标识符替换
330
+ get needReplaceWithIdentifier() {
331
+ let bindExpression = false;
332
+ if (this.expression) {
333
+ let rootMemberExpression: any;
334
+ let tempNode = this.expression;
335
+ while (tempNode?.concept === 'MemberExpression') {
336
+ rootMemberExpression = tempNode;
337
+ tempNode = (tempNode as MemberExpression)?.object;
338
+ }
339
+ // 变量和变量的成员表达式不进行替换
340
+ if (
341
+ !(
342
+ this.expression?.concept === 'Identifier'
343
+ || (rootMemberExpression && rootMemberExpression.object?.concept === 'Identifier')
344
+ )
345
+ && (this.type === 'dynamic' || (this.name === 'rules' && (this as any).rules))
346
+ ) {
347
+ bindExpression = true;
348
+ }
349
+ }
350
+ return bindExpression;
351
+ }
352
+
353
+ // 获取表达式在页面中的名字
354
+ get expressionNameInView() {
355
+ const nameList: string[] = [];
356
+ let node: BaseNode = this;
357
+ while (node) {
358
+ nameList.unshift(node.name);
359
+ if (node.concept === 'ViewElement') {
360
+ node = null;
361
+ } else {
362
+ nameList.unshift(node.parentKey);
363
+ node = node.parentNode;
364
+ }
365
+ }
366
+ return nameList.join('_').replace(/-/g, '_');
367
+ }
368
+
369
+ // 获取表达式生成器名称
370
+ get expressionBuilderName() {
371
+ let expressionInViewName = this.expressionNameInView;
372
+ expressionInViewName = expressionInViewName.charAt(0).toUpperCase() + expressionInViewName.slice(1);
373
+ return `gen${expressionInViewName}`;
374
+ }
375
+
376
+ // 获取参数列表
377
+ getArgsList() {
378
+ const viewElement = this?.getAncestor('ViewElement');
379
+ const argsList = [];
380
+ let parent = viewElement?.parentNode;
381
+ let index = 0;
382
+ while (parent && parent.concept !== 'View') {
383
+ if ((parent as ViewElement).slotScope) {
384
+ argsList.unshift(index === 0 ? 'current' : 'current' + index);
385
+ index++;
386
+ }
387
+ parent = parent.parentNode;
388
+ }
389
+ return argsList;
390
+ }
391
+
392
+ // 表达式中需要被监听的变量
393
+ get watchedVariableMap() {
394
+ const map: any = {};
395
+ // 页面中表达式用到的变量需要监听,从而重新执行match表达式
396
+ utils.traverse((current: any) => {
397
+ const { node } = current || {};
398
+ const { concept } = node || {};
399
+ if (['Identifier'].includes(concept)) {
400
+ let expressionNode = node;
401
+ let memberExpressionNode = node?.parentNode;
402
+ while (memberExpressionNode?.concept === 'MemberExpression') {
403
+ expressionNode = memberExpressionNode;
404
+ // 为了处理MemberExpression里面存在CallLogic、CallFunction等的情况
405
+ const { concept: objConcept } = memberExpressionNode.object || {};
406
+ if (!['MemberExpression', 'Identifier'].includes(objConcept)) {
407
+ memberExpressionNode = null;
408
+ expressionNode = null;
409
+ } else {
410
+ memberExpressionNode = memberExpressionNode.parentNode;
411
+ }
412
+ }
413
+ if (expressionNode) {
414
+ map[expressionNode.toJS()] = true;
415
+ }
416
+ }
417
+ }, {
418
+ node: this,
419
+ }, {
420
+ mode: 'anyObject',
421
+ excludedKeySet: new Set([
422
+ 'parentNode',
423
+ 'sourceMap',
424
+ 'storageJSON',
425
+ 'tsErrorDetail',
426
+ 'NaslAnnotatedJSON',
427
+ 'calledFrom',
428
+ '_events',
429
+ '_collectingList',
430
+ '_historyList',
431
+ ]),
432
+ });
433
+ return map;
434
+ }
435
+
436
+ getInViewMethod(state?: TranslatorState) {
437
+ const argsList = this.getArgsList() || [];
438
+ const hasArgs = !!argsList.length;
439
+ let argStr = '';
440
+
441
+ // 容错代码
442
+ let ftCode = '';
443
+ if (hasArgs) {
444
+ argsList.forEach((arg) => {
445
+ ftCode += `if (!this.${this.expressionNameInView}${argStr}) {
446
+ this.${this.expressionNameInView}${argStr} = {};
447
+ }\n`;
448
+ argStr += `[${arg}.hasOwnProperty('__nodeKey') ? ${arg}.__nodeKey : ${arg}.index]`;
449
+ });
450
+ }
451
+ ftCode += `if (!this.${this.expressionNameInView}${argStr}) {
452
+ this.${this.expressionNameInView}${argStr} = {};
453
+ }`;
454
+
455
+ // 新的参数
456
+ const paramList = Object.keys(this.watchedVariableMap);
457
+ let newParams = `const newParams = [];`;
458
+ if (Array.isArray(paramList) && paramList.length) {
459
+ paramList.forEach((param) => {
460
+ newParams += `newParams.push(${param});\n`;
461
+ });
462
+ }
463
+
464
+ // 表达式主体
465
+ let expressionStr = '';
466
+ if (this.type === 'dynamic') {
467
+ expressionStr = this.expression?.toJS() || '';
468
+ }
469
+
470
+ // 变量重新设置,为了触发重新调用
471
+ let setVarStr = `this.${this.expressionNameInView}${argStr} = {
472
+ ...(this.${this.expressionNameInView}${argStr} || {}),
473
+ value: value,
474
+ };`;
475
+ if (Array.isArray(argsList) && argsList.length) {
476
+ setVarStr += `this.${this.expressionNameInView} = {...this.${this.expressionNameInView}};\n`;
477
+ }
478
+ const code = `${this.expressionBuilderName} (${argsList.join(', ')}) {
479
+ // 容错代码
480
+ ${ftCode}
481
+ (async () => {
482
+ // 旧的参数
483
+ const oldParams = this.${this.expressionNameInView}${argStr}.params;
484
+ // 新的参数
485
+ ${newParams}
486
+ const isLooseEqual = this.$isLooseEqualFn(oldParams, newParams);
487
+ if (!isLooseEqual) {
488
+ this.${this.expressionNameInView}${argStr}.params = newParams;
489
+ const value = ${expressionStr};
490
+ ${setVarStr}
491
+ }
492
+ })();
493
+ return this.${this.expressionNameInView}${argStr}.value;
494
+ }`;
495
+
496
+ return code;
497
+ }
498
+
338
499
  /**
339
500
  * 转换成 Vue 的模板格式
340
501
  */
341
502
  toVue(options?: ElementToVueOptions) {
342
- let modifiersString = '';
343
- let modifiers = {};
344
- try {
345
- modifiers = JSON.parse(this.modifiers || '{}');
346
- } catch (err) {
347
- modifiers = {};
348
- }
349
- Object.keys(modifiers).forEach((key) => {
350
- const value = (modifiers as any)[key];
351
- if (value)
352
- modifiersString += '.' + key;
353
- });
503
+ let str = '';
354
504
  // eslint-disable-next-line no-nested-ternary
355
505
  let value = (this.type ?? 'string') !== 'string' ? this.value : this.value ? `'${this.value}'` : '';
506
+ // 需要用标识符替换
507
+ //if (options.finalCode !== false && this.needReplaceWithIdentifier) {
508
+ // const argsList = this.getArgsList();
509
+ // value = `${this.expressionBuilderName}(${argsList.join(', ')})`;
510
+ //} else
356
511
  if (this.expression) {
357
512
  value = this.expression.toVue(options);
358
513
  if (this.expression.concept === 'StringLiteral') {
@@ -376,13 +531,33 @@ export class BindDirective extends BaseNode {
376
531
  if (isElement) {
377
532
  pathArr = [...pathArr, ...paths.slice(-1)];
378
533
  }
379
- const _path = pathArr.reduce((str, item) => {
534
+ // 数组的第一个是端名称
535
+ pathArr.shift();
536
+ let _path = pathArr.reduce((str, item) => {
380
537
  const c = item.match(regex1);
381
538
  return str + '/' + c[1];
382
539
  }, '');
540
+ if (this.frontend && this.frontend.basePath) {
541
+ _path = `${this.frontend.basePath}${_path}`;
542
+ }
383
543
  value = `'${_path}'`;
384
544
  }
385
- return value !== '' && value !== undefined && value !== null ? `v-${this.name}${modifiersString}${this.arg ? ':' + this.arg : ''}="${value}"` : '';
545
+ let modifiersString = '';
546
+ let modifiers = {};
547
+ try {
548
+ modifiers = JSON.parse(this.modifiers || '{}');
549
+ } catch (err) {
550
+ modifiers = {};
551
+ }
552
+ Object.keys(modifiers).forEach((key) => {
553
+ const value = (modifiers as any)[key];
554
+ if (value)
555
+ modifiersString += '.' + key;
556
+ });
557
+ if (value !== '' && value !== undefined && value !== null) {
558
+ str += `v-${this.name}${modifiersString}${this.arg ? ':' + this.arg : ''}="${value}"`;
559
+ }
560
+ return str;
386
561
  }
387
562
 
388
563
  @withSourceMap()
@@ -1,5 +1,6 @@
1
1
  import { TranslatorState, shiftState, withSourceMap } from '../translator';
2
2
  import { ElementToVueOptions } from './ViewElement__';
3
+ import MemberExpression from './MemberExpression__';
3
4
  //================================================================================
4
5
  // 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
5
6
  // ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
@@ -117,10 +118,6 @@ export class BindStyle extends BaseNode {
117
118
  });
118
119
  }
119
120
 
120
-
121
-
122
-
123
-
124
121
  /**
125
122
  * 插入逻辑项
126
123
  * @internal
@@ -153,8 +150,6 @@ export class BindStyle extends BaseNode {
153
150
  return logicItem;
154
151
  }
155
152
 
156
-
157
-
158
153
  /**
159
154
  * 插入逻辑项
160
155
  * @param logicItemOptions 逻辑项参数
@@ -177,8 +172,6 @@ export class BindStyle extends BaseNode {
177
172
  return node;
178
173
  }
179
174
 
180
-
181
-
182
175
  /**
183
176
  * 添加逻辑项
184
177
  * @internal
@@ -198,8 +191,6 @@ export class BindStyle extends BaseNode {
198
191
  return this._insertItemInPlaygroundAt(options as any, index);
199
192
  }
200
193
 
201
-
202
-
203
194
  /**
204
195
  * 添加逻辑项
205
196
  * @param logicItemOptions 逻辑项参数
@@ -223,9 +214,6 @@ export class BindStyle extends BaseNode {
223
214
  return node;
224
215
  }
225
216
 
226
-
227
-
228
-
229
217
  /**
230
218
  * 删除逻辑项
231
219
  * @param name 逻辑项名称
@@ -251,8 +239,6 @@ export class BindStyle extends BaseNode {
251
239
  return expression.delete();
252
240
  }
253
241
 
254
-
255
-
256
242
  /**
257
243
  * 删除逻辑项
258
244
  * @param logicItem 已有的逻辑项实例
@@ -260,7 +246,7 @@ export class BindStyle extends BaseNode {
260
246
  removeItemInPlayground(logicItem: LogicItem): void;
261
247
 
262
248
  removeItemInPlayground(options: LogicItem) {
263
- let logicItem: LogicItem = options;
249
+ const logicItem: LogicItem = options;
264
250
  return logicItem.delete();
265
251
  }
266
252
 
@@ -292,19 +278,197 @@ export class BindStyle extends BaseNode {
292
278
  // 自动生成的代码已结束。下面可以手动编写。
293
279
  //================================================================================
294
280
 
281
+ // 属性上绑定的表达式
282
+ get bindExpressions() {
283
+ return [this.expression];
284
+ }
295
285
 
296
- /**
297
- * 转换成 Vue 的模板格式
298
- */
299
- toVue(options?: ElementToVueOptions) {
300
- let value = this.expression?.toVue(options);
286
+ // 是否需要用标识符替换
287
+ get needReplaceWithIdentifier() {
288
+ let bindExpression = false;
289
+ if (this.expression) {
290
+ let rootMemberExpression: any;
291
+ let tempNode = this.expression;
292
+ while (tempNode?.concept === 'MemberExpression') {
293
+ rootMemberExpression = tempNode;
294
+ tempNode = (tempNode as MemberExpression)?.object;
295
+ }
296
+ // 变量和变量的成员表达式不进行替换
297
+ if (
298
+ !(
299
+ this.expression?.concept === 'Identifier'
300
+ || (rootMemberExpression && rootMemberExpression.object?.concept === 'Identifier')
301
+ )
302
+ ) {
303
+ bindExpression = true;
304
+ }
305
+ }
306
+ return bindExpression;
307
+ }
301
308
 
302
- if(this.name?.endsWith('background-image') && value)
303
- value = `\`url(\${${value}})\``;
309
+ // 获取表达式在页面中的名字
310
+ get expressionNameInView() {
311
+ const nameList: string[] = [];
312
+ let node: BaseNode = this;
313
+ while (node) {
314
+ nameList.unshift(node.name);
315
+ if (node.concept === 'ViewElement') {
316
+ node = null;
317
+ } else {
318
+ nameList.unshift(node.parentKey);
319
+ node = node.parentNode;
320
+ }
321
+ }
322
+ return nameList.join('_').replace(/-/g, '_');
323
+ }
304
324
 
325
+ // 获取表达式生成器名称
326
+ get expressionBuilderName() {
327
+ let expressionInViewName = this.expressionNameInView;
328
+ expressionInViewName = expressionInViewName.charAt(0).toUpperCase() + expressionInViewName.slice(1);
329
+ return `gen${expressionInViewName}`;
330
+ }
331
+
332
+ // 获取参数列表
333
+ getArgsList() {
334
+ const viewElement = this?.getAncestor('ViewElement');
335
+ const argsList = [];
336
+ let parent = viewElement?.parentNode;
337
+ let index = 0;
338
+ while (parent && parent.concept !== 'View') {
339
+ if ((parent as ViewElement).slotScope) {
340
+ argsList.unshift(index === 0 ? 'current' : 'current' + index);
341
+ index++;
342
+ }
343
+ parent = parent.parentNode;
344
+ }
345
+ return argsList;
346
+ }
347
+
348
+ // 表达式中需要被监听的变量
349
+ get watchedVariableMap() {
350
+ const map: any = {};
351
+ // 页面中表达式用到的变量需要监听,从而重新执行match表达式
352
+ utils.traverse((current: any) => {
353
+ const { node } = current || {};
354
+ const { concept } = node || {};
355
+ if (['Identifier'].includes(concept)) {
356
+ let expressionNode = node;
357
+ let memberExpressionNode = node?.parentNode;
358
+ while (memberExpressionNode?.concept === 'MemberExpression') {
359
+ expressionNode = memberExpressionNode;
360
+ // 为了处理MemberExpression里面存在CallLogic、CallFunction等的情况
361
+ const { concept: objConcept } = memberExpressionNode.object || {};
362
+ if (!['MemberExpression', 'Identifier'].includes(objConcept)) {
363
+ memberExpressionNode = null;
364
+ expressionNode = null;
365
+ } else {
366
+ memberExpressionNode = memberExpressionNode.parentNode;
367
+ }
368
+ }
369
+ if (expressionNode) {
370
+ map[expressionNode.toJS()] = true;
371
+ }
372
+ }
373
+ }, {
374
+ node: this,
375
+ }, {
376
+ mode: 'anyObject',
377
+ excludedKeySet: new Set([
378
+ 'parentNode',
379
+ 'sourceMap',
380
+ 'storageJSON',
381
+ 'tsErrorDetail',
382
+ 'NaslAnnotatedJSON',
383
+ 'calledFrom',
384
+ '_events',
385
+ '_collectingList',
386
+ '_historyList',
387
+ ]),
388
+ });
389
+ return map;
390
+ }
391
+
392
+ getInViewMethod(state?: TranslatorState) {
393
+ const argsList = this.getArgsList() || [];
394
+ const hasArgs = !!argsList.length;
395
+ let argStr = '';
396
+
397
+ // 容错代码
398
+ let ftCode = '';
399
+ if (hasArgs) {
400
+ argsList.forEach((arg) => {
401
+ ftCode += `if (!this.${this.expressionNameInView}${argStr}) {
402
+ this.${this.expressionNameInView}${argStr} = {};
403
+ }\n`;
404
+ argStr += `[${arg}.hasOwnProperty('__nodeKey') ? ${arg}.__nodeKey : ${arg}.index]`;
405
+ });
406
+ }
407
+ ftCode += `if (!this.${this.expressionNameInView}${argStr}) {
408
+ this.${this.expressionNameInView}${argStr} = {};
409
+ }`;
410
+
411
+ // 新的参数
412
+ const paramList = Object.keys(this.watchedVariableMap);
413
+ let newParams = `const newParams = [];`;
414
+ if (Array.isArray(paramList) && paramList.length) {
415
+ paramList.forEach((param) => {
416
+ newParams += `newParams.push(${param});\n`;
417
+ });
418
+ }
419
+
420
+ // 表达式主体
421
+ let expressionStr = this.expression?.toJS() || '';
422
+ if (this.name?.endsWith('background-image') && expressionStr)
423
+ expressionStr = `\`url(\${${expressionStr}})\``;
424
+
425
+ // 变量重新设置,为了触发重新调用
426
+ let setVarStr = `this.${this.expressionNameInView}${argStr} = {
427
+ ...(this.${this.expressionNameInView}${argStr} || {}),
428
+ value: value,
429
+ };`;
430
+ if (Array.isArray(argsList) && argsList.length) {
431
+ setVarStr += `this.${this.expressionNameInView} = {...this.${this.expressionNameInView}};\n`;
432
+ }
433
+
434
+ const code = `${this.expressionBuilderName} (${argsList.join(', ')}) {
435
+ // 容错代码
436
+ ${ftCode}
437
+ (async () => {
438
+ // 旧的参数
439
+ const oldParams = this.${this.expressionNameInView}${argStr}.params;
440
+ // 新的参数
441
+ ${newParams}
442
+ const isLooseEqual = this.$isLooseEqualFn(oldParams, newParams);
443
+ if (!isLooseEqual) {
444
+ this.${this.expressionNameInView}${argStr}.params = newParams;
445
+ const value = ${expressionStr};
446
+ ${setVarStr}
447
+ }
448
+ })();
449
+ return this.${this.expressionNameInView}${argStr}.value;
450
+ }`;
451
+
452
+ return code;
453
+ }
454
+
455
+ /**
456
+ * 转换成 Vue 的模板格式
457
+ */
458
+ toVue(options?: ElementToVueOptions) {
459
+ let value: string;
460
+ // 需要用标识符替换
461
+ //if (options?.finalCode !== false && this.needReplaceWithIdentifier) {
462
+ // const argsList = this.getArgsList();
463
+ // value = `${this.expressionBuilderName} (${argsList.join(', ')})`;
464
+ //} else {
465
+ value = this.expression?.toVue(options);
466
+ if (this.name?.endsWith('background-image') && value)
467
+ value = `\`url(\${${value}})\``;
468
+ //}
305
469
  return value && `'${this.name}': ${value}`;
306
470
  }
307
-
471
+
308
472
  @withSourceMap()
309
473
  toEmbeddedTS(state?: TranslatorState): string {
310
474
  let code = '()=>{';