webpipe-js 2.0.30 → 2.0.32
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.
- package/dist/index.cjs +106 -38
- package/dist/index.d.cts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.mjs +106 -38
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -358,6 +358,7 @@ var Parser = class {
|
|
|
358
358
|
throw new ParseFailure("step-config", this.pos);
|
|
359
359
|
}
|
|
360
360
|
parseTag() {
|
|
361
|
+
const start = this.pos;
|
|
361
362
|
this.expect("@");
|
|
362
363
|
const negated = this.cur() === "!";
|
|
363
364
|
if (negated) this.pos++;
|
|
@@ -366,7 +367,8 @@ var Parser = class {
|
|
|
366
367
|
if (this.cur() === "(") {
|
|
367
368
|
args = this.parseTagArgs();
|
|
368
369
|
}
|
|
369
|
-
|
|
370
|
+
const end = this.pos;
|
|
371
|
+
return { name, negated, args, start, end };
|
|
370
372
|
}
|
|
371
373
|
parseTagArgs() {
|
|
372
374
|
this.expect("(");
|
|
@@ -441,14 +443,17 @@ var Parser = class {
|
|
|
441
443
|
}
|
|
442
444
|
parseConfigProperty() {
|
|
443
445
|
this.skipSpaces();
|
|
446
|
+
const start = this.pos;
|
|
444
447
|
const key = this.parseIdentifier();
|
|
445
448
|
this.skipInlineSpaces();
|
|
446
449
|
this.expect(":");
|
|
447
450
|
this.skipInlineSpaces();
|
|
448
451
|
const value = this.parseConfigValue();
|
|
449
|
-
|
|
452
|
+
const end = this.pos;
|
|
453
|
+
return { key, value, start, end };
|
|
450
454
|
}
|
|
451
455
|
parseConfig() {
|
|
456
|
+
const start = this.pos;
|
|
452
457
|
this.expect("config");
|
|
453
458
|
this.skipInlineSpaces();
|
|
454
459
|
const name = this.parseIdentifier();
|
|
@@ -466,7 +471,8 @@ var Parser = class {
|
|
|
466
471
|
this.skipSpaces();
|
|
467
472
|
this.expect("}");
|
|
468
473
|
this.skipWhitespaceOnly();
|
|
469
|
-
|
|
474
|
+
const end = this.pos;
|
|
475
|
+
return { name, properties, inlineComment: inlineComment || void 0, start, end };
|
|
470
476
|
}
|
|
471
477
|
parsePipelineStep() {
|
|
472
478
|
const result = this.tryParse(() => this.parseResultStep());
|
|
@@ -481,6 +487,7 @@ var Parser = class {
|
|
|
481
487
|
}
|
|
482
488
|
parseForeachStep() {
|
|
483
489
|
this.skipWhitespaceOnly();
|
|
490
|
+
const start = this.pos;
|
|
484
491
|
this.expect("|>");
|
|
485
492
|
this.skipInlineSpaces();
|
|
486
493
|
this.expect("foreach");
|
|
@@ -496,10 +503,12 @@ var Parser = class {
|
|
|
496
503
|
const pipeline = this.parseIfPipeline("end");
|
|
497
504
|
this.skipSpaces();
|
|
498
505
|
this.expect("end");
|
|
499
|
-
|
|
506
|
+
const end = this.pos;
|
|
507
|
+
return { kind: "Foreach", selector, pipeline, start, end };
|
|
500
508
|
}
|
|
501
509
|
parseRegularStep() {
|
|
502
510
|
this.skipWhitespaceOnly();
|
|
511
|
+
const start = this.pos;
|
|
503
512
|
this.expect("|>");
|
|
504
513
|
this.skipInlineSpaces();
|
|
505
514
|
const name = this.parseIdentifier();
|
|
@@ -509,7 +518,8 @@ var Parser = class {
|
|
|
509
518
|
const condition = this.parseStepCondition();
|
|
510
519
|
const parsedJoinTargets = name === "join" ? this.parseJoinTaskNames(config) : void 0;
|
|
511
520
|
this.skipWhitespaceOnly();
|
|
512
|
-
|
|
521
|
+
const end = this.pos;
|
|
522
|
+
return { kind: "Regular", name, config, configType, condition, parsedJoinTargets, start, end };
|
|
513
523
|
}
|
|
514
524
|
/**
|
|
515
525
|
* Parse optional step condition (tag expression after the config)
|
|
@@ -565,6 +575,7 @@ var Parser = class {
|
|
|
565
575
|
}
|
|
566
576
|
parseResultStep() {
|
|
567
577
|
this.skipWhitespaceOnly();
|
|
578
|
+
const start = this.pos;
|
|
568
579
|
this.expect("|>");
|
|
569
580
|
this.skipInlineSpaces();
|
|
570
581
|
this.expect("result");
|
|
@@ -575,10 +586,12 @@ var Parser = class {
|
|
|
575
586
|
if (!br) break;
|
|
576
587
|
branches.push(br);
|
|
577
588
|
}
|
|
578
|
-
|
|
589
|
+
const end = this.pos;
|
|
590
|
+
return { kind: "Result", branches, start, end };
|
|
579
591
|
}
|
|
580
592
|
parseResultBranch() {
|
|
581
593
|
this.skipSpaces();
|
|
594
|
+
const start = this.pos;
|
|
582
595
|
const branchIdent = this.parseIdentifier();
|
|
583
596
|
let branchType;
|
|
584
597
|
if (branchIdent === "ok") branchType = { kind: "Ok" };
|
|
@@ -598,10 +611,12 @@ var Parser = class {
|
|
|
598
611
|
this.expect(":");
|
|
599
612
|
this.skipSpaces();
|
|
600
613
|
const pipeline = this.parsePipeline();
|
|
601
|
-
|
|
614
|
+
const end = this.pos;
|
|
615
|
+
return { branchType, statusCode, pipeline, start, end };
|
|
602
616
|
}
|
|
603
617
|
parseIfStep() {
|
|
604
618
|
this.skipWhitespaceOnly();
|
|
619
|
+
const start = this.pos;
|
|
605
620
|
this.expect("|>");
|
|
606
621
|
this.skipInlineSpaces();
|
|
607
622
|
this.expect("if");
|
|
@@ -622,10 +637,12 @@ var Parser = class {
|
|
|
622
637
|
this.expect("end");
|
|
623
638
|
return true;
|
|
624
639
|
});
|
|
625
|
-
|
|
640
|
+
const end = this.pos;
|
|
641
|
+
return { kind: "If", condition, thenBranch, elseBranch: elseBranch || void 0, start, end };
|
|
626
642
|
}
|
|
627
643
|
parseDispatchStep() {
|
|
628
644
|
this.skipWhitespaceOnly();
|
|
645
|
+
const start = this.pos;
|
|
629
646
|
this.expect("|>");
|
|
630
647
|
this.skipInlineSpaces();
|
|
631
648
|
this.expect("dispatch");
|
|
@@ -647,10 +664,12 @@ var Parser = class {
|
|
|
647
664
|
this.expect("end");
|
|
648
665
|
return true;
|
|
649
666
|
});
|
|
650
|
-
|
|
667
|
+
const end = this.pos;
|
|
668
|
+
return { kind: "Dispatch", branches, default: defaultBranch || void 0, start, end };
|
|
651
669
|
}
|
|
652
670
|
parseDispatchBranch() {
|
|
653
671
|
this.skipSpaces();
|
|
672
|
+
const start = this.pos;
|
|
654
673
|
this.expect("case");
|
|
655
674
|
this.skipInlineSpaces();
|
|
656
675
|
const condition = this.parseTagExpr();
|
|
@@ -658,7 +677,8 @@ var Parser = class {
|
|
|
658
677
|
this.expect(":");
|
|
659
678
|
this.skipSpaces();
|
|
660
679
|
const pipeline = this.parseIfPipeline("case", "default:", "end");
|
|
661
|
-
|
|
680
|
+
const end = this.pos;
|
|
681
|
+
return { condition, pipeline, start, end };
|
|
662
682
|
}
|
|
663
683
|
/**
|
|
664
684
|
* Parse a tag expression with boolean operators (and, or) and grouping
|
|
@@ -718,6 +738,7 @@ var Parser = class {
|
|
|
718
738
|
return { kind: "Tag", tag };
|
|
719
739
|
}
|
|
720
740
|
parseIfPipeline(...stopKeywords) {
|
|
741
|
+
const start = this.pos;
|
|
721
742
|
const steps = [];
|
|
722
743
|
while (true) {
|
|
723
744
|
const save = this.pos;
|
|
@@ -725,7 +746,8 @@ var Parser = class {
|
|
|
725
746
|
for (const keyword of stopKeywords) {
|
|
726
747
|
if (this.text.startsWith(keyword, this.pos)) {
|
|
727
748
|
this.pos = save;
|
|
728
|
-
|
|
749
|
+
const end2 = this.pos;
|
|
750
|
+
return { steps, start, end: end2 };
|
|
729
751
|
}
|
|
730
752
|
}
|
|
731
753
|
if (!this.text.startsWith("|>", this.pos)) {
|
|
@@ -735,9 +757,11 @@ var Parser = class {
|
|
|
735
757
|
const step = this.parsePipelineStep();
|
|
736
758
|
steps.push(step);
|
|
737
759
|
}
|
|
738
|
-
|
|
760
|
+
const end = this.pos;
|
|
761
|
+
return { steps, start, end };
|
|
739
762
|
}
|
|
740
763
|
parsePipeline() {
|
|
764
|
+
const start = this.pos;
|
|
741
765
|
const steps = [];
|
|
742
766
|
while (true) {
|
|
743
767
|
const save = this.pos;
|
|
@@ -749,7 +773,8 @@ var Parser = class {
|
|
|
749
773
|
const step = this.parsePipelineStep();
|
|
750
774
|
steps.push(step);
|
|
751
775
|
}
|
|
752
|
-
|
|
776
|
+
const end = this.pos;
|
|
777
|
+
return { steps, start, end };
|
|
753
778
|
}
|
|
754
779
|
parseNamedPipeline() {
|
|
755
780
|
const start = this.pos;
|
|
@@ -760,24 +785,27 @@ var Parser = class {
|
|
|
760
785
|
this.expect("=");
|
|
761
786
|
const inlineComment = this.parseInlineComment();
|
|
762
787
|
this.skipInlineSpaces();
|
|
763
|
-
const beforePipeline = this.pos;
|
|
764
788
|
const pipeline = this.parsePipeline();
|
|
765
789
|
const end = this.pos;
|
|
766
790
|
this.pipelineRanges.set(name, { start, end });
|
|
767
791
|
this.skipWhitespaceOnly();
|
|
768
|
-
return { name, pipeline, inlineComment: inlineComment || void 0 };
|
|
792
|
+
return { name, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
769
793
|
}
|
|
770
794
|
parsePipelineRef() {
|
|
771
795
|
const inline = this.tryParse(() => this.parsePipeline());
|
|
772
|
-
if (inline && inline.steps.length > 0)
|
|
796
|
+
if (inline && inline.steps.length > 0) {
|
|
797
|
+
return { kind: "Inline", pipeline: inline, start: inline.start, end: inline.end };
|
|
798
|
+
}
|
|
773
799
|
const named = this.tryParse(() => {
|
|
774
800
|
this.skipWhitespaceOnly();
|
|
801
|
+
const start = this.pos;
|
|
775
802
|
this.expect("|>");
|
|
776
803
|
this.skipInlineSpaces();
|
|
777
804
|
this.expect("pipeline:");
|
|
778
805
|
this.skipInlineSpaces();
|
|
779
806
|
const name = this.parseIdentifier();
|
|
780
|
-
|
|
807
|
+
const end = this.pos;
|
|
808
|
+
return { kind: "Named", name, start, end };
|
|
781
809
|
});
|
|
782
810
|
if (named) return named;
|
|
783
811
|
throw new Error("pipeline-ref");
|
|
@@ -795,19 +823,22 @@ var Parser = class {
|
|
|
795
823
|
const end = this.pos;
|
|
796
824
|
this.variableRanges.set(`${varType}::${name}`, { start, end });
|
|
797
825
|
this.skipWhitespaceOnly();
|
|
798
|
-
return { varType, name, value, inlineComment: inlineComment || void 0 };
|
|
826
|
+
return { varType, name, value, inlineComment: inlineComment || void 0, start, end };
|
|
799
827
|
}
|
|
800
828
|
parseGraphQLSchema() {
|
|
829
|
+
const start = this.pos;
|
|
801
830
|
this.expect("graphqlSchema");
|
|
802
831
|
this.skipInlineSpaces();
|
|
803
832
|
this.expect("=");
|
|
804
833
|
const inlineComment = this.parseInlineComment();
|
|
805
834
|
this.skipInlineSpaces();
|
|
806
835
|
const sdl = this.parseBacktickString();
|
|
836
|
+
const end = this.pos;
|
|
807
837
|
this.skipWhitespaceOnly();
|
|
808
|
-
return { sdl, inlineComment: inlineComment || void 0 };
|
|
838
|
+
return { sdl, inlineComment: inlineComment || void 0, start, end };
|
|
809
839
|
}
|
|
810
840
|
parseQueryResolver() {
|
|
841
|
+
const start = this.pos;
|
|
811
842
|
this.expect("query");
|
|
812
843
|
this.skipInlineSpaces();
|
|
813
844
|
const name = this.parseIdentifier();
|
|
@@ -816,10 +847,12 @@ var Parser = class {
|
|
|
816
847
|
const inlineComment = this.parseInlineComment();
|
|
817
848
|
this.skipWhitespaceOnly();
|
|
818
849
|
const pipeline = this.parsePipeline();
|
|
850
|
+
const end = this.pos;
|
|
819
851
|
this.skipWhitespaceOnly();
|
|
820
|
-
return { name, pipeline, inlineComment: inlineComment || void 0 };
|
|
852
|
+
return { name, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
821
853
|
}
|
|
822
854
|
parseMutationResolver() {
|
|
855
|
+
const start = this.pos;
|
|
823
856
|
this.expect("mutation");
|
|
824
857
|
this.skipInlineSpaces();
|
|
825
858
|
const name = this.parseIdentifier();
|
|
@@ -828,8 +861,9 @@ var Parser = class {
|
|
|
828
861
|
const inlineComment = this.parseInlineComment();
|
|
829
862
|
this.skipWhitespaceOnly();
|
|
830
863
|
const pipeline = this.parsePipeline();
|
|
864
|
+
const end = this.pos;
|
|
831
865
|
this.skipWhitespaceOnly();
|
|
832
|
-
return { name, pipeline, inlineComment: inlineComment || void 0 };
|
|
866
|
+
return { name, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
833
867
|
}
|
|
834
868
|
parseFeatureFlags() {
|
|
835
869
|
this.expect("featureFlags");
|
|
@@ -841,35 +875,42 @@ var Parser = class {
|
|
|
841
875
|
return pipeline;
|
|
842
876
|
}
|
|
843
877
|
parseRoute() {
|
|
878
|
+
const start = this.pos;
|
|
844
879
|
const method = this.parseMethod();
|
|
845
880
|
this.skipInlineSpaces();
|
|
846
881
|
const path = this.consumeWhile((c) => c !== " " && c !== "\n" && c !== "#");
|
|
847
882
|
const inlineComment = this.parseInlineComment();
|
|
848
883
|
this.skipSpaces();
|
|
849
884
|
const pipeline = this.parsePipelineRef();
|
|
885
|
+
const end = this.pos;
|
|
850
886
|
this.skipWhitespaceOnly();
|
|
851
|
-
return { method, path, pipeline, inlineComment: inlineComment || void 0 };
|
|
887
|
+
return { method, path, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
852
888
|
}
|
|
853
889
|
parseWhen() {
|
|
854
890
|
const calling = this.tryParse(() => {
|
|
891
|
+
const start = this.pos;
|
|
855
892
|
this.expect("calling");
|
|
856
893
|
this.skipInlineSpaces();
|
|
857
894
|
const method = this.parseMethod();
|
|
858
895
|
this.skipInlineSpaces();
|
|
859
896
|
const path = this.consumeWhile((c) => c !== "\n");
|
|
860
|
-
|
|
897
|
+
const end = this.pos;
|
|
898
|
+
return { kind: "CallingRoute", method, path, start, end };
|
|
861
899
|
});
|
|
862
900
|
if (calling) return calling;
|
|
863
901
|
const executingPipeline = this.tryParse(() => {
|
|
902
|
+
const start = this.pos;
|
|
864
903
|
this.expect("executing");
|
|
865
904
|
this.skipInlineSpaces();
|
|
866
905
|
this.expect("pipeline");
|
|
867
906
|
this.skipInlineSpaces();
|
|
868
907
|
const name = this.parseIdentifier();
|
|
869
|
-
|
|
908
|
+
const end = this.pos;
|
|
909
|
+
return { kind: "ExecutingPipeline", name, start, end };
|
|
870
910
|
});
|
|
871
911
|
if (executingPipeline) return executingPipeline;
|
|
872
912
|
const executingVariable = this.tryParse(() => {
|
|
913
|
+
const start = this.pos;
|
|
873
914
|
this.expect("executing");
|
|
874
915
|
this.skipInlineSpaces();
|
|
875
916
|
this.expect("variable");
|
|
@@ -877,13 +918,15 @@ var Parser = class {
|
|
|
877
918
|
const varType = this.parseIdentifier();
|
|
878
919
|
this.skipInlineSpaces();
|
|
879
920
|
const name = this.parseIdentifier();
|
|
880
|
-
|
|
921
|
+
const end = this.pos;
|
|
922
|
+
return { kind: "ExecutingVariable", varType, name, start, end };
|
|
881
923
|
});
|
|
882
924
|
if (executingVariable) return executingVariable;
|
|
883
925
|
throw new ParseFailure("when", this.pos);
|
|
884
926
|
}
|
|
885
927
|
parseCondition() {
|
|
886
928
|
this.skipSpaces();
|
|
929
|
+
const start = this.pos;
|
|
887
930
|
const ct = (() => {
|
|
888
931
|
if (this.match("then")) return "Then";
|
|
889
932
|
if (this.match("and")) return "And";
|
|
@@ -916,13 +959,16 @@ var Parser = class {
|
|
|
916
959
|
if (v2 !== null) return v2;
|
|
917
960
|
return this.consumeWhile((c) => c !== "\n");
|
|
918
961
|
})();
|
|
962
|
+
const end2 = this.pos;
|
|
919
963
|
return {
|
|
920
964
|
conditionType: ct,
|
|
921
965
|
field: "call",
|
|
922
966
|
comparison: comparison2,
|
|
923
967
|
value: value2,
|
|
924
968
|
isCallAssertion: true,
|
|
925
|
-
callTarget
|
|
969
|
+
callTarget,
|
|
970
|
+
start,
|
|
971
|
+
end: end2
|
|
926
972
|
};
|
|
927
973
|
}
|
|
928
974
|
if (field === "selector") {
|
|
@@ -995,13 +1041,16 @@ var Parser = class {
|
|
|
995
1041
|
} else {
|
|
996
1042
|
throw new Error(`Unknown selector operation: ${operation}`);
|
|
997
1043
|
}
|
|
1044
|
+
const end2 = this.pos;
|
|
998
1045
|
return {
|
|
999
1046
|
conditionType: ct,
|
|
1000
1047
|
field: "selector",
|
|
1001
1048
|
comparison: comparison2,
|
|
1002
1049
|
value: value2,
|
|
1003
1050
|
selector: selectorStr,
|
|
1004
|
-
domAssert
|
|
1051
|
+
domAssert,
|
|
1052
|
+
start,
|
|
1053
|
+
end: end2
|
|
1005
1054
|
};
|
|
1006
1055
|
}
|
|
1007
1056
|
let headerName;
|
|
@@ -1028,10 +1077,12 @@ var Parser = class {
|
|
|
1028
1077
|
if (v2 !== null) return v2;
|
|
1029
1078
|
return this.consumeWhile((c) => c !== "\n");
|
|
1030
1079
|
})();
|
|
1031
|
-
|
|
1080
|
+
const end = this.pos;
|
|
1081
|
+
return { conditionType: ct, field, headerName: headerName ?? void 0, jqExpr: jqExpr ?? void 0, comparison, value, start, end };
|
|
1032
1082
|
}
|
|
1033
1083
|
parseMockHead(prefixWord) {
|
|
1034
1084
|
this.skipSpaces();
|
|
1085
|
+
const start = this.pos;
|
|
1035
1086
|
this.expect(prefixWord);
|
|
1036
1087
|
this.skipInlineSpaces();
|
|
1037
1088
|
this.expect("mock");
|
|
@@ -1050,7 +1101,8 @@ var Parser = class {
|
|
|
1050
1101
|
this.skipInlineSpaces();
|
|
1051
1102
|
const returnValue = this.parseBacktickString();
|
|
1052
1103
|
this.skipSpaces();
|
|
1053
|
-
|
|
1104
|
+
const end = this.pos;
|
|
1105
|
+
return { target, returnValue, start, end };
|
|
1054
1106
|
}
|
|
1055
1107
|
parseMock() {
|
|
1056
1108
|
return this.parseMockHead("with");
|
|
@@ -1059,6 +1111,7 @@ var Parser = class {
|
|
|
1059
1111
|
return this.parseMockHead("and");
|
|
1060
1112
|
}
|
|
1061
1113
|
parseLetBinding() {
|
|
1114
|
+
const fullStart = this.pos;
|
|
1062
1115
|
this.expect("let");
|
|
1063
1116
|
this.skipInlineSpaces();
|
|
1064
1117
|
const nameStart = this.pos;
|
|
@@ -1120,9 +1173,19 @@ var Parser = class {
|
|
|
1120
1173
|
}
|
|
1121
1174
|
throw new Error("let value");
|
|
1122
1175
|
})();
|
|
1123
|
-
|
|
1176
|
+
const fullEnd = this.pos;
|
|
1177
|
+
return {
|
|
1178
|
+
name,
|
|
1179
|
+
value,
|
|
1180
|
+
format,
|
|
1181
|
+
start: nameStart,
|
|
1182
|
+
end: nameEnd,
|
|
1183
|
+
fullStart,
|
|
1184
|
+
fullEnd
|
|
1185
|
+
};
|
|
1124
1186
|
}
|
|
1125
1187
|
parseIt() {
|
|
1188
|
+
const start = this.pos;
|
|
1126
1189
|
this.skipSpaces();
|
|
1127
1190
|
this.expect("it");
|
|
1128
1191
|
this.skipInlineSpaces();
|
|
@@ -1220,6 +1283,7 @@ var Parser = class {
|
|
|
1220
1283
|
conditions.push(c);
|
|
1221
1284
|
}
|
|
1222
1285
|
this.currentTestName = null;
|
|
1286
|
+
const end = this.pos;
|
|
1223
1287
|
return {
|
|
1224
1288
|
name,
|
|
1225
1289
|
mocks: [...mocks, ...extraMocks],
|
|
@@ -1229,10 +1293,13 @@ var Parser = class {
|
|
|
1229
1293
|
body,
|
|
1230
1294
|
headers,
|
|
1231
1295
|
cookies,
|
|
1232
|
-
conditions
|
|
1296
|
+
conditions,
|
|
1297
|
+
start,
|
|
1298
|
+
end
|
|
1233
1299
|
};
|
|
1234
1300
|
}
|
|
1235
1301
|
parseDescribe() {
|
|
1302
|
+
const start = this.pos;
|
|
1236
1303
|
this.skipSpaces();
|
|
1237
1304
|
this.expect("describe");
|
|
1238
1305
|
this.skipInlineSpaces();
|
|
@@ -1270,7 +1337,8 @@ var Parser = class {
|
|
|
1270
1337
|
break;
|
|
1271
1338
|
}
|
|
1272
1339
|
this.currentDescribeName = null;
|
|
1273
|
-
|
|
1340
|
+
const end = this.pos;
|
|
1341
|
+
return { name, variables, mocks, tests, inlineComment: inlineComment || void 0, start, end };
|
|
1274
1342
|
}
|
|
1275
1343
|
};
|
|
1276
1344
|
function parseProgram(text) {
|
|
@@ -1428,9 +1496,9 @@ function printTest(test) {
|
|
|
1428
1496
|
});
|
|
1429
1497
|
lines.push(` when ${formatWhen(test.when)}`);
|
|
1430
1498
|
if (test.variables) {
|
|
1431
|
-
test.variables.forEach((
|
|
1432
|
-
const formattedValue = format === "quoted" ? `"${value}"` : format === "backtick" ? `\`${value}\`` : value;
|
|
1433
|
-
lines.push(` let ${name} = ${formattedValue}`);
|
|
1499
|
+
test.variables.forEach((variable) => {
|
|
1500
|
+
const formattedValue = variable.format === "quoted" ? `"${variable.value}"` : variable.format === "backtick" ? `\`${variable.value}\`` : variable.value;
|
|
1501
|
+
lines.push(` let ${variable.name} = ${formattedValue}`);
|
|
1434
1502
|
});
|
|
1435
1503
|
}
|
|
1436
1504
|
if (test.input) {
|
|
@@ -1468,9 +1536,9 @@ function printDescribe(describe) {
|
|
|
1468
1536
|
lines.push(describeLine);
|
|
1469
1537
|
}
|
|
1470
1538
|
if (describe.variables && describe.variables.length > 0) {
|
|
1471
|
-
describe.variables.forEach((
|
|
1472
|
-
const formattedValue = format === "quoted" ? `"${value}"` : format === "backtick" ? `\`${value}\`` : value;
|
|
1473
|
-
lines.push(` let ${name} = ${formattedValue}`);
|
|
1539
|
+
describe.variables.forEach((variable) => {
|
|
1540
|
+
const formattedValue = variable.format === "quoted" ? `"${variable.value}"` : variable.format === "backtick" ? `\`${variable.value}\`` : variable.value;
|
|
1541
|
+
lines.push(` let ${variable.name} = ${formattedValue}`);
|
|
1474
1542
|
});
|
|
1475
1543
|
lines.push("");
|
|
1476
1544
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -21,10 +21,14 @@ interface Config {
|
|
|
21
21
|
properties: ConfigProperty[];
|
|
22
22
|
lineNumber?: number;
|
|
23
23
|
inlineComment?: Comment;
|
|
24
|
+
start: number;
|
|
25
|
+
end: number;
|
|
24
26
|
}
|
|
25
27
|
interface ConfigProperty {
|
|
26
28
|
key: string;
|
|
27
29
|
value: ConfigValue;
|
|
30
|
+
start: number;
|
|
31
|
+
end: number;
|
|
28
32
|
}
|
|
29
33
|
type ConfigValue = {
|
|
30
34
|
kind: 'String';
|
|
@@ -45,6 +49,8 @@ interface NamedPipeline {
|
|
|
45
49
|
pipeline: Pipeline;
|
|
46
50
|
lineNumber?: number;
|
|
47
51
|
inlineComment?: Comment;
|
|
52
|
+
start: number;
|
|
53
|
+
end: number;
|
|
48
54
|
}
|
|
49
55
|
interface Variable {
|
|
50
56
|
varType: string;
|
|
@@ -52,23 +58,31 @@ interface Variable {
|
|
|
52
58
|
value: string;
|
|
53
59
|
lineNumber?: number;
|
|
54
60
|
inlineComment?: Comment;
|
|
61
|
+
start: number;
|
|
62
|
+
end: number;
|
|
55
63
|
}
|
|
56
64
|
interface GraphQLSchema {
|
|
57
65
|
sdl: string;
|
|
58
66
|
lineNumber?: number;
|
|
59
67
|
inlineComment?: Comment;
|
|
68
|
+
start: number;
|
|
69
|
+
end: number;
|
|
60
70
|
}
|
|
61
71
|
interface QueryResolver {
|
|
62
72
|
name: string;
|
|
63
73
|
pipeline: Pipeline;
|
|
64
74
|
lineNumber?: number;
|
|
65
75
|
inlineComment?: Comment;
|
|
76
|
+
start: number;
|
|
77
|
+
end: number;
|
|
66
78
|
}
|
|
67
79
|
interface MutationResolver {
|
|
68
80
|
name: string;
|
|
69
81
|
pipeline: Pipeline;
|
|
70
82
|
lineNumber?: number;
|
|
71
83
|
inlineComment?: Comment;
|
|
84
|
+
start: number;
|
|
85
|
+
end: number;
|
|
72
86
|
}
|
|
73
87
|
interface Route {
|
|
74
88
|
method: string;
|
|
@@ -76,23 +90,42 @@ interface Route {
|
|
|
76
90
|
pipeline: PipelineRef;
|
|
77
91
|
lineNumber?: number;
|
|
78
92
|
inlineComment?: Comment;
|
|
93
|
+
start: number;
|
|
94
|
+
end: number;
|
|
79
95
|
}
|
|
80
96
|
type PipelineRef = {
|
|
81
97
|
kind: 'Inline';
|
|
82
98
|
pipeline: Pipeline;
|
|
99
|
+
start: number;
|
|
100
|
+
end: number;
|
|
83
101
|
} | {
|
|
84
102
|
kind: 'Named';
|
|
85
103
|
name: string;
|
|
104
|
+
start: number;
|
|
105
|
+
end: number;
|
|
86
106
|
};
|
|
87
107
|
interface Pipeline {
|
|
88
108
|
steps: PipelineStep[];
|
|
109
|
+
start: number;
|
|
110
|
+
end: number;
|
|
89
111
|
}
|
|
90
112
|
type ConfigType = 'backtick' | 'quoted' | 'identifier';
|
|
91
113
|
type LetValueFormat = 'quoted' | 'backtick' | 'bare';
|
|
114
|
+
interface LetVariable {
|
|
115
|
+
name: string;
|
|
116
|
+
value: string;
|
|
117
|
+
format: LetValueFormat;
|
|
118
|
+
start: number;
|
|
119
|
+
end: number;
|
|
120
|
+
fullStart: number;
|
|
121
|
+
fullEnd: number;
|
|
122
|
+
}
|
|
92
123
|
interface Tag {
|
|
93
124
|
name: string;
|
|
94
125
|
negated: boolean;
|
|
95
126
|
args: string[];
|
|
127
|
+
start: number;
|
|
128
|
+
end: number;
|
|
96
129
|
}
|
|
97
130
|
/** A boolean expression of tags for dispatch routing */
|
|
98
131
|
type TagExpr = {
|
|
@@ -114,31 +147,45 @@ type PipelineStep = {
|
|
|
114
147
|
configType: ConfigType;
|
|
115
148
|
condition?: TagExpr;
|
|
116
149
|
parsedJoinTargets?: string[];
|
|
150
|
+
start: number;
|
|
151
|
+
end: number;
|
|
117
152
|
} | {
|
|
118
153
|
kind: 'Result';
|
|
119
154
|
branches: ResultBranch[];
|
|
155
|
+
start: number;
|
|
156
|
+
end: number;
|
|
120
157
|
} | {
|
|
121
158
|
kind: 'If';
|
|
122
159
|
condition: Pipeline;
|
|
123
160
|
thenBranch: Pipeline;
|
|
124
161
|
elseBranch?: Pipeline;
|
|
162
|
+
start: number;
|
|
163
|
+
end: number;
|
|
125
164
|
} | {
|
|
126
165
|
kind: 'Dispatch';
|
|
127
166
|
branches: DispatchBranch[];
|
|
128
167
|
default?: Pipeline;
|
|
168
|
+
start: number;
|
|
169
|
+
end: number;
|
|
129
170
|
} | {
|
|
130
171
|
kind: 'Foreach';
|
|
131
172
|
selector: string;
|
|
132
173
|
pipeline: Pipeline;
|
|
174
|
+
start: number;
|
|
175
|
+
end: number;
|
|
133
176
|
};
|
|
134
177
|
interface DispatchBranch {
|
|
135
178
|
condition: TagExpr;
|
|
136
179
|
pipeline: Pipeline;
|
|
180
|
+
start: number;
|
|
181
|
+
end: number;
|
|
137
182
|
}
|
|
138
183
|
interface ResultBranch {
|
|
139
184
|
branchType: ResultBranchType;
|
|
140
185
|
statusCode: number;
|
|
141
186
|
pipeline: Pipeline;
|
|
187
|
+
start: number;
|
|
188
|
+
end: number;
|
|
142
189
|
}
|
|
143
190
|
type ResultBranchType = {
|
|
144
191
|
kind: 'Ok';
|
|
@@ -150,38 +197,50 @@ type ResultBranchType = {
|
|
|
150
197
|
};
|
|
151
198
|
interface Describe {
|
|
152
199
|
name: string;
|
|
153
|
-
variables:
|
|
200
|
+
variables: LetVariable[];
|
|
154
201
|
mocks: Mock[];
|
|
155
202
|
tests: It[];
|
|
156
203
|
lineNumber?: number;
|
|
157
204
|
inlineComment?: Comment;
|
|
205
|
+
start: number;
|
|
206
|
+
end: number;
|
|
158
207
|
}
|
|
159
208
|
interface Mock {
|
|
160
209
|
target: string;
|
|
161
210
|
returnValue: string;
|
|
211
|
+
start: number;
|
|
212
|
+
end: number;
|
|
162
213
|
}
|
|
163
214
|
interface It {
|
|
164
215
|
name: string;
|
|
165
216
|
mocks: Mock[];
|
|
166
217
|
when: When;
|
|
167
|
-
variables?:
|
|
218
|
+
variables?: LetVariable[];
|
|
168
219
|
input?: string;
|
|
169
220
|
body?: string;
|
|
170
221
|
headers?: string;
|
|
171
222
|
cookies?: string;
|
|
172
223
|
conditions: Condition[];
|
|
224
|
+
start: number;
|
|
225
|
+
end: number;
|
|
173
226
|
}
|
|
174
227
|
type When = {
|
|
175
228
|
kind: 'CallingRoute';
|
|
176
229
|
method: string;
|
|
177
230
|
path: string;
|
|
231
|
+
start: number;
|
|
232
|
+
end: number;
|
|
178
233
|
} | {
|
|
179
234
|
kind: 'ExecutingPipeline';
|
|
180
235
|
name: string;
|
|
236
|
+
start: number;
|
|
237
|
+
end: number;
|
|
181
238
|
} | {
|
|
182
239
|
kind: 'ExecutingVariable';
|
|
183
240
|
varType: string;
|
|
184
241
|
name: string;
|
|
242
|
+
start: number;
|
|
243
|
+
end: number;
|
|
185
244
|
};
|
|
186
245
|
type DomAssertType = {
|
|
187
246
|
kind: 'Exists';
|
|
@@ -204,6 +263,8 @@ interface Condition {
|
|
|
204
263
|
callTarget?: string;
|
|
205
264
|
selector?: string;
|
|
206
265
|
domAssert?: DomAssertType;
|
|
266
|
+
start: number;
|
|
267
|
+
end: number;
|
|
207
268
|
}
|
|
208
269
|
type DiagnosticSeverity = 'error' | 'warning' | 'info';
|
|
209
270
|
interface ParseDiagnostic {
|
|
@@ -259,4 +320,4 @@ declare function formatTagExpr(expr: TagExpr): string;
|
|
|
259
320
|
declare function formatPipelineRef(ref: PipelineRef): string[];
|
|
260
321
|
declare function formatWhen(when: When): string;
|
|
261
322
|
|
|
262
|
-
export { type Comment, type Condition, type Config, type ConfigProperty, type ConfigType, type ConfigValue, type Describe, type DiagnosticSeverity, type DispatchBranch, type DomAssertType, type GraphQLSchema, type It, type LetValueFormat, type Mock, type MutationResolver, type NamedPipeline, type ParseDiagnostic, type Pipeline, type PipelineRef, type PipelineStep, type Program, type QueryResolver, type ResultBranch, type ResultBranchType, type Route, type Tag, type TagExpr, type TestLetVariable, type Variable, type When, formatConfigValue, formatPipelineRef, formatPipelineStep, formatStepConfig, formatTag, formatTagExpr, formatTags, formatWhen, getPipelineRanges, getTestLetVariableRanges, getTestLetVariables, getVariableRanges, parseProgram, parseProgramWithDiagnostics, prettyPrint, printComment, printCondition, printConfig, printDescribe, printGraphQLSchema, printMock, printMutationResolver, printPipeline, printQueryResolver, printRoute, printTest, printVariable };
|
|
323
|
+
export { type Comment, type Condition, type Config, type ConfigProperty, type ConfigType, type ConfigValue, type Describe, type DiagnosticSeverity, type DispatchBranch, type DomAssertType, type GraphQLSchema, type It, type LetValueFormat, type LetVariable, type Mock, type MutationResolver, type NamedPipeline, type ParseDiagnostic, type Pipeline, type PipelineRef, type PipelineStep, type Program, type QueryResolver, type ResultBranch, type ResultBranchType, type Route, type Tag, type TagExpr, type TestLetVariable, type Variable, type When, formatConfigValue, formatPipelineRef, formatPipelineStep, formatStepConfig, formatTag, formatTagExpr, formatTags, formatWhen, getPipelineRanges, getTestLetVariableRanges, getTestLetVariables, getVariableRanges, parseProgram, parseProgramWithDiagnostics, prettyPrint, printComment, printCondition, printConfig, printDescribe, printGraphQLSchema, printMock, printMutationResolver, printPipeline, printQueryResolver, printRoute, printTest, printVariable };
|
package/dist/index.d.ts
CHANGED
|
@@ -21,10 +21,14 @@ interface Config {
|
|
|
21
21
|
properties: ConfigProperty[];
|
|
22
22
|
lineNumber?: number;
|
|
23
23
|
inlineComment?: Comment;
|
|
24
|
+
start: number;
|
|
25
|
+
end: number;
|
|
24
26
|
}
|
|
25
27
|
interface ConfigProperty {
|
|
26
28
|
key: string;
|
|
27
29
|
value: ConfigValue;
|
|
30
|
+
start: number;
|
|
31
|
+
end: number;
|
|
28
32
|
}
|
|
29
33
|
type ConfigValue = {
|
|
30
34
|
kind: 'String';
|
|
@@ -45,6 +49,8 @@ interface NamedPipeline {
|
|
|
45
49
|
pipeline: Pipeline;
|
|
46
50
|
lineNumber?: number;
|
|
47
51
|
inlineComment?: Comment;
|
|
52
|
+
start: number;
|
|
53
|
+
end: number;
|
|
48
54
|
}
|
|
49
55
|
interface Variable {
|
|
50
56
|
varType: string;
|
|
@@ -52,23 +58,31 @@ interface Variable {
|
|
|
52
58
|
value: string;
|
|
53
59
|
lineNumber?: number;
|
|
54
60
|
inlineComment?: Comment;
|
|
61
|
+
start: number;
|
|
62
|
+
end: number;
|
|
55
63
|
}
|
|
56
64
|
interface GraphQLSchema {
|
|
57
65
|
sdl: string;
|
|
58
66
|
lineNumber?: number;
|
|
59
67
|
inlineComment?: Comment;
|
|
68
|
+
start: number;
|
|
69
|
+
end: number;
|
|
60
70
|
}
|
|
61
71
|
interface QueryResolver {
|
|
62
72
|
name: string;
|
|
63
73
|
pipeline: Pipeline;
|
|
64
74
|
lineNumber?: number;
|
|
65
75
|
inlineComment?: Comment;
|
|
76
|
+
start: number;
|
|
77
|
+
end: number;
|
|
66
78
|
}
|
|
67
79
|
interface MutationResolver {
|
|
68
80
|
name: string;
|
|
69
81
|
pipeline: Pipeline;
|
|
70
82
|
lineNumber?: number;
|
|
71
83
|
inlineComment?: Comment;
|
|
84
|
+
start: number;
|
|
85
|
+
end: number;
|
|
72
86
|
}
|
|
73
87
|
interface Route {
|
|
74
88
|
method: string;
|
|
@@ -76,23 +90,42 @@ interface Route {
|
|
|
76
90
|
pipeline: PipelineRef;
|
|
77
91
|
lineNumber?: number;
|
|
78
92
|
inlineComment?: Comment;
|
|
93
|
+
start: number;
|
|
94
|
+
end: number;
|
|
79
95
|
}
|
|
80
96
|
type PipelineRef = {
|
|
81
97
|
kind: 'Inline';
|
|
82
98
|
pipeline: Pipeline;
|
|
99
|
+
start: number;
|
|
100
|
+
end: number;
|
|
83
101
|
} | {
|
|
84
102
|
kind: 'Named';
|
|
85
103
|
name: string;
|
|
104
|
+
start: number;
|
|
105
|
+
end: number;
|
|
86
106
|
};
|
|
87
107
|
interface Pipeline {
|
|
88
108
|
steps: PipelineStep[];
|
|
109
|
+
start: number;
|
|
110
|
+
end: number;
|
|
89
111
|
}
|
|
90
112
|
type ConfigType = 'backtick' | 'quoted' | 'identifier';
|
|
91
113
|
type LetValueFormat = 'quoted' | 'backtick' | 'bare';
|
|
114
|
+
interface LetVariable {
|
|
115
|
+
name: string;
|
|
116
|
+
value: string;
|
|
117
|
+
format: LetValueFormat;
|
|
118
|
+
start: number;
|
|
119
|
+
end: number;
|
|
120
|
+
fullStart: number;
|
|
121
|
+
fullEnd: number;
|
|
122
|
+
}
|
|
92
123
|
interface Tag {
|
|
93
124
|
name: string;
|
|
94
125
|
negated: boolean;
|
|
95
126
|
args: string[];
|
|
127
|
+
start: number;
|
|
128
|
+
end: number;
|
|
96
129
|
}
|
|
97
130
|
/** A boolean expression of tags for dispatch routing */
|
|
98
131
|
type TagExpr = {
|
|
@@ -114,31 +147,45 @@ type PipelineStep = {
|
|
|
114
147
|
configType: ConfigType;
|
|
115
148
|
condition?: TagExpr;
|
|
116
149
|
parsedJoinTargets?: string[];
|
|
150
|
+
start: number;
|
|
151
|
+
end: number;
|
|
117
152
|
} | {
|
|
118
153
|
kind: 'Result';
|
|
119
154
|
branches: ResultBranch[];
|
|
155
|
+
start: number;
|
|
156
|
+
end: number;
|
|
120
157
|
} | {
|
|
121
158
|
kind: 'If';
|
|
122
159
|
condition: Pipeline;
|
|
123
160
|
thenBranch: Pipeline;
|
|
124
161
|
elseBranch?: Pipeline;
|
|
162
|
+
start: number;
|
|
163
|
+
end: number;
|
|
125
164
|
} | {
|
|
126
165
|
kind: 'Dispatch';
|
|
127
166
|
branches: DispatchBranch[];
|
|
128
167
|
default?: Pipeline;
|
|
168
|
+
start: number;
|
|
169
|
+
end: number;
|
|
129
170
|
} | {
|
|
130
171
|
kind: 'Foreach';
|
|
131
172
|
selector: string;
|
|
132
173
|
pipeline: Pipeline;
|
|
174
|
+
start: number;
|
|
175
|
+
end: number;
|
|
133
176
|
};
|
|
134
177
|
interface DispatchBranch {
|
|
135
178
|
condition: TagExpr;
|
|
136
179
|
pipeline: Pipeline;
|
|
180
|
+
start: number;
|
|
181
|
+
end: number;
|
|
137
182
|
}
|
|
138
183
|
interface ResultBranch {
|
|
139
184
|
branchType: ResultBranchType;
|
|
140
185
|
statusCode: number;
|
|
141
186
|
pipeline: Pipeline;
|
|
187
|
+
start: number;
|
|
188
|
+
end: number;
|
|
142
189
|
}
|
|
143
190
|
type ResultBranchType = {
|
|
144
191
|
kind: 'Ok';
|
|
@@ -150,38 +197,50 @@ type ResultBranchType = {
|
|
|
150
197
|
};
|
|
151
198
|
interface Describe {
|
|
152
199
|
name: string;
|
|
153
|
-
variables:
|
|
200
|
+
variables: LetVariable[];
|
|
154
201
|
mocks: Mock[];
|
|
155
202
|
tests: It[];
|
|
156
203
|
lineNumber?: number;
|
|
157
204
|
inlineComment?: Comment;
|
|
205
|
+
start: number;
|
|
206
|
+
end: number;
|
|
158
207
|
}
|
|
159
208
|
interface Mock {
|
|
160
209
|
target: string;
|
|
161
210
|
returnValue: string;
|
|
211
|
+
start: number;
|
|
212
|
+
end: number;
|
|
162
213
|
}
|
|
163
214
|
interface It {
|
|
164
215
|
name: string;
|
|
165
216
|
mocks: Mock[];
|
|
166
217
|
when: When;
|
|
167
|
-
variables?:
|
|
218
|
+
variables?: LetVariable[];
|
|
168
219
|
input?: string;
|
|
169
220
|
body?: string;
|
|
170
221
|
headers?: string;
|
|
171
222
|
cookies?: string;
|
|
172
223
|
conditions: Condition[];
|
|
224
|
+
start: number;
|
|
225
|
+
end: number;
|
|
173
226
|
}
|
|
174
227
|
type When = {
|
|
175
228
|
kind: 'CallingRoute';
|
|
176
229
|
method: string;
|
|
177
230
|
path: string;
|
|
231
|
+
start: number;
|
|
232
|
+
end: number;
|
|
178
233
|
} | {
|
|
179
234
|
kind: 'ExecutingPipeline';
|
|
180
235
|
name: string;
|
|
236
|
+
start: number;
|
|
237
|
+
end: number;
|
|
181
238
|
} | {
|
|
182
239
|
kind: 'ExecutingVariable';
|
|
183
240
|
varType: string;
|
|
184
241
|
name: string;
|
|
242
|
+
start: number;
|
|
243
|
+
end: number;
|
|
185
244
|
};
|
|
186
245
|
type DomAssertType = {
|
|
187
246
|
kind: 'Exists';
|
|
@@ -204,6 +263,8 @@ interface Condition {
|
|
|
204
263
|
callTarget?: string;
|
|
205
264
|
selector?: string;
|
|
206
265
|
domAssert?: DomAssertType;
|
|
266
|
+
start: number;
|
|
267
|
+
end: number;
|
|
207
268
|
}
|
|
208
269
|
type DiagnosticSeverity = 'error' | 'warning' | 'info';
|
|
209
270
|
interface ParseDiagnostic {
|
|
@@ -259,4 +320,4 @@ declare function formatTagExpr(expr: TagExpr): string;
|
|
|
259
320
|
declare function formatPipelineRef(ref: PipelineRef): string[];
|
|
260
321
|
declare function formatWhen(when: When): string;
|
|
261
322
|
|
|
262
|
-
export { type Comment, type Condition, type Config, type ConfigProperty, type ConfigType, type ConfigValue, type Describe, type DiagnosticSeverity, type DispatchBranch, type DomAssertType, type GraphQLSchema, type It, type LetValueFormat, type Mock, type MutationResolver, type NamedPipeline, type ParseDiagnostic, type Pipeline, type PipelineRef, type PipelineStep, type Program, type QueryResolver, type ResultBranch, type ResultBranchType, type Route, type Tag, type TagExpr, type TestLetVariable, type Variable, type When, formatConfigValue, formatPipelineRef, formatPipelineStep, formatStepConfig, formatTag, formatTagExpr, formatTags, formatWhen, getPipelineRanges, getTestLetVariableRanges, getTestLetVariables, getVariableRanges, parseProgram, parseProgramWithDiagnostics, prettyPrint, printComment, printCondition, printConfig, printDescribe, printGraphQLSchema, printMock, printMutationResolver, printPipeline, printQueryResolver, printRoute, printTest, printVariable };
|
|
323
|
+
export { type Comment, type Condition, type Config, type ConfigProperty, type ConfigType, type ConfigValue, type Describe, type DiagnosticSeverity, type DispatchBranch, type DomAssertType, type GraphQLSchema, type It, type LetValueFormat, type LetVariable, type Mock, type MutationResolver, type NamedPipeline, type ParseDiagnostic, type Pipeline, type PipelineRef, type PipelineStep, type Program, type QueryResolver, type ResultBranch, type ResultBranchType, type Route, type Tag, type TagExpr, type TestLetVariable, type Variable, type When, formatConfigValue, formatPipelineRef, formatPipelineStep, formatStepConfig, formatTag, formatTagExpr, formatTags, formatWhen, getPipelineRanges, getTestLetVariableRanges, getTestLetVariables, getVariableRanges, parseProgram, parseProgramWithDiagnostics, prettyPrint, printComment, printCondition, printConfig, printDescribe, printGraphQLSchema, printMock, printMutationResolver, printPipeline, printQueryResolver, printRoute, printTest, printVariable };
|
package/dist/index.mjs
CHANGED
|
@@ -306,6 +306,7 @@ var Parser = class {
|
|
|
306
306
|
throw new ParseFailure("step-config", this.pos);
|
|
307
307
|
}
|
|
308
308
|
parseTag() {
|
|
309
|
+
const start = this.pos;
|
|
309
310
|
this.expect("@");
|
|
310
311
|
const negated = this.cur() === "!";
|
|
311
312
|
if (negated) this.pos++;
|
|
@@ -314,7 +315,8 @@ var Parser = class {
|
|
|
314
315
|
if (this.cur() === "(") {
|
|
315
316
|
args = this.parseTagArgs();
|
|
316
317
|
}
|
|
317
|
-
|
|
318
|
+
const end = this.pos;
|
|
319
|
+
return { name, negated, args, start, end };
|
|
318
320
|
}
|
|
319
321
|
parseTagArgs() {
|
|
320
322
|
this.expect("(");
|
|
@@ -389,14 +391,17 @@ var Parser = class {
|
|
|
389
391
|
}
|
|
390
392
|
parseConfigProperty() {
|
|
391
393
|
this.skipSpaces();
|
|
394
|
+
const start = this.pos;
|
|
392
395
|
const key = this.parseIdentifier();
|
|
393
396
|
this.skipInlineSpaces();
|
|
394
397
|
this.expect(":");
|
|
395
398
|
this.skipInlineSpaces();
|
|
396
399
|
const value = this.parseConfigValue();
|
|
397
|
-
|
|
400
|
+
const end = this.pos;
|
|
401
|
+
return { key, value, start, end };
|
|
398
402
|
}
|
|
399
403
|
parseConfig() {
|
|
404
|
+
const start = this.pos;
|
|
400
405
|
this.expect("config");
|
|
401
406
|
this.skipInlineSpaces();
|
|
402
407
|
const name = this.parseIdentifier();
|
|
@@ -414,7 +419,8 @@ var Parser = class {
|
|
|
414
419
|
this.skipSpaces();
|
|
415
420
|
this.expect("}");
|
|
416
421
|
this.skipWhitespaceOnly();
|
|
417
|
-
|
|
422
|
+
const end = this.pos;
|
|
423
|
+
return { name, properties, inlineComment: inlineComment || void 0, start, end };
|
|
418
424
|
}
|
|
419
425
|
parsePipelineStep() {
|
|
420
426
|
const result = this.tryParse(() => this.parseResultStep());
|
|
@@ -429,6 +435,7 @@ var Parser = class {
|
|
|
429
435
|
}
|
|
430
436
|
parseForeachStep() {
|
|
431
437
|
this.skipWhitespaceOnly();
|
|
438
|
+
const start = this.pos;
|
|
432
439
|
this.expect("|>");
|
|
433
440
|
this.skipInlineSpaces();
|
|
434
441
|
this.expect("foreach");
|
|
@@ -444,10 +451,12 @@ var Parser = class {
|
|
|
444
451
|
const pipeline = this.parseIfPipeline("end");
|
|
445
452
|
this.skipSpaces();
|
|
446
453
|
this.expect("end");
|
|
447
|
-
|
|
454
|
+
const end = this.pos;
|
|
455
|
+
return { kind: "Foreach", selector, pipeline, start, end };
|
|
448
456
|
}
|
|
449
457
|
parseRegularStep() {
|
|
450
458
|
this.skipWhitespaceOnly();
|
|
459
|
+
const start = this.pos;
|
|
451
460
|
this.expect("|>");
|
|
452
461
|
this.skipInlineSpaces();
|
|
453
462
|
const name = this.parseIdentifier();
|
|
@@ -457,7 +466,8 @@ var Parser = class {
|
|
|
457
466
|
const condition = this.parseStepCondition();
|
|
458
467
|
const parsedJoinTargets = name === "join" ? this.parseJoinTaskNames(config) : void 0;
|
|
459
468
|
this.skipWhitespaceOnly();
|
|
460
|
-
|
|
469
|
+
const end = this.pos;
|
|
470
|
+
return { kind: "Regular", name, config, configType, condition, parsedJoinTargets, start, end };
|
|
461
471
|
}
|
|
462
472
|
/**
|
|
463
473
|
* Parse optional step condition (tag expression after the config)
|
|
@@ -513,6 +523,7 @@ var Parser = class {
|
|
|
513
523
|
}
|
|
514
524
|
parseResultStep() {
|
|
515
525
|
this.skipWhitespaceOnly();
|
|
526
|
+
const start = this.pos;
|
|
516
527
|
this.expect("|>");
|
|
517
528
|
this.skipInlineSpaces();
|
|
518
529
|
this.expect("result");
|
|
@@ -523,10 +534,12 @@ var Parser = class {
|
|
|
523
534
|
if (!br) break;
|
|
524
535
|
branches.push(br);
|
|
525
536
|
}
|
|
526
|
-
|
|
537
|
+
const end = this.pos;
|
|
538
|
+
return { kind: "Result", branches, start, end };
|
|
527
539
|
}
|
|
528
540
|
parseResultBranch() {
|
|
529
541
|
this.skipSpaces();
|
|
542
|
+
const start = this.pos;
|
|
530
543
|
const branchIdent = this.parseIdentifier();
|
|
531
544
|
let branchType;
|
|
532
545
|
if (branchIdent === "ok") branchType = { kind: "Ok" };
|
|
@@ -546,10 +559,12 @@ var Parser = class {
|
|
|
546
559
|
this.expect(":");
|
|
547
560
|
this.skipSpaces();
|
|
548
561
|
const pipeline = this.parsePipeline();
|
|
549
|
-
|
|
562
|
+
const end = this.pos;
|
|
563
|
+
return { branchType, statusCode, pipeline, start, end };
|
|
550
564
|
}
|
|
551
565
|
parseIfStep() {
|
|
552
566
|
this.skipWhitespaceOnly();
|
|
567
|
+
const start = this.pos;
|
|
553
568
|
this.expect("|>");
|
|
554
569
|
this.skipInlineSpaces();
|
|
555
570
|
this.expect("if");
|
|
@@ -570,10 +585,12 @@ var Parser = class {
|
|
|
570
585
|
this.expect("end");
|
|
571
586
|
return true;
|
|
572
587
|
});
|
|
573
|
-
|
|
588
|
+
const end = this.pos;
|
|
589
|
+
return { kind: "If", condition, thenBranch, elseBranch: elseBranch || void 0, start, end };
|
|
574
590
|
}
|
|
575
591
|
parseDispatchStep() {
|
|
576
592
|
this.skipWhitespaceOnly();
|
|
593
|
+
const start = this.pos;
|
|
577
594
|
this.expect("|>");
|
|
578
595
|
this.skipInlineSpaces();
|
|
579
596
|
this.expect("dispatch");
|
|
@@ -595,10 +612,12 @@ var Parser = class {
|
|
|
595
612
|
this.expect("end");
|
|
596
613
|
return true;
|
|
597
614
|
});
|
|
598
|
-
|
|
615
|
+
const end = this.pos;
|
|
616
|
+
return { kind: "Dispatch", branches, default: defaultBranch || void 0, start, end };
|
|
599
617
|
}
|
|
600
618
|
parseDispatchBranch() {
|
|
601
619
|
this.skipSpaces();
|
|
620
|
+
const start = this.pos;
|
|
602
621
|
this.expect("case");
|
|
603
622
|
this.skipInlineSpaces();
|
|
604
623
|
const condition = this.parseTagExpr();
|
|
@@ -606,7 +625,8 @@ var Parser = class {
|
|
|
606
625
|
this.expect(":");
|
|
607
626
|
this.skipSpaces();
|
|
608
627
|
const pipeline = this.parseIfPipeline("case", "default:", "end");
|
|
609
|
-
|
|
628
|
+
const end = this.pos;
|
|
629
|
+
return { condition, pipeline, start, end };
|
|
610
630
|
}
|
|
611
631
|
/**
|
|
612
632
|
* Parse a tag expression with boolean operators (and, or) and grouping
|
|
@@ -666,6 +686,7 @@ var Parser = class {
|
|
|
666
686
|
return { kind: "Tag", tag };
|
|
667
687
|
}
|
|
668
688
|
parseIfPipeline(...stopKeywords) {
|
|
689
|
+
const start = this.pos;
|
|
669
690
|
const steps = [];
|
|
670
691
|
while (true) {
|
|
671
692
|
const save = this.pos;
|
|
@@ -673,7 +694,8 @@ var Parser = class {
|
|
|
673
694
|
for (const keyword of stopKeywords) {
|
|
674
695
|
if (this.text.startsWith(keyword, this.pos)) {
|
|
675
696
|
this.pos = save;
|
|
676
|
-
|
|
697
|
+
const end2 = this.pos;
|
|
698
|
+
return { steps, start, end: end2 };
|
|
677
699
|
}
|
|
678
700
|
}
|
|
679
701
|
if (!this.text.startsWith("|>", this.pos)) {
|
|
@@ -683,9 +705,11 @@ var Parser = class {
|
|
|
683
705
|
const step = this.parsePipelineStep();
|
|
684
706
|
steps.push(step);
|
|
685
707
|
}
|
|
686
|
-
|
|
708
|
+
const end = this.pos;
|
|
709
|
+
return { steps, start, end };
|
|
687
710
|
}
|
|
688
711
|
parsePipeline() {
|
|
712
|
+
const start = this.pos;
|
|
689
713
|
const steps = [];
|
|
690
714
|
while (true) {
|
|
691
715
|
const save = this.pos;
|
|
@@ -697,7 +721,8 @@ var Parser = class {
|
|
|
697
721
|
const step = this.parsePipelineStep();
|
|
698
722
|
steps.push(step);
|
|
699
723
|
}
|
|
700
|
-
|
|
724
|
+
const end = this.pos;
|
|
725
|
+
return { steps, start, end };
|
|
701
726
|
}
|
|
702
727
|
parseNamedPipeline() {
|
|
703
728
|
const start = this.pos;
|
|
@@ -708,24 +733,27 @@ var Parser = class {
|
|
|
708
733
|
this.expect("=");
|
|
709
734
|
const inlineComment = this.parseInlineComment();
|
|
710
735
|
this.skipInlineSpaces();
|
|
711
|
-
const beforePipeline = this.pos;
|
|
712
736
|
const pipeline = this.parsePipeline();
|
|
713
737
|
const end = this.pos;
|
|
714
738
|
this.pipelineRanges.set(name, { start, end });
|
|
715
739
|
this.skipWhitespaceOnly();
|
|
716
|
-
return { name, pipeline, inlineComment: inlineComment || void 0 };
|
|
740
|
+
return { name, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
717
741
|
}
|
|
718
742
|
parsePipelineRef() {
|
|
719
743
|
const inline = this.tryParse(() => this.parsePipeline());
|
|
720
|
-
if (inline && inline.steps.length > 0)
|
|
744
|
+
if (inline && inline.steps.length > 0) {
|
|
745
|
+
return { kind: "Inline", pipeline: inline, start: inline.start, end: inline.end };
|
|
746
|
+
}
|
|
721
747
|
const named = this.tryParse(() => {
|
|
722
748
|
this.skipWhitespaceOnly();
|
|
749
|
+
const start = this.pos;
|
|
723
750
|
this.expect("|>");
|
|
724
751
|
this.skipInlineSpaces();
|
|
725
752
|
this.expect("pipeline:");
|
|
726
753
|
this.skipInlineSpaces();
|
|
727
754
|
const name = this.parseIdentifier();
|
|
728
|
-
|
|
755
|
+
const end = this.pos;
|
|
756
|
+
return { kind: "Named", name, start, end };
|
|
729
757
|
});
|
|
730
758
|
if (named) return named;
|
|
731
759
|
throw new Error("pipeline-ref");
|
|
@@ -743,19 +771,22 @@ var Parser = class {
|
|
|
743
771
|
const end = this.pos;
|
|
744
772
|
this.variableRanges.set(`${varType}::${name}`, { start, end });
|
|
745
773
|
this.skipWhitespaceOnly();
|
|
746
|
-
return { varType, name, value, inlineComment: inlineComment || void 0 };
|
|
774
|
+
return { varType, name, value, inlineComment: inlineComment || void 0, start, end };
|
|
747
775
|
}
|
|
748
776
|
parseGraphQLSchema() {
|
|
777
|
+
const start = this.pos;
|
|
749
778
|
this.expect("graphqlSchema");
|
|
750
779
|
this.skipInlineSpaces();
|
|
751
780
|
this.expect("=");
|
|
752
781
|
const inlineComment = this.parseInlineComment();
|
|
753
782
|
this.skipInlineSpaces();
|
|
754
783
|
const sdl = this.parseBacktickString();
|
|
784
|
+
const end = this.pos;
|
|
755
785
|
this.skipWhitespaceOnly();
|
|
756
|
-
return { sdl, inlineComment: inlineComment || void 0 };
|
|
786
|
+
return { sdl, inlineComment: inlineComment || void 0, start, end };
|
|
757
787
|
}
|
|
758
788
|
parseQueryResolver() {
|
|
789
|
+
const start = this.pos;
|
|
759
790
|
this.expect("query");
|
|
760
791
|
this.skipInlineSpaces();
|
|
761
792
|
const name = this.parseIdentifier();
|
|
@@ -764,10 +795,12 @@ var Parser = class {
|
|
|
764
795
|
const inlineComment = this.parseInlineComment();
|
|
765
796
|
this.skipWhitespaceOnly();
|
|
766
797
|
const pipeline = this.parsePipeline();
|
|
798
|
+
const end = this.pos;
|
|
767
799
|
this.skipWhitespaceOnly();
|
|
768
|
-
return { name, pipeline, inlineComment: inlineComment || void 0 };
|
|
800
|
+
return { name, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
769
801
|
}
|
|
770
802
|
parseMutationResolver() {
|
|
803
|
+
const start = this.pos;
|
|
771
804
|
this.expect("mutation");
|
|
772
805
|
this.skipInlineSpaces();
|
|
773
806
|
const name = this.parseIdentifier();
|
|
@@ -776,8 +809,9 @@ var Parser = class {
|
|
|
776
809
|
const inlineComment = this.parseInlineComment();
|
|
777
810
|
this.skipWhitespaceOnly();
|
|
778
811
|
const pipeline = this.parsePipeline();
|
|
812
|
+
const end = this.pos;
|
|
779
813
|
this.skipWhitespaceOnly();
|
|
780
|
-
return { name, pipeline, inlineComment: inlineComment || void 0 };
|
|
814
|
+
return { name, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
781
815
|
}
|
|
782
816
|
parseFeatureFlags() {
|
|
783
817
|
this.expect("featureFlags");
|
|
@@ -789,35 +823,42 @@ var Parser = class {
|
|
|
789
823
|
return pipeline;
|
|
790
824
|
}
|
|
791
825
|
parseRoute() {
|
|
826
|
+
const start = this.pos;
|
|
792
827
|
const method = this.parseMethod();
|
|
793
828
|
this.skipInlineSpaces();
|
|
794
829
|
const path = this.consumeWhile((c) => c !== " " && c !== "\n" && c !== "#");
|
|
795
830
|
const inlineComment = this.parseInlineComment();
|
|
796
831
|
this.skipSpaces();
|
|
797
832
|
const pipeline = this.parsePipelineRef();
|
|
833
|
+
const end = this.pos;
|
|
798
834
|
this.skipWhitespaceOnly();
|
|
799
|
-
return { method, path, pipeline, inlineComment: inlineComment || void 0 };
|
|
835
|
+
return { method, path, pipeline, inlineComment: inlineComment || void 0, start, end };
|
|
800
836
|
}
|
|
801
837
|
parseWhen() {
|
|
802
838
|
const calling = this.tryParse(() => {
|
|
839
|
+
const start = this.pos;
|
|
803
840
|
this.expect("calling");
|
|
804
841
|
this.skipInlineSpaces();
|
|
805
842
|
const method = this.parseMethod();
|
|
806
843
|
this.skipInlineSpaces();
|
|
807
844
|
const path = this.consumeWhile((c) => c !== "\n");
|
|
808
|
-
|
|
845
|
+
const end = this.pos;
|
|
846
|
+
return { kind: "CallingRoute", method, path, start, end };
|
|
809
847
|
});
|
|
810
848
|
if (calling) return calling;
|
|
811
849
|
const executingPipeline = this.tryParse(() => {
|
|
850
|
+
const start = this.pos;
|
|
812
851
|
this.expect("executing");
|
|
813
852
|
this.skipInlineSpaces();
|
|
814
853
|
this.expect("pipeline");
|
|
815
854
|
this.skipInlineSpaces();
|
|
816
855
|
const name = this.parseIdentifier();
|
|
817
|
-
|
|
856
|
+
const end = this.pos;
|
|
857
|
+
return { kind: "ExecutingPipeline", name, start, end };
|
|
818
858
|
});
|
|
819
859
|
if (executingPipeline) return executingPipeline;
|
|
820
860
|
const executingVariable = this.tryParse(() => {
|
|
861
|
+
const start = this.pos;
|
|
821
862
|
this.expect("executing");
|
|
822
863
|
this.skipInlineSpaces();
|
|
823
864
|
this.expect("variable");
|
|
@@ -825,13 +866,15 @@ var Parser = class {
|
|
|
825
866
|
const varType = this.parseIdentifier();
|
|
826
867
|
this.skipInlineSpaces();
|
|
827
868
|
const name = this.parseIdentifier();
|
|
828
|
-
|
|
869
|
+
const end = this.pos;
|
|
870
|
+
return { kind: "ExecutingVariable", varType, name, start, end };
|
|
829
871
|
});
|
|
830
872
|
if (executingVariable) return executingVariable;
|
|
831
873
|
throw new ParseFailure("when", this.pos);
|
|
832
874
|
}
|
|
833
875
|
parseCondition() {
|
|
834
876
|
this.skipSpaces();
|
|
877
|
+
const start = this.pos;
|
|
835
878
|
const ct = (() => {
|
|
836
879
|
if (this.match("then")) return "Then";
|
|
837
880
|
if (this.match("and")) return "And";
|
|
@@ -864,13 +907,16 @@ var Parser = class {
|
|
|
864
907
|
if (v2 !== null) return v2;
|
|
865
908
|
return this.consumeWhile((c) => c !== "\n");
|
|
866
909
|
})();
|
|
910
|
+
const end2 = this.pos;
|
|
867
911
|
return {
|
|
868
912
|
conditionType: ct,
|
|
869
913
|
field: "call",
|
|
870
914
|
comparison: comparison2,
|
|
871
915
|
value: value2,
|
|
872
916
|
isCallAssertion: true,
|
|
873
|
-
callTarget
|
|
917
|
+
callTarget,
|
|
918
|
+
start,
|
|
919
|
+
end: end2
|
|
874
920
|
};
|
|
875
921
|
}
|
|
876
922
|
if (field === "selector") {
|
|
@@ -943,13 +989,16 @@ var Parser = class {
|
|
|
943
989
|
} else {
|
|
944
990
|
throw new Error(`Unknown selector operation: ${operation}`);
|
|
945
991
|
}
|
|
992
|
+
const end2 = this.pos;
|
|
946
993
|
return {
|
|
947
994
|
conditionType: ct,
|
|
948
995
|
field: "selector",
|
|
949
996
|
comparison: comparison2,
|
|
950
997
|
value: value2,
|
|
951
998
|
selector: selectorStr,
|
|
952
|
-
domAssert
|
|
999
|
+
domAssert,
|
|
1000
|
+
start,
|
|
1001
|
+
end: end2
|
|
953
1002
|
};
|
|
954
1003
|
}
|
|
955
1004
|
let headerName;
|
|
@@ -976,10 +1025,12 @@ var Parser = class {
|
|
|
976
1025
|
if (v2 !== null) return v2;
|
|
977
1026
|
return this.consumeWhile((c) => c !== "\n");
|
|
978
1027
|
})();
|
|
979
|
-
|
|
1028
|
+
const end = this.pos;
|
|
1029
|
+
return { conditionType: ct, field, headerName: headerName ?? void 0, jqExpr: jqExpr ?? void 0, comparison, value, start, end };
|
|
980
1030
|
}
|
|
981
1031
|
parseMockHead(prefixWord) {
|
|
982
1032
|
this.skipSpaces();
|
|
1033
|
+
const start = this.pos;
|
|
983
1034
|
this.expect(prefixWord);
|
|
984
1035
|
this.skipInlineSpaces();
|
|
985
1036
|
this.expect("mock");
|
|
@@ -998,7 +1049,8 @@ var Parser = class {
|
|
|
998
1049
|
this.skipInlineSpaces();
|
|
999
1050
|
const returnValue = this.parseBacktickString();
|
|
1000
1051
|
this.skipSpaces();
|
|
1001
|
-
|
|
1052
|
+
const end = this.pos;
|
|
1053
|
+
return { target, returnValue, start, end };
|
|
1002
1054
|
}
|
|
1003
1055
|
parseMock() {
|
|
1004
1056
|
return this.parseMockHead("with");
|
|
@@ -1007,6 +1059,7 @@ var Parser = class {
|
|
|
1007
1059
|
return this.parseMockHead("and");
|
|
1008
1060
|
}
|
|
1009
1061
|
parseLetBinding() {
|
|
1062
|
+
const fullStart = this.pos;
|
|
1010
1063
|
this.expect("let");
|
|
1011
1064
|
this.skipInlineSpaces();
|
|
1012
1065
|
const nameStart = this.pos;
|
|
@@ -1068,9 +1121,19 @@ var Parser = class {
|
|
|
1068
1121
|
}
|
|
1069
1122
|
throw new Error("let value");
|
|
1070
1123
|
})();
|
|
1071
|
-
|
|
1124
|
+
const fullEnd = this.pos;
|
|
1125
|
+
return {
|
|
1126
|
+
name,
|
|
1127
|
+
value,
|
|
1128
|
+
format,
|
|
1129
|
+
start: nameStart,
|
|
1130
|
+
end: nameEnd,
|
|
1131
|
+
fullStart,
|
|
1132
|
+
fullEnd
|
|
1133
|
+
};
|
|
1072
1134
|
}
|
|
1073
1135
|
parseIt() {
|
|
1136
|
+
const start = this.pos;
|
|
1074
1137
|
this.skipSpaces();
|
|
1075
1138
|
this.expect("it");
|
|
1076
1139
|
this.skipInlineSpaces();
|
|
@@ -1168,6 +1231,7 @@ var Parser = class {
|
|
|
1168
1231
|
conditions.push(c);
|
|
1169
1232
|
}
|
|
1170
1233
|
this.currentTestName = null;
|
|
1234
|
+
const end = this.pos;
|
|
1171
1235
|
return {
|
|
1172
1236
|
name,
|
|
1173
1237
|
mocks: [...mocks, ...extraMocks],
|
|
@@ -1177,10 +1241,13 @@ var Parser = class {
|
|
|
1177
1241
|
body,
|
|
1178
1242
|
headers,
|
|
1179
1243
|
cookies,
|
|
1180
|
-
conditions
|
|
1244
|
+
conditions,
|
|
1245
|
+
start,
|
|
1246
|
+
end
|
|
1181
1247
|
};
|
|
1182
1248
|
}
|
|
1183
1249
|
parseDescribe() {
|
|
1250
|
+
const start = this.pos;
|
|
1184
1251
|
this.skipSpaces();
|
|
1185
1252
|
this.expect("describe");
|
|
1186
1253
|
this.skipInlineSpaces();
|
|
@@ -1218,7 +1285,8 @@ var Parser = class {
|
|
|
1218
1285
|
break;
|
|
1219
1286
|
}
|
|
1220
1287
|
this.currentDescribeName = null;
|
|
1221
|
-
|
|
1288
|
+
const end = this.pos;
|
|
1289
|
+
return { name, variables, mocks, tests, inlineComment: inlineComment || void 0, start, end };
|
|
1222
1290
|
}
|
|
1223
1291
|
};
|
|
1224
1292
|
function parseProgram(text) {
|
|
@@ -1376,9 +1444,9 @@ function printTest(test) {
|
|
|
1376
1444
|
});
|
|
1377
1445
|
lines.push(` when ${formatWhen(test.when)}`);
|
|
1378
1446
|
if (test.variables) {
|
|
1379
|
-
test.variables.forEach((
|
|
1380
|
-
const formattedValue = format === "quoted" ? `"${value}"` : format === "backtick" ? `\`${value}\`` : value;
|
|
1381
|
-
lines.push(` let ${name} = ${formattedValue}`);
|
|
1447
|
+
test.variables.forEach((variable) => {
|
|
1448
|
+
const formattedValue = variable.format === "quoted" ? `"${variable.value}"` : variable.format === "backtick" ? `\`${variable.value}\`` : variable.value;
|
|
1449
|
+
lines.push(` let ${variable.name} = ${formattedValue}`);
|
|
1382
1450
|
});
|
|
1383
1451
|
}
|
|
1384
1452
|
if (test.input) {
|
|
@@ -1416,9 +1484,9 @@ function printDescribe(describe) {
|
|
|
1416
1484
|
lines.push(describeLine);
|
|
1417
1485
|
}
|
|
1418
1486
|
if (describe.variables && describe.variables.length > 0) {
|
|
1419
|
-
describe.variables.forEach((
|
|
1420
|
-
const formattedValue = format === "quoted" ? `"${value}"` : format === "backtick" ? `\`${value}\`` : value;
|
|
1421
|
-
lines.push(` let ${name} = ${formattedValue}`);
|
|
1487
|
+
describe.variables.forEach((variable) => {
|
|
1488
|
+
const formattedValue = variable.format === "quoted" ? `"${variable.value}"` : variable.format === "backtick" ? `\`${variable.value}\`` : variable.value;
|
|
1489
|
+
lines.push(` let ${variable.name} = ${formattedValue}`);
|
|
1422
1490
|
});
|
|
1423
1491
|
lines.push("");
|
|
1424
1492
|
}
|