@forge/manifest 3.5.0-next.3 → 3.5.0-next.6

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/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @forge/manifest
2
2
 
3
+ ## 3.5.0-next.6
4
+
5
+ ### Minor Changes
6
+
7
+ - f3ac287: [CONFDEV-79900] Add manifest validation for confluence:spaceSettings, confluence:globalPage, confluence:spacePage to ensure that route param is unique
8
+
9
+ ### Patch Changes
10
+
11
+ - 0accde8: Update manifest definitions
12
+ - ffb508a: Update manifest definitions
13
+
14
+ ## 3.5.0-next.5
15
+
16
+ ### Minor Changes
17
+
18
+ - d196b41: [CONFDEV-79785] Add manifest validation for confluence:globalSettings new, optional, useAsGetStarted property to ensure it's only designated once
19
+
20
+ ## 3.5.0-next.4
21
+
22
+ ### Patch Changes
23
+
24
+ - e411a29: Update manifest definitions
25
+
3
26
  ## 3.5.0-next.3
4
27
 
5
28
  ### Minor Changes
@@ -1020,6 +1020,12 @@
1020
1020
  "minLength": 1,
1021
1021
  "maxLength": 255
1022
1022
  },
1023
+ "route": {
1024
+ "type": "string",
1025
+ "minLength": 1,
1026
+ "maxLength": 255,
1027
+ "pattern": "^[a-z0-9\\-]+$"
1028
+ },
1023
1029
  "function": {
1024
1030
  "type": "string",
1025
1031
  "minLength": 1,
@@ -1047,6 +1053,12 @@
1047
1053
  "minLength": 1,
1048
1054
  "maxLength": 255
1049
1055
  },
1056
+ "route": {
1057
+ "type": "string",
1058
+ "minLength": 1,
1059
+ "maxLength": 255,
1060
+ "pattern": "^[a-z0-9\\-]+$"
1061
+ },
1050
1062
  "resolver": {
1051
1063
  "additionalProperties": false,
1052
1064
  "type": "object",
@@ -1116,6 +1128,11 @@
1116
1128
  "default": false,
1117
1129
  "description": "A flag indicating whether this settings instance will be used as the app's configuration"
1118
1130
  },
1131
+ "useAsGetStarted": {
1132
+ "type": "boolean",
1133
+ "default": false,
1134
+ "description": "A flag indicating whether this settings instance will be used as the app's \"Get Started\""
1135
+ },
1119
1136
  "key": {
1120
1137
  "$ref": "#/definitions/ModuleKeySchema"
1121
1138
  }
@@ -1168,6 +1185,11 @@
1168
1185
  "default": false,
1169
1186
  "description": "A flag indicating whether this settings instance will be used as the app's configuration"
1170
1187
  },
1188
+ "useAsGetStarted": {
1189
+ "type": "boolean",
1190
+ "default": false,
1191
+ "description": "A flag indicating whether this settings instance will be used as the app's \"Get Started\""
1192
+ },
1171
1193
  "key": {
1172
1194
  "$ref": "#/definitions/ModuleKeySchema"
1173
1195
  }
@@ -1315,7 +1337,22 @@
1315
1337
  "type": "string"
1316
1338
  },
1317
1339
  "errorMessage": {
1318
- "type": "string"
1340
+ "anyOf": [
1341
+ {
1342
+ "type": "object",
1343
+ "properties": {
1344
+ "expression": {
1345
+ "type": "string"
1346
+ }
1347
+ },
1348
+ "required": [
1349
+ "expression"
1350
+ ]
1351
+ },
1352
+ {
1353
+ "type": "string"
1354
+ }
1355
+ ]
1319
1356
  },
1320
1357
  "view": {
1321
1358
  "type": "object",
@@ -2779,63 +2816,64 @@
2779
2816
  {
2780
2817
  "type": "object",
2781
2818
  "properties": {
2819
+ "function": {
2820
+ "type": "string",
2821
+ "minLength": 1,
2822
+ "maxLength": 255,
2823
+ "pattern": "^[a-zA-Z0-9-_]+$"
2824
+ },
2825
+ "edit": {
2826
+ "type": "object",
2827
+ "properties": {
2828
+ "function": {
2829
+ "type": "string",
2830
+ "minLength": 1,
2831
+ "maxLength": 255,
2832
+ "pattern": "^[a-zA-Z0-9-_]+$"
2833
+ }
2834
+ },
2835
+ "required": [
2836
+ "function"
2837
+ ]
2838
+ },
2782
2839
  "title": {
2783
- "oneOf": [
2840
+ "minLength": 1,
2841
+ "maxLength": 255,
2842
+ "anyOf": [
2784
2843
  {
2785
2844
  "type": "object",
2786
2845
  "properties": {
2787
2846
  "text": {
2788
- "type": "string",
2789
2847
  "minLength": 1,
2790
- "maxLength": 255
2848
+ "maxLength": 255,
2849
+ "type": "string"
2791
2850
  },
2792
2851
  "href": {
2793
- "type": "string",
2794
2852
  "minLength": 1,
2795
- "maxLength": 1000
2853
+ "maxLength": 1000,
2854
+ "type": "string"
2796
2855
  }
2797
2856
  },
2798
2857
  "required": [
2858
+ "href",
2799
2859
  "text"
2800
2860
  ]
2801
2861
  },
2802
2862
  {
2803
- "type": "string",
2804
- "minLength": 1,
2805
- "maxLength": 255
2863
+ "type": "string"
2806
2864
  }
2807
2865
  ]
2808
2866
  },
2809
2867
  "description": {
2810
- "type": "string",
2811
2868
  "minLength": 1,
2812
- "maxLength": 255
2869
+ "maxLength": 255,
2870
+ "type": "string"
2813
2871
  },
2814
2872
  "thumbnail": {
2815
2873
  "type": "string",
2816
2874
  "minLength": 1,
2817
2875
  "maxLength": 255
2818
2876
  },
2819
- "function": {
2820
- "type": "string",
2821
- "minLength": 1,
2822
- "maxLength": 255,
2823
- "pattern": "^[a-zA-Z0-9-_]+$"
2824
- },
2825
- "edit": {
2826
- "type": "object",
2827
- "properties": {
2828
- "function": {
2829
- "type": "string",
2830
- "minLength": 1,
2831
- "maxLength": 255,
2832
- "pattern": "^[a-zA-Z0-9-_]+$"
2833
- }
2834
- },
2835
- "required": [
2836
- "function"
2837
- ]
2838
- },
2839
2877
  "displayConditions": {
2840
2878
  "type": "object",
2841
2879
  "properties": {}
@@ -2845,10 +2883,9 @@
2845
2883
  }
2846
2884
  },
2847
2885
  "required": [
2848
- "title",
2849
2886
  "description",
2850
- "thumbnail",
2851
2887
  "function",
2888
+ "title",
2852
2889
  "key"
2853
2890
  ]
2854
2891
  },
@@ -2876,63 +2913,58 @@
2876
2913
  "function"
2877
2914
  ]
2878
2915
  },
2916
+ "edit": {
2917
+ "type": "object",
2918
+ "properties": {
2919
+ "resource": {
2920
+ "type": "string",
2921
+ "minLength": 1,
2922
+ "maxLength": 23,
2923
+ "pattern": "^[a-zA-Z0-9_\\-]+$"
2924
+ }
2925
+ },
2926
+ "required": [
2927
+ "resource"
2928
+ ]
2929
+ },
2879
2930
  "title": {
2880
- "oneOf": [
2931
+ "minLength": 1,
2932
+ "maxLength": 255,
2933
+ "anyOf": [
2881
2934
  {
2882
2935
  "type": "object",
2883
2936
  "properties": {
2884
2937
  "text": {
2885
- "type": "string",
2886
2938
  "minLength": 1,
2887
- "maxLength": 255
2939
+ "maxLength": 255,
2940
+ "type": "string"
2888
2941
  },
2889
2942
  "href": {
2890
- "type": "string",
2891
2943
  "minLength": 1,
2892
- "maxLength": 1000
2944
+ "maxLength": 1000,
2945
+ "type": "string"
2893
2946
  }
2894
2947
  },
2895
2948
  "required": [
2949
+ "href",
2896
2950
  "text"
2897
2951
  ]
2898
2952
  },
2899
2953
  {
2900
- "type": "string",
2901
- "minLength": 1,
2902
- "maxLength": 255
2954
+ "type": "string"
2903
2955
  }
2904
2956
  ]
2905
2957
  },
2906
2958
  "description": {
2907
- "type": "string",
2908
2959
  "minLength": 1,
2909
- "maxLength": 255
2960
+ "maxLength": 255,
2961
+ "type": "string"
2910
2962
  },
2911
2963
  "thumbnail": {
2912
2964
  "type": "string",
2913
2965
  "minLength": 1,
2914
2966
  "maxLength": 255
2915
2967
  },
2916
- "function": {
2917
- "type": "string",
2918
- "minLength": 1,
2919
- "maxLength": 255,
2920
- "pattern": "^[a-zA-Z0-9-_]+$"
2921
- },
2922
- "edit": {
2923
- "type": "object",
2924
- "properties": {
2925
- "resource": {
2926
- "type": "string",
2927
- "minLength": 1,
2928
- "maxLength": 23,
2929
- "pattern": "^[a-zA-Z0-9_\\-]+$"
2930
- }
2931
- },
2932
- "required": [
2933
- "resource"
2934
- ]
2935
- },
2936
2968
  "displayConditions": {
2937
2969
  "type": "object",
2938
2970
  "properties": {}
@@ -2942,10 +2974,9 @@
2942
2974
  }
2943
2975
  },
2944
2976
  "required": [
2945
- "title",
2946
2977
  "description",
2947
- "thumbnail",
2948
2978
  "resource",
2979
+ "title",
2949
2980
  "key"
2950
2981
  ]
2951
2982
  }
@@ -609,6 +609,7 @@ export interface Modules {
609
609
  (
610
610
  | {
611
611
  title: string;
612
+ route?: string;
612
613
  function: string;
613
614
  displayConditions?: {
614
615
  [k: string]: unknown;
@@ -618,6 +619,7 @@ export interface Modules {
618
619
  }
619
620
  | {
620
621
  title: string;
622
+ route?: string;
621
623
  resolver?: {
622
624
  function: string;
623
625
  };
@@ -633,6 +635,7 @@ export interface Modules {
633
635
  ...(
634
636
  | {
635
637
  title: string;
638
+ route?: string;
636
639
  function: string;
637
640
  displayConditions?: {
638
641
  [k: string]: unknown;
@@ -642,6 +645,7 @@ export interface Modules {
642
645
  }
643
646
  | {
644
647
  title: string;
648
+ route?: string;
645
649
  resolver?: {
646
650
  function: string;
647
651
  };
@@ -667,6 +671,10 @@ export interface Modules {
667
671
  * A flag indicating whether this settings instance will be used as the app's configuration
668
672
  */
669
673
  useAsConfig?: boolean;
674
+ /**
675
+ * A flag indicating whether this settings instance will be used as the app's "Get Started"
676
+ */
677
+ useAsGetStarted?: boolean;
670
678
  key: ModuleKeySchema;
671
679
  [k: string]: unknown;
672
680
  }
@@ -684,6 +692,10 @@ export interface Modules {
684
692
  * A flag indicating whether this settings instance will be used as the app's configuration
685
693
  */
686
694
  useAsConfig?: boolean;
695
+ /**
696
+ * A flag indicating whether this settings instance will be used as the app's "Get Started"
697
+ */
698
+ useAsGetStarted?: boolean;
687
699
  key: ModuleKeySchema;
688
700
  [k: string]: unknown;
689
701
  }
@@ -699,6 +711,10 @@ export interface Modules {
699
711
  * A flag indicating whether this settings instance will be used as the app's configuration
700
712
  */
701
713
  useAsConfig?: boolean;
714
+ /**
715
+ * A flag indicating whether this settings instance will be used as the app's "Get Started"
716
+ */
717
+ useAsGetStarted?: boolean;
702
718
  key: ModuleKeySchema;
703
719
  [k: string]: unknown;
704
720
  }
@@ -716,6 +732,10 @@ export interface Modules {
716
732
  * A flag indicating whether this settings instance will be used as the app's configuration
717
733
  */
718
734
  useAsConfig?: boolean;
735
+ /**
736
+ * A flag indicating whether this settings instance will be used as the app's "Get Started"
737
+ */
738
+ useAsGetStarted?: boolean;
719
739
  key: ModuleKeySchema;
720
740
  [k: string]: unknown;
721
741
  }
@@ -781,7 +801,12 @@ export interface Modules {
781
801
  description: string;
782
802
  function?: string;
783
803
  expression?: string;
784
- errorMessage?: string;
804
+ errorMessage?:
805
+ | {
806
+ expression: string;
807
+ [k: string]: unknown;
808
+ }
809
+ | string;
785
810
  view?: {
786
811
  resource: string;
787
812
  [k: string]: unknown;
@@ -802,7 +827,12 @@ export interface Modules {
802
827
  description: string;
803
828
  function?: string;
804
829
  expression?: string;
805
- errorMessage?: string;
830
+ errorMessage?:
831
+ | {
832
+ expression: string;
833
+ [k: string]: unknown;
834
+ }
835
+ | string;
806
836
  view?: {
807
837
  resource: string;
808
838
  [k: string]: unknown;
@@ -1584,20 +1614,20 @@ export interface Modules {
1584
1614
  'jira:dashboardGadget'?: [
1585
1615
  (
1586
1616
  | {
1617
+ function: string;
1618
+ edit?: {
1619
+ function: string;
1620
+ [k: string]: unknown;
1621
+ };
1587
1622
  title:
1588
1623
  | {
1589
1624
  text: string;
1590
- href?: string;
1625
+ href: string;
1591
1626
  [k: string]: unknown;
1592
1627
  }
1593
1628
  | string;
1594
1629
  description: string;
1595
- thumbnail: string;
1596
- function: string;
1597
- edit?: {
1598
- function: string;
1599
- [k: string]: unknown;
1600
- };
1630
+ thumbnail?: string;
1601
1631
  displayConditions?: {
1602
1632
  [k: string]: unknown;
1603
1633
  };
@@ -1609,20 +1639,19 @@ export interface Modules {
1609
1639
  resolver?: {
1610
1640
  function: string;
1611
1641
  };
1642
+ edit?: {
1643
+ resource: string;
1644
+ [k: string]: unknown;
1645
+ };
1612
1646
  title:
1613
1647
  | {
1614
1648
  text: string;
1615
- href?: string;
1649
+ href: string;
1616
1650
  [k: string]: unknown;
1617
1651
  }
1618
1652
  | string;
1619
1653
  description: string;
1620
- thumbnail: string;
1621
- function?: string;
1622
- edit?: {
1623
- resource: string;
1624
- [k: string]: unknown;
1625
- };
1654
+ thumbnail?: string;
1626
1655
  displayConditions?: {
1627
1656
  [k: string]: unknown;
1628
1657
  };
@@ -1632,20 +1661,20 @@ export interface Modules {
1632
1661
  ),
1633
1662
  ...(
1634
1663
  | {
1664
+ function: string;
1665
+ edit?: {
1666
+ function: string;
1667
+ [k: string]: unknown;
1668
+ };
1635
1669
  title:
1636
1670
  | {
1637
1671
  text: string;
1638
- href?: string;
1672
+ href: string;
1639
1673
  [k: string]: unknown;
1640
1674
  }
1641
1675
  | string;
1642
1676
  description: string;
1643
- thumbnail: string;
1644
- function: string;
1645
- edit?: {
1646
- function: string;
1647
- [k: string]: unknown;
1648
- };
1677
+ thumbnail?: string;
1649
1678
  displayConditions?: {
1650
1679
  [k: string]: unknown;
1651
1680
  };
@@ -1657,20 +1686,19 @@ export interface Modules {
1657
1686
  resolver?: {
1658
1687
  function: string;
1659
1688
  };
1689
+ edit?: {
1690
+ resource: string;
1691
+ [k: string]: unknown;
1692
+ };
1660
1693
  title:
1661
1694
  | {
1662
1695
  text: string;
1663
- href?: string;
1696
+ href: string;
1664
1697
  [k: string]: unknown;
1665
1698
  }
1666
1699
  | string;
1667
1700
  description: string;
1668
- thumbnail: string;
1669
- function?: string;
1670
- edit?: {
1671
- resource: string;
1672
- [k: string]: unknown;
1673
- };
1701
+ thumbnail?: string;
1674
1702
  displayConditions?: {
1675
1703
  [k: string]: unknown;
1676
1704
  };
@@ -34,9 +34,8 @@ export declare const errors: {
34
34
  typeMismatch: (moduleKey: string, propertyName: string, errorDetails: string) => string;
35
35
  };
36
36
  confluence: {
37
- globalSettingsValidator: {
38
- multipleUseAsConfig: (keys: string[]) => string;
39
- };
37
+ multipleProperty: (property: string, moduleKey: string, keys: string[]) => string;
38
+ propertyUniquenessValidator: (property: string, moduleKey: string, keys: string[]) => string;
40
39
  };
41
40
  jiraWorkflowValidator: {
42
41
  missingProperty: (key: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;wCAElC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;uCAMjC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;6CAEhC,MAAM,KAAG,MAAM;;yCAGrB,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;;4CAKvD,MAAM,EAAE,KAAG,MAAM;;;;mCAOxB,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;qCAIb,MAAM,KAAG,MAAM;;;0CAIV,MAAM,KAAG,MAAM;;;mCAItB,MAAM,EAAE,KAAG,MAAM;;;qCAIf,MAAM,KAAG,MAAM;2CAET,MAAM,KAAG,MAAM;;;oCAGtB,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;gDAEhB,MAAM,KAAG,MAAM;uCAExB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;2CAEJ,MAAM,eAAe,MAAM,KAAG,MAAM;;;uCAI1C,MAAM;uCAEJ,MAAM,KAAG,MAAM;qCAEnB,MAAM;;CAGpC,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;wCAElC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;uCAMjC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;6CAEhC,MAAM,KAAG,MAAM;;yCAGrB,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;yCAIxD,MAAM,aAAa,MAAM,QAAQ,MAAM,EAAE,KAAG,MAAM;oDAIvC,MAAM,aAAa,MAAM,QAAQ,MAAM,EAAE,KAAG,MAAM;;;mCAInE,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;qCAIb,MAAM,KAAG,MAAM;;;0CAIV,MAAM,KAAG,MAAM;;;mCAItB,MAAM,EAAE,KAAG,MAAM;;;qCAIf,MAAM,KAAG,MAAM;2CAET,MAAM,KAAG,MAAM;;;oCAGtB,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;gDAEhB,MAAM,KAAG,MAAM;uCAExB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;2CAEJ,MAAM,eAAe,MAAM,KAAG,MAAM;;;uCAI1C,MAAM;uCAEJ,MAAM,KAAG,MAAM;qCAEnB,MAAM;;CAGpC,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
@@ -46,9 +46,8 @@ exports.errors = {
46
46
  typeMismatch: (moduleKey, propertyName, errorDetails) => `Display conditions of the "${moduleKey}" module are invalid. "${propertyName}" property ${errorDetails}.`
47
47
  },
48
48
  confluence: {
49
- globalSettingsValidator: {
50
- multipleUseAsConfig: (keys) => `There can be only 1 ${types_1.AllModuleTypes.ConfluenceGlobalSettings} module which designates "useAsConfig": true. Modules containing designation: ${keys.join(', ')}`
51
- }
49
+ multipleProperty: (property, moduleKey, keys) => `There can be only 1 ${moduleKey} module which designates "${property}": true. Modules containing designation: ${keys.join(', ')}`,
50
+ propertyUniquenessValidator: (property, moduleKey, keys) => `${property} should be unique across all ${moduleKey} modules. Found duplicates: ${keys.join(', ')}`
52
51
  },
53
52
  jiraWorkflowValidator: {
54
53
  missingProperty: (key) => `${types_1.AllModuleTypes.JiraWorkflowValidator} module '${key}' must have either a function or expression.`,
@@ -7,7 +7,7 @@ const text_1 = require("../text");
7
7
  const fs_1 = require("fs");
8
8
  const path_1 = require("path");
9
9
  const issue_adjustment_1 = require("./modules-validators/jira/issue-adjustment");
10
- const global_settings_1 = require("./modules-validators/confluence/global-settings");
10
+ const confluence_1 = require("./modules-validators/confluence");
11
11
  class ModulesValidator {
12
12
  constructor() {
13
13
  this.functionHandlerRegex = /^([a-zA-Z0-9-_]+)\.([a-zA-Z0-9-_]+)$/;
@@ -129,7 +129,7 @@ class ModulesValidator {
129
129
  }
130
130
  });
131
131
  });
132
- validationErrors.push(...global_settings_1.validateGlobalSettingsModule(modules, yamlContentByLine));
132
+ validationErrors.push(...confluence_1.validateConfluenceModules(modules, yamlContentByLine));
133
133
  }
134
134
  return {
135
135
  success: validationErrors.length === 0,
@@ -0,0 +1,4 @@
1
+ import { Modules } from '../../../schema/manifest';
2
+ import { ValidationError } from '../../../types';
3
+ export declare const validateConfluenceModules: (modules: Modules, yamlContentByLine?: string[] | undefined) => ValidationError[];
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAkB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAQjE,eAAO,MAAM,yBAAyB,YAAa,OAAO,+CAAiC,eAAe,EAkBzG,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateConfluenceModules = void 0;
4
+ const types_1 = require("../../../types");
5
+ const validateSingleProperty_1 = require("./validateSingleProperty");
6
+ const validatePropertyUniqueness_1 = require("./validatePropertyUniqueness");
7
+ const ROUTE = 'route';
8
+ const USE_AS_CONFIG = 'useAsConfig';
9
+ const USE_AS_GET_STARTED = 'useAsGetStarted';
10
+ exports.validateConfluenceModules = (modules, yamlContentByLine) => {
11
+ const validationErrors = [];
12
+ [
13
+ types_1.AllModuleTypes.ConfluenceSpaceSettings,
14
+ types_1.AllModuleTypes.ConfluenceGlobalPage,
15
+ types_1.AllModuleTypes.ConfluenceSpacePage
16
+ ].forEach((moduleType) => {
17
+ validationErrors.push(...validatePropertyUniqueness_1.validatePropertyUniqueness(modules, moduleType, ROUTE, yamlContentByLine));
18
+ });
19
+ validationErrors.push(...validateSingleProperty_1.validateSingleProperty(modules, types_1.AllModuleTypes.ConfluenceGlobalSettings, USE_AS_CONFIG, yamlContentByLine));
20
+ validationErrors.push(...validateSingleProperty_1.validateSingleProperty(modules, types_1.AllModuleTypes.ConfluenceGlobalSettings, USE_AS_GET_STARTED, yamlContentByLine));
21
+ return validationErrors;
22
+ };
@@ -0,0 +1,4 @@
1
+ import { AllModuleTypes, ValidationError } from '../../../types';
2
+ import { Modules } from '../../../schema/manifest';
3
+ export declare const validatePropertyUniqueness: (allModules: Modules, moduleType: AllModuleTypes, property: string, yamlContentByLine?: string[] | undefined) => ValidationError[];
4
+ //# sourceMappingURL=validatePropertyUniqueness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatePropertyUniqueness.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validatePropertyUniqueness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,eAAO,MAAM,0BAA0B,eACzB,OAAO,cACP,cAAc,YAChB,MAAM,+CAEf,eAAe,EAqBjB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatePropertyUniqueness = void 0;
4
+ const text_1 = require("../../../text");
5
+ const utils_1 = require("../../../utils");
6
+ exports.validatePropertyUniqueness = (allModules, moduleType, property, yamlContentByLine) => {
7
+ var _a;
8
+ const validationErrors = [];
9
+ const modules = allModules[moduleType] || [];
10
+ const allPropertyValues = modules.map((module) => module[property]).filter((property) => property);
11
+ const duplicatePropertyValues = allPropertyValues.filter((property, index, all) => all.indexOf(property) !== index);
12
+ if (duplicatePropertyValues.length > 0) {
13
+ const allModulesWithDuplicatedPropertyValues = modules.filter((module) => module[property] === duplicatePropertyValues[0]);
14
+ validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.propertyUniquenessValidator(property, moduleType, duplicatePropertyValues), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition((_a = allModulesWithDuplicatedPropertyValues === null || allModulesWithDuplicatedPropertyValues === void 0 ? void 0 : allModulesWithDuplicatedPropertyValues[0]) === null || _a === void 0 ? void 0 : _a.key, yamlContentByLine)));
15
+ }
16
+ return validationErrors;
17
+ };
@@ -0,0 +1,4 @@
1
+ import { AllModuleTypes, ValidationError } from '../../../types';
2
+ import { Modules } from '../../../schema/manifest';
3
+ export declare const validateSingleProperty: (allModules: Modules, moduleType: AllModuleTypes, property: string, yamlContentByLine?: string[] | undefined) => ValidationError[];
4
+ //# sourceMappingURL=validateSingleProperty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSingleProperty.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/validateSingleProperty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,eAAO,MAAM,sBAAsB,eACrB,OAAO,cACP,cAAc,YAChB,MAAM,+CAEf,eAAe,EAgBjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSingleProperty = void 0;
4
+ const text_1 = require("../../../text");
5
+ const utils_1 = require("../../../utils");
6
+ exports.validateSingleProperty = (allModules, moduleType, property, yamlContentByLine) => {
7
+ const validationErrors = [];
8
+ const modules = allModules[moduleType] || [];
9
+ const modulesWithProperty = modules.filter((module) => module[property]);
10
+ if (modulesWithProperty.length > 1) {
11
+ const moduleKeys = modulesWithProperty.map((module) => module.key);
12
+ validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.multipleProperty(property, moduleType, moduleKeys), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(moduleKeys[moduleKeys.length - 1], yamlContentByLine)));
13
+ }
14
+ return validationErrors;
15
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/manifest",
3
- "version": "3.5.0-next.3",
3
+ "version": "3.5.0-next.6",
4
4
  "description": "Definitions and validations of the Forge manifest",
5
5
  "main": "out/index.js",
6
6
  "scripts": {
@@ -1,5 +0,0 @@
1
- import { ValidationError } from '../../../types';
2
- import { Modules } from '../../../schema/manifest';
3
- declare const validateGlobalSettingsModule: (modules: Modules, yamlContentByLine?: string[] | undefined) => ValidationError[];
4
- export { validateGlobalSettingsModule };
5
- //# sourceMappingURL=global-settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-settings.d.ts","sourceRoot":"","sources":["../../../../src/validators/modules-validators/confluence/global-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAwBnD,QAAA,MAAM,4BAA4B,YAAa,OAAO,+CAAiC,eAAe,EASrG,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateGlobalSettingsModule = void 0;
4
- const types_1 = require("../../../types");
5
- const text_1 = require("../../../text");
6
- const utils_1 = require("../../../utils");
7
- const validateMultipleUseAsConfig = (globalSettingsModules, yamlContentByLine) => {
8
- const validationErrors = [];
9
- const globalSettingsModulesUsedAsConfig = globalSettingsModules.filter((module) => module.useAsConfig);
10
- if (globalSettingsModulesUsedAsConfig.length > 1) {
11
- const moduleKeys = globalSettingsModulesUsedAsConfig.map((module) => module.key);
12
- validationErrors.push(Object.assign({ message: text_1.errors.modules.confluence.globalSettingsValidator.multipleUseAsConfig(moduleKeys), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(moduleKeys[moduleKeys.length - 1], yamlContentByLine)));
13
- }
14
- return validationErrors;
15
- };
16
- const validateGlobalSettingsModule = (modules, yamlContentByLine) => {
17
- const validationErrors = [];
18
- const globalSettingsModules = modules[types_1.AllModuleTypes.ConfluenceGlobalSettings];
19
- if (globalSettingsModules) {
20
- validationErrors.push(...validateMultipleUseAsConfig(globalSettingsModules, yamlContentByLine));
21
- }
22
- return validationErrors;
23
- };
24
- exports.validateGlobalSettingsModule = validateGlobalSettingsModule;