@lcap/nasl 2.18.0-beta.5 → 2.18.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/out/common/BaseNode.js +1 -0
  2. package/out/common/BaseNode.js.map +1 -1
  3. package/out/concepts/BatchAssignment__.js +63 -46
  4. package/out/concepts/BatchAssignment__.js.map +1 -1
  5. package/out/concepts/CallLogic__.d.ts +2 -1
  6. package/out/concepts/CallLogic__.js +26 -11
  7. package/out/concepts/CallLogic__.js.map +1 -1
  8. package/out/concepts/Destination__.d.ts +2 -1
  9. package/out/concepts/Destination__.js +90 -22
  10. package/out/concepts/Destination__.js.map +1 -1
  11. package/out/concepts/Logic__.js +6 -7
  12. package/out/concepts/Logic__.js.map +1 -1
  13. package/out/concepts/MatchExpression__.d.ts +97 -0
  14. package/out/concepts/MatchExpression__.js +281 -0
  15. package/out/concepts/MatchExpression__.js.map +1 -0
  16. package/out/concepts/ViewElement__.js +1 -1
  17. package/out/concepts/ViewElement__.js.map +1 -1
  18. package/out/concepts/View__.js +4 -0
  19. package/out/concepts/View__.js.map +1 -1
  20. package/out/generator/genBundleFiles.js +32 -182
  21. package/out/generator/genBundleFiles.js.map +1 -1
  22. package/out/generator/genMetaData.d.ts +1 -10
  23. package/out/generator/genMetaData.js +189 -50
  24. package/out/generator/genMetaData.js.map +1 -1
  25. package/out/generator/genReleaseBody.js +11 -2
  26. package/out/generator/genReleaseBody.js.map +1 -1
  27. package/out/server/extendBaseNode.js +4 -18
  28. package/out/server/extendBaseNode.js.map +1 -1
  29. package/out/server/formatTsUtils.d.ts +1 -2
  30. package/out/server/formatTsUtils.js +30 -47
  31. package/out/server/formatTsUtils.js.map +1 -1
  32. package/out/server/getProcesses.js +1 -1
  33. package/out/server/getProcesses.js.map +1 -1
  34. package/out/server/naslServer.js +8 -7
  35. package/out/server/naslServer.js.map +1 -1
  36. package/out/server/translator.js +19 -4
  37. package/out/server/translator.js.map +1 -1
  38. package/out/templator/sql-parser/index.d.ts +1 -0
  39. package/out/templator/sql-parser/index.js +228 -0
  40. package/out/templator/sql-parser/index.js.map +1 -0
  41. package/out/templator/sql-parser/parser.js +26664 -0
  42. package/out/templator/sql-parser/parser.js.map +1 -0
  43. package/package.json +2 -2
  44. package/sandbox/stdlib/dist/nasl.logging.js +0 -0
  45. package/sandbox/stdlib/nasl.util.ts +1 -1
  46. package/src/automate/engine/dist/index.dev.js +517 -0
  47. package/src/common/BaseNode.ts +1 -0
  48. package/src/common/dist/BaseNode.js +1101 -0
  49. package/src/concepts/BatchAssignment__.ts +66 -50
  50. package/src/concepts/CallLogic__.ts +26 -11
  51. package/src/concepts/Destination__.ts +92 -22
  52. package/src/concepts/Logic__.ts +6 -7
  53. package/src/concepts/ViewElement__.ts +8 -29
  54. package/src/concepts/View__.ts +4 -0
  55. package/src/concepts/basics/stdlib/dist/nasl.util.js +1503 -0
  56. package/src/concepts/basics/stdlib/dist/reference2TypeAnnotationList.js +24 -0
  57. package/src/concepts/dist/Anchor__.js +179 -0
  58. package/src/concepts/dist/Assignment__.js +301 -0
  59. package/src/concepts/dist/CallFunction__.js +513 -0
  60. package/src/concepts/dist/CallInterface__.js +533 -0
  61. package/src/concepts/dist/CallLogic__.js +892 -0
  62. package/src/concepts/dist/ForEachStatement__.js +426 -0
  63. package/src/concepts/dist/MatchCase__.js +587 -0
  64. package/src/concepts/dist/Match__.js +631 -0
  65. package/src/concepts/dist/MemberExpression__.js +348 -0
  66. package/src/concepts/dist/Param__.js +538 -0
  67. package/src/concepts/dist/Return__.js +494 -0
  68. package/src/concepts/dist/Variable__.js +537 -0
  69. package/src/concepts/dist/ViewElement__.js +1680 -0
  70. package/src/generator/dist/genBundleFiles.js +261 -0
  71. package/src/generator/dist/genMetaData.js +249 -0
  72. package/src/generator/genBundleFiles.ts +34 -219
  73. package/src/generator/genMetaData.ts +182 -77
  74. package/src/generator/genReleaseBody.ts +10 -3
  75. package/src/server/dist/formatTsUtils.js +683 -0
  76. package/src/server/dist/naslServer.js +3474 -0
  77. package/src/server/extendBaseNode.ts +4 -19
  78. package/src/server/formatTsUtils.ts +30 -46
  79. package/src/server/getProcesses.ts +1 -1
  80. package/src/server/naslServer.ts +8 -7
  81. package/src/server/translator.ts +18 -4
  82. package/src/service/storage/dist/init.js +572 -0
  83. package/ts-worker/dist/webpack.config.dev.js +108 -0
  84. package/dist/bundle.js +0 -3962
  85. package/dist/bundle.js.LICENSE.txt +0 -16
  86. package/out/generator/release.d.ts +0 -1
  87. package/out/generator/release.js +0 -51
  88. package/out/generator/release.js.map +0 -1
@@ -572,63 +572,79 @@ export class BatchAssignment extends LogicItem {
572
572
  if (preCompleteName.includes(completeName) && completeName.split('.').length !== preCompleteName.split('.').length)
573
573
  leftLineSet.add(i);
574
574
  }
575
-
576
- await new Promise((resolve) => setTimeout(resolve, 400));
577
- this.app.emit('collect:start', {
578
- actionMsg: '自动连线',
579
- });
580
- this.left.members.forEach((member: any, leftSecondIndex: number) => {
581
- const leftValue = member.getValue();
582
- const leftName = member.property.name;
583
- const leftTypeAnnotation = member.__TypeAnnotation;
584
- if (leftLineSet.has(leftSecondIndex) || leftLineSet.has(leftName))
585
- return;
586
-
587
- this.rights.forEach((selectMember, rightFirstIndex) => {
588
- const { members, expression } = selectMember;
589
- if (leftLineSet.has(leftSecondIndex))
590
- return;
591
- if (addRightIndex !== -1 && addRightIndex !== rightFirstIndex)
592
- return;
593
- // 右侧父节点也不允许自动连线
594
- const rightLineSet = new Set();
595
- for (let i = 0; i < members.length - 1; i++) {
596
- const completeName = members[i].completeName;
597
- const preCompleteName = members[i + 1].completeName;
598
- if (preCompleteName.includes(completeName) && completeName.split('.').length !== preCompleteName.split('.').length)
599
- rightLineSet.add(i);
600
- }
601
-
602
- if (leftName === expression.name && expression.__TypeAnnotation.typeKind === leftTypeAnnotation.typeKind) {
603
- const Line: AssignmentLine = new AssignmentLine({
604
- leftIndex: [0, leftSecondIndex],
605
- rightIndex: [rightFirstIndex],
606
- });
607
- lineArr.push(Line);
608
- leftLineSet.add(leftSecondIndex);
575
+ // await new Promise((resolve) => setTimeout(resolve, 400));
576
+ const autoConnection = () => {
577
+ this.app.emit('collect:start', {
578
+ actionMsg: '自动连线',
579
+ });
580
+ this.left.members.forEach((member: any, leftSecondIndex: number) => {
581
+ const leftValue = member.getValue();
582
+ const leftName = member.property.name;
583
+ const leftTypeAnnotation = member.__TypeAnnotation;
584
+ if (leftLineSet.has(leftSecondIndex) || leftLineSet.has(leftName))
609
585
  return;
610
- }
611
- members.forEach((rightMember: any, rightSecondIndex: number) => {
612
- const rightValue = rightMember.getValue();
613
- const rightName = rightMember.property.name;
614
- if (rightLineSet.has(rightSecondIndex))
586
+
587
+ this.rights.forEach((selectMember, rightFirstIndex) => {
588
+ const { members, expression } = selectMember;
589
+ if (leftLineSet.has(leftSecondIndex))
615
590
  return;
616
-
617
- if (leftName === rightName && leftValue.split('.').length === rightValue.split('.').length) {
618
- const rightTypeAnnotation = rightMember.__TypeAnnotation;
619
- if (leftTypeAnnotation.typeKind !== rightTypeAnnotation.typeKind)
620
- return;
621
- const leftIndex = [0, leftSecondIndex];
622
- const rightIndex = [rightFirstIndex, rightSecondIndex];
623
- const Line: AssignmentLine = new AssignmentLine({ leftIndex, rightIndex });
591
+ if (addRightIndex !== -1 && addRightIndex !== rightFirstIndex)
592
+ return;
593
+ // 右侧父节点也不允许自动连线
594
+ const rightLineSet = new Set();
595
+ for (let i = 0; i < members.length - 1; i++) {
596
+ const completeName = members[i].completeName;
597
+ const preCompleteName = members[i + 1].completeName;
598
+ if (preCompleteName.includes(completeName) && completeName.split('.').length !== preCompleteName.split('.').length)
599
+ rightLineSet.add(i);
600
+ }
601
+
602
+ if (leftName === expression.name && expression.__TypeAnnotation.typeKind === leftTypeAnnotation.typeKind) {
603
+ const Line: AssignmentLine = new AssignmentLine({
604
+ leftIndex: [0, leftSecondIndex],
605
+ rightIndex: [rightFirstIndex],
606
+ });
624
607
  lineArr.push(Line);
625
608
  leftLineSet.add(leftSecondIndex);
609
+ return;
626
610
  }
611
+ members.forEach((rightMember: any, rightSecondIndex: number) => {
612
+ const rightValue = rightMember.getValue();
613
+ const rightName = rightMember.property.name;
614
+ if (rightLineSet.has(rightSecondIndex))
615
+ return;
616
+
617
+ if (leftName === rightName && leftValue.split('.').length === rightValue.split('.').length) {
618
+ const rightTypeAnnotation = rightMember.__TypeAnnotation;
619
+ if (leftTypeAnnotation.typeKind !== rightTypeAnnotation.typeKind)
620
+ return;
621
+ const leftIndex = [0, leftSecondIndex];
622
+ const rightIndex = [rightFirstIndex, rightSecondIndex];
623
+ const Line: AssignmentLine = new AssignmentLine({ leftIndex, rightIndex });
624
+ lineArr.push(Line);
625
+ leftLineSet.add(leftSecondIndex);
626
+ }
627
+ });
627
628
  });
628
629
  });
629
- });
630
- lineArr.length && this.setAssignmentLines([...this.assignmentLines, ...lineArr]);
631
- this.app.emit('collect:end');
630
+ lineArr.length && this.setAssignmentLines([...this.assignmentLines, ...lineArr]);
631
+ this.app.emit('collect:end');
632
+ };
633
+
634
+ let count = 0;
635
+ const typeAnnotationEnd = () => {
636
+ const l = this.left.members.every((item) => item.__isCorrectTypeAnnotation);
637
+ const r = this.rights.every((right) => right.members.every((item) => item.__isCorrectTypeAnnotation));
638
+ count++;
639
+ if (l && r) {
640
+ autoConnection();
641
+ } else if (count <= 10) {
642
+ setTimeout(() => {
643
+ typeAnnotationEnd();
644
+ }, 100);
645
+ }
646
+ };
647
+ typeAnnotationEnd();
632
648
  }
633
649
 
634
650
  connection(leftItem: LogicItem | SelectMembers, rightItem: LogicItem | SelectMembers, rightToLeft: boolean) {
@@ -513,21 +513,15 @@ export class CallLogic extends LogicItem {
513
513
  }
514
514
  }
515
515
 
516
- setCalleeArgName(logic: Logic) {
517
- /**
518
- * a: logic.params b: this.arguments
519
- * a 长度 和 b长度相等就一起加一起删
520
- * 等重新建立连接后
521
- * 2.b大于a时后面的几项就是要被删除的
522
- * 3.重命名时候按照下标进行重命名
523
- * 4.b大于a时,a添加的时候,b的name要改,但是内容不改
524
- */
516
+ addCalleeArg(logic: Logic) {
525
517
  const newArgs = this.arguments.map((argument) =>
526
518
  Argument.from({
527
519
  ...argument,
528
520
  }, this));
529
521
  const relationOptions = { parentNode: this, parentKey: 'arguments' };
530
- // logic在增加参数的时候走到这里
522
+ /**
523
+ * 当前两个参数对应上,添加的时候,logic会比参数位内容多,就添加一个 argment
524
+ */
531
525
  if (logic.params.length >= newArgs.length) {
532
526
  logic.params.forEach((param: Param, index: number) => {
533
527
  const arg = newArgs[index];
@@ -542,6 +536,9 @@ export class CallLogic extends LogicItem {
542
536
  }
543
537
  });
544
538
  } else {
539
+ /**
540
+ * 当前calllogic上数量比logic参数还多,他就需要找一个arg使他变成可用的参数
541
+ */
545
542
  newArgs.forEach((arg: Argument, index: number) => {
546
543
  const param = logic.params[index];
547
544
  if (param) {
@@ -554,6 +551,24 @@ export class CallLogic extends LogicItem {
554
551
  });
555
552
  }
556
553
 
554
+ deleteCalleeArg(argIndex: number) {
555
+ /**
556
+ * 传递过下标来,然后直接移动到最后结束
557
+ * 如果原来就是最后一个位置就不移动了
558
+ */
559
+ if (typeof argIndex === 'number') {
560
+ if (!this.arguments[argIndex]?.expression) {
561
+ // 如果本身没有值就直接删除
562
+ return this.arguments[argIndex].delete();
563
+ }
564
+ if (argIndex !== this.arguments.length - 1) {
565
+ this.arguments[argIndex]?.moveNode({
566
+ sourceNode: this.arguments[this.arguments.length - 1],
567
+ position: 'insertAfter',
568
+ });
569
+ }
570
+ }
571
+ }
557
572
  toVue(options?: ElementToVueOptions): string {
558
573
  let code = '';
559
574
  if (this.calleeNamespace === 'nasl.browser' || this.calleeNamespace === 'nasl.auth' || this.calleeNamespace === 'nasl.configuration' || this.calleeNamespace === 'nasl.process') {
@@ -949,7 +964,7 @@ var __parseType = __parseType || ((root, prop) => {
949
964
  // 取到是不是必填放入参数中
950
965
  code += arg.toEmbeddedTS(shiftState(state, code), arg?.paramRequired);
951
966
  if (index !== this.arguments.length - 1)
952
- code += ', \n';
967
+ code += ', ';
953
968
  });
954
969
  code += ')';
955
970
  if (this.parentNode.concept !== 'Argument'
@@ -350,10 +350,16 @@ export class Destination extends LogicItem {
350
350
  url += `/${viewArr.join('/')}`;
351
351
  const completeArguments = this.completeArguments;
352
352
  if (completeArguments.length) {
353
- const args = completeArguments.map((arg) => {
353
+ const node = this.viewNode;
354
+ let logicParam: Param[] = [];
355
+ if (node) {
356
+ logicParam = node.params;
357
+ }
358
+ const logicParamLength = logicParam.length;
359
+ const args = completeArguments.map((arg, index) => {
354
360
  const value = arg?.toVue();
355
361
  let argStr = '';
356
- if (value) {
362
+ if (value && index < logicParamLength) {
357
363
  argStr += `${arg.keyword}=` + '${';
358
364
  if (value === 'undefined') {
359
365
  argStr += `null`;
@@ -384,10 +390,16 @@ export class Destination extends LogicItem {
384
390
  url += `/${viewArr.join('/')}`;
385
391
  const completeArguments = this.completeArguments;
386
392
  if (completeArguments.length) {
387
- const args = completeArguments.map((arg) => {
393
+ const node = this.viewNode;
394
+ let logicParam: Param[] = [];
395
+ if (node) {
396
+ logicParam = node.params;
397
+ }
398
+ const logicParamLength = logicParam.length;
399
+ const args = completeArguments.map((arg, index) => {
388
400
  const value = arg?.toUI();
389
401
  let argStr = '';
390
- if (value) {
402
+ if (value && index < logicParamLength) {
391
403
  argStr += `${arg.keyword}=` + '${';
392
404
  if (value === 'undefined') {
393
405
  argStr += 'null';
@@ -397,7 +409,7 @@ export class Destination extends LogicItem {
397
409
  argStr += '}';
398
410
  }
399
411
  return argStr;
400
- });
412
+ }).filter((arg) => !!arg);
401
413
  url += `?${args.join('&')}`;
402
414
  }
403
415
  if (this.anchor) {
@@ -419,10 +431,16 @@ export class Destination extends LogicItem {
419
431
  const completeArguments = this.completeArguments;
420
432
 
421
433
  if (completeArguments.length) {
422
- const args = completeArguments.map((arg) => {
434
+ const node = this.viewNode;
435
+ let logicParam: Param[] = [];
436
+ if (node) {
437
+ logicParam = node.params;
438
+ }
439
+ const logicParamLength = logicParam.length;
440
+ const args = completeArguments.map((arg, index) => {
423
441
  const value = arg?.toJS();
424
442
  let argStr = '';
425
- if (value) {
443
+ if (value && index < logicParamLength) {
426
444
  argStr += `${arg.keyword}=` + '${';
427
445
  if (value === 'undefined') {
428
446
  argStr += 'null';
@@ -481,26 +499,61 @@ export class Destination extends LogicItem {
481
499
  /**
482
500
  * 设置view的argument
483
501
  */
484
- setViewArgument(view: View) {
485
- const params = view.params;
486
- const argument = this.arguments;
487
- if (params.length > argument.length) {
488
- params.forEach((item) => {
489
- const arg = argument.find((arg) => arg.keyword === item.name);
502
+ addCalleeArg(view: View) {
503
+ const newArgs = this.arguments.map((argument) =>
504
+ Argument.from({
505
+ ...argument,
506
+ }, this));
507
+ const relationOptions = { parentNode: this, parentKey: 'arguments' };
508
+ /**
509
+ * 当前两个参数对应上,添加的时候,view会比参数位内容多,就添加一个 argment
510
+ */
511
+ if (view.params.length >= newArgs.length) {
512
+ view.params.forEach((param: Param, index: number) => {
513
+ const arg = newArgs[index];
490
514
  if (!arg) {
491
- this.addArgument({
492
- keyword: item.name,
493
- });
515
+ const newParam = Argument.from({
516
+ keyword: param.name,
517
+ }, this);
518
+ Object.assign(newParam, relationOptions);
519
+ newArgs.push(newParam);
520
+ } else {
521
+ arg.keyword = param.name;
494
522
  }
495
523
  });
496
524
  } else {
497
- argument.forEach((item) => {
498
- const param = params.find((param) => param.name === item.keyword);
499
- if (!param) {
500
- item.delete();
525
+ /**
526
+ * 当前callview上数量比view参数还多,他就需要找一个arg使他变成可用的参数
527
+ */
528
+ newArgs.forEach((arg: Argument, index: number) => {
529
+ const param = view.params[index];
530
+ if (param) {
531
+ arg.keyword = param.name;
501
532
  }
502
533
  });
503
534
  }
535
+ this.update({
536
+ arguments: newArgs,
537
+ });
538
+ }
539
+
540
+ deleteCalleeArg(argIndex: number) {
541
+ /**
542
+ * 传递过下标来,然后直接移动到最后结束
543
+ * 如果原来就是最后一个位置就不移动了
544
+ */
545
+ if (typeof argIndex === 'number') {
546
+ if (!this.arguments[argIndex]?.expression) {
547
+ return this.arguments[argIndex].delete();
548
+ }
549
+ if (argIndex !== this.arguments.length - 1) {
550
+ // 如果本身没有值就直接删除
551
+ this.arguments[argIndex]?.moveNode({
552
+ sourceNode: this.arguments[this.arguments.length - 1],
553
+ position: 'insertAfter',
554
+ });
555
+ }
556
+ }
504
557
  }
505
558
  /**
506
559
  * 设置Arguments的KeyWord
@@ -554,13 +607,25 @@ export class Destination extends LogicItem {
554
607
  toEmbeddedTS(state?: TranslatorState): string {
555
608
  let code = '';
556
609
 
610
+ const node = this.viewNode;
611
+ let logicParam: Param[] = [];
612
+ if (node) {
613
+ logicParam = node.params;
614
+ }
615
+ const logicParamLength = logicParam.length;
616
+
557
617
  if (this.parentNode instanceof BindAttribute) {
558
618
  code += indent((state?.tabSize || 0) + 2);
559
619
  if (this.tsCalleeNamespace && this.tsName) {
560
620
  code += `${this.tsCalleeNamespace}.${this.tsName}.$destination({`;
561
621
  if (Array.isArray(this.arguments)) {
562
- this.arguments.forEach((argument: Argument) => {
622
+ this.arguments.forEach((argument: Argument, index) => {
623
+ const oldName = argument.keyword;
624
+ if (index >= logicParamLength) {
625
+ argument.keyword = '__unknown__';
626
+ }
563
627
  code += argument.toEmbeddedTS(shiftState(state, code), false, true) + ', ';
628
+ argument.keyword = oldName;
564
629
  });
565
630
  }
566
631
 
@@ -573,8 +638,13 @@ export class Destination extends LogicItem {
573
638
  if (this.tsCalleeNamespace && this.tsName) {
574
639
  code += `${this.tsCalleeNamespace}.${this.tsName}.$destination({`;
575
640
  if (Array.isArray(this.arguments)) {
576
- this.arguments.forEach((argument: Argument) => {
641
+ this.arguments.forEach((argument: Argument, index) => {
642
+ const oldName = argument.keyword;
643
+ if (index >= logicParamLength) {
644
+ argument.keyword = '__unknown__';
645
+ }
577
646
  code += argument.toEmbeddedTS(shiftState(state, code), false, true) + ', ';
647
+ argument.keyword = oldName;
578
648
  });
579
649
  }
580
650
 
@@ -1625,15 +1625,10 @@ export class Logic extends BaseNode {
1625
1625
  code += '(';
1626
1626
  this.params.forEach((param, index) => {
1627
1627
  code += param.toEmbeddedTS(shiftState(state, code));
1628
- code += ',';
1629
- });
1630
- code += '\n, __defaultValues?: { \n';
1631
- this.params.forEach((param, index) => {
1632
- code += `${param.name}: "${param.defaultValue || ''}"`;
1633
1628
  if (index !== this.params.length - 1)
1634
- code += ',\n';
1629
+ code += ', ';
1635
1630
  });
1636
- code += '})';
1631
+ code += ')';
1637
1632
  } else {
1638
1633
  // 没有参数的
1639
1634
  code += '()';
@@ -1815,6 +1810,10 @@ export class Logic extends BaseNode {
1815
1810
  return replaceCode;
1816
1811
 
1817
1812
  let fnCode = $1;
1813
+ if ($1.startsWith(`${variable}.`))
1814
+ fnCode = $1.replaceAll(`${variable}.`, `${replaceCode}.`);
1815
+ if ($1.startsWith(`${variable},`))
1816
+ fnCode = $1.replaceAll(`${variable},`, `${replaceCode},`);
1818
1817
  if ($1.includes(`(${variable},`))
1819
1818
  fnCode = $1.replaceAll(`(${variable},`, `(${replaceCode},`);
1820
1819
  if ($1.includes(`(${variable}.`))
@@ -315,8 +315,6 @@ export class ViewElement extends BaseNode {
315
315
  super.subConstructor(source);
316
316
  }
317
317
 
318
-
319
-
320
318
  /**
321
319
  * 从父级删除该节点
322
320
  * @internal
@@ -365,7 +363,7 @@ export class ViewElement extends BaseNode {
365
363
  });
366
364
  }
367
365
 
368
- getBindAttributeExistingNames(excludedList: Array<BindAttribute> = []) {
366
+ getBindAttributeExistingNames(excludedList: Array<BindAttribute> = []) {
369
367
  const excludedSet = new Set(excludedList);
370
368
  return ((this.bindAttrs as BindAttribute[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
371
369
  }
@@ -506,7 +504,6 @@ export class ViewElement extends BaseNode {
506
504
  return node;
507
505
  }
508
506
 
509
-
510
507
  getBindEventExistingNames(excludedList: Array<BindEvent> = []) {
511
508
  const excludedSet = new Set(excludedList);
512
509
  return ((this.bindEvents as BindEvent[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
@@ -648,7 +645,6 @@ export class ViewElement extends BaseNode {
648
645
  return node;
649
646
  }
650
647
 
651
-
652
648
  getBindDirectiveExistingNames(excludedList: Array<BindDirective> = []) {
653
649
  const excludedSet = new Set(excludedList);
654
650
  return ((this.bindDirectives as BindDirective[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
@@ -790,9 +786,6 @@ export class ViewElement extends BaseNode {
790
786
  return node;
791
787
  }
792
788
 
793
-
794
-
795
-
796
789
  getBindStyleExistingNames(excludedList: Array<BindStyle> = []) {
797
790
  const excludedSet = new Set(excludedList);
798
791
  return ((this.bindStyles as BindStyle[]) || []).filter((item) => !excludedSet.has(item)).map((item) => item.name);
@@ -934,9 +927,6 @@ export class ViewElement extends BaseNode {
934
927
  return node;
935
928
  }
936
929
 
937
-
938
-
939
-
940
930
  /**
941
931
  * 插入页面元素
942
932
  * @internal
@@ -1070,9 +1060,6 @@ export class ViewElement extends BaseNode {
1070
1060
  return node;
1071
1061
  }
1072
1062
 
1073
-
1074
-
1075
-
1076
1063
  /**
1077
1064
  * 删除元素绑定属性
1078
1065
  * @param name 元素绑定属性名称
@@ -1121,8 +1108,6 @@ export class ViewElement extends BaseNode {
1121
1108
  return params;
1122
1109
  }
1123
1110
 
1124
-
1125
-
1126
1111
  /**
1127
1112
  * 删除元素绑定事件
1128
1113
  * @param name 元素绑定事件名称
@@ -1171,8 +1156,6 @@ export class ViewElement extends BaseNode {
1171
1156
  return params;
1172
1157
  }
1173
1158
 
1174
-
1175
-
1176
1159
  /**
1177
1160
  * 删除元素指令
1178
1161
  * @param name 元素指令名称
@@ -1221,8 +1204,6 @@ export class ViewElement extends BaseNode {
1221
1204
  return params;
1222
1205
  }
1223
1206
 
1224
-
1225
-
1226
1207
  /**
1227
1208
  * 删除元素绑定样式
1228
1209
  * @param name 元素绑定样式名称
@@ -1271,8 +1252,6 @@ export class ViewElement extends BaseNode {
1271
1252
  return params;
1272
1253
  }
1273
1254
 
1274
-
1275
-
1276
1255
  /**
1277
1256
  * 删除页面元素
1278
1257
  * @param name 页面元素名称
@@ -1669,7 +1648,7 @@ export class ViewElement extends BaseNode {
1669
1648
  expression: transAstNodeToNaslNode(Object.assign({}, argument)),
1670
1649
  }));
1671
1650
  }
1672
- } catch (error) {}
1651
+ } catch (error) { }
1673
1652
  return {
1674
1653
  concept: 'ValidationRule',
1675
1654
  name: '',
@@ -1766,7 +1745,7 @@ export class ViewElement extends BaseNode {
1766
1745
  }
1767
1746
  attr = new BindAttribute(source);
1768
1747
  } catch (e) {
1769
- const expression = <any> this._parseExpression(oldAttr.value);
1748
+ const expression = <any>this._parseExpression(oldAttr.value);
1770
1749
  attr = new BindAttribute({
1771
1750
  type: 'dynamic',
1772
1751
  name: oldAttr.name,
@@ -1823,7 +1802,7 @@ export class ViewElement extends BaseNode {
1823
1802
  if (directive.name === 'model') {
1824
1803
  const valueAttr = astNode.attrs && astNode.attrs.find((attr) => attr.name === 'value');
1825
1804
  if (!valueAttr) {
1826
- const expression = <any> this._parseExpression(directive.value);
1805
+ const expression = <any>this._parseExpression(directive.value);
1827
1806
  element.addBindAttribute(new BindAttribute({
1828
1807
  type: 'dynamic',
1829
1808
  name: 'value',
@@ -1833,7 +1812,7 @@ export class ViewElement extends BaseNode {
1833
1812
  }));
1834
1813
  }
1835
1814
  } else {
1836
- const expression = <any> this._parseExpression(directive.value);
1815
+ const expression = <any>this._parseExpression(directive.value);
1837
1816
  element.addBindDirective(new BindDirective({
1838
1817
  type: expression ? 'string' : 'dynamic',
1839
1818
  name: directive.name,
@@ -1852,7 +1831,7 @@ export class ViewElement extends BaseNode {
1852
1831
  name: 'if',
1853
1832
  rawName: 'v-if',
1854
1833
  value: '',
1855
- expression: <any> this._parseExpression(astNode.if),
1834
+ expression: <any>this._parseExpression(astNode.if),
1856
1835
  }));
1857
1836
  }
1858
1837
  } else if (astNode.type === 2) {
@@ -1863,7 +1842,7 @@ export class ViewElement extends BaseNode {
1863
1842
  name: view.getViewElementUniqueName(`${baseName}1`),
1864
1843
  });
1865
1844
  const value = astNode.text?.match(/{{(.*?)}}/)[1].trim();
1866
- const expression = <any> this._parseExpression(value);
1845
+ const expression = <any>this._parseExpression(value);
1867
1846
  element.addBindAttribute(new BindAttribute({
1868
1847
  type: 'dynamic',
1869
1848
  name: 'text',
@@ -1925,7 +1904,7 @@ export class ViewElement extends BaseNode {
1925
1904
  finalCode: false,
1926
1905
  nodePathAttr: true,
1927
1906
  attrFormat: (attr: BindAttribute | BindEvent | BindDirective, element?: ViewElement, defaultResult?: string) => {
1928
- if (attr.concept === 'BindAttribute') {
1907
+ if (attr.concept === 'BindAttribute' && !['href', 'destination', 'externalDestination', 'download'].includes(attr.name)) {
1929
1908
  const api = config.allNodesAPI[element.tag];
1930
1909
  const apiOfAttr = api && api.attrs && api.attrs.find((_attr) => _attr.name === attr.name);
1931
1910
  if (['u-form-item', 'u-validator', 'van-field'].includes(element.tag) && attr.name === 'rules') {
@@ -2153,6 +2153,10 @@ export class View extends BaseNode {
2153
2153
  return replaceCode;
2154
2154
 
2155
2155
  let fnCode = $1;
2156
+ if ($1.startsWith(`${variable}.`))
2157
+ fnCode = $1.replaceAll(`${variable}.`, `${replaceCode}.`);
2158
+ if ($1.startsWith(`${variable},`))
2159
+ fnCode = $1.replaceAll(`${variable},`, `${replaceCode},`);
2156
2160
  if ($1.includes(`(${variable},`))
2157
2161
  fnCode = $1.replaceAll(`(${variable},`, `(${replaceCode},`);
2158
2162
  if ($1.includes(`(${variable}.`))