@sapui5/sap.fe.core 1.92.0 → 1.93.3

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 (84) hide show
  1. package/package.json +2 -3
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +2 -2
  4. package/src/sap/fe/core/AppComponent.js +21 -1
  5. package/src/sap/fe/core/CommonUtils.js +130 -48
  6. package/src/sap/fe/core/ExtensionAPI.js +238 -226
  7. package/src/sap/fe/core/PageController.js +5 -2
  8. package/src/sap/fe/core/TemplateComponent.js +1 -0
  9. package/src/sap/fe/core/TransactionHelper.js +35 -8
  10. package/src/sap/fe/core/actions/draft.js +1 -1
  11. package/src/sap/fe/core/actions/messageHandling.js +18 -6
  12. package/src/sap/fe/core/actions/operations.js +17 -41
  13. package/src/sap/fe/core/controllerextensions/EditFlow.js +127 -43
  14. package/src/sap/fe/core/controllerextensions/InternalRouting.js +11 -11
  15. package/src/sap/fe/core/controllerextensions/KPIManagement.js +417 -0
  16. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +399 -0
  17. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -3
  18. package/src/sap/fe/core/controllerextensions/PageReady.ts +1 -1
  19. package/src/sap/fe/core/controllerextensions/Share.js +102 -66
  20. package/src/sap/fe/core/controllerextensions/SideEffects.js +60 -14
  21. package/src/sap/fe/core/controllerextensions/SideEffects.ts +53 -12
  22. package/src/sap/fe/core/controllerextensions/ViewState.js +18 -18
  23. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +13 -0
  24. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +68 -2
  25. package/src/sap/fe/core/converters/ConverterContext.js +15 -1
  26. package/src/sap/fe/core/converters/ConverterContext.ts +11 -0
  27. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  28. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -2
  29. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -14
  30. package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -12
  31. package/src/sap/fe/core/converters/MetaModelConverter.js +32 -2
  32. package/src/sap/fe/core/converters/MetaModelConverter.ts +39 -2
  33. package/src/sap/fe/core/converters/annotations/DataField.js +10 -6
  34. package/src/sap/fe/core/converters/annotations/DataField.ts +9 -5
  35. package/src/sap/fe/core/converters/common/AnnotationConverter.js +14 -4
  36. package/src/sap/fe/core/converters/controls/Common/Action.js +25 -15
  37. package/src/sap/fe/core/converters/controls/Common/Action.ts +33 -19
  38. package/src/sap/fe/core/converters/controls/Common/Criticality.js +50 -0
  39. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +33 -0
  40. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -3
  41. package/src/sap/fe/core/converters/controls/Common/Form.ts +1 -2
  42. package/src/sap/fe/core/converters/controls/Common/KPI.js +181 -0
  43. package/src/sap/fe/core/converters/controls/Common/KPI.ts +220 -0
  44. package/src/sap/fe/core/converters/controls/Common/Table.js +121 -59
  45. package/src/sap/fe/core/converters/controls/Common/Table.ts +130 -62
  46. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -4
  47. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +9 -3
  48. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +62 -7
  49. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +58 -6
  50. package/src/sap/fe/core/converters/helpers/Aggregation.js +86 -11
  51. package/src/sap/fe/core/converters/helpers/Aggregation.ts +79 -8
  52. package/src/sap/fe/core/converters/helpers/BindingHelper.js +44 -2
  53. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +43 -2
  54. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  55. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  56. package/src/sap/fe/core/converters/helpers/IssueManager.js +8 -2
  57. package/src/sap/fe/core/converters/helpers/IssueManager.ts +7 -1
  58. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +93 -0
  59. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +92 -0
  60. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +102 -23
  61. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -17
  62. package/src/sap/fe/core/converters/templates/ListReportConverter.js +44 -5
  63. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +39 -2
  64. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +41 -30
  65. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +47 -30
  66. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -1
  67. package/src/sap/fe/core/formatters/CriticalityFormatter.js +77 -0
  68. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +58 -0
  69. package/src/sap/fe/core/formatters/KPIFormatter.js +103 -0
  70. package/src/sap/fe/core/formatters/KPIFormatter.ts +88 -0
  71. package/src/sap/fe/core/fpm/manifest.json +1 -3
  72. package/src/sap/fe/core/helpers/BindingExpression.js +161 -97
  73. package/src/sap/fe/core/helpers/BindingExpression.ts +188 -117
  74. package/src/sap/fe/core/library.js +1 -1
  75. package/src/sap/fe/core/messagebundle.properties +45 -1
  76. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -1
  77. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -0
  78. package/src/sap/fe/core/services/RoutingServiceFactory.js +30 -8
  79. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +16 -4
  80. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -3
  81. package/src/sap/fe/core/templating/DataModelPathHelper.js +7 -3
  82. package/src/sap/fe/core/templating/DataModelPathHelper.ts +7 -2
  83. package/src/sap/fe/core/templating/UIFormatters.js +1 -5
  84. package/src/sap/fe/core/templating/UIFormatters.ts +0 -3
@@ -50,6 +50,7 @@ import { isPropertyFilterable, getIsRequired } from "sap/fe/core/templating/Filt
50
50
  import { checkFilterExpressionRestrictions } from "sap/fe/core/templating/DataModelPathHelper";
51
51
  import ConverterContext from "sap/fe/core/converters/ConverterContext";
52
52
  import { AggregationHelper } from "../helpers/Aggregation";
53
+ import { KPIDefinition, getKPIDefinitions } from "../controls/Common/KPI";
53
54
 
54
55
  type ViewAnnotationsTypeTypes = SelectionPresentationVariantTypeTypes | SelectionVariantTypeTypes;
55
56
  type VariantManagementDefinition = {
@@ -99,6 +100,8 @@ type VisualFilters = {
99
100
  selectionVariantAnnotation?: string;
100
101
  multipleSelectionAllowed?: boolean;
101
102
  required?: boolean;
103
+ showOverlayInitially?: boolean;
104
+ requiredProperties?: object[];
102
105
  };
103
106
 
104
107
  type FilterGroup = {
@@ -137,6 +140,7 @@ export type ListReportDefinition = {
137
140
  useSemanticDateRange?: boolean;
138
141
  filterInitialLayout?: string;
139
142
  filterLayout?: string;
143
+ kpiDefinitions: KPIDefinition[];
140
144
  };
141
145
 
142
146
  export type ListReportViewDefinition = SingleViewDefinition | CustomViewDefinition | CombinedViewDefinition;
@@ -661,8 +665,9 @@ const getVisualFilters = function(
661
665
  );
662
666
  visualFilter.multipleSelectionAllowed = compileBinding(!bIsMainEntitySetSingleSelection.value) as any;
663
667
  visualFilter.required = getIsRequired(converterContext, sPropertyPath);
668
+ let svAnnotation: any;
664
669
  if (svQualifier) {
665
- const svAnnotation: any = collectionPathConverterContext?.getEntityTypeAnnotation(
670
+ svAnnotation = collectionPathConverterContext?.getEntityTypeAnnotation(
666
671
  "@UI.SelectionVariant#" + svQualifier
667
672
  )?.annotation;
668
673
  visualFilter.selectionVariantAnnotation = svAnnotation
@@ -671,6 +676,37 @@ const getVisualFilters = function(
671
676
  )
672
677
  : undefined;
673
678
  }
679
+ const entitySetAnnotations = collectionPathConverterContext.getEntitySet()?.annotations;
680
+ let requiredPropertyPaths: Array<object> = [];
681
+ const requiredProperties = entitySetAnnotations?.Capabilities?.FilterRestrictions
682
+ ?.RequiredProperties as any[];
683
+ if (requiredProperties?.length) {
684
+ requiredProperties.forEach(function(oRequireProperty: any) {
685
+ requiredPropertyPaths.push(oRequireProperty.value);
686
+ });
687
+ }
688
+ visualFilter.requiredProperties = requiredPropertyPaths;
689
+ if (visualFilter.requiredProperties?.length) {
690
+ if (!visualFilter.inParameters || !visualFilter.inParameters.length) {
691
+ if (!visualFilter.selectionVariantAnnotation) {
692
+ visualFilter.showOverlayInitially = true;
693
+ } else {
694
+ let selectOptions: any[] = [];
695
+ svAnnotation?.SelectOptions.forEach(function(oSelectOption: any) {
696
+ selectOptions.push(oSelectOption.PropertyName.value);
697
+ });
698
+ requiredPropertyPaths = requiredPropertyPaths.sort();
699
+ selectOptions = selectOptions.sort();
700
+ visualFilter.showOverlayInitially = requiredPropertyPaths.some(function(sPath) {
701
+ return selectOptions.indexOf(sPath) === -1;
702
+ });
703
+ }
704
+ } else {
705
+ visualFilter.showOverlayInitially = false;
706
+ }
707
+ } else {
708
+ visualFilter.showOverlayInitially = false;
709
+ }
674
710
  }
675
711
  }
676
712
  } else {
@@ -1287,7 +1323,8 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
1287
1323
  hasMultiVisualizations: hasMultiVisualizations,
1288
1324
  useSemanticDateRange,
1289
1325
  filterInitialLayout,
1290
- filterLayout
1326
+ filterLayout,
1327
+ kpiDefinitions: getKPIDefinitions(converterContext)
1291
1328
  };
1292
1329
  };
1293
1330
 
@@ -22,6 +22,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
22
22
  var CustomSectionID = ID.CustomSectionID;
23
23
  var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
24
24
  var getHeaderFacetsFromAnnotations = HeaderFacet.getHeaderFacetsFromAnnotations;
25
+ var createCustomHeaderFacetSubSections = SubSection.createCustomHeaderFacetSubSections;
25
26
  var createSubSections = SubSection.createSubSections;
26
27
  var createCustomSubSections = SubSection.createCustomSubSections;
27
28
  var TemplateType = ManifestSettings.TemplateType;
@@ -38,51 +39,62 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
38
39
  return ((_facetDefinition$ID = facetDefinition.ID) === null || _facetDefinition$ID === void 0 ? void 0 : _facetDefinition$ID.toString()) || ((_facetDefinition$Labe = facetDefinition.Label) === null || _facetDefinition$Labe === void 0 ? void 0 : _facetDefinition$Labe.toString()) || fallback;
39
40
  };
40
41
  /**
41
- * Create a section that represents the editable header part, it is only visible in edit mode.
42
+ * Creates a section that represents the editable header part; it is only visible in edit mode.
42
43
  *
43
- * @param converterContext
44
+ * @param converterContext The converter context
45
+ * @param allHeaderFacets The converter context
44
46
  * @returns {ObjectPageSection} The section representing the editable header parts
45
47
  */
46
48
 
47
49
 
48
- function createEditableHeaderSection(converterContext) {
50
+ function createEditableHeaderSection(converterContext, allHeaderFacets) {
49
51
  var _converterContext$get, _converterContext$get2;
50
52
 
51
53
  var editableHeaderSectionID = EditableHeaderSectionID();
52
54
  var headerFacets = (_converterContext$get = converterContext.getEntityType().annotations) === null || _converterContext$get === void 0 ? void 0 : (_converterContext$get2 = _converterContext$get.UI) === null || _converterContext$get2 === void 0 ? void 0 : _converterContext$get2.HeaderFacets;
55
+ var headerfacetSubSections = headerFacets ? createSubSections(headerFacets, converterContext, true) : [];
56
+ var customHeaderFacetSubSections = createCustomHeaderFacetSubSections(converterContext);
57
+ var allHeaderFacetsSubSections = [];
58
+
59
+ if (customHeaderFacetSubSections.length > 0) {
60
+ // merge annotation based header facets and custom header facets in the right order
61
+ var i = 0;
62
+ allHeaderFacets.forEach(function (item) {
63
+ // hidden header facets are not included in allHeaderFacets array => add them anyway
64
+ while (headerfacetSubSections.length > i && headerfacetSubSections[i].visible === "false") {
65
+ allHeaderFacetsSubSections.push(headerfacetSubSections[i]);
66
+ i++;
67
+ }
68
+
69
+ if (headerfacetSubSections.length > i && (item.key === headerfacetSubSections[i].key || // for header facets with no id the keys of header facet and subsection are different => check only the last part
70
+ item.key.slice(item.key.lastIndexOf("::") + 2) === headerfacetSubSections[i].key.slice(headerfacetSubSections[i].key.lastIndexOf("::") + 2))) {
71
+ allHeaderFacetsSubSections.push(headerfacetSubSections[i]);
72
+ i++;
73
+ } else {
74
+ customHeaderFacetSubSections.forEach(function (customItem) {
75
+ if (item.key === customItem.key) {
76
+ allHeaderFacetsSubSections.push(customItem);
77
+ }
78
+ });
79
+ }
80
+ });
81
+ } else {
82
+ allHeaderFacetsSubSections = headerfacetSubSections;
83
+ }
84
+
53
85
  var headerSection = {
54
86
  id: editableHeaderSectionID,
55
87
  key: "EditableHeaderContent",
56
88
  title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
57
89
  visible: "{= ${ui>/editMode} === 'Editable' }",
58
- subSections: headerFacets ? createSubSections(headerFacets, converterContext, true) : []
90
+ subSections: allHeaderFacetsSubSections
59
91
  };
60
92
  return headerSection;
61
93
  }
62
- /*
63
- function createEditableHeaderSection(headerFacets: HeaderFacets, converterContext: ConverterContext): ObjectPageSection {
64
- const editableHeaderSectionID = EditableHeaderSectionID();
65
- // treat UI.HeaderFacets as CollectionFacet to generate one Form with n FormContainers (instead of n Forms with one FormContainer each)
66
- // alternative: define specific ObjectPageEditableHeaderSection type to be used instead of ObjectPageSection
67
- const headerFacetWrapper = {
68
- $Type: UIAnnotationTypes.CollectionFacet,
69
- Facets: headerFacets
70
- } as CollectionFacetTypes;
71
- const headerSection: ObjectPageSection = {
72
- id: editableHeaderSectionID,
73
- key: "EditableHeaderContent",
74
- title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
75
- visible: "{= ${ui>/editMode} === 'Editable' }",
76
- subSections: createSubSections([headerFacetWrapper], converterContext)
77
- };
78
- return headerSection;
79
- }
80
- */
81
-
82
94
  /**
83
- * Creates section definition based on Facet annotation.
95
+ * Creates a definition for a section based on the Facet annotation.
84
96
  *
85
- * @param converterContext
97
+ * @param converterContext The converter context
86
98
  * @returns {ObjectPageSection[]} All sections
87
99
  */
88
100
 
@@ -262,7 +274,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
262
274
  var footerActions = getFooterActions(converterContext);
263
275
 
264
276
  if (manifestWrapper.isHeaderEditable() && (((_entityType$annotatio4 = entityType.annotations.UI) === null || _entityType$annotatio4 === void 0 ? void 0 : _entityType$annotatio4.HeaderFacets) || ((_entityType$annotatio5 = entityType.annotations.UI) === null || _entityType$annotatio5 === void 0 ? void 0 : _entityType$annotatio5.HeaderInfo))) {
265
- headerSection = createEditableHeaderSection(converterContext);
277
+ headerSection = createEditableHeaderSection(converterContext, headerFacets);
266
278
  }
267
279
 
268
280
  var sections = getSections(converterContext);
@@ -275,12 +287,11 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
275
287
  footerActions: footerActions,
276
288
  showHeader: manifestWrapper.getShowObjectPageHeader(),
277
289
  showAnchorBar: manifestWrapper.getShowAnchorBar(),
278
- useIconTabBar: manifestWrapper.useIconTabBar(),
279
- showDraftToggle: manifestWrapper.getShowDraftToggle()
290
+ useIconTabBar: manifestWrapper.useIconTabBar()
280
291
  };
281
292
  };
282
293
 
283
294
  _exports.convertPage = convertPage;
284
295
  return _exports;
285
296
  }, false);
286
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiRWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlclNlY3Rpb24iLCJpZCIsImtleSIsInRpdGxlIiwidmlzaWJsZSIsInN1YlNlY3Rpb25zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsIm9iamVjdFBhZ2VTZWN0aW9ucyIsIkZhY2V0cyIsIm1hcCIsImdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbiIsImZhY2V0Iiwic2VjdGlvbklEIiwiU2VjdGlvbklEIiwiRmFjZXQiLCJzZWN0aW9uIiwiY29tcGlsZUJpbmRpbmciLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsInNob3dUaXRsZSIsIm5vdCIsImVxdWFsIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJtYW5pZmVzdFNlY3Rpb25LZXkiLCJnZXRTZWN0aW9uRnJvbU1hbmlmZXN0IiwiY3VzdG9tU2VjdGlvbkRlZmluaXRpb24iLCJzZWN0aW9uS2V5IiwiY3VzdG9tU2VjdGlvbklEIiwiQ3VzdG9tU2VjdGlvbklEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJ1bmRlZmluZWQiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEhlYWRlckFjdGlvbnMiLCJhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImhlYWRlckFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImlzTmF2aWdhYmxlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRGb290ZXJBY3Rpb25zIiwiYUFubm90YXRpb25Gb290ZXJBY3Rpb25zIiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJnZXRWaWV3TGV2ZWwiLCJmb290ZXJBY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJjb252ZXJ0UGFnZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsImdldEhlYWRlckZhY2V0cyIsImlzSGVhZGVyRWRpdGFibGUiLCJIZWFkZXJJbmZvIiwidGVtcGxhdGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwic2hvd0hlYWRlciIsImdldFNob3dPYmplY3RQYWdlSGVhZGVyIiwic2hvd0FuY2hvckJhciIsImdldFNob3dBbmNob3JCYXIiLCJ1c2VJY29uVGFiQmFyIiwic2hvd0RyYWZ0VG9nZ2xlIiwiZ2V0U2hvd0RyYWZ0VG9nZ2xlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLE1BQU1BLGFBQWEsR0FBRyxVQUFDQyxlQUFELEVBQThCQyxRQUE5QixFQUEyRDtBQUFBOztBQUNoRixXQUFPLHdCQUFBRCxlQUFlLENBQUNFLEVBQWhCLDRFQUFvQkMsUUFBcEIsaUNBQWtDSCxlQUFlLENBQUNJ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Q0FBQ3RELGdCQUFELENBQXRDLENBWDZGLENBYTdGOztBQUNBLFFBQU1zRSxhQUFhLEdBQUdKLGdCQUFnQixDQUFDbEUsZ0JBQUQsQ0FBdEM7O0FBRUEsUUFBSXlELGVBQWUsQ0FBQ21CLGdCQUFoQixPQUF1QywyQkFBQTVELFVBQVUsQ0FBQ1gsV0FBWCxDQUF1QkMsRUFBdkIsa0ZBQTJCQyxZQUEzQixnQ0FBMkNTLFVBQVUsQ0FBQ1gsV0FBWCxDQUF1QkMsRUFBbEUsMkRBQTJDLHVCQUEyQnVFLFVBQXRFLENBQXZDLENBQUosRUFBOEg7QUFDN0hyRSxNQUFBQSxhQUFhLEdBQUdULDJCQUEyQixDQUFDQyxnQkFBRCxDQUEzQztBQUNBOztBQUVELFFBQU1tQyxRQUFRLEdBQUdvQyxXQUFXLENBQUN2RSxnQkFBRCxDQUE1QjtBQUVBLFdBQU87QUFDTjhFLE1BQUFBLFFBQVEsRUFBRUMsWUFBWSxDQUFDQyxVQURqQjtBQUVON0UsTUFBQUEsWUFBWSxFQUFFQSxZQUZSO0FBR05LLE1BQUFBLGFBQWEsRUFBRUEsYUFIVDtBQUlObUQsTUFBQUEsYUFBYSxFQUFFQSxhQUpUO0FBS054QixNQUFBQSxRQUFRLEVBQUVBLFFBTEo7QUFNTm1DLE1BQUFBLGFBQWEsRUFBRUEsYUFOVDtBQU9OVyxNQUFBQSxVQUFVLEVBQUV4QixlQUFlLENBQUN5Qix1QkFBaEIsRUFQTjtBQVFOQyxNQUFBQSxhQUFhLEVBQUUxQixlQUFlLENBQUMyQixnQkFBaEIsRUFSVDtBQVNOQyxNQUFBQSxhQUFhLEVBQUU1QixlQUFlLENBQUM0QixhQUFoQixFQVRUO0FBVU5DLE1BQUFBLGVBQWUsRUFBRTdCLGVBQWUsQ0FBQzhCLGtCQUFoQjtBQVZYLEtBQVA7QUFZQSxHQWxDTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmFjZXRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgTWFuaWZlc3RTZWN0aW9uLCBNYW5pZmVzdFN1YlNlY3Rpb24sIFRlbXBsYXRlVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyxcblx0Y3JlYXRlU3ViU2VjdGlvbnMsXG5cdEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uLFxuXHRDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbixcblx0T2JqZWN0UGFnZVNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsIE9iamVjdFBhZ2VIZWFkZXJGYWNldCB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBDdXN0b21TZWN0aW9uSUQsIEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkLCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50LCBQb3NpdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEhlYWRlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHsgYW5ub3RhdGlvbkV4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nLCBlcXVhbCwgbm90IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VEZWZpbml0aW9uID0gUGFnZURlZmluaXRpb24gJiB7XG5cdGhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W107XG5cdGhlYWRlclNlY3Rpb24/OiBPYmplY3RQYWdlU2VjdGlvbjtcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93SGVhZGVyOiBib29sZWFuO1xuXHRzaG93QW5jaG9yQmFyOiBib29sZWFuO1xuXHR1c2VJY29uVGFiQmFyOiBib29sZWFuO1xuXHRzaG93RHJhZnRUb2dnbGU6IGJvb2xlYW47XG59O1xuXG5jb25zdCBnZXRTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBzZWN0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdGFibGUgaGVhZGVyIHBhcnQsIGl0IGlzIG9ubHkgdmlzaWJsZSBpbiBlZGl0IG1vZGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbn0gVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzO1xuXHRjb25zdCBoZWFkZXJTZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQsXG5cdFx0a2V5OiBcIkVkaXRhYmxlSGVhZGVyQ29udGVudFwiLFxuXHRcdHRpdGxlOiBcIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9PQkpFQ1RfUEFHRV9IRUFERVJfU0VDVElPTn1cIixcblx0XHR2aXNpYmxlOiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJyB9XCIsXG5cdFx0c3ViU2VjdGlvbnM6IGhlYWRlckZhY2V0cyA/IGNyZWF0ZVN1YlNlY3Rpb25zKGhlYWRlckZhY2V0cywgY29udmVydGVyQ29udGV4dCwgdHJ1ZSkgOiBbXVxuXHR9O1xuXHRyZXR1cm4gaGVhZGVyU2VjdGlvbjtcbn1cbi8qXG4gZnVuY3Rpb24gY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uKGhlYWRlckZhY2V0czogSGVhZGVyRmFjZXRzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdC8vIHRyZWF0IFVJLkhlYWRlckZhY2V0cyBhcyBDb2xsZWN0aW9uRmFjZXQgdG8gZ2VuZXJhdGUgb25lIEZvcm0gd2l0aCBuIEZvcm1Db250YWluZXJzIChpbnN0ZWFkIG9mIG4gRm9ybXMgd2l0aCBvbmUgRm9ybUNvbnRhaW5lciBlYWNoKVxuXHQvLyBhbHRlcm5hdGl2ZTogZGVmaW5lIHNwZWNpZmljIE9iamVjdFBhZ2VFZGl0YWJsZUhlYWRlclNlY3Rpb24gdHlwZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgT2JqZWN0UGFnZVNlY3Rpb25cblx0Y29uc3QgaGVhZGVyRmFjZXRXcmFwcGVyID0ge1xuXHRcdCRUeXBlOiBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQsXG5cdFx0RmFjZXRzOiBoZWFkZXJGYWNldHNcblx0fSBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogXCJ7PSAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZScgfVwiLFxuXHRcdHN1YlNlY3Rpb25zOiBjcmVhdGVTdWJTZWN0aW9ucyhbaGVhZGVyRmFjZXRXcmFwcGVyXSwgY29udmVydGVyQ29udGV4dClcblx0fTtcblx0cmV0dXJuIGhlYWRlclNlY3Rpb247XG59XG4qL1xuXG4vKipcbiAqIENyZWF0ZXMgc2VjdGlvbiBkZWZpbml0aW9uIGJhc2VkIG9uIEZhY2V0IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbltdfSBBbGwgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb2JqZWN0UGFnZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdID1cblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5tYXAoKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcykgPT5cblx0XHRcdGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0KSB8fCBbXTtcblx0cmV0dXJuIG9iamVjdFBhZ2VTZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbn0gVGhlIGN1cnJlbnQgc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXQ6IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IHNlY3Rpb25JRCA9IFNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldCB9KTtcblx0Y29uc3Qgc2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IHNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0LkxhYmVsKSksXG5cdFx0c2hvd1RpdGxlOiAhIWZhY2V0LkxhYmVsLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dClcblx0fTtcblx0cmV0dXJuIHNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzZWN0aW9uIGRlZmluaXRpb24gYmFzZWQgb24gbWFuaWZlc3QgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBtYW5pZmVzdFNlY3Rpb25zIFRoZSBtYW5pZmVzdCBkZWZpbmVkIHNlY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPn0gVGhlIG1hbmlmZXN0IGRlZmluZWQgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4ge1xuXHRjb25zdCBzZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U2VjdGlvbnMpLmZvckVhY2gobWFuaWZlc3RTZWN0aW9uS2V5ID0+IHtcblx0XHRzZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldID0gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChtYW5pZmVzdFNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0sIG1hbmlmZXN0U2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIHNlY3Rpb24uXG4gKiBAcGFyYW0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb25cbiAqIEBwYXJhbSBzZWN0aW9uS2V5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0N1c3RvbU9iamVjdFBhZ2VTZWN0aW9ufSBUaGUgY3VycmVudCBjdXN0b20gc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KFxuXHRjdXN0b21TZWN0aW9uRGVmaW5pdGlvbjogTWFuaWZlc3RTZWN0aW9uLFxuXHRzZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3QgY3VzdG9tU2VjdGlvbklEID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uaWQgfHwgQ3VzdG9tU2VjdGlvbklEKHNlY3Rpb25LZXkpO1xuXHRsZXQgcG9zaXRpb246IFBvc2l0aW9uIHwgdW5kZWZpbmVkID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHRsZXQgbWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPjtcblx0aWYgKCFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5zdWJTZWN0aW9ucykge1xuXHRcdC8vIElmIHRoZXJlIGlzIG5vIHN1YlNlY3Rpb24gZGVmaW5lZCwgd2UgYWRkIHRoZSBjb250ZW50IG9mIHRoZSBjdXN0b20gc2VjdGlvbiBhcyBzdWJzZWN0aW9uc1xuXHRcdC8vIGFuZCBtYWtlIHN1cmUgdG8gc2V0IHRoZSB2aXNpYmlsaXR5IHRvICd0cnVlJywgYXMgdGhlIGFjdHVhbCB2aXNpYmlsaXR5IGlzIGhhbmRsZWQgYnkgdGhlIHNlY3Rpb24gaXRzZWxmXG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IHtcblx0XHRcdFtzZWN0aW9uS2V5XToge1xuXHRcdFx0XHQuLi5jdXN0b21TZWN0aW9uRGVmaW5pdGlvbixcblx0XHRcdFx0cG9zaXRpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogdHJ1ZSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0c3ViU2VjdGlvbnM6IGluc2VydEN1c3RvbUVsZW1lbnRzKFtdIGFzIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uW10sIHN1YlNlY3Rpb25zLCB7IFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIiwgXCJhY3Rpb25zXCI6IFwibWVyZ2VcIiB9KVxuXHR9O1xuXHRyZXR1cm4gY3VzdG9tU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgaGVhZGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoaXMgT2JqZWN0UGFnZSBoZWFkZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgYUFubm90YXRpb25IZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyxcblx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0bWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0KSxcblx0XHR7IGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLCBlbmFibGVkOiBcIm92ZXJ3cml0ZVwiLCBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IFwib3ZlcndyaXRlXCIgfVxuXHQpO1xuXHRyZXR1cm4gcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhoZWFkZXJBY3Rpb25zKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGZvb3RlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgZm9vdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290ZXJBY3Rpb25zID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGFBbm5vdGF0aW9uRm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMobWFuaWZlc3RXcmFwcGVyLmdldFZpZXdMZXZlbCgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyxcblx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRGb290ZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQsIGFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyksXG5cdFx0eyBpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIiwgZW5hYmxlZDogXCJvdmVyd3JpdGVcIiwgZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBcIm92ZXJ3cml0ZVwiIH1cblx0KTtcblx0cmV0dXJuIGZvb3RlckFjdGlvbnM7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbmQgbWVyZ2VzIHRoZSBPYmplY3RQYWdlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb24gYW5kIGluIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldFNlY3Rpb25zRnJvbUFubm90YXRpb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHtcblx0XHRcdFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFwidmlzaWJsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XCJzdWJTZWN0aW9uc1wiOiB7XG5cdFx0XHRcdFwiYWN0aW9uc1wiOiBcIm1lcmdlXCIsXG5cdFx0XHRcdFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFx0XCJzaWRlQ29udGVudFwiOiBcIm92ZXJ3cml0ZVwiXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VEZWZpbml0aW9uIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0bGV0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdC8vIFJldHJpZXZlIGFsbCBoZWFkZXIgZmFjZXRzIChmcm9tIGFubm90YXRpb25zICYgY3VzdG9tKVxuXHRjb25zdCBoZWFkZXJGYWNldHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSlcblx0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBoZWFkZXIgYWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBmb290ZXIgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gZ2V0Rm9vdGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRpZiAobWFuaWZlc3RXcmFwcGVyLmlzSGVhZGVyRWRpdGFibGUoKSAmJiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVyRmFjZXRzIHx8IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm8pKSB7XG5cdFx0aGVhZGVyU2VjdGlvbiA9IGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyRmFjZXRzOiBoZWFkZXJGYWNldHMsXG5cdFx0aGVhZGVyU2VjdGlvbjogaGVhZGVyU2VjdGlvbixcblx0XHRoZWFkZXJBY3Rpb25zOiBoZWFkZXJBY3Rpb25zLFxuXHRcdHNlY3Rpb25zOiBzZWN0aW9ucyxcblx0XHRmb290ZXJBY3Rpb25zOiBmb290ZXJBY3Rpb25zLFxuXHRcdHNob3dIZWFkZXI6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpLFxuXHRcdHNob3dBbmNob3JCYXI6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93QW5jaG9yQmFyKCksXG5cdFx0dXNlSWNvblRhYkJhcjogbWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSxcblx0XHRzaG93RHJhZnRUb2dnbGU6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93RHJhZnRUb2dnbGUoKVxuXHR9O1xufTtcbiJdfQ==
297
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImFsbEhlYWRlckZhY2V0cyIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiRWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlcmZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMiLCJsZW5ndGgiLCJpIiwiZm9yRWFjaCIsIml0ZW0iLCJ2aXNpYmxlIiwicHVzaCIsImtleSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJjdXN0b21JdGVtIiwiaGVhZGVyU2VjdGlvbiIsImlkIiwidGl0bGUiLCJzdWJTZWN0aW9ucyIsImdldFNlY3Rpb25zRnJvbUFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwib2JqZWN0UGFnZVNlY3Rpb25zIiwiRmFjZXRzIiwibWFwIiwiZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uIiwiZmFjZXQiLCJzZWN0aW9uSUQiLCJTZWN0aW9uSUQiLCJGYWNldCIsInNlY3Rpb24iLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwic2hvd1RpdGxlIiwibm90IiwiZXF1YWwiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QiLCJtYW5pZmVzdFNlY3Rpb25zIiwic2VjdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RTZWN0aW9uS2V5IiwiZ2V0U2VjdGlvbkZyb21NYW5pZmVzdCIsImN1c3RvbVNlY3Rpb25EZWZpbml0aW9uIiwic2VjdGlvbktleSIsImN1c3RvbVNlY3Rpb25JRCIsIkN1c3RvbVNlY3Rpb25JRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwidW5kZWZpbmVkIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJjdXN0b21TZWN0aW9uIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRIZWFkZXJBY3Rpb25zIiwiYUFubm90YXRpb25IZWFkZXJBY3Rpb25zIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJoZWFkZXJBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZm9vdGVyQWN0aW9ucyIsImdldFNlY3Rpb25zIiwiY29udmVydFBhZ2UiLCJnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRIZWFkZXJGYWNldHMiLCJpc0hlYWRlckVkaXRhYmxlIiwiSGVhZGVySW5mbyIsInRlbXBsYXRlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsInNob3dIZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsInNob3dBbmNob3JCYXIiLCJnZXRTaG93QW5jaG9yQmFyIiwidXNlSWNvblRhYkJhciJdLCJtYXBwaW5n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QUFLTnZCLE1BQUFBLFFBQVEsRUFBRUEsUUFMSjtBQU1Oa0MsTUFBQUEsYUFBYSxFQUFFQSxhQU5UO0FBT05XLE1BQUFBLFVBQVUsRUFBRXhCLGVBQWUsQ0FBQ3lCLHVCQUFoQixFQVBOO0FBUU5DLE1BQUFBLGFBQWEsRUFBRTFCLGVBQWUsQ0FBQzJCLGdCQUFoQixFQVJUO0FBU05DLE1BQUFBLGFBQWEsRUFBRTVCLGVBQWUsQ0FBQzRCLGFBQWhCO0FBVFQsS0FBUDtBQVdBLEdBakNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBNYW5pZmVzdFNlY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4uL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9ucyxcblx0Y3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyxcblx0Q3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24sXG5cdEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRPYmplY3RQYWdlU2VjdGlvbixcblx0T2JqZWN0UGFnZVN1YlNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsIE9iamVjdFBhZ2VIZWFkZXJGYWNldCB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBDdXN0b21TZWN0aW9uSUQsIEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkLCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50LCBQb3NpdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEhlYWRlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHsgYW5ub3RhdGlvbkV4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nLCBlcXVhbCwgbm90IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VEZWZpbml0aW9uID0gUGFnZURlZmluaXRpb24gJiB7XG5cdGhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W107XG5cdGhlYWRlclNlY3Rpb24/OiBPYmplY3RQYWdlU2VjdGlvbjtcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93SGVhZGVyOiBib29sZWFuO1xuXHRzaG93QW5jaG9yQmFyOiBib29sZWFuO1xuXHR1c2VJY29uVGFiQmFyOiBib29sZWFuO1xufTtcblxuY29uc3QgZ2V0U2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlY3Rpb24gdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydDsgaXQgaXMgb25seSB2aXNpYmxlIGluIGVkaXQgbW9kZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbGxIZWFkZXJGYWNldHMgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVNlY3Rpb259IFRoZSBzZWN0aW9uIHJlcHJlc2VudGluZyB0aGUgZWRpdGFibGUgaGVhZGVyIHBhcnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFsbEhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W11cbik6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3QgZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQgPSBFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCgpO1xuXHRjb25zdCBoZWFkZXJGYWNldHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckZhY2V0cztcblx0Y29uc3QgaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyA9IGhlYWRlckZhY2V0cyA/IGNyZWF0ZVN1YlNlY3Rpb25zKGhlYWRlckZhY2V0cywgY29udmVydGVyQ29udGV4dCwgdHJ1ZSkgOiBbXTtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyA9IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRpZiAoY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gbWVyZ2UgYW5ub3RhdGlvbiBiYXNlZCBoZWFkZXIgZmFjZXRzIGFuZCBjdXN0b20gaGVhZGVyIGZhY2V0cyBpbiB0aGUgcmlnaHQgb3JkZXJcblx0XHRsZXQgaSA9IDA7XG5cdFx0YWxsSGVhZGVyRmFjZXRzLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0Ly8gaGlkZGVuIGhlYWRlciBmYWNldHMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhbGxIZWFkZXJGYWNldHMgYXJyYXkgPT4gYWRkIHRoZW0gYW55d2F5XG5cdFx0XHR3aGlsZSAoaGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmIGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0udmlzaWJsZSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmXG5cdFx0XHRcdChpdGVtLmtleSA9PT0gaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkgfHxcblx0XHRcdFx0XHQvLyBmb3IgaGVhZGVyIGZhY2V0cyB3aXRoIG5vIGlkIHRoZSBrZXlzIG9mIGhlYWRlciBmYWNldCBhbmQgc3Vic2VjdGlvbiBhcmUgZGlmZmVyZW50ID0+IGNoZWNrIG9ubHkgdGhlIGxhc3QgcGFydFxuXHRcdFx0XHRcdGl0ZW0ua2V5LnNsaWNlKGl0ZW0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSA9PT1cblx0XHRcdFx0XHRcdGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5LnNsaWNlKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0pO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oY3VzdG9tSXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gY3VzdG9tSXRlbS5rZXkpIHtcblx0XHRcdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goY3VzdG9tSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyA9IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogXCJ7PSAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZScgfVwiLFxuXHRcdHN1YlNlY3Rpb25zOiBhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9uc1xuXHR9O1xuXHRyZXR1cm4gaGVhZGVyU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmaW5pdGlvbiBmb3IgYSBzZWN0aW9uIGJhc2VkIG9uIHRoZSBGYWNldCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTZWN0aW9uW119IEFsbCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBvYmplY3RQYWdlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10gPVxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lm1hcCgoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKSA9PlxuXHRcdFx0Z2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHQpIHx8IFtdO1xuXHRyZXR1cm4gb2JqZWN0UGFnZVNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBhbm5vdGF0aW9uIGJhc2VkIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTZWN0aW9ufSBUaGUgY3VycmVudCBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldDogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gU2VjdGlvbklEKHsgRmFjZXQ6IGZhY2V0IH0pO1xuXHRjb25zdCBzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogc2VjdGlvbklELFxuXHRcdGtleTogZ2V0U2VjdGlvbktleShmYWNldCwgc2VjdGlvbklEKSxcblx0XHR0aXRsZTogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZmFjZXQuTGFiZWwpKSxcblx0XHRzaG93VGl0bGU6ICEhZmFjZXQuTGFiZWwsXG5cdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdHN1YlNlY3Rpb25zOiBjcmVhdGVTdWJTZWN0aW9ucyhbZmFjZXRdLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xuXHRyZXR1cm4gc2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHNlY3Rpb24gZGVmaW5pdGlvbiBiYXNlZCBvbiBtYW5pZmVzdCBkZWZpbml0aW9uLlxuICogQHBhcmFtIG1hbmlmZXN0U2VjdGlvbnMgVGhlIG1hbmlmZXN0IGRlZmluZWQgc2VjdGlvbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+fSBUaGUgbWFuaWZlc3QgZGVmaW5lZCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RTZWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiB7XG5cdGNvbnN0IHNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTZWN0aW9ucykuZm9yRWFjaChtYW5pZmVzdFNlY3Rpb25LZXkgPT4ge1xuXHRcdHNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0gPSBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KG1hbmlmZXN0U2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSwgbWFuaWZlc3RTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtYW5pZmVzdCBiYXNlZCBjdXN0b20gc2VjdGlvbi5cbiAqIEBwYXJhbSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvblxuICogQHBhcmFtIHNlY3Rpb25LZXlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Q3VzdG9tT2JqZWN0UGFnZVNlY3Rpb259IFRoZSBjdXJyZW50IGN1c3RvbSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QoXG5cdGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uOiBNYW5pZmVzdFNlY3Rpb24sXG5cdHNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBjdXN0b21TZWN0aW9uSUQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5pZCB8fCBDdXN0b21TZWN0aW9uSUQoc2VjdGlvbktleSk7XG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGxldCBtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+O1xuXHRpZiAoIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zKSB7XG5cdFx0Ly8gSWYgdGhlcmUgaXMgbm8gc3ViU2VjdGlvbiBkZWZpbmVkLCB3ZSBhZGQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1c3RvbSBzZWN0aW9uIGFzIHN1YnNlY3Rpb25zXG5cdFx0Ly8gYW5kIG1ha2Ugc3VyZSB0byBzZXQgdGhlIHZpc2liaWxpdHkgdG8gJ3RydWUnLCBhcyB0aGUgYWN0dWFsIHZpc2liaWxpdHkgaXMgaGFuZGxlZCBieSB0aGUgc2VjdGlvbiBpdHNlbGZcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0ge1xuXHRcdFx0W3NlY3Rpb25LZXldOiB7XG5cdFx0XHRcdC4uLmN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLFxuXHRcdFx0XHRwb3NpdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhtYW5pZmVzdFN1YlNlY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBjdXN0b21TZWN0aW9uOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogY3VzdG9tU2VjdGlvbklELFxuXHRcdGtleTogc2VjdGlvbktleSxcblx0XHR0aXRsZTogY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udGl0bGUsXG5cdFx0c2hvd1RpdGxlOiAhIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHZpc2libGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnZpc2libGUgOiB0cnVlLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHRzdWJTZWN0aW9uczogaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSwgc3ViU2VjdGlvbnMsIHsgXCJ0aXRsZVwiOiBcIm92ZXJ3cml0ZVwiLCBcImFjdGlvbnNcIjogXCJtZXJnZVwiIH0pXG5cdH07XG5cdHJldHVybiBjdXN0b21TZWN0aW9uO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgT2JqZWN0UGFnZSBoZWFkZXIgYWN0aW9ucyAoYm90aCB0aGUgZGVmYXVsdCBvbmVzIGFuZCB0aGUgY3VzdG9tIG9uZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGhlYWRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGdldEhpZGRlbkhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0XHQpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgZm9vdGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoaXMgT2JqZWN0UGFnZSBmb290ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlckFjdGlvbnMgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyhtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25Gb290ZXJBY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEZvb3RlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCwgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zKSxcblx0XHR7IGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLCBlbmFibGVkOiBcIm92ZXJ3cml0ZVwiLCBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IFwib3ZlcndyaXRlXCIgfVxuXHQpO1xuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFuZCBtZXJnZXMgdGhlIE9iamVjdFBhZ2Ugc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbiBhbmQgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlY3Rpb25zID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0e1xuXHRcdFx0XCJ0aXRsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XCJ2aXNpYmxlXCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRcInN1YlNlY3Rpb25zXCI6IHtcblx0XHRcdFx0XCJhY3Rpb25zXCI6IFwibWVyZ2VcIixcblx0XHRcdFx0XCJ0aXRsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XHRcInNpZGVDb250ZW50XCI6IFwib3ZlcndyaXRlXCJcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Ly8gUmV0cmlldmUgYWxsIGhlYWRlciBmYWNldHMgKGZyb20gYW5ub3RhdGlvbnMgJiBjdXN0b20pXG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKVxuXHQpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBwYWdlIGhlYWRlciBhY3Rpb25zXG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBwYWdlIGZvb3RlciBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnMgPSBnZXRGb290ZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGlmIChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpICYmIChlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJGYWNldHMgfHwgZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbykpIHtcblx0XHRoZWFkZXJTZWN0aW9uID0gY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGhlYWRlckZhY2V0cyk7XG5cdH1cblxuXHRjb25zdCBzZWN0aW9ucyA9IGdldFNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiB7XG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLFxuXHRcdGhlYWRlckZhY2V0czogaGVhZGVyRmFjZXRzLFxuXHRcdGhlYWRlclNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0aGVhZGVyQWN0aW9uczogaGVhZGVyQWN0aW9ucyxcblx0XHRzZWN0aW9uczogc2VjdGlvbnMsXG5cdFx0Zm9vdGVyQWN0aW9uczogZm9vdGVyQWN0aW9ucyxcblx0XHRzaG93SGVhZGVyOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRzaG93QW5jaG9yQmFyOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd0FuY2hvckJhcigpLFxuXHRcdHVzZUljb25UYWJCYXI6IG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKClcblx0fTtcbn07XG4iXX0=
@@ -5,9 +5,11 @@ import { EntityType } from "@sap-ux/annotation-converter";
5
5
  import {
6
6
  createCustomSubSections,
7
7
  createSubSections,
8
+ createCustomHeaderFacetSubSections,
8
9
  CustomObjectPageSection,
9
10
  CustomObjectPageSubSection,
10
- ObjectPageSection
11
+ ObjectPageSection,
12
+ ObjectPageSubSection
11
13
  } from "../controls/ObjectPage/SubSection";
12
14
  import { getHeaderFacetsFromAnnotations, getHeaderFacetsFromManifest, ObjectPageHeaderFacet } from "../controls/ObjectPage/HeaderFacet";
13
15
  import { CustomSectionID, EditableHeaderSectionID, SectionID } from "../helpers/ID";
@@ -30,7 +32,6 @@ export type ObjectPageDefinition = PageDefinition & {
30
32
  showHeader: boolean;
31
33
  showAnchorBar: boolean;
32
34
  useIconTabBar: boolean;
33
- showDraftToggle: boolean;
34
35
  };
35
36
 
36
37
  const getSectionKey = (facetDefinition: FacetTypes, fallback: string): string => {
@@ -38,47 +39,64 @@ const getSectionKey = (facetDefinition: FacetTypes, fallback: string): string =>
38
39
  };
39
40
 
40
41
  /**
41
- * Create a section that represents the editable header part, it is only visible in edit mode.
42
+ * Creates a section that represents the editable header part; it is only visible in edit mode.
42
43
  *
43
- * @param converterContext
44
+ * @param converterContext The converter context
45
+ * @param allHeaderFacets The converter context
44
46
  * @returns {ObjectPageSection} The section representing the editable header parts
45
47
  */
46
- export function createEditableHeaderSection(converterContext: ConverterContext): ObjectPageSection {
48
+ export function createEditableHeaderSection(
49
+ converterContext: ConverterContext,
50
+ allHeaderFacets: ObjectPageHeaderFacet[]
51
+ ): ObjectPageSection {
47
52
  const editableHeaderSectionID = EditableHeaderSectionID();
48
53
  const headerFacets = converterContext.getEntityType().annotations?.UI?.HeaderFacets;
54
+ const headerfacetSubSections = headerFacets ? createSubSections(headerFacets, converterContext, true) : [];
55
+ const customHeaderFacetSubSections = createCustomHeaderFacetSubSections(converterContext);
56
+ let allHeaderFacetsSubSections: ObjectPageSubSection[] = [];
57
+ if (customHeaderFacetSubSections.length > 0) {
58
+ // merge annotation based header facets and custom header facets in the right order
59
+ let i = 0;
60
+ allHeaderFacets.forEach(function(item) {
61
+ // hidden header facets are not included in allHeaderFacets array => add them anyway
62
+ while (headerfacetSubSections.length > i && headerfacetSubSections[i].visible === "false") {
63
+ allHeaderFacetsSubSections.push(headerfacetSubSections[i]);
64
+ i++;
65
+ }
66
+ if (
67
+ headerfacetSubSections.length > i &&
68
+ (item.key === headerfacetSubSections[i].key ||
69
+ // for header facets with no id the keys of header facet and subsection are different => check only the last part
70
+ item.key.slice(item.key.lastIndexOf("::") + 2) ===
71
+ headerfacetSubSections[i].key.slice(headerfacetSubSections[i].key.lastIndexOf("::") + 2))
72
+ ) {
73
+ allHeaderFacetsSubSections.push(headerfacetSubSections[i]);
74
+ i++;
75
+ } else {
76
+ customHeaderFacetSubSections.forEach(function(customItem) {
77
+ if (item.key === customItem.key) {
78
+ allHeaderFacetsSubSections.push(customItem);
79
+ }
80
+ });
81
+ }
82
+ });
83
+ } else {
84
+ allHeaderFacetsSubSections = headerfacetSubSections;
85
+ }
49
86
  const headerSection: ObjectPageSection = {
50
87
  id: editableHeaderSectionID,
51
88
  key: "EditableHeaderContent",
52
89
  title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
53
90
  visible: "{= ${ui>/editMode} === 'Editable' }",
54
- subSections: headerFacets ? createSubSections(headerFacets, converterContext, true) : []
55
- };
56
- return headerSection;
57
- }
58
- /*
59
- function createEditableHeaderSection(headerFacets: HeaderFacets, converterContext: ConverterContext): ObjectPageSection {
60
- const editableHeaderSectionID = EditableHeaderSectionID();
61
- // treat UI.HeaderFacets as CollectionFacet to generate one Form with n FormContainers (instead of n Forms with one FormContainer each)
62
- // alternative: define specific ObjectPageEditableHeaderSection type to be used instead of ObjectPageSection
63
- const headerFacetWrapper = {
64
- $Type: UIAnnotationTypes.CollectionFacet,
65
- Facets: headerFacets
66
- } as CollectionFacetTypes;
67
- const headerSection: ObjectPageSection = {
68
- id: editableHeaderSectionID,
69
- key: "EditableHeaderContent",
70
- title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
71
- visible: "{= ${ui>/editMode} === 'Editable' }",
72
- subSections: createSubSections([headerFacetWrapper], converterContext)
91
+ subSections: allHeaderFacetsSubSections
73
92
  };
74
93
  return headerSection;
75
94
  }
76
- */
77
95
 
78
96
  /**
79
- * Creates section definition based on Facet annotation.
97
+ * Creates a definition for a section based on the Facet annotation.
80
98
  *
81
- * @param converterContext
99
+ * @param converterContext The converter context
82
100
  * @returns {ObjectPageSection[]} All sections
83
101
  */
84
102
  function getSectionsFromAnnotation(converterContext: ConverterContext): ObjectPageSection[] {
@@ -255,7 +273,7 @@ export const convertPage = function(converterContext: ConverterContext): ObjectP
255
273
  const footerActions = getFooterActions(converterContext);
256
274
 
257
275
  if (manifestWrapper.isHeaderEditable() && (entityType.annotations.UI?.HeaderFacets || entityType.annotations.UI?.HeaderInfo)) {
258
- headerSection = createEditableHeaderSection(converterContext);
276
+ headerSection = createEditableHeaderSection(converterContext, headerFacets);
259
277
  }
260
278
 
261
279
  const sections = getSections(converterContext);
@@ -269,7 +287,6 @@ export const convertPage = function(converterContext: ConverterContext): ObjectP
269
287
  footerActions: footerActions,
270
288
  showHeader: manifestWrapper.getShowObjectPageHeader(),
271
289
  showAnchorBar: manifestWrapper.getShowAnchorBar(),
272
- useIconTabBar: manifestWrapper.useIconTabBar(),
273
- showDraftToggle: manifestWrapper.getShowDraftToggle()
290
+ useIconTabBar: manifestWrapper.useIconTabBar()
274
291
  };
275
292
  };
@@ -52,7 +52,10 @@ sap.ui.define(
52
52
  "sap.ui.fl.util.IFrame": true,
53
53
  "sap.ui.layout.form.Form": true,
54
54
  "sap.ui.layout.form.FormContainer": true,
55
- "sap.ui.layout.form.FormElement": true
55
+ "sap.ui.layout.form.FormElement": true,
56
+ "sap.ui.fl.variants.VariantManagement": true,
57
+ "sap.fe.core.controls.FilterBar": true,
58
+ "sap.ui.mdc.Table": true
56
59
  };
57
60
  if (
58
61
  oElement.getMetadata().getName() === "sap.m.MenuButton" &&
@@ -0,0 +1,77 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/formatters/TableFormatterTypes"], function (TableFormatterTypes) {
6
+ "use strict";
7
+
8
+ var MessageType = TableFormatterTypes.MessageType;
9
+
10
+ /**
11
+ * criticality formatting
12
+ *
13
+ * @param {string|number} criticalityValue criticality value
14
+ * @returns {object} The formatted criticality
15
+ */
16
+ var criticalityFormat = function (criticalityValue) {
17
+ var criticalityProperty;
18
+
19
+ if (typeof criticalityValue === "string") {
20
+ return criticalityValue;
21
+ }
22
+
23
+ switch (criticalityValue) {
24
+ case 1:
25
+ criticalityProperty = MessageType.Error;
26
+ break;
27
+
28
+ case 2:
29
+ criticalityProperty = MessageType.Warning;
30
+ break;
31
+
32
+ case 3:
33
+ criticalityProperty = MessageType.Success;
34
+ break;
35
+
36
+ case 5:
37
+ criticalityProperty = MessageType.Information;
38
+ break;
39
+
40
+ default:
41
+ criticalityProperty = MessageType.None;
42
+ }
43
+
44
+ return criticalityProperty;
45
+ };
46
+
47
+ criticalityFormat.__functionName = "sap.fe.core.formatters.CriticalityFormatter#criticalityFormat"; // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
48
+
49
+ /**
50
+ * Collection of table formatters.
51
+ *
52
+ * @param {object} this The context
53
+ * @param {string} sName The inner function name
54
+ * @param {object[]} oArgs The inner function parameters
55
+ * @returns {object} The value from the inner function
56
+ */
57
+
58
+ var criticalityFormatters = function (sName) {
59
+ if (criticalityFormatters.hasOwnProperty(sName)) {
60
+ for (var _len = arguments.length, oArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
61
+ oArgs[_key - 1] = arguments[_key];
62
+ }
63
+
64
+ return criticalityFormatters[sName].apply(this, oArgs);
65
+ } else {
66
+ return "";
67
+ }
68
+ };
69
+
70
+ criticalityFormatters.criticalityFormat = criticalityFormat;
71
+ /**
72
+ * @global
73
+ */
74
+
75
+ return criticalityFormatters;
76
+ }, true);
77
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNyaXRpY2FsaXR5Rm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbImNyaXRpY2FsaXR5Rm9ybWF0IiwiY3JpdGljYWxpdHlWYWx1ZSIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIk5vbmUiLCJfX2Z1bmN0aW9uTmFtZSIsImNyaXRpY2FsaXR5Rm9ybWF0dGVycyIsInNOYW1lIiwiaGFzT3duUHJvcGVydHkiLCJvQXJncyIsImFwcGx5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7Ozs7O0FBT0EsTUFBTUEsaUJBQWlCLEdBQUcsVUFBU0MsZ0JBQVQsRUFBeUQ7QUFDbEYsUUFBSUMsbUJBQUo7O0FBQ0EsUUFBSSxPQUFPRCxnQkFBUCxLQUE0QixRQUFoQyxFQUEwQztBQUN6QyxhQUFRQSxnQkFBUjtBQUNBOztBQUNELFlBQVFBLGdCQUFSO0FBQ0MsV0FBSyxDQUFMO0FBQ0NDLFFBQUFBLG1CQUFtQixHQUFHQyxXQUFXLENBQUNDLEtBQWxDO0FBQ0E7O0FBQ0QsV0FBSyxDQUFMO0FBQ0NGLFFBQUFBLG1CQUFtQixHQUFHQyxXQUFXLENBQUNFLE9BQWxDO0FBQ0E7O0FBQ0QsV0FBSyxDQUFMO0FBQ0NILFFBQUFBLG1CQUFtQixHQUFHQyxXQUFXLENBQUNHLE9BQWxDO0FBQ0E7O0FBQ0QsV0FBSyxDQUFMO0FBQ0NKLFFBQUFBLG1CQUFtQixHQUFHQyxXQUFXLENBQUNJLFdBQWxDO0FBQ0E7O0FBQ0Q7QUFDQ0wsUUFBQUEsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ0ssSUFBbEM7QUFkRjs7QUFpQkEsV0FBT04sbUJBQVA7QUFDQSxHQXZCRDs7QUF3QkFGLEVBQUFBLGlCQUFpQixDQUFDUyxjQUFsQixHQUFtQywrREFBbkMsQyxDQUVBOztBQUNBOzs7Ozs7Ozs7QUFRQSxNQUFNQyxxQkFBcUIsR0FBRyxVQUF1QkMsS0FBdkIsRUFBNEQ7QUFDekYsUUFBSUQscUJBQXFCLENBQUNFLGNBQXRCLENBQXFDRCxLQUFyQyxDQUFKLEVBQWlEO0FBQUEsd0NBRHFCRSxLQUNyQjtBQURxQkEsUUFBQUEsS0FDckI7QUFBQTs7QUFDaEQsYUFBUUgscUJBQUQsQ0FBK0JDLEtBQS9CLEVBQXNDRyxLQUF0QyxDQUE0QyxJQUE1QyxFQUFrREQsS0FBbEQsQ0FBUDtBQUNBLEtBRkQsTUFFTztBQUNOLGFBQU8sRUFBUDtBQUNBO0FBQ0QsR0FORDs7QUFRQUgsRUFBQUEscUJBQXFCLENBQUNWLGlCQUF0QixHQUEwQ0EsaUJBQTFDO0FBRUE7Ozs7U0FHZVUscUIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJUeXBlc1wiO1xuXG4vKipcbiAqIGNyaXRpY2FsaXR5IGZvcm1hdHRpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGNyaXRpY2FsaXR5VmFsdWUgY3JpdGljYWxpdHkgdmFsdWVcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmb3JtYXR0ZWQgY3JpdGljYWxpdHlcbiAqL1xuXG5jb25zdCBjcml0aWNhbGl0eUZvcm1hdCA9IGZ1bmN0aW9uKGNyaXRpY2FsaXR5VmFsdWU6IHN0cmluZyB8IG51bWJlcik6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk7XG5cdGlmICh0eXBlb2YgY3JpdGljYWxpdHlWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiAoY3JpdGljYWxpdHlWYWx1ZSBhcyB1bmtub3duKSBhcyBNZXNzYWdlVHlwZTtcblx0fVxuXHRzd2l0Y2ggKGNyaXRpY2FsaXR5VmFsdWUpIHtcblx0XHRjYXNlIDE6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSA1OlxuXHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59O1xuY3JpdGljYWxpdHlGb3JtYXQuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuQ3JpdGljYWxpdHlGb3JtYXR0ZXIjY3JpdGljYWxpdHlGb3JtYXRcIjtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVycyBmb3IgbW9yZSBkZXRhaWwgb24gdGhpcyB3ZWlyZCBzeW50YXhcbi8qKlxuICogQ29sbGVjdGlvbiBvZiB0YWJsZSBmb3JtYXR0ZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0aGlzIFRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc05hbWUgVGhlIGlubmVyIGZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSB7b2JqZWN0W119IG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgY3JpdGljYWxpdHlGb3JtYXR0ZXJzID0gZnVuY3Rpb24odGhpczogb2JqZWN0LCBzTmFtZTogc3RyaW5nLCAuLi5vQXJnczogYW55W10pOiBhbnkge1xuXHRpZiAoY3JpdGljYWxpdHlGb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KHNOYW1lKSkge1xuXHRcdHJldHVybiAoY3JpdGljYWxpdHlGb3JtYXR0ZXJzIGFzIGFueSlbc05hbWVdLmFwcGx5KHRoaXMsIG9BcmdzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuY3JpdGljYWxpdHlGb3JtYXR0ZXJzLmNyaXRpY2FsaXR5Rm9ybWF0ID0gY3JpdGljYWxpdHlGb3JtYXQ7XG5cbi8qKlxuICogQGdsb2JhbFxuICovXG5leHBvcnQgZGVmYXVsdCBjcml0aWNhbGl0eUZvcm1hdHRlcnM7XG4iXX0=
@@ -0,0 +1,58 @@
1
+ import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
2
+
3
+ /**
4
+ * criticality formatting
5
+ *
6
+ * @param {string|number} criticalityValue criticality value
7
+ * @returns {object} The formatted criticality
8
+ */
9
+
10
+ const criticalityFormat = function(criticalityValue: string | number): MessageType {
11
+ let criticalityProperty;
12
+ if (typeof criticalityValue === "string") {
13
+ return (criticalityValue as unknown) as MessageType;
14
+ }
15
+ switch (criticalityValue) {
16
+ case 1:
17
+ criticalityProperty = MessageType.Error;
18
+ break;
19
+ case 2:
20
+ criticalityProperty = MessageType.Warning;
21
+ break;
22
+ case 3:
23
+ criticalityProperty = MessageType.Success;
24
+ break;
25
+ case 5:
26
+ criticalityProperty = MessageType.Information;
27
+ break;
28
+ default:
29
+ criticalityProperty = MessageType.None;
30
+ }
31
+
32
+ return criticalityProperty;
33
+ };
34
+ criticalityFormat.__functionName = "sap.fe.core.formatters.CriticalityFormatter#criticalityFormat";
35
+
36
+ // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
37
+ /**
38
+ * Collection of table formatters.
39
+ *
40
+ * @param {object} this The context
41
+ * @param {string} sName The inner function name
42
+ * @param {object[]} oArgs The inner function parameters
43
+ * @returns {object} The value from the inner function
44
+ */
45
+ const criticalityFormatters = function(this: object, sName: string, ...oArgs: any[]): any {
46
+ if (criticalityFormatters.hasOwnProperty(sName)) {
47
+ return (criticalityFormatters as any)[sName].apply(this, oArgs);
48
+ } else {
49
+ return "";
50
+ }
51
+ };
52
+
53
+ criticalityFormatters.criticalityFormat = criticalityFormat;
54
+
55
+ /**
56
+ * @global
57
+ */
58
+ export default criticalityFormatters;