@sapui5/sap.fe.core 1.95.0 → 1.98.0

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 (207) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +3 -3
  4. package/src/sap/fe/core/AppComponent.js +9 -44
  5. package/src/sap/fe/core/AppStateHandler.js +2 -2
  6. package/src/sap/fe/core/BaseController.js +1 -1
  7. package/src/sap/fe/core/BusyLocker.js +13 -1
  8. package/src/sap/fe/core/CommonUtils.js +129 -219
  9. package/src/sap/fe/core/ExtensionAPI.js +14 -6
  10. package/src/sap/fe/core/PageController.js +9 -35
  11. package/src/sap/fe/core/RouterProxy.js +79 -75
  12. package/src/sap/fe/core/Synchronization.js +1 -1
  13. package/src/sap/fe/core/TemplateComponent.js +16 -7
  14. package/src/sap/fe/core/TemplateModel.js +1 -1
  15. package/src/sap/fe/core/TransactionHelper.js +183 -65
  16. package/src/sap/fe/core/actions/draft.js +50 -23
  17. package/src/sap/fe/core/actions/messageHandling.js +86 -7
  18. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  19. package/src/sap/fe/core/actions/operations.js +75 -33
  20. package/src/sap/fe/core/actions/sticky.js +1 -1
  21. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  22. package/src/sap/fe/core/controllerextensions/EditFlow.js +276 -122
  23. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -6
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +90 -46
  26. package/src/sap/fe/core/controllerextensions/InternalRouting.js +234 -232
  27. package/src/sap/fe/core/controllerextensions/KPIManagement.js +539 -209
  28. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +550 -213
  29. package/src/sap/fe/core/controllerextensions/MassEdit.js +79 -0
  30. package/src/sap/fe/core/controllerextensions/MessageHandler.js +227 -103
  31. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  32. package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -7
  33. package/src/sap/fe/core/controllerextensions/Paginator.js +38 -12
  34. package/src/sap/fe/core/controllerextensions/Placeholder.js +16 -19
  35. package/src/sap/fe/core/controllerextensions/Routing.js +17 -2
  36. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  37. package/src/sap/fe/core/controllerextensions/Share.js +20 -7
  38. package/src/sap/fe/core/controllerextensions/SideEffects.js +8 -9
  39. package/src/sap/fe/core/controllerextensions/SideEffects.ts +19 -17
  40. package/src/sap/fe/core/controllerextensions/ViewState.js +54 -9
  41. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +40 -34
  42. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
  43. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  44. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
  45. package/src/sap/fe/core/controls/CustomQuickViewPage.js +110 -109
  46. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +7 -4
  47. package/src/sap/fe/core/controls/FieldWrapper.js +10 -4
  48. package/src/sap/fe/core/controls/FilterBar.js +1 -1
  49. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -6
  50. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
  51. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
  52. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +1 -1
  53. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  54. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +1 -1
  55. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  56. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  57. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +78 -0
  58. package/src/sap/fe/core/converters/ConverterContext.js +13 -1
  59. package/src/sap/fe/core/converters/ConverterContext.ts +10 -0
  60. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  61. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -1
  62. package/src/sap/fe/core/converters/ManifestWrapper.js +18 -7
  63. package/src/sap/fe/core/converters/ManifestWrapper.ts +15 -6
  64. package/src/sap/fe/core/converters/MetaModelConverter.js +920 -882
  65. package/src/sap/fe/core/converters/MetaModelConverter.ts +829 -853
  66. package/src/sap/fe/core/converters/annotations/DataField.js +54 -4
  67. package/src/sap/fe/core/converters/annotations/DataField.ts +53 -3
  68. package/src/sap/fe/core/converters/common/AnnotationConverter.js +83 -48
  69. package/src/sap/fe/core/converters/controls/Common/Action.js +15 -3
  70. package/src/sap/fe/core/converters/controls/Common/Action.ts +12 -3
  71. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -3
  72. package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -2
  73. package/src/sap/fe/core/converters/controls/Common/Form.js +68 -21
  74. package/src/sap/fe/core/converters/controls/Common/Form.ts +60 -16
  75. package/src/sap/fe/core/converters/controls/Common/KPI.js +331 -248
  76. package/src/sap/fe/core/converters/controls/Common/KPI.ts +355 -287
  77. package/src/sap/fe/core/converters/controls/Common/Table.js +426 -332
  78. package/src/sap/fe/core/converters/controls/Common/Table.ts +516 -383
  79. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +468 -0
  80. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +609 -0
  81. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +30 -13
  82. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +31 -12
  83. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  84. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  85. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
  86. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
  87. package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -1
  88. package/src/sap/fe/core/converters/helpers/Aggregation.ts +9 -1
  89. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  90. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
  91. package/src/sap/fe/core/converters/helpers/ID.js +9 -1
  92. package/src/sap/fe/core/converters/helpers/ID.ts +6 -2
  93. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -5
  94. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -4
  95. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
  96. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
  97. package/src/sap/fe/core/converters/templates/ListReportConverter.js +34 -4
  98. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -7
  99. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -5
  100. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -2
  101. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
  102. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  103. package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
  104. package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
  105. package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
  106. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  107. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -3
  108. package/src/sap/fe/core/fpm/Component.js +2 -2
  109. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  110. package/src/sap/fe/core/helpers/AppStartupHelper.ts +388 -0
  111. package/src/sap/fe/core/helpers/BindingExpression.js +199 -111
  112. package/src/sap/fe/core/helpers/BindingExpression.ts +193 -102
  113. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  114. package/src/sap/fe/core/helpers/EditState.js +1 -1
  115. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
  116. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  117. package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
  118. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
  119. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
  120. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
  121. package/src/sap/fe/core/helpers/MassEditHelper.js +678 -0
  122. package/src/sap/fe/core/helpers/ModelHelper.js +64 -1
  123. package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
  124. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  125. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  126. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  127. package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
  128. package/src/sap/fe/core/library.js +28 -2
  129. package/src/sap/fe/core/library.support.js +10 -4
  130. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  131. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  132. package/src/sap/fe/core/messagebundle.properties +67 -3
  133. package/src/sap/fe/core/messagebundle_ar.properties +40 -3
  134. package/src/sap/fe/core/messagebundle_bg.properties +40 -3
  135. package/src/sap/fe/core/messagebundle_ca.properties +41 -4
  136. package/src/sap/fe/core/messagebundle_cs.properties +41 -4
  137. package/src/sap/fe/core/messagebundle_cy.properties +40 -3
  138. package/src/sap/fe/core/messagebundle_da.properties +40 -3
  139. package/src/sap/fe/core/messagebundle_de.properties +40 -3
  140. package/src/sap/fe/core/messagebundle_el.properties +40 -3
  141. package/src/sap/fe/core/messagebundle_en.properties +37 -0
  142. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -0
  143. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +37 -0
  144. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +46 -2
  145. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -0
  146. package/src/sap/fe/core/messagebundle_es.properties +40 -3
  147. package/src/sap/fe/core/messagebundle_es_MX.properties +41 -4
  148. package/src/sap/fe/core/messagebundle_et.properties +40 -3
  149. package/src/sap/fe/core/messagebundle_fi.properties +40 -3
  150. package/src/sap/fe/core/messagebundle_fr.properties +41 -4
  151. package/src/sap/fe/core/messagebundle_fr_CA.properties +40 -3
  152. package/src/sap/fe/core/messagebundle_hi.properties +40 -3
  153. package/src/sap/fe/core/messagebundle_hr.properties +40 -3
  154. package/src/sap/fe/core/messagebundle_hu.properties +41 -4
  155. package/src/sap/fe/core/messagebundle_id.properties +42 -5
  156. package/src/sap/fe/core/messagebundle_it.properties +40 -3
  157. package/src/sap/fe/core/messagebundle_iw.properties +40 -3
  158. package/src/sap/fe/core/messagebundle_ja.properties +49 -12
  159. package/src/sap/fe/core/messagebundle_kk.properties +40 -3
  160. package/src/sap/fe/core/messagebundle_ko.properties +40 -3
  161. package/src/sap/fe/core/messagebundle_lt.properties +40 -3
  162. package/src/sap/fe/core/messagebundle_lv.properties +40 -3
  163. package/src/sap/fe/core/messagebundle_ms.properties +40 -3
  164. package/src/sap/fe/core/messagebundle_nl.properties +40 -3
  165. package/src/sap/fe/core/messagebundle_no.properties +40 -3
  166. package/src/sap/fe/core/messagebundle_pl.properties +40 -3
  167. package/src/sap/fe/core/messagebundle_pt.properties +42 -5
  168. package/src/sap/fe/core/messagebundle_pt_PT.properties +40 -3
  169. package/src/sap/fe/core/messagebundle_ro.properties +40 -3
  170. package/src/sap/fe/core/messagebundle_ru.properties +40 -3
  171. package/src/sap/fe/core/messagebundle_sh.properties +40 -3
  172. package/src/sap/fe/core/messagebundle_sk.properties +40 -3
  173. package/src/sap/fe/core/messagebundle_sl.properties +40 -3
  174. package/src/sap/fe/core/messagebundle_sv.properties +41 -4
  175. package/src/sap/fe/core/messagebundle_th.properties +40 -3
  176. package/src/sap/fe/core/messagebundle_tr.properties +40 -3
  177. package/src/sap/fe/core/messagebundle_uk.properties +40 -3
  178. package/src/sap/fe/core/messagebundle_vi.properties +40 -3
  179. package/src/sap/fe/core/messagebundle_zh_CN.properties +40 -3
  180. package/src/sap/fe/core/messagebundle_zh_TW.properties +40 -3
  181. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  182. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  183. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  184. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -0
  185. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  186. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  187. package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -328
  188. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  189. package/src/sap/fe/core/services/ShellServicesFactory.ts +30 -1
  190. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +8 -5
  191. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +11 -6
  192. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +14 -5
  193. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  194. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  195. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  196. package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -37
  197. package/src/sap/fe/core/templating/DataModelPathHelper.ts +13 -33
  198. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  200. package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
  201. package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
  202. package/src/sap/fe/core/templating/FilterHelper.js +10 -7
  203. package/src/sap/fe/core/templating/FilterHelper.ts +8 -6
  204. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  205. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  206. package/src/sap/fe/core/templating/UIFormatters.js +47 -107
  207. package/src/sap/fe/core/templating/UIFormatters.ts +76 -72
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define([], function() {
6
6
  "use strict";
@@ -110,6 +110,18 @@ sap.ui.define([], function() {
110
110
  );
111
111
  },
112
112
 
113
+ /**
114
+ * Gets the path for the items property of MultiValueField parameters.
115
+ *
116
+ * @function
117
+ * @name getActionParameterItemsModelPath
118
+ * @param {object} oParameter Action Parameter
119
+ * @returns {string} Returns the complete model path for the items property of MultiValueField parameters
120
+ */
121
+ getActionParameterItemsModelPath: function(oParameter) {
122
+ return oParameter && oParameter.$Name ? "{path: 'mvfview>/" + oParameter.$Name + "'}" : undefined;
123
+ },
124
+
113
125
  filterOutNavPropBinding: function(sPathPart) {
114
126
  return sPathPart !== "" && sPathPart !== "$NavigationPropertyBinding";
115
127
  },
@@ -158,6 +170,57 @@ sap.ui.define([], function() {
158
170
  var aFilterFunctions = oMetaModel.getObject("/@Org.OData.Capabilities.V1.FilterFunctions");
159
171
  // Get filter functions defined at EntityContainer and check for existence of 'tolower'
160
172
  return aFilterFunctions ? aFilterFunctions.indexOf("tolower") === -1 : true;
173
+ },
174
+
175
+ /**
176
+ * Get MetaPath for the context.
177
+ *
178
+ * @param {Context} oContext Context to be used
179
+ * @returns {string | undefined} Returns meta path for the context.
180
+ */
181
+ getMetaPathForContext: function(oContext) {
182
+ var oModel = oContext.getModel(),
183
+ oMetaModel = oModel.getMetaModel(),
184
+ sPath = oContext.getPath();
185
+ return oMetaModel && sPath && oMetaModel.getMetaPath(sPath);
186
+ },
187
+
188
+ /**
189
+ * Get MetaPath for the listbinding.
190
+ *
191
+ * @param {View} oView View of the control using listBinding
192
+ * @param {ODataListBinding | string} vListBinding ODataListBinding object or the binding path for a temporary list binding
193
+ * @returns {string | undefined} Returns meta path for the listbinding.
194
+ */
195
+ getAbsoluteMetaPathForListBinding: function(oView, vListBinding) {
196
+ var oMetaModel = oView.getModel().getMetaModel();
197
+ var sMetaPath;
198
+
199
+ if (typeof vListBinding === "string") {
200
+ if (vListBinding.startsWith("/")) {
201
+ // absolute path
202
+ sMetaPath = oMetaModel.getMetaPath(vListBinding);
203
+ } else {
204
+ // relative path
205
+ var oBindingContext = oView.getBindingContext();
206
+ var sRootContextPath = oBindingContext.getPath();
207
+ sMetaPath = oMetaModel.getMetaPath(sRootContextPath + "/" + vListBinding);
208
+ }
209
+ } else {
210
+ // we already get a list binding use this one
211
+ var oBinding = vListBinding;
212
+ var oRootBinding = oBinding.getRootBinding();
213
+ if (oBinding === oRootBinding) {
214
+ // absolute path
215
+ sMetaPath = oMetaModel.getMetaPath(oBinding.getPath());
216
+ } else {
217
+ // relative path
218
+ var sRootBindingPath = oRootBinding.getPath();
219
+ var sRelativePath = oBinding.getPath();
220
+ sMetaPath = oMetaModel.getMetaPath(sRootBindingPath + "/" + sRelativePath);
221
+ }
222
+ }
223
+ return sMetaPath;
161
224
  }
162
225
  };
163
226
  return ModelHelper;
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(["sap/ui/core/util/PasteHelper", "sap/m/MessageBox"], function(CorePasteHelper, MessageBox) {
@@ -74,6 +74,12 @@ sap.ui.define(["sap/ui/core/util/PasteHelper", "sap/m/MessageBox"], function(Cor
74
74
  };
75
75
 
76
76
  var oPasteHelper = {
77
+ /**
78
+ *
79
+ * @param aRawData
80
+ * @param oTable
81
+ * @returns {Promise<any>}
82
+ */
77
83
  parseDataForTablePaste: function(aRawData, oTable) {
78
84
  return _getColumnInfoForPaste(oTable).then(function(oPasteInfos) {
79
85
  // Check if we have data for at least the first editable column
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(["sap/base/Log"], function(Log) {
6
6
  "use strict";
@@ -9,7 +9,7 @@ sap.ui.define([], function () {
9
9
 
10
10
  /*!
11
11
  * SAPUI5
12
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
12
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
13
13
  */
14
14
 
15
15
  /**
@@ -265,4 +265,4 @@ sap.ui.define([], function () {
265
265
  _exports.prepareId = prepareId;
266
266
  return _exports;
267
267
  }, false);
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0YWJsZUlkSGVscGVyLnRzIl0sIm5hbWVzIjpbImlzVmFsaWQiLCJ2VmFsdWUiLCJ0ZXN0IiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNJZCIsImluZGV4T2YiLCJyZXBsYWNlIiwic2xpY2UiLCJyZW1vdmVOYW1lc3BhY2VzIiwiZ2V0U3RhYmxlSWRQYXJ0RnJvbVZhbHVlIiwib1ZhbHVlIiwiJFBhdGgiLCJwYXRoIiwiJEFwcGx5IiwiJEZ1bmN0aW9uIiwic1BhdGhDb25jYXQiLCJpIiwibGVuZ3RoIiwiZ2VuZXJhdGUiLCJhU3RhYmxlSWRQYXJ0cyIsInNTdGFibGVJZCIsInZFbGVtZW50Iiwic0ZhY2V0SWQiLCJGYWNldCIsIiRUeXBlIiwiSUQiLCJUYXJnZXQiLCIkQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZSIsIkZhY2V0U291cmNlIiwiZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCIsInByZXBhcmVJZCIsImdldFN0YWJsZUlkUGFydEZyb21TZW1hbnRpY09iamVjdEFuZEFjdGlvbiIsIm9EYXRhRmllbGQiLCJzSWRQYXJ0IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJtUGFyYW1ldGVyIiwiVmFsdWUiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwidG9TdHJpbmciLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUZBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBU0EsT0FBVCxDQUFpQkMsTUFBakIsRUFBaUM7QUFDaEMsV0FBTyxnQ0FBZ0NDLElBQWhDLENBQXFDRCxNQUFyQyxDQUFQO0FBQ0E7O0FBRU0sV0FBU0UsbUJBQVQsQ0FBNkJDLEdBQTdCLEVBQTBDO0FBQ2hELFFBQUlBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLEdBQVosS0FBb0IsQ0FBeEIsRUFBMkI7QUFDMUI7QUFDQSxZQUFNRCxHQUFHLEdBQUcsd0NBQVo7QUFDQTs7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QUFQO0FBQ0EsS0FGRCxNQUVPO0FBQ047QUFDQSxZQUFNQSxHQUFHLEdBQUcsc0VBQVo7QUFDQTtBQUNELEdBUk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogJHtjb3B5cmlnaHR9XG4gKi9cblxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWxcIjtcblxuLyoqXG4gKiBTdGFibGUgSWQgaGVscGVyXG4gKi9cblxuLyoqXG4gKiBDb3B5IGZvciB0aGUgQ29yZS5pc1ZhbGlkIGZ1bmN0aW9uIHRvIGJlIGluZGVwZW5kZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2VmFsdWUgU3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdmFsdWUgaXMgdmFsaWQgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWQodlZhbHVlOiBzdHJpbmcpIHtcblx0cmV0dXJuIC9eKFtBLVphLXpfXVstQS1aYS16MC05Xy46XSopJC8udGVzdCh2VmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxDaGFycyhzSWQ6IHN0cmluZykge1xuXHRpZiAoc0lkLmluZGV4T2YoXCIgXCIpID49IDApIHtcblx0XHQvLyBMb2cuZXJyb3Ioc0lkICsgXCIgLSBTcGFjZXMgYXJlIG5vdCBhbGxvd2VkIGluIElEIHBhcnRzLlwiKTtcblx0XHR0aHJvdyBzSWQgKyBcIiAtIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gSUQgcGFydHMuXCI7XG5cdH1cblx0c0lkID0gc0lkXG5cdFx0LnJlcGxhY2UoL15cXC98XkB8XiN8XlxcKi8sIFwiXCIpIC8vIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcblx0XHQucmVwbGFjZSgvXFwvJHxAJHwjJHxcXCokLywgXCJcIikgLy8gcmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycyBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xuXHRcdC5yZXBsYWNlKC9cXC98QHxcXCh8XFwpfCN8XFwqL2csIFwiOjpcIik7IC8vIHJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggOjpcblxuXHQvLyBSZXBsYWNlIGRvdWJsZSBvY2N1cnJlbmNlcyBvZiB0aGUgc2VwYXJhdG9yIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yXG5cdHdoaWxlIChzSWQuaW5kZXhPZihcIjo6OjpcIikgPiAtMSkge1xuXHRcdHNJZCA9IHNJZC5yZXBsYWNlKFwiOjo6OlwiLCBcIjo6XCIpO1xuXHR9XG5cblx0Ly8gSWYgdGhlcmUgaXMgYSA6OiBhdCB0aGUgZW5kIG9mIHRoZSBJRCByZW1vdmUgaXRcblx0aWYgKHNJZC5zbGljZSgtMikgPT0gXCI6OlwiKSB7XG5cdFx0c0lkID0gc0lkLnNsaWNlKDAsIC0yKTtcblx0fVxuXG5cdHJldHVybiBzSWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5hbWVzcGFjZXMoc0lkOiBzdHJpbmcpIHtcblx0c0lkID0gc0lkLnJlcGxhY2UoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5cIiwgXCJcIik7XG5cdHNJZCA9IHNJZC5yZXBsYWNlKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5cIiwgXCJcIik7XG5cdHJldHVybiBzSWQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0YWJsZUlkUGFydEZyb21WYWx1ZShvVmFsdWU6IGFueSkge1xuXHRpZiAoKG9WYWx1ZSAmJiBvVmFsdWUuJFBhdGgpIHx8IG9WYWx1ZS5wYXRoKSB7XG5cdFx0cmV0dXJuIG9WYWx1ZS4kUGF0aCB8fCBvVmFsdWUucGF0aDtcblx0fVxuXG5cdGlmIChvVmFsdWUgJiYgb1ZhbHVlLiRBcHBseSAmJiBvVmFsdWUuJEZ1bmN0aW9uID09PSBcIm9kYXRhLmNvbmNhdFwiKSB7XG5cdFx0bGV0IHNQYXRoQ29uY2F0ID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG9WYWx1ZS4kQXBwbHkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChvVmFsdWUuJEFwcGx5W2ldLiRQYXRoKSB7XG5cdFx0XHRcdGlmIChzUGF0aENvbmNhdCkge1xuXHRcdFx0XHRcdHNQYXRoQ29uY2F0ICs9IFwiOjpcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzUGF0aENvbmNhdCArPSBvVmFsdWUuJEFwcGx5W2ldLiRQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc1BhdGhDb25jYXQ7XG5cdH1cblxuXHRpZiAob1ZhbHVlKSB7XG5cdFx0cmV0dXJuIHJlcGxhY2VTcGVjaWFsQ2hhcnMob1ZhbHVlLnJlcGxhY2UoLyAvZywgXCJfXCIpKTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBTdGFibGUgSWQgYmFzZWQgb24gdGhlIGdpdmVuIHBhcmFtZXRlcnNcbiAqXG4gKiBwYXJhbWV0ZXJzIGFyZSBjb21iaW5lZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIHByb3ZpZGVkIGFuZCBhcmUgc2VwYXJhdGVkIGJ5ICc6OidcbiAqIHNwZWNpYWwgY2hhcmFjdGVycyAoQCwgLywgIykgYXJlIHJlcGxhY2VkIGJ5ICc6OicgaWYgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgU3RhYmxlIElkIGFuZCByZW1vdmVkIGFsbCB0b2dldGhlciBpZiB0aGUgYXJlIHBhcnQgYXQgdGhlIGJlZ2lubmluZyBvciBlbmRcbiAqIEV4YW1wbGU6XG4gKiAvLyBHZXQgQ29uc3RhbnQgU3RhYmxlIElkXG4gKiBnZW5lcmF0ZShbJ1N0YWJsZScsICdJZCddKSB3b3VsZCByZXN1bHQgaW4gJ1N0YWJsZTo6SWQnIGFzIHRoZSBTdGFibGUgSWRcbiAqXG4gKiAvLyBHZXQgUGFyYW1lcnRlcml6ZWQgU3RhYmxlIElkIGZyb20gYSBDb2xsZWN0aW9uIEZhY2V0XG4gKiB2YXIgb1BhcmFtZXRlciA9IHtcbiAqIFx0XHRGYWNldDoge1xuICogXHRcdFx0JFR5cGU6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29sbGVjdGlvbkZhY2V0XCIsXG4gKiBcdFx0XHRMYWJlbDogXCJHZW5lcmFsIEluZm8gRmFjZXQgTGFiZWxcIixcbiAqIFx0XHRcdElEOiAnR2VuZXJhbEluZm9ybWF0aW9uJ1xuICogXHRcdH1cbiAqIH07XG4gKiBnZW5lcmF0ZShbJ3NlY3Rpb24nLCBvUGFyYW1ldGVyXSkgd291bGQgcmVzdWx0IGluICdzZWN0aW9uOjpHZW5lcmFsSW5mb3JtYXRpb24nIGFzIHRoZSBTdGFibGUgSWRcbiAqXG4gKiBvUGFyYW1ldGVyIGlzIGFuZCBvYmplY3Qgb2YgTWV0YWRhdGEgY29udGV4dHMgYXZhaWxhYmxlIHdoaWxlIHRlbXBsYXRpbmcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIFN0YWJsZSBJRHMuXG4gKiBvUGFyYW1ldGVyIG9iamVjdCBrZXlzIGRlZmluZSB0aGUgdHlwZSBvZiBtZXRhZGF0YSBjb250ZXh0LlxuICogRm9yIGV4YW1wbGUsIHRoZSBrZXkgJ0ZhY2V0J2luIHRoZSBhYm92ZSBleGFtcGxlIHRlbGxzIHRoZSBTdGFibGUgSWQgSGVscGVyIHRoYXQgdGhlIGNvbnRleHQgaXMgYSBGYWNldCAoY291bGQgYmUgcmVmZXJlbmNlIG9yIGNvbGxlY3Rpb24gZmFjZXQpXG4gKlxuICogQ3VycmVudGx5IHN1cHBvcnRlZCBtZXRhZGF0YSBjb250ZXh0IGlzIENvbGxlY3Rpb24vUmVmZXJlbmNlIGZhY2V0IGlkZW50aWZpZWQgYnkgJ0ZhY2V0JyBrZXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTwoc3RyaW5nfG9iamVjdCk+fSBhU3RhYmxlSWRQYXJ0cyBBcnJheSBvZiBzdHJpbmdzIGFuZCBvYmplY3RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgSWQgY29uc3RydWN0ZWQgZnJvbSB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGUgPSBmdW5jdGlvbihhU3RhYmxlSWRQYXJ0czogQXJyYXk8c3RyaW5nIHwgb2JqZWN0Pikge1xuXHRsZXQgc1N0YWJsZUlkID0gXCJcIixcblx0XHR2RWxlbWVudDogYW55LFxuXHRcdHNGYWNldElkO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYVN0YWJsZUlkUGFydHMubGVuZ3RoOyBpKyspIHtcblx0XHR2RWxlbWVudCA9IGFTdGFibGVJZFBhcnRzW2ldO1xuXHRcdGlmICghdkVsZW1lbnQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRzU3RhYmxlSWQgKz0gc1N0YWJsZUlkICE9PSBcIlwiID8gXCI6OlwiIDogXCJcIjtcblx0XHRpZiAodkVsZW1lbnRbXCJGYWNldFwiXSAmJiB2RWxlbWVudFtcIkZhY2V0XCJdW1wiJFR5cGVcIl0gJiYgdkVsZW1lbnRbXCJGYWNldFwiXVtcIiRUeXBlXCJdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29sbGVjdGlvbkZhY2V0XCIpIHtcblx0XHRcdHNTdGFibGVJZCArPSB2RWxlbWVudFtcIkZhY2V0XCJdW1wiSURcIl07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdkVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmICh2RWxlbWVudCkge1xuXHRcdFx0XHRzU3RhYmxlSWQgKz0gdkVsZW1lbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdkVsZW1lbnQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIGhhbmRsZSBwYXJhbWV0ZXJzXG5cdFx0XHRpZiAodkVsZW1lbnQgJiYgdkVsZW1lbnQuRmFjZXQpIHtcblx0XHRcdFx0aWYgKHZFbGVtZW50LkZhY2V0LiRUeXBlICYmIHZFbGVtZW50LkZhY2V0LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbGxlY3Rpb25GYWNldFwiKSB7XG5cdFx0XHRcdFx0aWYgKHZFbGVtZW50LkZhY2V0LklEKSB7XG5cdFx0XHRcdFx0XHRzRmFjZXRJZCA9IHZFbGVtZW50LkZhY2V0LklEO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh2RWxlbWVudC5GYWNldC4kVHlwZSAmJiB2RWxlbWVudC5GYWNldC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiKSB7XG5cdFx0XHRcdFx0aWYgKHZFbGVtZW50LkZhY2V0LklEKSB7XG5cdFx0XHRcdFx0XHRzRmFjZXRJZCA9IHZFbGVtZW50LkZhY2V0LklEO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRmFjZXRJZCA9IHZFbGVtZW50LkZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGggfHwgdkVsZW1lbnQuRmFjZXQuVGFyZ2V0LnZhbHVlOyAvLyBDb21wbGlhbnQgd2l0aCBDb252ZXJ0ZXJzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzRmFjZXRJZCkge1xuXHRcdFx0XHRcdHNTdGFibGVJZCArPSBzRmFjZXRJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh2RWxlbWVudCAmJiB2RWxlbWVudC5GYWNldFNvdXJjZSkge1xuXHRcdFx0XHRpZiAodkVsZW1lbnQuRmFjZXRTb3VyY2UgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCIpIHtcblx0XHRcdFx0XHRzU3RhYmxlSWQgKz0gXCJIZWFkZXJGYWNldFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodkVsZW1lbnQgJiYgdkVsZW1lbnRbXCIkVHlwZVwiXSAmJiB2RWxlbWVudFtcIiRUeXBlXCJdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikgPiAtMSkge1xuXHRcdFx0XHRzU3RhYmxlSWQgKz0gZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCh2RWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHNTdGFibGVJZCA9IHByZXBhcmVJZChzU3RhYmxlSWQpO1xuXHRyZXR1cm4gc1N0YWJsZUlkO1xufTtcbmV4cG9ydCBjb25zdCBnZXRTdGFibGVJZFBhcnRGcm9tU2VtYW50aWNPYmplY3RBbmRBY3Rpb24gPSBmdW5jdGlvbihvRGF0YUZpZWxkOiBhbnkpOiBzdHJpbmcge1xuXHRsZXQgc0lkUGFydCA9IFwiXCI7XG5cdGlmICh0eXBlb2Ygb0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0c0lkUGFydCArPSBvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0O1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QuJFBhdGgpIHtcblx0XHRzSWRQYXJ0ICs9IG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QuJFBhdGg7XG5cdH1cblx0aWYgKHR5cGVvZiBvRGF0YUZpZWxkLkFjdGlvbiA9PSBcInN0cmluZ1wiKSB7XG5cdFx0c0lkUGFydCArPSBcIjo6XCIgKyBvRGF0YUZpZWxkLkFjdGlvbjtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLkFjdGlvbiAmJiBvRGF0YUZpZWxkLkFjdGlvbi4kUGF0aCkge1xuXHRcdHNJZFBhcnQgKz0gXCI6OlwiICsgb0RhdGFGaWVsZC5BY3Rpb24uJFBhdGg7XG5cdH1cblx0aWYgKG9EYXRhRmllbGRbXCJSZXF1aXJlc0NvbnRleHRcIl0gJiYgb0RhdGFGaWVsZFtcIlJlcXVpcmVzQ29udGV4dFwiXSA9PSB0cnVlKSB7XG5cdFx0c0lkUGFydCArPSBcIjo6UmVxdWlyZXNDb250ZXh0XCI7XG5cdH1cblx0cmV0dXJuIHNJZFBhcnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCA9IGZ1bmN0aW9uKG9EYXRhRmllbGQ6IGFueSwgbVBhcmFtZXRlcjogeyBjb250ZXh0PzogQ29udGV4dCB9ID0ge30pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgc0lkUGFydCA9IFwiXCI7XG5cblx0aWYgKG9EYXRhRmllbGQuJFR5cGUgJiYgb0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZEZvckFjdGlvbjo6XCI7XG5cdFx0c0lkUGFydCArPSBvRGF0YUZpZWxkLkFjdGlvbjtcblx0XHRyZXR1cm4gcHJlcGFyZUlkKHNJZFBhcnQpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuJFR5cGUgJiYgb0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6XCI7XG5cdFx0c0lkUGFydCArPSBnZXRTdGFibGVJZFBhcnRGcm9tU2VtYW50aWNPYmplY3RBbmRBY3Rpb24ob0RhdGFGaWVsZCk7XG5cdFx0cmV0dXJuIHNJZFBhcnQ7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZC4kVHlwZSAmJiBvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZEZvckFubm90YXRpb246OlwiO1xuXHRcdHNJZFBhcnQgKz0gcHJlcGFyZUlkKG9EYXRhRmllbGQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aCB8fCBvRGF0YUZpZWxkLlRhcmdldC52YWx1ZSk7XG5cdFx0cmV0dXJuIHNJZFBhcnQ7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZC4kVHlwZSAmJiBvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZFdpdGhBY3Rpb246OlwiO1xuXHRcdGlmIChvRGF0YUZpZWxkLlZhbHVlKSB7XG5cdFx0XHRzSWRQYXJ0ICs9IGdldFN0YWJsZUlkUGFydEZyb21WYWx1ZShvRGF0YUZpZWxkLlZhbHVlKSArIFwiOjpcIjtcblx0XHR9XG5cdFx0c0lkUGFydCArPSBvRGF0YUZpZWxkLkFjdGlvbjtcblx0XHRyZXR1cm4gcHJlcGFyZUlkKHNJZFBhcnQpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuJFR5cGUgJiYgb0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZDo6XCI7XG5cdFx0c0lkUGFydCArPSBnZXRTdGFibGVJZFBhcnRGcm9tVmFsdWUob0RhdGFGaWVsZC5WYWx1ZSk7XG5cdFx0cmV0dXJuIHByZXBhcmVJZChzSWRQYXJ0KTtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLiRUeXBlICYmIG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjo6XCI7XG5cdFx0c0lkUGFydCArPSBnZXRTdGFibGVJZFBhcnRGcm9tVmFsdWUob0RhdGFGaWVsZC5WYWx1ZSkgKyBcIjo6XCI7XG5cdFx0c0lkUGFydCArPSBnZXRTdGFibGVJZFBhcnRGcm9tU2VtYW50aWNPYmplY3RBbmRBY3Rpb24ob0RhdGFGaWVsZCk7XG5cdFx0cmV0dXJuIHByZXBhcmVJZChzSWRQYXJ0KTtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLiRUeXBlICYmIG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCIpIHtcblx0XHRzSWRQYXJ0ID0gXCJEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6OlwiO1xuXHRcdHNJZFBhcnQgKz0gZ2V0U3RhYmxlSWRQYXJ0RnJvbVZhbHVlKG9EYXRhRmllbGQuVmFsdWUpO1xuXHRcdGlmIChvRGF0YUZpZWxkLlRhcmdldCAmJiBvRGF0YUZpZWxkLlRhcmdldFtcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCJdKSB7XG5cdFx0XHRzSWRQYXJ0ICs9IFwiOjpcIiArIG9EYXRhRmllbGQuVGFyZ2V0W1wiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIl07XG5cdFx0fVxuXHRcdHJldHVybiBwcmVwYXJlSWQoc0lkUGFydCk7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZC4kVHlwZSAmJiBvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZFdpdGhVcmw6OlwiO1xuXHRcdHNJZFBhcnQgKz0gZ2V0U3RhYmxlSWRQYXJ0RnJvbVZhbHVlKG9EYXRhRmllbGQuVmFsdWUpO1xuXHRcdHJldHVybiBwcmVwYXJlSWQoc0lkUGFydCk7XG5cdH0gZWxzZSBpZiAobVBhcmFtZXRlciAmJiBtUGFyYW1ldGVyLmNvbnRleHQgJiYgbVBhcmFtZXRlci5jb250ZXh0LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpKSB7XG5cdFx0Ly8gdGhlIGNvbnRleHQgaXMgbm90IHJlZmVycmluZyB0byBkYSBkYXRhIGZpZWxkIGJ1dCBkaXJlY3RseSB0byBhIHByb3BlcnR5LCByZXR1cm4gdGhlIHByb3BlcnR5IG5hbWVcblx0XHRyZXR1cm4gcHJlcGFyZUlkKG1QYXJhbWV0ZXIuY29udGV4dC5nZXRPYmplY3QoXCJAc2FwdWkubmFtZVwiKS50b1N0cmluZygpKTtcblx0fSBlbHNlIHtcblx0XHQvLyBJbiBjYXNlIG9mIGEgc3RyaW5nIG9yIHVua25vd24gcHJvcGVydHlcblx0XHQvLyBMb2cuZXJyb3IoXCJTdGFibGUgSUQgSGVscGVyOiBVbmFibGUgdG8gY3JlYXRlIGEgc3RhYmxlIElELiBQbGVhc2UgY2hlY2sgdGhlIGFubm90YXRpb25zLlwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVJZCA9IGZ1bmN0aW9uKHNJZDogc3RyaW5nKSB7XG5cdHNJZCA9IHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVtb3ZlTmFtZXNwYWNlcyhzSWQpKTtcblx0aWYgKGlzVmFsaWQoc0lkKSkge1xuXHRcdHJldHVybiBzSWQ7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTG9nLmVycm9yKHNJZCArIFwiIC0gU3RhYmxlIElkIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgZHVlIHRvIGluc3VmZmljaWVudCBpbmZvcm1hdGlvbi5cIik7XG5cdFx0dGhyb3cgc0lkICsgXCIgLSBTdGFibGUgSWQgY291bGQgbm90IGJlIGdlbmVyYXRlZCBkdWUgdG8gaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uLlwiO1xuXHR9XG59O1xuIl19
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN0YWJsZUlkSGVscGVyLnRzIl0sIm5hbWVzIjpbImlzVmFsaWQiLCJ2VmFsdWUiLCJ0ZXN0IiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNJZCIsImluZGV4T2YiLCJyZXBsYWNlIiwic2xpY2UiLCJyZW1vdmVOYW1lc3BhY2VzIiwiZ2V0U3RhYmxlSWRQYXJ0RnJvbVZhbHVlIiwib1ZhbHVlIiwiJFBhdGgiLCJwYXRoIiwiJEFwcGx5IiwiJEZ1bmN0aW9uIiwic1BhdGhDb25jYXQiLCJpIiwibGVuZ3RoIiwiZ2VuZXJhdGUiLCJhU3RhYmxlSWRQYXJ0cyIsInNTdGFibGVJZCIsInZFbGVtZW50Iiwic0ZhY2V0SWQiLCJGYWNldCIsIiRUeXBlIiwiSUQiLCJUYXJnZXQiLCIkQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZSIsIkZhY2V0U291cmNlIiwiZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCIsInByZXBhcmVJZCIsImdldFN0YWJsZUlkUGFydEZyb21TZW1hbnRpY09iamVjdEFuZEFjdGlvbiIsIm9EYXRhRmllbGQiLCJzSWRQYXJ0IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJtUGFyYW1ldGVyIiwiVmFsdWUiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwidG9TdHJpbmciLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUZBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBU0EsT0FBVCxDQUFpQkMsTUFBakIsRUFBaUM7QUFDaEMsV0FBTyxnQ0FBZ0NDLElBQWhDLENBQXFDRCxNQUFyQyxDQUFQO0FBQ0E7O0FBRU0sV0FBU0UsbUJBQVQsQ0FBNkJDLEdBQTdCLEVBQTBDO0FBQ2hELFFBQUlBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLEdBQVosS0FBb0IsQ0FBeEIsRUFBMkI7QUFDMUI7QUFDQSxZQUFNRCxHQUFHLEdBQUcsd0NBQVo7QUFDQTs7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QUFQO0FBQ0EsS0FGRCxNQUVPO0FBQ047QUFDQSxZQUFNQSxHQUFHLEdBQUcsc0VBQVo7QUFDQTtBQUNELEdBUk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogJHtjb3B5cmlnaHR9XG4gKi9cblxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWxcIjtcblxuLyoqXG4gKiBTdGFibGUgSWQgaGVscGVyXG4gKi9cblxuLyoqXG4gKiBDb3B5IGZvciB0aGUgQ29yZS5pc1ZhbGlkIGZ1bmN0aW9uIHRvIGJlIGluZGVwZW5kZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2VmFsdWUgU3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdmFsdWUgaXMgdmFsaWQgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWQodlZhbHVlOiBzdHJpbmcpIHtcblx0cmV0dXJuIC9eKFtBLVphLXpfXVstQS1aYS16MC05Xy46XSopJC8udGVzdCh2VmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxDaGFycyhzSWQ6IHN0cmluZykge1xuXHRpZiAoc0lkLmluZGV4T2YoXCIgXCIpID49IDApIHtcblx0XHQvLyBMb2cuZXJyb3Ioc0lkICsgXCIgLSBTcGFjZXMgYXJlIG5vdCBhbGxvd2VkIGluIElEIHBhcnRzLlwiKTtcblx0XHR0aHJvdyBzSWQgKyBcIiAtIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gSUQgcGFydHMuXCI7XG5cdH1cblx0c0lkID0gc0lkXG5cdFx0LnJlcGxhY2UoL15cXC98XkB8XiN8XlxcKi8sIFwiXCIpIC8vIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcblx0XHQucmVwbGFjZSgvXFwvJHxAJHwjJHxcXCokLywgXCJcIikgLy8gcmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycyBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xuXHRcdC5yZXBsYWNlKC9cXC98QHxcXCh8XFwpfCN8XFwqL2csIFwiOjpcIik7IC8vIHJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggOjpcblxuXHQvLyBSZXBsYWNlIGRvdWJsZSBvY2N1cnJlbmNlcyBvZiB0aGUgc2VwYXJhdG9yIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yXG5cdHdoaWxlIChzSWQuaW5kZXhPZihcIjo6OjpcIikgPiAtMSkge1xuXHRcdHNJZCA9IHNJZC5yZXBsYWNlKFwiOjo6OlwiLCBcIjo6XCIpO1xuXHR9XG5cblx0Ly8gSWYgdGhlcmUgaXMgYSA6OiBhdCB0aGUgZW5kIG9mIHRoZSBJRCByZW1vdmUgaXRcblx0aWYgKHNJZC5zbGljZSgtMikgPT0gXCI6OlwiKSB7XG5cdFx0c0lkID0gc0lkLnNsaWNlKDAsIC0yKTtcblx0fVxuXG5cdHJldHVybiBzSWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5hbWVzcGFjZXMoc0lkOiBzdHJpbmcpIHtcblx0c0lkID0gc0lkLnJlcGxhY2UoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5cIiwgXCJcIik7XG5cdHNJZCA9IHNJZC5yZXBsYWNlKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5cIiwgXCJcIik7XG5cdHJldHVybiBzSWQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0YWJsZUlkUGFydEZyb21WYWx1ZShvVmFsdWU6IGFueSkge1xuXHRpZiAoKG9WYWx1ZSAmJiBvVmFsdWUuJFBhdGgpIHx8IG9WYWx1ZS5wYXRoKSB7XG5cdFx0cmV0dXJuIG9WYWx1ZS4kUGF0aCB8fCBvVmFsdWUucGF0aDtcblx0fVxuXG5cdGlmIChvVmFsdWUgJiYgb1ZhbHVlLiRBcHBseSAmJiBvVmFsdWUuJEZ1bmN0aW9uID09PSBcIm9kYXRhLmNvbmNhdFwiKSB7XG5cdFx0bGV0IHNQYXRoQ29uY2F0ID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG9WYWx1ZS4kQXBwbHkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChvVmFsdWUuJEFwcGx5W2ldLiRQYXRoKSB7XG5cdFx0XHRcdGlmIChzUGF0aENvbmNhdCkge1xuXHRcdFx0XHRcdHNQYXRoQ29uY2F0ICs9IFwiOjpcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzUGF0aENvbmNhdCArPSBvVmFsdWUuJEFwcGx5W2ldLiRQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc1BhdGhDb25jYXQ7XG5cdH1cblxuXHRpZiAob1ZhbHVlKSB7XG5cdFx0cmV0dXJuIHJlcGxhY2VTcGVjaWFsQ2hhcnMob1ZhbHVlLnJlcGxhY2UoLyAvZywgXCJfXCIpKTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBTdGFibGUgSWQgYmFzZWQgb24gdGhlIGdpdmVuIHBhcmFtZXRlcnNcbiAqXG4gKiBwYXJhbWV0ZXJzIGFyZSBjb21iaW5lZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIHByb3ZpZGVkIGFuZCBhcmUgc2VwYXJhdGVkIGJ5ICc6OidcbiAqIHNwZWNpYWwgY2hhcmFjdGVycyAoQCwgLywgIykgYXJlIHJlcGxhY2VkIGJ5ICc6OicgaWYgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgU3RhYmxlIElkIGFuZCByZW1vdmVkIGFsbCB0b2dldGhlciBpZiB0aGUgYXJlIHBhcnQgYXQgdGhlIGJlZ2lubmluZyBvciBlbmRcbiAqIEV4YW1wbGU6XG4gKiAvLyBHZXQgQ29uc3RhbnQgU3RhYmxlIElkXG4gKiBnZW5lcmF0ZShbJ1N0YWJsZScsICdJZCddKSB3b3VsZCByZXN1bHQgaW4gJ1N0YWJsZTo6SWQnIGFzIHRoZSBTdGFibGUgSWRcbiAqXG4gKiAvLyBHZXQgUGFyYW1lcnRlcml6ZWQgU3RhYmxlIElkIGZyb20gYSBDb2xsZWN0aW9uIEZhY2V0XG4gKiB2YXIgb1BhcmFtZXRlciA9IHtcbiAqIFx0XHRGYWNldDoge1xuICogXHRcdFx0JFR5cGU6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29sbGVjdGlvbkZhY2V0XCIsXG4gKiBcdFx0XHRMYWJlbDogXCJHZW5lcmFsIEluZm8gRmFjZXQgTGFiZWxcIixcbiAqIFx0XHRcdElEOiAnR2VuZXJhbEluZm9ybWF0aW9uJ1xuICogXHRcdH1cbiAqIH07XG4gKiBnZW5lcmF0ZShbJ3NlY3Rpb24nLCBvUGFyYW1ldGVyXSkgd291bGQgcmVzdWx0IGluICdzZWN0aW9uOjpHZW5lcmFsSW5mb3JtYXRpb24nIGFzIHRoZSBTdGFibGUgSWRcbiAqXG4gKiBvUGFyYW1ldGVyIGlzIGFuZCBvYmplY3Qgb2YgTWV0YWRhdGEgY29udGV4dHMgYXZhaWxhYmxlIHdoaWxlIHRlbXBsYXRpbmcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIFN0YWJsZSBJRHMuXG4gKiBvUGFyYW1ldGVyIG9iamVjdCBrZXlzIGRlZmluZSB0aGUgdHlwZSBvZiBtZXRhZGF0YSBjb250ZXh0LlxuICogRm9yIGV4YW1wbGUsIHRoZSBrZXkgJ0ZhY2V0J2luIHRoZSBhYm92ZSBleGFtcGxlIHRlbGxzIHRoZSBTdGFibGUgSWQgSGVscGVyIHRoYXQgdGhlIGNvbnRleHQgaXMgYSBGYWNldCAoY291bGQgYmUgcmVmZXJlbmNlIG9yIGNvbGxlY3Rpb24gZmFjZXQpXG4gKlxuICogQ3VycmVudGx5IHN1cHBvcnRlZCBtZXRhZGF0YSBjb250ZXh0IGlzIENvbGxlY3Rpb24vUmVmZXJlbmNlIGZhY2V0IGlkZW50aWZpZWQgYnkgJ0ZhY2V0JyBrZXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTwoc3RyaW5nfG9iamVjdCk+fSBhU3RhYmxlSWRQYXJ0cyBBcnJheSBvZiBzdHJpbmdzIGFuZCBvYmplY3RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgSWQgY29uc3RydWN0ZWQgZnJvbSB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGUgPSBmdW5jdGlvbihhU3RhYmxlSWRQYXJ0czogQXJyYXk8c3RyaW5nIHwgb2JqZWN0Pikge1xuXHRsZXQgc1N0YWJsZUlkID0gXCJcIixcblx0XHR2RWxlbWVudDogYW55LFxuXHRcdHNGYWNldElkO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYVN0YWJsZUlkUGFydHMubGVuZ3RoOyBpKyspIHtcblx0XHR2RWxlbWVudCA9IGFTdGFibGVJZFBhcnRzW2ldO1xuXHRcdGlmICghdkVsZW1lbnQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRzU3RhYmxlSWQgKz0gc1N0YWJsZUlkICE9PSBcIlwiID8gXCI6OlwiIDogXCJcIjtcblx0XHRpZiAodkVsZW1lbnRbXCJGYWNldFwiXSAmJiB2RWxlbWVudFtcIkZhY2V0XCJdW1wiJFR5cGVcIl0gJiYgdkVsZW1lbnRbXCJGYWNldFwiXVtcIiRUeXBlXCJdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29sbGVjdGlvbkZhY2V0XCIpIHtcblx0XHRcdHNTdGFibGVJZCArPSB2RWxlbWVudFtcIkZhY2V0XCJdW1wiSURcIl07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdkVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmICh2RWxlbWVudCkge1xuXHRcdFx0XHRzU3RhYmxlSWQgKz0gdkVsZW1lbnQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdkVsZW1lbnQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIGhhbmRsZSBwYXJhbWV0ZXJzXG5cdFx0XHRpZiAodkVsZW1lbnQgJiYgdkVsZW1lbnQuRmFjZXQpIHtcblx0XHRcdFx0aWYgKHZFbGVtZW50LkZhY2V0LiRUeXBlICYmIHZFbGVtZW50LkZhY2V0LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbGxlY3Rpb25GYWNldFwiKSB7XG5cdFx0XHRcdFx0aWYgKHZFbGVtZW50LkZhY2V0LklEKSB7XG5cdFx0XHRcdFx0XHRzRmFjZXRJZCA9IHZFbGVtZW50LkZhY2V0LklEO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh2RWxlbWVudC5GYWNldC4kVHlwZSAmJiB2RWxlbWVudC5GYWNldC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiKSB7XG5cdFx0XHRcdFx0aWYgKHZFbGVtZW50LkZhY2V0LklEKSB7XG5cdFx0XHRcdFx0XHRzRmFjZXRJZCA9IHZFbGVtZW50LkZhY2V0LklEO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRmFjZXRJZCA9IHZFbGVtZW50LkZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGggfHwgdkVsZW1lbnQuRmFjZXQuVGFyZ2V0LnZhbHVlOyAvLyBDb21wbGlhbnQgd2l0aCBDb252ZXJ0ZXJzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzRmFjZXRJZCkge1xuXHRcdFx0XHRcdHNTdGFibGVJZCArPSBzRmFjZXRJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh2RWxlbWVudCAmJiB2RWxlbWVudC5GYWNldFNvdXJjZSkge1xuXHRcdFx0XHRpZiAodkVsZW1lbnQuRmFjZXRTb3VyY2UgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCIpIHtcblx0XHRcdFx0XHRzU3RhYmxlSWQgKz0gXCJIZWFkZXJGYWNldFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodkVsZW1lbnQgJiYgdkVsZW1lbnRbXCIkVHlwZVwiXSAmJiB2RWxlbWVudFtcIiRUeXBlXCJdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikgPiAtMSkge1xuXHRcdFx0XHRzU3RhYmxlSWQgKz0gZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCh2RWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHNTdGFibGVJZCA9IHByZXBhcmVJZChzU3RhYmxlSWQpO1xuXHRyZXR1cm4gc1N0YWJsZUlkO1xufTtcbmV4cG9ydCBjb25zdCBnZXRTdGFibGVJZFBhcnRGcm9tU2VtYW50aWNPYmplY3RBbmRBY3Rpb24gPSBmdW5jdGlvbihvRGF0YUZpZWxkOiBhbnkpOiBzdHJpbmcge1xuXHRsZXQgc0lkUGFydCA9IFwiXCI7XG5cdGlmICh0eXBlb2Ygb0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0c0lkUGFydCArPSBvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0O1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QuJFBhdGgpIHtcblx0XHRzSWRQYXJ0ICs9IG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QuJFBhdGg7XG5cdH1cblx0aWYgKHR5cGVvZiBvRGF0YUZpZWxkLkFjdGlvbiA9PSBcInN0cmluZ1wiKSB7XG5cdFx0c0lkUGFydCArPSBcIjo6XCIgKyBvRGF0YUZpZWxkLkFjdGlvbjtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLkFjdGlvbiAmJiBvRGF0YUZpZWxkLkFjdGlvbi4kUGF0aCkge1xuXHRcdHNJZFBhcnQgKz0gXCI6OlwiICsgb0RhdGFGaWVsZC5BY3Rpb24uJFBhdGg7XG5cdH1cblx0aWYgKG9EYXRhRmllbGRbXCJSZXF1aXJlc0NvbnRleHRcIl0gJiYgb0RhdGFGaWVsZFtcIlJlcXVpcmVzQ29udGV4dFwiXSA9PSB0cnVlKSB7XG5cdFx0c0lkUGFydCArPSBcIjo6UmVxdWlyZXNDb250ZXh0XCI7XG5cdH1cblx0cmV0dXJuIHNJZFBhcnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCA9IGZ1bmN0aW9uKG9EYXRhRmllbGQ6IGFueSwgbVBhcmFtZXRlcjogeyBjb250ZXh0PzogQ29udGV4dDxhbnk+IH0gPSB7fSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzSWRQYXJ0ID0gXCJcIjtcblxuXHRpZiAob0RhdGFGaWVsZC4kVHlwZSAmJiBvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkRm9yQWN0aW9uOjpcIjtcblx0XHRzSWRQYXJ0ICs9IG9EYXRhRmllbGQuQWN0aW9uO1xuXHRcdHJldHVybiBwcmVwYXJlSWQoc0lkUGFydCk7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZC4kVHlwZSAmJiBvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjpcIjtcblx0XHRzSWRQYXJ0ICs9IGdldFN0YWJsZUlkUGFydEZyb21TZW1hbnRpY09iamVjdEFuZEFjdGlvbihvRGF0YUZpZWxkKTtcblx0XHRyZXR1cm4gc0lkUGFydDtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLiRUeXBlICYmIG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6XCI7XG5cdFx0c0lkUGFydCArPSBwcmVwYXJlSWQob0RhdGFGaWVsZC5UYXJnZXQuJEFubm90YXRpb25QYXRoIHx8IG9EYXRhRmllbGQuVGFyZ2V0LnZhbHVlKTtcblx0XHRyZXR1cm4gc0lkUGFydDtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLiRUeXBlICYmIG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkV2l0aEFjdGlvbjo6XCI7XG5cdFx0aWYgKG9EYXRhRmllbGQuVmFsdWUpIHtcblx0XHRcdHNJZFBhcnQgKz0gZ2V0U3RhYmxlSWRQYXJ0RnJvbVZhbHVlKG9EYXRhRmllbGQuVmFsdWUpICsgXCI6OlwiO1xuXHRcdH1cblx0XHRzSWRQYXJ0ICs9IG9EYXRhRmllbGQuQWN0aW9uO1xuXHRcdHJldHVybiBwcmVwYXJlSWQoc0lkUGFydCk7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZC4kVHlwZSAmJiBvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkOjpcIjtcblx0XHRzSWRQYXJ0ICs9IGdldFN0YWJsZUlkUGFydEZyb21WYWx1ZShvRGF0YUZpZWxkLlZhbHVlKTtcblx0XHRyZXR1cm4gcHJlcGFyZUlkKHNJZFBhcnQpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuJFR5cGUgJiYgb0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpIHtcblx0XHRzSWRQYXJ0ID0gXCJEYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOjpcIjtcblx0XHRzSWRQYXJ0ICs9IGdldFN0YWJsZUlkUGFydEZyb21WYWx1ZShvRGF0YUZpZWxkLlZhbHVlKSArIFwiOjpcIjtcblx0XHRzSWRQYXJ0ICs9IGdldFN0YWJsZUlkUGFydEZyb21TZW1hbnRpY09iamVjdEFuZEFjdGlvbihvRGF0YUZpZWxkKTtcblx0XHRyZXR1cm4gcHJlcGFyZUlkKHNJZFBhcnQpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuJFR5cGUgJiYgb0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIikge1xuXHRcdHNJZFBhcnQgPSBcIkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDo6XCI7XG5cdFx0c0lkUGFydCArPSBnZXRTdGFibGVJZFBhcnRGcm9tVmFsdWUob0RhdGFGaWVsZC5WYWx1ZSk7XG5cdFx0aWYgKG9EYXRhRmllbGQuVGFyZ2V0ICYmIG9EYXRhRmllbGQuVGFyZ2V0W1wiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIl0pIHtcblx0XHRcdHNJZFBhcnQgKz0gXCI6OlwiICsgb0RhdGFGaWVsZC5UYXJnZXRbXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiXTtcblx0XHR9XG5cdFx0cmV0dXJuIHByZXBhcmVJZChzSWRQYXJ0KTtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkLiRUeXBlICYmIG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiKSB7XG5cdFx0c0lkUGFydCA9IFwiRGF0YUZpZWxkV2l0aFVybDo6XCI7XG5cdFx0c0lkUGFydCArPSBnZXRTdGFibGVJZFBhcnRGcm9tVmFsdWUob0RhdGFGaWVsZC5WYWx1ZSk7XG5cdFx0cmV0dXJuIHByZXBhcmVJZChzSWRQYXJ0KTtcblx0fSBlbHNlIGlmIChtUGFyYW1ldGVyICYmIG1QYXJhbWV0ZXIuY29udGV4dCAmJiBtUGFyYW1ldGVyLmNvbnRleHQuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIikpIHtcblx0XHQvLyB0aGUgY29udGV4dCBpcyBub3QgcmVmZXJyaW5nIHRvIGRhIGRhdGEgZmllbGQgYnV0IGRpcmVjdGx5IHRvIGEgcHJvcGVydHksIHJldHVybiB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdHJldHVybiBwcmVwYXJlSWQobVBhcmFtZXRlci5jb250ZXh0LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpLnRvU3RyaW5nKCkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBzdHJpbmcgb3IgdW5rbm93biBwcm9wZXJ0eVxuXHRcdC8vIExvZy5lcnJvcihcIlN0YWJsZSBJRCBIZWxwZXI6IFVuYWJsZSB0byBjcmVhdGUgYSBzdGFibGUgSUQuIFBsZWFzZSBjaGVjayB0aGUgYW5ub3RhdGlvbnMuXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZUlkID0gZnVuY3Rpb24oc0lkOiBzdHJpbmcpIHtcblx0c0lkID0gcmVwbGFjZVNwZWNpYWxDaGFycyhyZW1vdmVOYW1lc3BhY2VzKHNJZCkpO1xuXHRpZiAoaXNWYWxpZChzSWQpKSB7XG5cdFx0cmV0dXJuIHNJZDtcblx0fSBlbHNlIHtcblx0XHQvLyBMb2cuZXJyb3Ioc0lkICsgXCIgLSBTdGFibGUgSWQgY291bGQgbm90IGJlIGdlbmVyYXRlZCBkdWUgdG8gaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uLlwiKTtcblx0XHR0aHJvdyBzSWQgKyBcIiAtIFN0YWJsZSBJZCBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkIGR1ZSB0byBpbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24uXCI7XG5cdH1cbn07XG4iXX0=
@@ -163,7 +163,7 @@ export const getStableIdPartFromSemanticObjectAndAction = function(oDataField: a
163
163
  return sIdPart;
164
164
  };
165
165
 
166
- export const getStableIdPartFromDataField = function(oDataField: any, mParameter: { context?: Context } = {}): string | undefined {
166
+ export const getStableIdPartFromDataField = function(oDataField: any, mParameter: { context?: Context<any> } = {}): string | undefined {
167
167
  let sIdPart = "";
168
168
 
169
169
  if (oDataField.$Type && oDataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction") {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  /**
@@ -106,7 +106,7 @@ sap.ui.define(
106
106
  interfaces: [],
107
107
  controls: [],
108
108
  elements: [],
109
- version: "1.95.0",
109
+ version: "1.98.0",
110
110
  noLibraryCSS: true,
111
111
  extensions: {
112
112
  //Configuration used for rule loading of Support Assistant
@@ -120,6 +120,32 @@ sap.ui.define(
120
120
  }
121
121
  });
122
122
 
123
+ /**
124
+ * Available values for invocation grouping.
125
+ *
126
+ * @readonly
127
+ * @enum {string}
128
+ * @private
129
+ */
130
+ sap.fe.core.InvocationGrouping = {
131
+ /**
132
+ * Isolated.
133
+ *
134
+ * @constant
135
+ * @type {string}
136
+ * @public
137
+ */
138
+ Isolated: "Isolated",
139
+ /**
140
+ * ChangeSet.
141
+ *
142
+ * @constant
143
+ * @type {string}
144
+ * @public
145
+ */
146
+ ChangeSet: "ChangeSet"
147
+ };
148
+
123
149
  /**
124
150
  * Available values for creation mode.
125
151
  *
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  /**
6
6
  * Adds support rules of the sap.fe.core library to the support infrastructure.
@@ -9,9 +9,10 @@ sap.ui.define(
9
9
  [
10
10
  "./support/AnnotationIssue.support",
11
11
  "./support/CollectionFacetMissingID.support",
12
- "./support/CollectionFacetUnsupportedLevel.support"
12
+ "./support/CollectionFacetUnsupportedLevel.support",
13
+ "./support/InvalidAnnotationColumnKey.support"
13
14
  ],
14
- function(AnnotationIssue, CollectionFacetMissingID, CollectionFacetUnsupportedLevel) {
15
+ function(AnnotationIssue, CollectionFacetMissingID, CollectionFacetUnsupportedLevel, InvalidAnnotationColumnKey) {
15
16
  "use strict";
16
17
 
17
18
  sap.ui.support.SystemPresets.FeV4 = {
@@ -24,7 +25,12 @@ sap.ui.define(
24
25
  return {
25
26
  name: "sap.fe.core",
26
27
  niceName: "SAP.FE V4 - Core library",
27
- ruleset: [AnnotationIssue.getRules(), CollectionFacetMissingID.getRules(), CollectionFacetUnsupportedLevel.getRules()]
28
+ ruleset: [
29
+ AnnotationIssue.getRules(),
30
+ CollectionFacetMissingID.getRules(),
31
+ CollectionFacetUnsupportedLevel.getRules(),
32
+ InvalidAnnotationColumnKey.getRules()
33
+ ]
28
34
  };
29
35
  },
30
36
  true
@@ -0,0 +1,62 @@
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/base/util/ObjectPath"], function (ObjectPath) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+
10
+ function applyChange(manifest, change) {
11
+ var _manifest$sapUi, _manifest$sapUi$routi;
12
+
13
+ var changeContent = change.getContent();
14
+ var pageID = changeContent === null || changeContent === void 0 ? void 0 : changeContent.page;
15
+ var targets = ((_manifest$sapUi = manifest["sap.ui5"]) === null || _manifest$sapUi === void 0 ? void 0 : (_manifest$sapUi$routi = _manifest$sapUi.routing) === null || _manifest$sapUi$routi === void 0 ? void 0 : _manifest$sapUi$routi.targets) || {};
16
+ var pageSettings;
17
+ var propertyChange = changeContent === null || changeContent === void 0 ? void 0 : changeContent.entityPropertyChange; // return unmodified manifest in case change not valid
18
+
19
+ if ((propertyChange === null || propertyChange === void 0 ? void 0 : propertyChange.operation) !== "UPSERT" || !(propertyChange !== null && propertyChange !== void 0 && propertyChange.propertyPath) || !(propertyChange !== null && propertyChange !== void 0 && propertyChange.propertyValue) || propertyChange !== null && propertyChange !== void 0 && propertyChange.propertyPath.startsWith("/")) {
20
+ return manifest;
21
+ }
22
+
23
+ for (var p in targets) {
24
+ if (targets[p].id === pageID) {
25
+ var _targets$p$name;
26
+
27
+ if ((_targets$p$name = targets[p].name) !== null && _targets$p$name !== void 0 && _targets$p$name.startsWith("sap.fe.templates.")) {
28
+ var _targets$p, _targets$p$options;
29
+
30
+ pageSettings = ((_targets$p = targets[p]) === null || _targets$p === void 0 ? void 0 : (_targets$p$options = _targets$p.options) === null || _targets$p$options === void 0 ? void 0 : _targets$p$options.settings) || {};
31
+ break;
32
+ }
33
+ }
34
+ }
35
+
36
+ if (!pageSettings) {
37
+ return manifest;
38
+ }
39
+
40
+ var propertyPath = propertyChange.propertyPath.split("/");
41
+
42
+ if (propertyPath[0] === "controlConfiguration") {
43
+ var annotationPath = ""; // the annotation path in the control configuration has to stay together. For now rely on the fact the @ is in the last part
44
+
45
+ for (var i = 1; i < propertyPath.length; i++) {
46
+ annotationPath += (i > 1 ? "/" : "") + propertyPath[i];
47
+
48
+ if (annotationPath.indexOf("@") > -1) {
49
+ propertyPath = ["controlConfiguration", annotationPath].concat(propertyPath.slice(i + 1));
50
+ break;
51
+ }
52
+ }
53
+ }
54
+
55
+ ObjectPath.set(propertyPath, propertyChange.propertyValue, pageSettings);
56
+ return manifest;
57
+ }
58
+
59
+ _exports.applyChange = applyChange;
60
+ return _exports;
61
+ }, false);
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYW5nZVBhZ2VDb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbImFwcGx5Q2hhbmdlIiwibWFuaWZlc3QiLCJjaGFuZ2UiLCJjaGFuZ2VDb250ZW50IiwiZ2V0Q29udGVudCIsInBhZ2VJRCIsInBhZ2UiLCJ0YXJnZXRzIiwicm91dGluZyIsInBhZ2VTZXR0aW5ncyIsInByb3BlcnR5Q2hhbmdlIiwiZW50aXR5UHJvcGVydHlDaGFuZ2UiLCJvcGVyYXRpb24iLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwic3RhcnRzV2l0aCIsInAiLCJpZCIsIm5hbWUiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJzcGxpdCIsImFubm90YXRpb25QYXRoIiwiaSIsImxlbmd0aCIsImluZGV4T2YiLCJjb25jYXQiLCJzbGljZSIsIk9iamVjdFBhdGgiLCJzZXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQWtCTyxXQUFTQSxXQUFULENBQXFCQyxRQUFyQixFQUFvQ0MsTUFBcEMsRUFBeUQ7QUFBQTs7QUFDL0QsUUFBTUMsYUFBYSxHQUFHRCxNQUFNLENBQUNFLFVBQVAsRUFBdEI7QUFDQSxRQUFNQyxNQUFNLEdBQUdGLGFBQUgsYUFBR0EsYUFBSCx1QkFBR0EsYUFBYSxDQUFFRyxJQUE5QjtBQUNBLFFBQU1DLE9BQU8sR0FBRyxvQkFBQU4sUUFBUSxDQUFDLFNBQUQsQ0FBUiw2RkFBcUJPLE9BQXJCLGdGQUE4QkQsT0FBOUIsS0FBeUMsRUFBekQ7QUFDQSxRQUFJRSxZQUFKO0FBQ0EsUUFBTUMsY0FBYyxHQUFHUCxhQUFILGFBQUdBLGFBQUgsdUJBQUdBLGFBQWEsQ0FBRVEsb0JBQXRDLENBTCtELENBTy9EOztBQUNBLFFBQ0MsQ0FBQUQsY0FBYyxTQUFkLElBQUFBLGNBQWMsV0FBZCxZQUFBQSxjQUFjLENBQUVFLFNBQWhCLE1BQThCLFFBQTlCLElBQ0EsRUFBQ0YsY0FBRCxhQUFDQSxjQUFELGVBQUNBLGNBQWMsQ0FBRUcsWUFBakIsQ0FEQSxJQUVBLEVBQUNILGNBQUQsYUFBQ0EsY0FBRCxlQUFDQSxjQUFjLENBQUVJLGFBQWpCLENBRkEsSUFHQUosY0FIQSxhQUdBQSxjQUhBLGVBR0FBLGNBQWMsQ0FBRUcsWUFBaEIsQ0FBNkJFLFVBQTdCLENBQXdDLEdBQXhDLENBSkQsRUFLRTtBQUNELGFBQU9kLFFBQVA7QUFDQTs7QUFFRCxTQUFLLElBQU1lLENBQVgsSUFBZ0JULE9BQWhCLEVBQXlCO0FBQ3hCLFVBQUlBLE9BQU8sQ0FBQ1MsQ0FBRCxDQUFQLENBQVdDLEVBQVgsS0FBa0JaLE1BQXRCLEVBQThCO0FBQUE7O0FBQzdCLCtCQUFJRSxPQUFPLENBQUNTLENBQUQsQ0FBUCxDQUFXRSxJQUFmLDRDQUFJLGdCQUFpQkgsVUFBakIsQ0FBNEIsbUJBQTVCLENBQUosRUFBc0Q7QUFBQTs7QUFDckROLFVBQUFBLFlBQVksR0FBRyxlQUFBRixPQUFPLENBQUNTLENBQUQsQ0FBUCxnRkFBWUcsT0FBWiwwRUFBcUJDLFFBQXJCLEtBQWlDLEVBQWhEO0FBQ0E7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsUUFBSSxDQUFDWCxZQUFMLEVBQW1CO0FBQ2xCLGFBQU9SLFFBQVA7QUFDQTs7QUFFRCxRQUFJWSxZQUFZLEdBQUdILGNBQWMsQ0FBQ0csWUFBZixDQUE0QlEsS0FBNUIsQ0FBa0MsR0FBbEMsQ0FBbkI7O0FBQ0EsUUFBSVIsWUFBWSxDQUFDLENBQUQsQ0FBWixLQUFvQixzQkFBeEIsRUFBZ0Q7QUFDL0MsVUFBSVMsY0FBYyxHQUFHLEVBQXJCLENBRCtDLENBRS9DOztBQUNBLFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR1YsWUFBWSxDQUFDVyxNQUFqQyxFQUF5Q0QsQ0FBQyxFQUExQyxFQUE4QztBQUM3Q0QsUUFBQUEsY0FBYyxJQUFJLENBQUNDLENBQUMsR0FBRyxDQUFKLEdBQVEsR0FBUixHQUFjLEVBQWYsSUFBcUJWLFlBQVksQ0FBQ1UsQ0FBRCxDQUFuRDs7QUFDQSxZQUFJRCxjQUFjLENBQUNHLE9BQWYsQ0FBdUIsR0FBdkIsSUFBOEIsQ0FBQyxDQUFuQyxFQUFzQztBQUNyQ1osVUFBQUEsWUFBWSxHQUFHLENBQUMsc0JBQUQsRUFBeUJTLGNBQXpCLEVBQXlDSSxNQUF6QyxDQUFnRGIsWUFBWSxDQUFDYyxLQUFiLENBQW1CSixDQUFDLEdBQUcsQ0FBdkIsQ0FBaEQsQ0FBZjtBQUNBO0FBQ0E7QUFDRDtBQUNEOztBQUNESyxJQUFBQSxVQUFVLENBQUNDLEdBQVgsQ0FBZWhCLFlBQWYsRUFBNkJILGNBQWMsQ0FBQ0ksYUFBNUMsRUFBMkRMLFlBQTNEO0FBRUEsV0FBT1IsUUFBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqICR7Y29weXJpZ2h0fVxuICovXG5pbXBvcnQgeyBPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9iYXNlL3V0aWxcIjtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlID0ge1xuXHRnZXRDb250ZW50KCk6IENoYW5nZUNvbnRlbnQ7XG59O1xuXG50eXBlIENoYW5nZUNvbnRlbnQgPSB7XG5cdHBhZ2U6IHN0cmluZzsgLy8gSUQgb2YgdGhlIHBhZ2UgdG8gYmUgY2hhbmdlZFxuXHRlbnRpdHlQcm9wZXJ0eUNoYW5nZTogRW50aXR5UHJvcGVydHlDaGFuZ2U7XG59O1xuXG50eXBlIEVudGl0eVByb3BlcnR5Q2hhbmdlID0ge1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZzsgLy8gcGF0aCB0byB0aGUgcHJvcGVydHkgdG8gYmUgY2hhbmdlZFxuXHRvcGVyYXRpb246IHN0cmluZzsgLy8gb25seSBVUFNFUlQgc3VwcG9ydGVkXG5cdHByb3BlcnR5VmFsdWU6IHN0cmluZyB8IE9iamVjdDsgLy93aGF0IHRvIGJlIGNoYW5nZWRcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNoYW5nZShtYW5pZmVzdDogYW55LCBjaGFuZ2U6IENoYW5nZSk6IGFueSB7XG5cdGNvbnN0IGNoYW5nZUNvbnRlbnQgPSBjaGFuZ2UuZ2V0Q29udGVudCgpO1xuXHRjb25zdCBwYWdlSUQgPSBjaGFuZ2VDb250ZW50Py5wYWdlO1xuXHRjb25zdCB0YXJnZXRzID0gbWFuaWZlc3RbXCJzYXAudWk1XCJdPy5yb3V0aW5nPy50YXJnZXRzIHx8IHt9O1xuXHRsZXQgcGFnZVNldHRpbmdzO1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZSA9IGNoYW5nZUNvbnRlbnQ/LmVudGl0eVByb3BlcnR5Q2hhbmdlO1xuXG5cdC8vIHJldHVybiB1bm1vZGlmaWVkIG1hbmlmZXN0IGluIGNhc2UgY2hhbmdlIG5vdCB2YWxpZFxuXHRpZiAoXG5cdFx0cHJvcGVydHlDaGFuZ2U/Lm9wZXJhdGlvbiAhPT0gXCJVUFNFUlRcIiB8fFxuXHRcdCFwcm9wZXJ0eUNoYW5nZT8ucHJvcGVydHlQYXRoIHx8XG5cdFx0IXByb3BlcnR5Q2hhbmdlPy5wcm9wZXJ0eVZhbHVlIHx8XG5cdFx0cHJvcGVydHlDaGFuZ2U/LnByb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKVxuXHQpIHtcblx0XHRyZXR1cm4gbWFuaWZlc3Q7XG5cdH1cblxuXHRmb3IgKGNvbnN0IHAgaW4gdGFyZ2V0cykge1xuXHRcdGlmICh0YXJnZXRzW3BdLmlkID09PSBwYWdlSUQpIHtcblx0XHRcdGlmICh0YXJnZXRzW3BdLm5hbWU/LnN0YXJ0c1dpdGgoXCJzYXAuZmUudGVtcGxhdGVzLlwiKSkge1xuXHRcdFx0XHRwYWdlU2V0dGluZ3MgPSB0YXJnZXRzW3BdPy5vcHRpb25zPy5zZXR0aW5ncyB8fCB7fTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFwYWdlU2V0dGluZ3MpIHtcblx0XHRyZXR1cm4gbWFuaWZlc3Q7XG5cdH1cblxuXHRsZXQgcHJvcGVydHlQYXRoID0gcHJvcGVydHlDaGFuZ2UucHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0aWYgKHByb3BlcnR5UGF0aFswXSA9PT0gXCJjb250cm9sQ29uZmlndXJhdGlvblwiKSB7XG5cdFx0bGV0IGFubm90YXRpb25QYXRoID0gXCJcIjtcblx0XHQvLyB0aGUgYW5ub3RhdGlvbiBwYXRoIGluIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gaGFzIHRvIHN0YXkgdG9nZXRoZXIuIEZvciBub3cgcmVseSBvbiB0aGUgZmFjdCB0aGUgQCBpcyBpbiB0aGUgbGFzdCBwYXJ0XG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBwcm9wZXJ0eVBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFubm90YXRpb25QYXRoICs9IChpID4gMSA/IFwiL1wiIDogXCJcIikgKyBwcm9wZXJ0eVBhdGhbaV07XG5cdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguaW5kZXhPZihcIkBcIikgPiAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBbXCJjb250cm9sQ29uZmlndXJhdGlvblwiLCBhbm5vdGF0aW9uUGF0aF0uY29uY2F0KHByb3BlcnR5UGF0aC5zbGljZShpICsgMSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0T2JqZWN0UGF0aC5zZXQocHJvcGVydHlQYXRoLCBwcm9wZXJ0eUNoYW5nZS5wcm9wZXJ0eVZhbHVlLCBwYWdlU2V0dGluZ3MpO1xuXG5cdHJldHVybiBtYW5pZmVzdDtcbn1cbiJdfQ==
@@ -0,0 +1,66 @@
1
+ /*!
2
+ * ${copyright}
3
+ */
4
+ import { ObjectPath } from "sap/base/util";
5
+
6
+ export type Change = {
7
+ getContent(): ChangeContent;
8
+ };
9
+
10
+ type ChangeContent = {
11
+ page: string; // ID of the page to be changed
12
+ entityPropertyChange: EntityPropertyChange;
13
+ };
14
+
15
+ type EntityPropertyChange = {
16
+ propertyPath: string; // path to the property to be changed
17
+ operation: string; // only UPSERT supported
18
+ propertyValue: string | Object; //what to be changed
19
+ };
20
+
21
+ export function applyChange(manifest: any, change: Change): any {
22
+ const changeContent = change.getContent();
23
+ const pageID = changeContent?.page;
24
+ const targets = manifest["sap.ui5"]?.routing?.targets || {};
25
+ let pageSettings;
26
+ const propertyChange = changeContent?.entityPropertyChange;
27
+
28
+ // return unmodified manifest in case change not valid
29
+ if (
30
+ propertyChange?.operation !== "UPSERT" ||
31
+ !propertyChange?.propertyPath ||
32
+ !propertyChange?.propertyValue ||
33
+ propertyChange?.propertyPath.startsWith("/")
34
+ ) {
35
+ return manifest;
36
+ }
37
+
38
+ for (const p in targets) {
39
+ if (targets[p].id === pageID) {
40
+ if (targets[p].name?.startsWith("sap.fe.templates.")) {
41
+ pageSettings = targets[p]?.options?.settings || {};
42
+ break;
43
+ }
44
+ }
45
+ }
46
+
47
+ if (!pageSettings) {
48
+ return manifest;
49
+ }
50
+
51
+ let propertyPath = propertyChange.propertyPath.split("/");
52
+ if (propertyPath[0] === "controlConfiguration") {
53
+ let annotationPath = "";
54
+ // the annotation path in the control configuration has to stay together. For now rely on the fact the @ is in the last part
55
+ for (let i = 1; i < propertyPath.length; i++) {
56
+ annotationPath += (i > 1 ? "/" : "") + propertyPath[i];
57
+ if (annotationPath.indexOf("@") > -1) {
58
+ propertyPath = ["controlConfiguration", annotationPath].concat(propertyPath.slice(i + 1));
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ ObjectPath.set(propertyPath, propertyChange.propertyValue, pageSettings);
64
+
65
+ return manifest;
66
+ }
@@ -80,6 +80,9 @@ ST_DRAFT_DATALOSS_DISCARD_DRAFT_BTN=Discard Draft
80
80
  # XBUT,30
81
81
  CANCEL=Cancel
82
82
 
83
+ # XMSG,30
84
+ WARNING=Warning
85
+
83
86
  # YMSG, 100: Used in the message box after pressing the edit button of a locked object.
84
87
  C_DRAFT_OBJECT_PAGE_DRAFT_LOCKED_BY_USER=You can\'t edit this object at the moment \nIt is locked by {0}
85
88
 
@@ -131,12 +134,36 @@ T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_GENERAL=General
131
134
  # XFLD,30: Text for table denominator in the message of the group title in message-popover
132
135
  T_MESSAGE_GROUP_TITLE_TABLE_DENOMINATOR=Table
133
136
 
137
+ # XFLD,10: Text for table Row in the message description in message-popover
138
+ T_MESSAGE_GROUP_DESCRIPTION_TABLE_ROW=Row
139
+
140
+ # XFLD,10: Text for table Column in the message description in message-popover
141
+ T_MESSAGE_GROUP_DESCRIPTION_TABLE_COLUMN=Column
142
+
134
143
  # XFLD,30: Text for prefix for the group name of the message from action in message-popover
135
144
  T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_LAST_ACTION=Last Action
136
145
 
146
+ # XFLD,30: Text to be displayed in the message subtitle of the message popover when an error occurs in the creation row
147
+ T_MESSAGE_ITEM_SUBTITLE_CREATION_ROW_INDICATOR=<New>
148
+
137
149
  # XFLD,30: Text to be displayed when the row/column indicator is not computed in the message subtitle in message-popover
138
150
  T_MESSAGE_ITEM_SUBTITLE_INDICATOR_UNKNOWN=Unknown
139
151
 
152
+ # XFLD: Text to be displayed if the column is not part of table settings
153
+ T_COLUMN_INDICATOR_IN_TABLE_DEFINITION=Hidden
154
+
155
+ # XFLD,20: Text to be displayed in message description based on column availability in case of error
156
+ T_COLUMN_AVAILABLE_DIAGNOSIS_MSGDESC_ERROR=The field causing the error is on the linked page
157
+
158
+ # XFLD,20: Fields Affected Title text
159
+ T_FIELDS_AFFECTED_TITLE=Field Affected
160
+
161
+ # XFLD,20: Diagnosis Title text
162
+ T_DIAGNOSIS_TITLE=Diagnosis
163
+
164
+ # XFLD,20: Text to be displayed in message description based on column availability in case of message types other than error
165
+ T_COLUMN_AVAILABLE_DIAGNOSIS_MSGDESC=The underlying field is on the linked page
166
+
140
167
  # XFLD,50: Text in the message subtitle in message-popover. Parameters: {0}= row indicator, {1}= column indicator.
141
168
  T_MESSAGE_ITEM_SUBTITLE=Row: {0}, Column: {1}
142
169
 
@@ -146,6 +173,20 @@ C_COMMON_SAPFE_ERROR=Error
146
173
  # XTIT, 24: Title of the NavContainer Error Messages Page
147
174
  C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE=Messages
148
175
 
176
+ # XTIT, 24: Title of the 503 Error Messages Page
177
+ C_MESSAGE_HANDLING_SAPFE_503_TITLE=Sorry, this service is temporarily unavailable.
178
+
179
+ # XTIT, 24: Description of the 503 Error Messages Page
180
+ C_MESSAGE_HANDLING_SAPFE_503_DESC=Please try again in a few minutes.
181
+
182
+ C_MESSAGE_HANDLING_SAPFE_503_ERROR = We expect it to be available again on {0}.
183
+
184
+ C_MESSAGE_HANDLING_SAPFE_503_ERROR_DAY = We expect it to be available again at {0}.
185
+
186
+ C_MESSAGE_HANDLING_SAPFE_503_ERROR_NO_RETRY_AFTER = Please try again later.
187
+
188
+ C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX =Source message:
189
+
149
190
  # XTIT, 24: Title text of Error Message Box
150
191
  C_COMMON_SAPFE_ERROR_MESSAGES_PAGE_TITLE_ERROR=Error
151
192
 
@@ -339,6 +380,9 @@ C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=Locked by Another User
339
380
  # XTIT,50: Edit state, filter
340
381
  C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=Unsaved Changes by Another User
341
382
 
383
+ # XTIT,50: Edit state, filter
384
+ C_DRAFT_EDIT_STATE_DRAFT_ALL_HIDING_DRAFTS_FILTER=All (Hiding Drafts)
385
+
342
386
  # XBUT,15: Text for button Share
343
387
  T_COMMON_SAPFE_ACTION_SHARE=Share
344
388
 
@@ -421,11 +465,31 @@ C_KPI_TOOLTIP_AMOUNT_MULTIUNIT=(Multiple units/currencies)
421
465
 
422
466
  #------------KPI card templates-----------------------
423
467
 
424
- #XMSG: Name of the first side indicator in a KPI Card
468
+ #XMSG: Name of the first side indicator in a KPI card
425
469
  C_KPICARD_INDICATOR_TARGET=Target
426
470
 
427
- #XMSG: Name of the second side indicator in a KPI Card
471
+ #XMSG: Name of the second side indicator in a KPI card
428
472
  C_KPICARD_INDICATOR_DEVIATION=Deviation
429
473
 
430
474
  #XMSG: Filter description
431
- C_KPICARD_FILTERSTRING_NOT=not {0}
475
+ C_KPICARD_FILTERSTRING_NOT=not {0}
476
+
477
+ #XMSG: List of measures or dimensions
478
+ C_KPICARD_ITEMSLIST={0} and {1}
479
+
480
+ XMSG: Title of the chart in the KPI card : <measures> by <dimensions>
481
+ C_KPICARD_CHARTTITLE={0} by {1}
482
+
483
+ #------------Mass Edit texts-----------------------
484
+
485
+ # XTIT,50: Title of the mass edit dialog
486
+ C_MASS_EDIT_DIALOG_TITLE=Mass Edit ({0})
487
+
488
+ # XBUT,30: Text for the save button in the mass edit dialog
489
+ C_MASS_EDIT_SAVE_BUTTON_TEXT=Save
490
+
491
+ # XBUT,30: Text for the apply button in the mass edit dialog
492
+ C_MASS_EDIT_APPLY_BUTTON_TEXT=Apply
493
+
494
+ # XBUT,30: Text for the cancel button in the mass edit dialog
495
+ C_MASS_EDIT_CANCEL_BUTTON_TEXT=Cancel