@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.
- package/package.json +2 -3
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +2 -2
- package/src/sap/fe/core/AppComponent.js +21 -1
- package/src/sap/fe/core/CommonUtils.js +130 -48
- package/src/sap/fe/core/ExtensionAPI.js +238 -226
- package/src/sap/fe/core/PageController.js +5 -2
- package/src/sap/fe/core/TemplateComponent.js +1 -0
- package/src/sap/fe/core/TransactionHelper.js +35 -8
- package/src/sap/fe/core/actions/draft.js +1 -1
- package/src/sap/fe/core/actions/messageHandling.js +18 -6
- package/src/sap/fe/core/actions/operations.js +17 -41
- package/src/sap/fe/core/controllerextensions/EditFlow.js +127 -43
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +11 -11
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +417 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +399 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +102 -66
- package/src/sap/fe/core/controllerextensions/SideEffects.js +60 -14
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +53 -12
- package/src/sap/fe/core/controllerextensions/ViewState.js +18 -18
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +13 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +68 -2
- package/src/sap/fe/core/converters/ConverterContext.js +15 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +11 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -2
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -12
- package/src/sap/fe/core/converters/MetaModelConverter.js +32 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +39 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +10 -6
- package/src/sap/fe/core/converters/annotations/DataField.ts +9 -5
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +14 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +25 -15
- package/src/sap/fe/core/converters/controls/Common/Action.ts +33 -19
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +50 -0
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +33 -0
- package/src/sap/fe/core/converters/controls/Common/Form.js +2 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.js +181 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +220 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +121 -59
- package/src/sap/fe/core/converters/controls/Common/Table.ts +130 -62
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +9 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +62 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +58 -6
- package/src/sap/fe/core/converters/helpers/Aggregation.js +86 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +79 -8
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +44 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +43 -2
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +8 -2
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +7 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +93 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +92 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +102 -23
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -17
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +44 -5
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +39 -2
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +41 -30
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +47 -30
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +77 -0
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +58 -0
- package/src/sap/fe/core/formatters/KPIFormatter.js +103 -0
- package/src/sap/fe/core/formatters/KPIFormatter.ts +88 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +161 -97
- package/src/sap/fe/core/helpers/BindingExpression.ts +188 -117
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +45 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +30 -8
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +16 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +7 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +7 -2
- package/src/sap/fe/core/templating/UIFormatters.js +1 -5
- 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
|
-
|
|
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
|
-
*
|
|
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:
|
|
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
|
|
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
|
-
*
|
|
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(
|
|
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:
|
|
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
|
|
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;
|