@sapui5/sap.fe.test 1.127.2 → 1.129.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 (74) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/test/.library +1 -1
  3. package/src/sap/fe/test/AppStateAdapter.js +1 -1
  4. package/src/sap/fe/test/BaseActions.js +0 -7
  5. package/src/sap/fe/test/BaseArrangements.js +0 -7
  6. package/src/sap/fe/test/BaseAssertions.js +0 -5
  7. package/src/sap/fe/test/CollaborationClient.js +1 -1
  8. package/src/sap/fe/test/FeMocks.js +1 -1
  9. package/src/sap/fe/test/Flexibility.js +2 -7
  10. package/src/sap/fe/test/JestFlexibilityHelper.js +1 -1
  11. package/src/sap/fe/test/JestTemplatingHelper.js +3 -12
  12. package/src/sap/fe/test/JestTemplatingHelper.tsx +2 -10
  13. package/src/sap/fe/test/JourneyRunner.js +0 -9
  14. package/src/sap/fe/test/ListReport.js +0 -14
  15. package/src/sap/fe/test/ObjectPage.js +144 -60
  16. package/src/sap/fe/test/Shell.js +0 -7
  17. package/src/sap/fe/test/TemplatePage.js +0 -17
  18. package/src/sap/fe/test/TemplatingTestUtils.js +0 -1
  19. package/src/sap/fe/test/UI5MockHelper.js +9 -18
  20. package/src/sap/fe/test/UI5MockHelper.ts +5 -16
  21. package/src/sap/fe/test/api/BaseAPI.js +0 -15
  22. package/src/sap/fe/test/api/ChartActions.js +0 -2
  23. package/src/sap/fe/test/api/ChartAssertions.js +0 -1
  24. package/src/sap/fe/test/api/CollaborationAPI.js +2 -10
  25. package/src/sap/fe/test/api/CollaborationAPI.ts +2 -9
  26. package/src/sap/fe/test/api/DialogAPI.js +0 -2
  27. package/src/sap/fe/test/api/DialogActions.js +0 -7
  28. package/src/sap/fe/test/api/DialogAssertions.js +0 -6
  29. package/src/sap/fe/test/api/DialogCreateActions.js +0 -2
  30. package/src/sap/fe/test/api/DialogCreateAssertions.js +0 -2
  31. package/src/sap/fe/test/api/DialogHelper.js +0 -1
  32. package/src/sap/fe/test/api/DialogMassEditActions.js +0 -4
  33. package/src/sap/fe/test/api/DialogMassEditAssertions.js +0 -5
  34. package/src/sap/fe/test/api/DialogMessageActions.js +0 -4
  35. package/src/sap/fe/test/api/DialogMessageAssertions.js +0 -4
  36. package/src/sap/fe/test/api/DialogType.js +0 -8
  37. package/src/sap/fe/test/api/DialogValueHelpActions.js +0 -12
  38. package/src/sap/fe/test/api/DialogValueHelpAssertions.js +0 -9
  39. package/src/sap/fe/test/api/EditState.js +0 -7
  40. package/src/sap/fe/test/api/FilterBarAPI.js +0 -6
  41. package/src/sap/fe/test/api/FilterBarActions.js +0 -12
  42. package/src/sap/fe/test/api/FilterBarAssertions.js +0 -10
  43. package/src/sap/fe/test/api/FooterAPI.js +0 -1
  44. package/src/sap/fe/test/api/FooterActionsBase.js +0 -2
  45. package/src/sap/fe/test/api/FooterActionsOP.js +0 -5
  46. package/src/sap/fe/test/api/FooterAssertionsBase.js +0 -3
  47. package/src/sap/fe/test/api/FooterAssertionsOP.js +0 -6
  48. package/src/sap/fe/test/api/FormAPI.js +0 -2
  49. package/src/sap/fe/test/api/FormActions.js +0 -8
  50. package/src/sap/fe/test/api/FormAssertions.js +0 -7
  51. package/src/sap/fe/test/api/HeaderAPI.js +0 -8
  52. package/src/sap/fe/test/api/HeaderActions.js +0 -14
  53. package/src/sap/fe/test/api/HeaderActionsLR.js +0 -4
  54. package/src/sap/fe/test/api/HeaderAssertions.js +0 -21
  55. package/src/sap/fe/test/api/HeaderAssertionsLR.js +0 -4
  56. package/src/sap/fe/test/api/HeaderLR.js +0 -2
  57. package/src/sap/fe/test/api/KPICardAPI.js +0 -1
  58. package/src/sap/fe/test/api/KPICardActions.js +0 -2
  59. package/src/sap/fe/test/api/KPICardAssertions.js +0 -8
  60. package/src/sap/fe/test/api/TableAPI.js +1 -14
  61. package/src/sap/fe/test/api/TableActions.js +0 -36
  62. package/src/sap/fe/test/api/TableAssertions.js +0 -28
  63. package/src/sap/fe/test/builder/FEBuilder.js +0 -5
  64. package/src/sap/fe/test/builder/KPIBuilder.js +0 -6
  65. package/src/sap/fe/test/builder/MacroFieldBuilder.js +0 -1
  66. package/src/sap/fe/test/builder/MdcFieldBuilder.js +0 -6
  67. package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +0 -2
  68. package/src/sap/fe/test/builder/MdcTableBuilder.js +2 -5
  69. package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +12 -8
  70. package/src/sap/fe/test/builder/VMBuilder.js +0 -6
  71. package/src/sap/fe/test/internal/ConsoleErrorChecker.js +1 -1
  72. package/src/sap/fe/test/internal/FEArrangements.js +0 -1
  73. package/src/sap/fe/test/library.js +2 -3
  74. package/src/sap/fe/test/library.ts +0 -1
@@ -6,6 +6,7 @@ import ResourceModel from "sap/fe/core/ResourceModel";
6
6
  import CollaborativeDraft from "sap/fe/core/controllerextensions/CollaborativeDraft";
7
7
  import EditFlow from "sap/fe/core/controllerextensions/EditFlow";
8
8
  import InternalRouting from "sap/fe/core/controllerextensions/InternalRouting";
9
+ import MessageHandler from "sap/fe/core/controllerextensions/MessageHandler";
9
10
  import Recommendations from "sap/fe/core/controllerextensions/Recommendations";
10
11
  import Share from "sap/fe/core/controllerextensions/Share";
11
12
  import SideEffects from "sap/fe/core/controllerextensions/SideEffects";
@@ -32,7 +33,6 @@ export type MockContext = WithMock<Context> & {
32
33
  };
33
34
  /**
34
35
  * Factory function to create a new MockContext.
35
- *
36
36
  * @param oContextData A map of the different properties of the context. The value for the key '$path' will be returned by the 'getPath' method
37
37
  * @param oBinding The binding of the context
38
38
  * @param isInactive Is the context iniactive or not
@@ -70,7 +70,7 @@ export function createMockContext(oContextData?: any, oBinding?: any, isInactive
70
70
  mocked.mock.getObject.mockImplementation((path: string) => {
71
71
  let result = path ? mocked._contextData[path] : mocked._contextData;
72
72
 
73
- if (!result && path && path.indexOf("/") > -1) {
73
+ if (!result && path && path.includes("/")) {
74
74
  const parts = path.split("/");
75
75
  result = parts.reduce((sum, part: any) => {
76
76
  sum = part ? sum[part] : sum;
@@ -105,8 +105,8 @@ export type MockEvent = WithMock<Event> & {
105
105
  };
106
106
  /**
107
107
  * Factory function to create a new MockEvent.
108
- *
109
108
  * @param params The parameters of the event
109
+ * @param source
110
110
  * @returns A new MockEvent
111
111
  */
112
112
  export function createMockEvent(params?: { [key: string]: unknown }, source?: EventProvider): MockEvent {
@@ -144,7 +144,6 @@ export type MockListBinding = WithMock<ODataListBinding> & {
144
144
  };
145
145
  /**
146
146
  * Factory function to create a new MockListBinding.
147
- *
148
147
  * @param aContextData An array of objects holding the different properties of the contexts referenced by the ListBinding
149
148
  * @param oMockModel The model of the ListBinding
150
149
  * @returns A new MockListBinding
@@ -200,7 +199,6 @@ export type MockPropertyBinding = WithMock<ODataPropertyBinding> & {
200
199
  };
201
200
  /**
202
201
  * Factory function to create a new MockPropertyBinding.
203
- *
204
202
  * @param value The value returnd by the PropertyBinding
205
203
  * @param path The path of the PropertyBinding
206
204
  * @param oMockModel The model of the PropertyBinding
@@ -241,7 +239,6 @@ export type MockCompositeBinding = WithMock<CompositeBinding> & {
241
239
  };
242
240
  /**
243
241
  * Factory function to create a new MockCompositeBinding.
244
- *
245
242
  * @param aBindings The bindings of the CompositeBinding
246
243
  * @returns A new MockCompositeBinding
247
244
  */
@@ -286,7 +283,6 @@ export type MockContextBinding = WithMock<ODataContextBinding> & {
286
283
  };
287
284
  /**
288
285
  * Factory function to create a new MockContextBinding.
289
- *
290
286
  * @param oContext The context of the ContextBinding
291
287
  * @param oMockModel The model of the ContextBinding
292
288
  * @returns A new MockContextBinding
@@ -331,7 +327,6 @@ export type MockMetaModel = WithMock<ODataMetaModel> & {
331
327
  };
332
328
  /**
333
329
  * Factory function to create a new MockMetaModel.
334
- *
335
330
  * @param oMetaData A map of the different metadata properties of the MetaModel (path -> value).
336
331
  * @returns A new MockMetaModel
337
332
  */
@@ -381,7 +376,6 @@ export type MockModel = WithMock<ODataModel> & {
381
376
  };
382
377
  /**
383
378
  * Factory function to create a new MockModel.
384
- *
385
379
  * @param oMockListBinding A list binding that will be returned when calling bindList.
386
380
  * @param oMockContextBinding A context binding that will be returned when calling bindContext.
387
381
  * @returns A new MockModel
@@ -426,7 +420,6 @@ export const MockModel: new (oMockListBinding?: MockListBinding, oMockContextBin
426
420
  createMockModel as any;
427
421
  /**
428
422
  * Factory function to create a new MockModel used with a listBinding.
429
- *
430
423
  * @param oMockListBinding A list binding that will be returned when calling bindList.
431
424
  * @returns A new MockModel
432
425
  */
@@ -435,7 +428,6 @@ export function createMockModelFromListBinding(oMockListBinding: MockListBinding
435
428
  }
436
429
  /**
437
430
  * Factory function to create a new MockModel used with a contextBinding.
438
- *
439
431
  * @param oMockContextBinding A context binding that will be returned when calling bindContext.
440
432
  * @returns A new MockModel
441
433
  */
@@ -449,7 +441,6 @@ export function createMockModelFromContextBinding(oMockContextBinding: MockConte
449
441
  export type MockView = WithMock<FEView>;
450
442
  /**
451
443
  * Factory function to create a new MockView.
452
- *
453
444
  * @returns A new MockView
454
445
  */
455
446
  export function createMockView(): MockView {
@@ -477,11 +468,11 @@ export type MockController = WithMock<Controller> & {
477
468
  share: WithMock<Share>;
478
469
  recommendations: WithMock<Recommendations>;
479
470
  collaborativeDraft: WithMock<CollaborativeDraft>;
471
+ messageHandler: WithMock<MessageHandler>;
480
472
  getAppComponent: () => WithMock<AppComponent>;
481
473
  };
482
474
  /**
483
475
  * Factory function to create a new MockController.
484
- *
485
476
  * @returns A new MockController
486
477
  */
487
478
  export function createMockController(): MockController {
@@ -492,6 +483,7 @@ export function createMockController(): MockController {
492
483
  mocked.share = mock(Share);
493
484
  mocked.collaborativeDraft = mock(CollaborativeDraft);
494
485
  mocked.recommendations = mock(Recommendations);
486
+ mocked.messageHandler = mock(MessageHandler);
495
487
  mocked.getAppComponent = jest.fn().mockReturnValue(mock(AppComponent));
496
488
  // Default Behavior
497
489
  mocked.mock.getView.mockReturnValue(createMockView());
@@ -511,7 +503,6 @@ export interface MVCMock {
511
503
  }
512
504
  /**
513
505
  * Generate model, view and controller mocks that refer to each other.
514
- *
515
506
  * @param existing Optional existing mocked instances that should be used
516
507
  * @returns Mocked model, view and controller instances
517
508
  */
@@ -529,7 +520,6 @@ export function mockMVC(existing?: Partial<MVCMock>): MVCMock {
529
520
 
530
521
  /**
531
522
  * To be used to load messages bundles for tests without app/page component.
532
- *
533
523
  * @param textID ID of the Text
534
524
  * @param parameters Array of parameters that are used to create the text
535
525
  * @param metaPath Entity set name or action name to overload a text
@@ -550,7 +540,6 @@ export function getText(textID: string, parameters?: any[], metaPath?: string) {
550
540
  export type MockResourceModel = WithMock<ResourceModel>;
551
541
  /**
552
542
  * Factory function to create a new MockView.
553
- *
554
543
  * @returns A new MockView
555
544
  */
556
545
  export function createMockResourceModel(): MockResourceModel {
@@ -11,7 +11,6 @@ sap.ui.define(
11
11
 
12
12
  /**
13
13
  * A table identifier
14
- *
15
14
  * @typedef {object} TableIdentifier
16
15
  * @property {string} property The name of the navigation property used for the table
17
16
  * @property {string} [qualifier] The name of a qualifier for the table
@@ -21,7 +20,6 @@ sap.ui.define(
21
20
 
22
21
  /**
23
22
  * A dialog identifier
24
- *
25
23
  * @typedef {object} DialogIdentifier
26
24
  * @property {sap.fe.test.api.DialogType} type The type of the dialog
27
25
  * @name sap.fe.test.api.DialogIdentifier
@@ -30,7 +28,6 @@ sap.ui.define(
30
28
 
31
29
  /**
32
30
  * An action identifier
33
- *
34
31
  * @typedef {object} ActionIdentifier
35
32
  * @property {string} service The name of the service
36
33
  * @property {string} action The name of the action
@@ -41,7 +38,6 @@ sap.ui.define(
41
38
 
42
39
  /**
43
40
  * A field identifier
44
- *
45
41
  * @typedef {object} FieldIdentifier
46
42
  * @property {string} [fieldGroup] The name of the field group containing the field
47
43
  * @property {string} property The name of the field
@@ -52,7 +48,6 @@ sap.ui.define(
52
48
 
53
49
  /**
54
50
  * A section identifier
55
- *
56
51
  * @typedef {object} SectionIdentifier
57
52
  * @property {string} section The name of the section facet
58
53
  * @property {string} [subSection] The name of the sub-section facet
@@ -62,7 +57,6 @@ sap.ui.define(
62
57
 
63
58
  /**
64
59
  * An action parameter dialog field identifier
65
- *
66
60
  * @typedef {object} ActionDialogFieldIdentifier
67
61
  * @property {string} property The name of the field
68
62
  * @name sap.fe.test.api.ActionDialogFieldIdentifier
@@ -71,7 +65,6 @@ sap.ui.define(
71
65
 
72
66
  /**
73
67
  * An dialog field identifier
74
- *
75
68
  * @typedef {object} DialogFieldIdentifier
76
69
  * @property {string} property The name of the field
77
70
  * In case of an action parameter dialog, this is the fieldname only
@@ -92,7 +85,6 @@ sap.ui.define(
92
85
 
93
86
  /**
94
87
  * A view identifier
95
- *
96
88
  * @typedef {object} ViewIdentifier
97
89
  * @property {string} key The name of the view as defined in the manifest file
98
90
  * @name sap.fe.test.api.ViewIdentifier
@@ -117,7 +109,6 @@ sap.ui.define(
117
109
  /**
118
110
  * Defines whether the current API is meant for actions (<code>true</code>) or assertions (<code>false</code>).
119
111
  * It is used to enable parent chaining via <code>and.when</code> or <code>and.then</code>.
120
- *
121
112
  * @type {boolean}
122
113
  * @public
123
114
  * @ui5-restricted
@@ -126,7 +117,6 @@ sap.ui.define(
126
117
 
127
118
  /**
128
119
  * Gets a new builder instance based on the given one.
129
- *
130
120
  * @returns {sap.ui.test.OpaBuilder} An OpaBuilder instance
131
121
  * @public
132
122
  * @ui5-restricted
@@ -137,7 +127,6 @@ sap.ui.define(
137
127
 
138
128
  /**
139
129
  * Gets the underlying Opa5 instance.
140
- *
141
130
  * @returns {sap.ui.test.Opa5} An Opa instance
142
131
  * @public
143
132
  * @ui5-restricted
@@ -161,7 +150,6 @@ sap.ui.define(
161
150
 
162
151
  /**
163
152
  * Creates a matcher for actions.
164
- *
165
153
  * @param {sap.fe.api.ActionIdentifier | string} vActionIdentifier Identifier to be used for the matcher.
166
154
  * @returns {object} A matcher
167
155
  * @private
@@ -189,7 +177,6 @@ sap.ui.define(
189
177
 
190
178
  /**
191
179
  * Creates a matcher for fields.
192
- *
193
180
  * @param {sap.fe.test.api.FieldIdentifier | string} vFieldIdentifier Identifier to be used for the matcher
194
181
  * @returns {object} A matcher
195
182
  * @private
@@ -230,7 +217,6 @@ sap.ui.define(
230
217
 
231
218
  /**
232
219
  * Creates a matcher for FormElements (sap.ui.layout.form.FormElement).
233
- *
234
220
  * @param {sap.fe.test.api.FieldIdentifier | string} vFormElementIdentifier Identifier of the field to be used for the matcher
235
221
  * @param {string} sDataFieldType Added as prefix for the id. Can be values like 'DataField',
236
222
  * 'DataFieldWithUrl', 'DataFieldWithNavigationPath', etc.
@@ -259,7 +245,6 @@ sap.ui.define(
259
245
 
260
246
  /**
261
247
  * Create a matcher for FieldGroups (sap.ui.layout.form.FormContainer).
262
- *
263
248
  * @param {object | string} vFieldGroupIdentifier Identifier of the field-group to be used for the matcher.
264
249
  * if passed as an object, the following pattern will be considered:
265
250
  * <code><pre>
@@ -13,7 +13,6 @@ sap.ui.define(
13
13
  * Constructs a new ChartActions instance.
14
14
  *
15
15
  * TODO this API does not fit the criteria for public API and needs some rework. Not considered critical for apps though.
16
- *
17
16
  * @param {sap.fe.test.builder.FEBuilder} oBuilderInstance The {@link sap.fe.test.builder.FEBuilder} instance used to interact with the UI
18
17
  * @param {string} [vChartDescription] Description (optional) of the chart to be used for logging messages
19
18
  * @returns {sap.fe.test.api.ChartActions} The new instance
@@ -29,7 +28,6 @@ sap.ui.define(
29
28
 
30
29
  /**
31
30
  * Selects the specified rows.
32
- *
33
31
  * @param {object} [mRowValues] a map of columns (either name or index) to its value, e.g. <code>{ 0: "Max", "Last Name": "Mustermann" }</code>
34
32
  * @param {object} [mRowState] a map of states. Supported row states are
35
33
  * <code><pre>
@@ -14,7 +14,6 @@ sap.ui.define(
14
14
  * Constructs a new ChartAssertions instance.
15
15
  *
16
16
  * TODO this API does not fit the criteria for public API and needs some rework. Not considered critical for apps though.
17
- *
18
17
  * @param {sap.fe.test.builder.FEBuilder} oBuilderInstance The {@link sap.fe.test.builder.FEBuilder} instance used to interact with the UI
19
18
  * @param {string} [vChartDescription] Description (optional) of the chart to be used for logging messages
20
19
  * @returns {sap.fe.test.api.ChartAssertions} The new instance
@@ -18,7 +18,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
18
18
  _receivedLocks: [],
19
19
  /**
20
20
  * Open an existing collaborative draft with a new user, and creates a 'ghost client' for this user.
21
- *
22
21
  * @param oContext The context of the collaborative draft
23
22
  * @param userID The ID of the user
24
23
  * @param userName The name of the user
@@ -46,7 +45,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
46
45
  },
47
46
  /**
48
47
  * Checks if the ghost client has received a given message.
49
- *
50
48
  * @param message The message content to be looked for
51
49
  * @param resetHistory If true, reset history of received messages
52
50
  * @returns True if a previously received message matches the content
@@ -62,7 +60,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
62
60
  if (resetHistory) {
63
61
  this._lastReceivedMessages = []; // by default, reset history to avoid finding the same message twice
64
62
  }
65
-
66
63
  return found;
67
64
  },
68
65
  /**
@@ -77,7 +74,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
77
74
  },
78
75
  /**
79
76
  * Simulates that the user starts typing in an input (live change).
80
- *
81
77
  * @param sPropertyPath The path of the property being modified
82
78
  */
83
79
  lockField: function (sPropertyPath) {
@@ -92,7 +88,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
92
88
  },
93
89
  /**
94
90
  * Simulates that the user has modified a property.
95
- *
96
91
  * @param sPropertyPath The path of the property being modified
97
92
  * @param value The new value of the property being modified
98
93
  */
@@ -147,7 +142,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
147
142
  },
148
143
  /**
149
144
  * Simulates that the user has deleted an object (child of draft root).
150
- *
151
145
  * @param objectPath The path of the object to delete
152
146
  */
153
147
  deleteObject: function (objectPath) {
@@ -163,7 +157,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
163
157
  },
164
158
  /**
165
159
  * Checks if a property has been locked by another user.
166
- *
167
160
  * @param objectPath
168
161
  * @returns True if locked
169
162
  */
@@ -185,8 +178,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
185
178
  },
186
179
  /**
187
180
  * Callback of the ghost client when receiving a message on the web socket.
188
- *
189
- * @param oMessage The message
181
+ * @param message
190
182
  */
191
183
  _onMessageReceived: function (message) {
192
184
  message.userAction = message.userAction || message.clientAction;
@@ -214,4 +206,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/MessageHandler"
214
206
  };
215
207
  return CollaborationAPI;
216
208
  }, false);
217
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uQVBJIiwiX2xhc3RSZWNlaXZlZE1lc3NhZ2VzIiwiX3Jvb3RQYXRoIiwiX29Nb2RlbCIsInVuZGVmaW5lZCIsIl9sb2NrZWRQcm9wZXJ0eVBhdGgiLCJfaW50ZXJuYWxNb2RlbCIsIl9yZWNlaXZlZExvY2tzIiwiZW50ZXJEcmFmdCIsIm9Db250ZXh0IiwidXNlcklEIiwidXNlck5hbWUiLCJ3ZWJTb2NrZXRCYXNlVVJMIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJMb2ciLCJlcnJvciIsInNEcmFmdFVVSUQiLCJnZXRQcm9wZXJ0eSIsIkpTT05Nb2RlbCIsIm1vZGVsIiwiaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24iLCJpZCIsIm5hbWUiLCJpbml0aWFsTmFtZSIsIl9vbk1lc3NhZ2VSZWNlaXZlZCIsImJpbmQiLCJnZXRQYXRoIiwiY2hlY2tSZWNlaXZlZCIsIm1lc3NhZ2UiLCJyZXNldEhpc3RvcnkiLCJsZW5ndGgiLCJmb3VuZCIsInNvbWUiLCJyZWNlaXZlZE1lc3NhZ2UiLCJ1c2VyQWN0aW9uIiwiY2xpZW50Q29udGVudCIsImxlYXZlRHJhZnQiLCJlbmRDb2xsYWJvcmF0aW9uIiwiZGVzdHJveSIsImxvY2tGaWVsZCIsInNQcm9wZXJ0eVBhdGgiLCJ1bmxvY2tGaWVsZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwiQWN0aXZpdHkiLCJMb2NrIiwidXBkYXRlUHJvcGVydHlWYWx1ZSIsInZhbHVlIiwib0NvbnRleHRCaW5kaW5nIiwiYmluZENvbnRleHQiLCIkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwib1Byb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RWYWx1ZSIsInRoZW4iLCJzZXRWYWx1ZSIsImF0dGFjaEV2ZW50T25jZSIsIkNoYW5nZSIsImNhdGNoIiwiZXJyIiwiVW5sb2NrIiwiZGlzY2FyZERyYWZ0IiwiZHJhZnRDb250ZXh0IiwiX2dldERyYWZ0Q29udGV4dCIsInJlcXVlc3RQcm9wZXJ0eSIsImRyYWZ0IiwiZGVsZXRlRHJhZnQiLCJNZXNzYWdlSGFuZGxlciIsIkRpc2NhcmQiLCJyZXBsYWNlIiwiZGVsZXRlT2JqZWN0Iiwib2JqZWN0UGF0aCIsIm9iamVjdENvbnRleHQiLCJfZ2V0T2JqZWN0Q29udGV4dCIsImRlbGV0ZSIsIkRlbGV0ZSIsImNoZWNrTG9ja2VkQnlPdGhlciIsImluY2x1ZGVzIiwicGF0aCIsImNsaWVudEFjdGlvbiIsInB1c2giLCJKb2luIiwiSm9pbkVjaG8iLCJzcGxpdCIsImZpbHRlciIsImxvY2siXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHtcblx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UsXG5cdGVuZENvbGxhYm9yYXRpb24sXG5cdGluaXRpYWxpemVDb2xsYWJvcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuY29uc3QgQ29sbGFib3JhdGlvbkFQSSA9IHtcblx0X2xhc3RSZWNlaXZlZE1lc3NhZ2VzOiBbXSBhcyBNZXNzYWdlW10sXG5cdF9yb290UGF0aDogXCJcIixcblx0X29Nb2RlbDogdW5kZWZpbmVkIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQsXG5cdF9sb2NrZWRQcm9wZXJ0eVBhdGg6IFwiXCIsXG5cdF9pbnRlcm5hbE1vZGVsOiB1bmRlZmluZWQgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkLFxuXHRfcmVjZWl2ZWRMb2NrczogW10gYXMgc3RyaW5nW10sXG5cblx0LyoqXG5cdCAqIE9wZW4gYW4gZXhpc3RpbmcgY29sbGFib3JhdGl2ZSBkcmFmdCB3aXRoIGEgbmV3IHVzZXIsIGFuZCBjcmVhdGVzIGEgJ2dob3N0IGNsaWVudCcgZm9yIHRoaXMgdXNlci5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0XG5cdCAqIEBwYXJhbSB1c2VySUQgVGhlIElEIG9mIHRoZSB1c2VyXG5cdCAqIEBwYXJhbSB1c2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdXNlclxuXHQgKi9cblx0ZW50ZXJEcmFmdDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0LCB1c2VySUQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHdlYlNvY2tldEJhc2VVUkw6IHN0cmluZyA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuV2ViU29ja2V0QmFzZVVSTFwiKTtcblxuXHRcdGlmICghd2ViU29ja2V0QmFzZVVSTCkge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGZpbmQgV2ViU29ja2V0QmFzZVVSTCBhbm5vdGF0aW9uXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNEcmFmdFVVSUQ6IHN0cmluZyA9IG9Db250ZXh0LmdldFByb3BlcnR5KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRVVUlEXCIpO1xuXHRcdHRoaXMuX2ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRjb25zdCBtb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRpbml0aWFsaXplQ29sbGFib3JhdGlvbihcblx0XHRcdHtcblx0XHRcdFx0aWQ6IHVzZXJJRCxcblx0XHRcdFx0bmFtZTogdXNlck5hbWUsXG5cdFx0XHRcdGluaXRpYWxOYW1lOiB1c2VyTmFtZVxuXHRcdFx0fSxcblx0XHRcdHNEcmFmdFVVSUQsXG5cdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsLFxuXHRcdFx0dGhpcy5fb25NZXNzYWdlUmVjZWl2ZWQuYmluZCh0aGlzKSxcblx0XHRcdHtcblx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9kZWw7XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgRkVWaWV3LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHR0aGlzLl9yb290UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHR0aGlzLl9vTW9kZWwgPSBtb2RlbDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBnaG9zdCBjbGllbnQgaGFzIHJlY2VpdmVkIGEgZ2l2ZW4gbWVzc2FnZS5cblx0ICpcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgY29udGVudCB0byBiZSBsb29rZWQgZm9yXG5cdCAqIEBwYXJhbSByZXNldEhpc3RvcnkgSWYgdHJ1ZSwgcmVzZXQgaGlzdG9yeSBvZiByZWNlaXZlZCBtZXNzYWdlc1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGEgcHJldmlvdXNseSByZWNlaXZlZCBtZXNzYWdlIG1hdGNoZXMgdGhlIGNvbnRlbnRcblx0ICovXG5cdGNoZWNrUmVjZWl2ZWQ6IGZ1bmN0aW9uIChtZXNzYWdlOiBQYXJ0aWFsPE1lc3NhZ2U+LCByZXNldEhpc3RvcnkgPSB0cnVlKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuX2xhc3RSZWNlaXZlZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvdW5kID0gdGhpcy5fbGFzdFJlY2VpdmVkTWVzc2FnZXMuc29tZSgocmVjZWl2ZWRNZXNzYWdlKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQoIW1lc3NhZ2UudXNlcklEIHx8IG1lc3NhZ2UudXNlcklEID09PSByZWNlaXZlZE1lc3NhZ2UudXNlcklEKSAmJlxuXHRcdFx0XHQoIW1lc3NhZ2UudXNlckFjdGlvbiB8fCBtZXNzYWdlLnVzZXJBY3Rpb24gPT09IHJlY2VpdmVkTWVzc2FnZS51c2VyQWN0aW9uKSAmJlxuXHRcdFx0XHQoIW1lc3NhZ2UuY2xpZW50Q29udGVudCB8fCBtZXNzYWdlLmNsaWVudENvbnRlbnQgPT09IHJlY2VpdmVkTWVzc2FnZS5jbGllbnRDb250ZW50KVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdGlmIChyZXNldEhpc3RvcnkpIHtcblx0XHRcdHRoaXMuX2xhc3RSZWNlaXZlZE1lc3NhZ2VzID0gW107IC8vIGJ5IGRlZmF1bHQsIHJlc2V0IGhpc3RvcnkgdG8gYXZvaWQgZmluZGluZyB0aGUgc2FtZSBtZXNzYWdlIHR3aWNlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGdob3N0IGNsaWVudCBhbmQgcmVtb3ZlcyB0aGUgdXNlciBmcm9tIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0LlxuXHQgKi9cblx0bGVhdmVEcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRlbmRDb2xsYWJvcmF0aW9uKHRoaXMuX2ludGVybmFsTW9kZWwpO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbC5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgc3RhcnRzIHR5cGluZyBpbiBhbiBpbnB1dCAobGl2ZSBjaGFuZ2UpLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgYmVpbmcgbW9kaWZpZWRcblx0ICovXG5cdGxvY2tGaWVsZDogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRpZiAodGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdC8vIFVubG9jayBwcmV2aW91cyBwcm9wZXJ0eSBwYXRoXG5cdFx0XHRcdHRoaXMudW5sb2NrRmllbGQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCA9IHNQcm9wZXJ0eVBhdGg7XG5cdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShBY3Rpdml0eS5Mb2NrLCBgJHt0aGlzLl9yb290UGF0aH0vJHtzUHJvcGVydHlQYXRofWAsIHRoaXMuX2ludGVybmFsTW9kZWwpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgaGFzIG1vZGlmaWVkIGEgcHJvcGVydHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBtb2RpZmllZFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgbW9kaWZpZWRcblx0ICovXG5cdHVwZGF0ZVByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodGhpcy5faW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0aWYgKHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCAhPT0gc1Byb3BlcnR5UGF0aCkge1xuXHRcdFx0XHR0aGlzLmxvY2tGaWVsZChzUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb0NvbnRleHRCaW5kaW5nID0gdGhpcy5fb01vZGVsIS5iaW5kQ29udGV4dCh0aGlzLl9yb290UGF0aCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdCQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHM6IHRydWUsXG5cdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIlxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUJpbmRpbmcgPSB0aGlzLl9vTW9kZWwhLmJpbmRQcm9wZXJ0eShzUHJvcGVydHlQYXRoLCBvQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCkpO1xuXG5cdFx0XHRvUHJvcGVydHlCaW5kaW5nXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWUoKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0b1Byb3BlcnR5QmluZGluZy5zZXRWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0b0NvbnRleHRCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcInBhdGNoQ29tcGxldGVkXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkNoYW5nZSwgYCR7dGhpcy5fcm9vdFBhdGh9LyR7c1Byb3BlcnR5UGF0aH1gLCB0aGlzLl9pbnRlcm5hbE1vZGVsISk7XG5cdFx0XHRcdFx0XHR0aGlzLnVubG9ja0ZpZWxkKCk7XG5cdFx0XHRcdFx0XHR0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNpbXVsYXRlcyB0aGF0IHRoZSB1c2VyIHVubG9ja2VkIGEgZmllbGQgKHRvIGJlIGNhbGxlZCBhZnRlciBsb2NrRmllbGQpLlxuXHQgKi9cblx0dW5sb2NrRmllbGQ6IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShBY3Rpdml0eS5VbmxvY2ssIGAke3RoaXMuX3Jvb3RQYXRofS8ke3RoaXMuX2xvY2tlZFByb3BlcnR5UGF0aH1gLCB0aGlzLl9pbnRlcm5hbE1vZGVsISk7XG5cdFx0XHR0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgaGFzIGRpc2NhcmRlZCB0aGUgZHJhZnQuXG5cdCAqL1xuXHRkaXNjYXJkRHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodGhpcy5faW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0Y29uc3QgZHJhZnRDb250ZXh0ID0gdGhpcy5fZ2V0RHJhZnRDb250ZXh0KCk7XG5cblx0XHRcdGRyYWZ0Q29udGV4dFxuXHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGRyYWZ0LmRlbGV0ZURyYWZ0KGRyYWZ0Q29udGV4dCwgbmV3IE1lc3NhZ2VIYW5kbGVyKCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoXG5cdFx0XHRcdFx0XHRBY3Rpdml0eS5EaXNjYXJkLFxuXHRcdFx0XHRcdFx0dGhpcy5fcm9vdFBhdGgucmVwbGFjZShcIklzQWN0aXZlRW50aXR5PWZhbHNlXCIsIFwiSXNBY3RpdmVFbnRpdHk9dHJ1ZVwiKSxcblx0XHRcdFx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwhXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsIS5kZXN0cm95KCk7XG5cdFx0XHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNpbXVsYXRlcyB0aGF0IHRoZSB1c2VyIGhhcyBkZWxldGVkIGFuIG9iamVjdCAoY2hpbGQgb2YgZHJhZnQgcm9vdCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvYmplY3RQYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgdG8gZGVsZXRlXG5cdCAqL1xuXHRkZWxldGVPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3RQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5faW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0Q29udGV4dCA9IHRoaXMuX2dldE9iamVjdENvbnRleHQob2JqZWN0UGF0aCk7XG5cblx0XHRcdG9iamVjdENvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRvYmplY3RDb250ZXh0LmRlbGV0ZSgpO1xuXHRcdFx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkRlbGV0ZSwgb2JqZWN0UGF0aCwgdGhpcy5faW50ZXJuYWxNb2RlbCEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGhhcyBiZWVuIGxvY2tlZCBieSBhbm90aGVyIHVzZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBvYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgbG9ja2VkXG5cdCAqL1xuXHRjaGVja0xvY2tlZEJ5T3RoZXI6IGZ1bmN0aW9uIChvYmplY3RQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVjZWl2ZWRMb2Nrcy5pbmNsdWRlcyhvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBQcml2YXRlIG1ldGhvZHNcblxuXHRfZ2V0RHJhZnRDb250ZXh0OiBmdW5jdGlvbiAoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0T2JqZWN0Q29udGV4dCh0aGlzLl9yb290UGF0aCk7XG5cdH0sXG5cblx0X2dldE9iamVjdENvbnRleHQ6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcpOiBDb250ZXh0IHtcblx0XHRyZXR1cm4gdGhpcy5fb01vZGVsIS5iaW5kQ29udGV4dChwYXRoLCB1bmRlZmluZWQsIHtcblx0XHRcdCQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHM6IHRydWUsXG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG9cIixcblx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCIkYXV0b1wiXG5cdFx0fSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIG9mIHRoZSBnaG9zdCBjbGllbnQgd2hlbiByZWNlaXZpbmcgYSBtZXNzYWdlIG9uIHRoZSB3ZWIgc29ja2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9vbk1lc3NhZ2VSZWNlaXZlZDogZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRtZXNzYWdlLnVzZXJBY3Rpb24gPSBtZXNzYWdlLnVzZXJBY3Rpb24gfHwgbWVzc2FnZS5jbGllbnRBY3Rpb247XG5cdFx0aWYgKCFtZXNzYWdlLmNsaWVudENvbnRlbnQpIHtcblx0XHRcdG1lc3NhZ2UuY2xpZW50Q29udGVudCA9IFwiXCI7XG5cdFx0fVxuXHRcdHRoaXMuX2xhc3RSZWNlaXZlZE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cblx0XHRzd2l0Y2ggKG1lc3NhZ2UudXNlckFjdGlvbikge1xuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Kb2luOlxuXHRcdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShcblx0XHRcdFx0XHRBY3Rpdml0eS5Kb2luRWNobyxcblx0XHRcdFx0XHR0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGggPyBgJHt0aGlzLl9yb290UGF0aH0vJHt0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGh9YCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Kb2luRWNobzpcblx0XHRcdGNhc2UgQWN0aXZpdHkuTG9jazpcblx0XHRcdFx0dGhpcy5fcmVjZWl2ZWRMb2Nrcy5wdXNoKC4uLm1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIikpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5VbmxvY2s6XG5cdFx0XHRcdHRoaXMuX3JlY2VpdmVkTG9ja3MgPSB0aGlzLl9yZWNlaXZlZExvY2tzLmZpbHRlcigobG9jaykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAhbWVzc2FnZS5jbGllbnRDb250ZW50LnNwbGl0KFwifFwiKS5pbmNsdWRlcyhsb2NrKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gTm90aGluZ1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sbGFib3JhdGlvbkFQSTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFlQSxNQUFNQSxnQkFBZ0IsR0FBRztJQUN4QkMscUJBQXFCLEVBQUUsRUFBZTtJQUN0Q0MsU0FBUyxFQUFFLEVBQUU7SUFDYkMsT0FBTyxFQUFFQyxTQUFtQztJQUM1Q0MsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QkMsY0FBYyxFQUFFRixTQUFrQztJQUNsREcsY0FBYyxFQUFFLEVBQWM7SUFFOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsVUFBVSxFQUFFLFVBQVVDLFFBQWlCLEVBQUVDLE1BQWMsRUFBRUMsUUFBZ0IsRUFBRTtNQUMxRSxNQUFNQyxnQkFBd0IsR0FBR0gsUUFBUSxDQUFDSSxRQUFRLEVBQUUsQ0FBQ0MsWUFBWSxFQUFFLENBQUNDLFNBQVMsQ0FBQyxtREFBbUQsQ0FBQztNQUVsSSxJQUFJLENBQUNILGdCQUFnQixFQUFFO1FBQ3RCSSxHQUFHLENBQUNDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQztRQUNwRDtNQUNEO01BRUEsTUFBTUMsVUFBa0IsR0FBR1QsUUFBUSxDQUFDVSxXQUFXLENBQUMsbUNBQW1DLENBQUM7TUFDcEYsSUFBSSxDQUFDYixjQUFjLEdBQUcsSUFBSWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3ZDLE1BQU1DLEtBQUssR0FBR1osUUFBUSxDQUFDSSxRQUFRLEVBQUU7TUFFakNTLHVCQUF1QixDQUN0QjtRQUNDQyxFQUFFLEVBQUViLE1BQU07UUFDVmMsSUFBSSxFQUFFYixR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
209
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uQVBJIiwiX2xhc3RSZWNlaXZlZE1lc3NhZ2VzIiwiX3Jvb3RQYXRoIiwiX29Nb2RlbCIsInVuZGVmaW5lZCIsIl9sb2NrZWRQcm9wZXJ0eVBhdGgiLCJfaW50ZXJuYWxNb2RlbCIsIl9yZWNlaXZlZExvY2tzIiwiZW50ZXJEcmFmdCIsIm9Db250ZXh0IiwidXNlcklEIiwidXNlck5hbWUiLCJ3ZWJTb2NrZXRCYXNlVVJMIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJMb2ciLCJlcnJvciIsInNEcmFmdFVVSUQiLCJnZXRQcm9wZXJ0eSIsIkpTT05Nb2RlbCIsIm1vZGVsIiwiaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24iLCJpZCIsIm5hbWUiLCJpbml0aWFsTmFtZSIsIl9vbk1lc3NhZ2VSZWNlaXZlZCIsImJpbmQiLCJnZXRQYXRoIiwiY2hlY2tSZWNlaXZlZCIsIm1lc3NhZ2UiLCJyZXNldEhpc3RvcnkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3VuZCIsInNvbWUiLCJyZWNlaXZlZE1lc3NhZ2UiLCJ1c2VyQWN0aW9uIiwiY2xpZW50Q29udGVudCIsImxlYXZlRHJhZnQiLCJlbmRDb2xsYWJvcmF0aW9uIiwiZGVzdHJveSIsImxvY2tGaWVsZCIsInNQcm9wZXJ0eVBhdGgiLCJ1bmxvY2tGaWVsZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwiQWN0aXZpdHkiLCJMb2NrIiwidXBkYXRlUHJvcGVydHlWYWx1ZSIsInZhbHVlIiwib0NvbnRleHRCaW5kaW5nIiwiYmluZENvbnRleHQiLCIkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwib1Byb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RWYWx1ZSIsInRoZW4iLCJzZXRWYWx1ZSIsImF0dGFjaEV2ZW50T25jZSIsIkNoYW5nZSIsImNhdGNoIiwiZXJyIiwiVW5sb2NrIiwiZGlzY2FyZERyYWZ0IiwiZHJhZnRDb250ZXh0IiwiX2dldERyYWZ0Q29udGV4dCIsInJlcXVlc3RQcm9wZXJ0eSIsImRyYWZ0IiwiZGVsZXRlRHJhZnQiLCJNZXNzYWdlSGFuZGxlciIsIkRpc2NhcmQiLCJyZXBsYWNlIiwiZGVsZXRlT2JqZWN0Iiwib2JqZWN0UGF0aCIsIm9iamVjdENvbnRleHQiLCJfZ2V0T2JqZWN0Q29udGV4dCIsImRlbGV0ZSIsIkRlbGV0ZSIsImNoZWNrTG9ja2VkQnlPdGhlciIsImluY2x1ZGVzIiwicGF0aCIsImNsaWVudEFjdGlvbiIsInB1c2giLCJKb2luIiwiSm9pbkVjaG8iLCJzcGxpdCIsImZpbHRlciIsImxvY2siXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHtcblx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UsXG5cdGVuZENvbGxhYm9yYXRpb24sXG5cdGluaXRpYWxpemVDb2xsYWJvcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG5jb25zdCBDb2xsYWJvcmF0aW9uQVBJID0ge1xuXHRfbGFzdFJlY2VpdmVkTWVzc2FnZXM6IFtdIGFzIE1lc3NhZ2VbXSxcblx0X3Jvb3RQYXRoOiBcIlwiLFxuXHRfb01vZGVsOiB1bmRlZmluZWQgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0X2xvY2tlZFByb3BlcnR5UGF0aDogXCJcIixcblx0X2ludGVybmFsTW9kZWw6IHVuZGVmaW5lZCBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQsXG5cdF9yZWNlaXZlZExvY2tzOiBbXSBhcyBzdHJpbmdbXSxcblxuXHQvKipcblx0ICogT3BlbiBhbiBleGlzdGluZyBjb2xsYWJvcmF0aXZlIGRyYWZ0IHdpdGggYSBuZXcgdXNlciwgYW5kIGNyZWF0ZXMgYSAnZ2hvc3QgY2xpZW50JyBmb3IgdGhpcyB1c2VyLlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnRcblx0ICogQHBhcmFtIHVzZXJJRCBUaGUgSUQgb2YgdGhlIHVzZXJcblx0ICogQHBhcmFtIHVzZXJOYW1lIFRoZSBuYW1lIG9mIHRoZSB1c2VyXG5cdCAqL1xuXHRlbnRlckRyYWZ0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQsIHVzZXJJRDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgd2ViU29ja2V0QmFzZVVSTDogc3RyaW5nID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5XZWJTb2NrZXRCYXNlVVJMXCIpO1xuXG5cdFx0aWYgKCF3ZWJTb2NrZXRCYXNlVVJMKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZmluZCBXZWJTb2NrZXRCYXNlVVJMIGFubm90YXRpb25cIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0RyYWZ0VVVJRDogc3RyaW5nID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdFVVSURcIik7XG5cdFx0dGhpcy5faW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdGNvbnN0IG1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdGluaXRpYWxpemVDb2xsYWJvcmF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogdXNlcklELFxuXHRcdFx0XHRuYW1lOiB1c2VyTmFtZSxcblx0XHRcdFx0aW5pdGlhbE5hbWU6IHVzZXJOYW1lXG5cdFx0XHR9LFxuXHRcdFx0c0RyYWZ0VVVJRCxcblx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwsXG5cdFx0XHR0aGlzLl9vbk1lc3NhZ2VSZWNlaXZlZC5iaW5kKHRoaXMpLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJldHVybiBtb2RlbDtcblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBGRVZpZXcsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblxuXHRcdHRoaXMuX3Jvb3RQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHRoaXMuX29Nb2RlbCA9IG1vZGVsO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGdob3N0IGNsaWVudCBoYXMgcmVjZWl2ZWQgYSBnaXZlbiBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBjb250ZW50IHRvIGJlIGxvb2tlZCBmb3Jcblx0ICogQHBhcmFtIHJlc2V0SGlzdG9yeSBJZiB0cnVlLCByZXNldCBoaXN0b3J5IG9mIHJlY2VpdmVkIG1lc3NhZ2VzXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYSBwcmV2aW91c2x5IHJlY2VpdmVkIG1lc3NhZ2UgbWF0Y2hlcyB0aGUgY29udGVudFxuXHQgKi9cblx0Y2hlY2tSZWNlaXZlZDogZnVuY3Rpb24gKG1lc3NhZ2U6IFBhcnRpYWw8TWVzc2FnZT4sIHJlc2V0SGlzdG9yeSA9IHRydWUpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5fbGFzdFJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZm91bmQgPSB0aGlzLl9sYXN0UmVjZWl2ZWRNZXNzYWdlcy5zb21lKChyZWNlaXZlZE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCghbWVzc2FnZS51c2VySUQgfHwgbWVzc2FnZS51c2VySUQgPT09IHJlY2VpdmVkTWVzc2FnZS51c2VySUQpICYmXG5cdFx0XHRcdCghbWVzc2FnZS51c2VyQWN0aW9uIHx8IG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gcmVjZWl2ZWRNZXNzYWdlLnVzZXJBY3Rpb24pICYmXG5cdFx0XHRcdCghbWVzc2FnZS5jbGllbnRDb250ZW50IHx8IG1lc3NhZ2UuY2xpZW50Q29udGVudCA9PT0gcmVjZWl2ZWRNZXNzYWdlLmNsaWVudENvbnRlbnQpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKHJlc2V0SGlzdG9yeSkge1xuXHRcdFx0dGhpcy5fbGFzdFJlY2VpdmVkTWVzc2FnZXMgPSBbXTsgLy8gYnkgZGVmYXVsdCwgcmVzZXQgaGlzdG9yeSB0byBhdm9pZCBmaW5kaW5nIHRoZSBzYW1lIG1lc3NhZ2UgdHdpY2Vcblx0XHR9XG5cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZ2hvc3QgY2xpZW50IGFuZCByZW1vdmVzIHRoZSB1c2VyIGZyb20gdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQuXG5cdCAqL1xuXHRsZWF2ZURyYWZ0OiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHRoaXMuX2ludGVybmFsTW9kZWwpIHtcblx0XHRcdGVuZENvbGxhYm9yYXRpb24odGhpcy5faW50ZXJuYWxNb2RlbCk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgdGhhdCB0aGUgdXNlciBzdGFydHMgdHlwaW5nIGluIGFuIGlucHV0IChsaXZlIGNoYW5nZSkuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBtb2RpZmllZFxuXHQgKi9cblx0bG9ja0ZpZWxkOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ludGVybmFsTW9kZWwpIHtcblx0XHRcdGlmICh0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Ly8gVW5sb2NrIHByZXZpb3VzIHByb3BlcnR5IHBhdGhcblx0XHRcdFx0dGhpcy51bmxvY2tGaWVsZCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoID0gc1Byb3BlcnR5UGF0aDtcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkxvY2ssIGAke3RoaXMuX3Jvb3RQYXRofS8ke3NQcm9wZXJ0eVBhdGh9YCwgdGhpcy5faW50ZXJuYWxNb2RlbCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgdGhhdCB0aGUgdXNlciBoYXMgbW9kaWZpZWQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IGJlaW5nIG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBtb2RpZmllZFxuXHQgKi9cblx0dXBkYXRlUHJvcGVydHlWYWx1ZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRpZiAodGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoICE9PSBzUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdHRoaXMubG9ja0ZpZWxkKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvQ29udGV4dEJpbmRpbmcgPSB0aGlzLl9vTW9kZWwhLmJpbmRDb250ZXh0KHRoaXMuX3Jvb3RQYXRoLCB1bmRlZmluZWQsIHtcblx0XHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZSxcblx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvXCIsXG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCIkYXV0b1wiXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5QmluZGluZyA9IHRoaXMuX29Nb2RlbCEuYmluZFByb3BlcnR5KHNQcm9wZXJ0eVBhdGgsIG9Db250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQoKSk7XG5cblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdcblx0XHRcdFx0LnJlcXVlc3RWYWx1ZSgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRvUHJvcGVydHlCaW5kaW5nLnNldFZhbHVlKHZhbHVlKTtcblx0XHRcdFx0XHRvQ29udGV4dEJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoQWN0aXZpdHkuQ2hhbmdlLCBgJHt0aGlzLl9yb290UGF0aH0vJHtzUHJvcGVydHlQYXRofWAsIHRoaXMuX2ludGVybmFsTW9kZWwhKTtcblx0XHRcdFx0XHRcdHRoaXMudW5sb2NrRmllbGQoKTtcblx0XHRcdFx0XHRcdHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCA9IFwiXCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgdW5sb2NrZWQgYSBmaWVsZCAodG8gYmUgY2FsbGVkIGFmdGVyIGxvY2tGaWVsZCkuXG5cdCAqL1xuXHR1bmxvY2tGaWVsZDogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9sb2NrZWRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LlVubG9jaywgYCR7dGhpcy5fcm9vdFBhdGh9LyR7dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRofWAsIHRoaXMuX2ludGVybmFsTW9kZWwhKTtcblx0XHRcdHRoaXMuX2xvY2tlZFByb3BlcnR5UGF0aCA9IFwiXCI7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgdGhhdCB0aGUgdXNlciBoYXMgZGlzY2FyZGVkIHRoZSBkcmFmdC5cblx0ICovXG5cdGRpc2NhcmREcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRjb25zdCBkcmFmdENvbnRleHQgPSB0aGlzLl9nZXREcmFmdENvbnRleHQoKTtcblxuXHRcdFx0ZHJhZnRDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0ZHJhZnQuZGVsZXRlRHJhZnQoZHJhZnRDb250ZXh0LCBuZXcgTWVzc2FnZUhhbmRsZXIoKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZShcblx0XHRcdFx0XHRcdEFjdGl2aXR5LkRpc2NhcmQsXG5cdFx0XHRcdFx0XHR0aGlzLl9yb290UGF0aC5yZXBsYWNlKFwiSXNBY3RpdmVFbnRpdHk9ZmFsc2VcIiwgXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpLFxuXHRcdFx0XHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbCFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHRoaXMuX2ludGVybmFsTW9kZWwhLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR0aGlzLl9pbnRlcm5hbE1vZGVsID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2ltdWxhdGVzIHRoYXQgdGhlIHVzZXIgaGFzIGRlbGV0ZWQgYW4gb2JqZWN0IChjaGlsZCBvZiBkcmFmdCByb290KS5cblx0ICogQHBhcmFtIG9iamVjdFBhdGggVGhlIHBhdGggb2YgdGhlIG9iamVjdCB0byBkZWxldGVcblx0ICovXG5cdGRlbGV0ZU9iamVjdDogZnVuY3Rpb24gKG9iamVjdFBhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9pbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRjb25zdCBvYmplY3RDb250ZXh0ID0gdGhpcy5fZ2V0T2JqZWN0Q29udGV4dChvYmplY3RQYXRoKTtcblxuXHRcdFx0b2JqZWN0Q29udGV4dFxuXHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdG9iamVjdENvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoQWN0aXZpdHkuRGVsZXRlLCBvYmplY3RQYXRoLCB0aGlzLl9pbnRlcm5hbE1vZGVsISk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaGFzIGJlZW4gbG9ja2VkIGJ5IGFub3RoZXIgdXNlci5cblx0ICogQHBhcmFtIG9iamVjdFBhdGhcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBsb2NrZWRcblx0ICovXG5cdGNoZWNrTG9ja2VkQnlPdGhlcjogZnVuY3Rpb24gKG9iamVjdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9yZWNlaXZlZExvY2tzLmluY2x1ZGVzKG9iamVjdFBhdGgpO1xuXHR9LFxuXG5cdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIFByaXZhdGUgbWV0aG9kc1xuXG5cdF9nZXREcmFmdENvbnRleHQ6IGZ1bmN0aW9uICgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRPYmplY3RDb250ZXh0KHRoaXMuX3Jvb3RQYXRoKTtcblx0fSxcblxuXHRfZ2V0T2JqZWN0Q29udGV4dDogZnVuY3Rpb24gKHBhdGg6IHN0cmluZyk6IENvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLl9vTW9kZWwhLmJpbmRDb250ZXh0KHBhdGgsIHVuZGVmaW5lZCwge1xuXHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZSxcblx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0JCR1cGRhdGVHcm91cElkOiBcIiRhdXRvXCJcblx0XHR9KS5nZXRCb3VuZENvbnRleHQoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGJhY2sgb2YgdGhlIGdob3N0IGNsaWVudCB3aGVuIHJlY2VpdmluZyBhIG1lc3NhZ2Ugb24gdGhlIHdlYiBzb2NrZXQuXG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqL1xuXHRfb25NZXNzYWdlUmVjZWl2ZWQ6IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0bWVzc2FnZS51c2VyQWN0aW9uID0gbWVzc2FnZS51c2VyQWN0aW9uIHx8IG1lc3NhZ2UuY2xpZW50QWN0aW9uO1xuXHRcdGlmICghbWVzc2FnZS5jbGllbnRDb250ZW50KSB7XG5cdFx0XHRtZXNzYWdlLmNsaWVudENvbnRlbnQgPSBcIlwiO1xuXHRcdH1cblx0XHR0aGlzLl9sYXN0UmVjZWl2ZWRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXG5cdFx0c3dpdGNoIChtZXNzYWdlLnVzZXJBY3Rpb24pIHtcblx0XHRcdGNhc2UgQWN0aXZpdHkuSm9pbjpcblx0XHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoXG5cdFx0XHRcdFx0QWN0aXZpdHkuSm9pbkVjaG8sXG5cdFx0XHRcdFx0dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRoID8gYCR7dGhpcy5fcm9vdFBhdGh9LyR7dGhpcy5fbG9ja2VkUHJvcGVydHlQYXRofWAgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0dGhpcy5faW50ZXJuYWxNb2RlbCFcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuSm9pbkVjaG86XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxvY2s6XG5cdFx0XHRcdHRoaXMuX3JlY2VpdmVkTG9ja3MucHVzaCguLi5tZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuVW5sb2NrOlxuXHRcdFx0XHR0aGlzLl9yZWNlaXZlZExvY2tzID0gdGhpcy5fcmVjZWl2ZWRMb2Nrcy5maWx0ZXIoKGxvY2spID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gIW1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIikuaW5jbHVkZXMobG9jayk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdC8vIE5vdGhpbmdcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhYm9yYXRpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0VBZUEsTUFBTUEsZ0JBQWdCLEdBQUc7SUFDeEJDLHFCQUFxQixFQUFFLEVBQWU7SUFDdENDLFNBQVMsRUFBRSxFQUFFO0lBQ2JDLE9BQU8sRUFBRUMsU0FBbUM7SUFDNUNDLG1CQUFtQixFQUFFLEVBQUU7SUFDdkJDLGNBQWMsRUFBRUYsU0FBa0M7SUFDbERHLGNBQWMsRUFBRSxFQUFjO0lBRTlCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxVQUFVLEVBQUUsU0FBQUEsQ0FBVUMsUUFBaUIsRUFBRUMsTUFBYyxFQUFFQyxRQUFnQixFQUFFO01BQzFFLE1BQU1DLGdCQUF3QixHQUFHSCxRQUFRLENBQUNJLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxtREFBbUQsQ0FBQztNQUVsSSxJQUFJLENBQUNILGdCQUFnQixFQUFFO1FBQ3RCSSxHQUFHLENBQUNDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQztRQUNwRDtNQUNEO01BRUEsTUFBTUMsVUFBa0IsR0FBR1QsUUFBUSxDQUFDVSxXQUFXLENBQUMsbUNBQW1DLENBQUM7TUFDcEYsSUFBSSxDQUFDYixjQUFjLEdBQUcsSUFBSWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3ZDLE1BQU1DLEtBQUssR0FBR1osUUFBUSxDQUFDSSxRQUFRLENBQUMsQ0FBQztNQUVqQ1MsdUJBQXVCLENBQ3RCO1FBQ0NDLEVBQUUsRUFBRWIsTUFBTTtRQUNWYyxJQUFJLEVBQUViLFFBQVE7UUFDZGMsV0FBVyxFQUFFZDtNQUNkLENBQUMsRUFD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
@@ -10,7 +10,7 @@ import type { Message } from "sap/fe/core/controllerextensions/collaboration/Col
10
10
  import { Activity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
11
11
  import draft from "sap/fe/core/controllerextensions/editFlow/draft";
12
12
  import JSONModel from "sap/ui/model/json/JSONModel";
13
- import Context from "sap/ui/model/odata/v4/Context";
13
+ import type Context from "sap/ui/model/odata/v4/Context";
14
14
  import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
15
15
 
16
16
  const CollaborationAPI = {
@@ -23,7 +23,6 @@ const CollaborationAPI = {
23
23
 
24
24
  /**
25
25
  * Open an existing collaborative draft with a new user, and creates a 'ghost client' for this user.
26
- *
27
26
  * @param oContext The context of the collaborative draft
28
27
  * @param userID The ID of the user
29
28
  * @param userName The name of the user
@@ -63,7 +62,6 @@ const CollaborationAPI = {
63
62
 
64
63
  /**
65
64
  * Checks if the ghost client has received a given message.
66
- *
67
65
  * @param message The message content to be looked for
68
66
  * @param resetHistory If true, reset history of received messages
69
67
  * @returns True if a previously received message matches the content
@@ -101,7 +99,6 @@ const CollaborationAPI = {
101
99
 
102
100
  /**
103
101
  * Simulates that the user starts typing in an input (live change).
104
- *
105
102
  * @param sPropertyPath The path of the property being modified
106
103
  */
107
104
  lockField: function (sPropertyPath: string) {
@@ -117,7 +114,6 @@ const CollaborationAPI = {
117
114
 
118
115
  /**
119
116
  * Simulates that the user has modified a property.
120
- *
121
117
  * @param sPropertyPath The path of the property being modified
122
118
  * @param value The new value of the property being modified
123
119
  */
@@ -190,7 +186,6 @@ const CollaborationAPI = {
190
186
 
191
187
  /**
192
188
  * Simulates that the user has deleted an object (child of draft root).
193
- *
194
189
  * @param objectPath The path of the object to delete
195
190
  */
196
191
  deleteObject: function (objectPath: string) {
@@ -211,7 +206,6 @@ const CollaborationAPI = {
211
206
 
212
207
  /**
213
208
  * Checks if a property has been locked by another user.
214
- *
215
209
  * @param objectPath
216
210
  * @returns True if locked
217
211
  */
@@ -236,8 +230,7 @@ const CollaborationAPI = {
236
230
 
237
231
  /**
238
232
  * Callback of the ghost client when receiving a message on the web socket.
239
- *
240
- * @param oMessage The message
233
+ * @param message
241
234
  */
242
235
  _onMessageReceived: function (message: Message) {
243
236
  message.userAction = message.userAction || message.clientAction;
@@ -17,7 +17,6 @@ sap.ui.define(
17
17
 
18
18
  /**
19
19
  * Constructs a new DialogAPI instance.
20
- *
21
20
  * @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
22
21
  * @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
23
22
  * @param {number} [iConfirmButtonIndex] Index of the 'confirm' button in the button aggregation; the default setting is 0 (first button from the left)
@@ -38,7 +37,6 @@ sap.ui.define(
38
37
 
39
38
  /**
40
39
  * Creates a matcher for fields within create and action dialogs.
41
- *
42
40
  * @param {sap.fe.test.api.FieldIdentifier | string} vFieldIdentifier Identifier to be used for the matcher
43
41
  * @param {object} oDialogIdentifier Identifier for the dialog (create/action)
44
42
  * @returns {object} A matcher
@@ -9,7 +9,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
9
9
 
10
10
  /**
11
11
  * Constructs a new DialogActions instance.
12
- *
13
12
  * @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
14
13
  * @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
15
14
  * @param {number} [iConfirmButtonIndex] Index of the 'confirm' button in the button aggregation; the default setting is 0 (first button from the left)
@@ -28,7 +27,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
28
27
 
29
28
  /**
30
29
  * Confirms the dialog by clicking the corresponding button (for example, 'OK').
31
- *
32
30
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
33
31
  * @public
34
32
  */
@@ -43,7 +41,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
43
41
 
44
42
  /**
45
43
  * Cancels the dialog by clicking the corresponding button (for example, 'Cancel').
46
- *
47
44
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
48
45
  * @public
49
46
  */
@@ -58,7 +55,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
58
55
 
59
56
  /**
60
57
  * Closes the dialog by pressing the 'Escape' key.
61
- *
62
58
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
63
59
  * @public
64
60
  */
@@ -73,7 +69,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
73
69
 
74
70
  /**
75
71
  * Changes the content of a field in a dialog.
76
- *
77
72
  * @param {sap.fe.test.api.DialogFieldIdentifier} vFieldIdentifier The identifier of the field
78
73
  * @param {string} [vValue] The new target value.
79
74
  * @param {boolean} [bClearFirst] Set to <code>true</code> to clear previously set filters, otherwise all previously set values will be kept
@@ -102,7 +97,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
102
97
  * Changes the content of a field in an action parameter dialog.
103
98
  *
104
99
  * Deprecated: Please use dialog action iChangeDialogField.
105
- *
106
100
  * @param {sap.fe.test.api.ActionDialogFieldIdentifier} vFieldIdentifier The identifier of the field
107
101
  * @param {string} [vValue] The new target value.
108
102
  * @param {boolean} [bClearFirst] Set to <code>true</code> to clear previously set filters, otherwise all previously set values will be kept
@@ -115,7 +109,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"], fu
115
109
 
116
110
  /**
117
111
  * Executes a keyboard shortcut on dialog.
118
- *
119
112
  * @param {string} sShortcut The shortcut pattern
120
113
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
121
114
  * @ui5-restricted
@@ -9,7 +9,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
9
9
 
10
10
  /**
11
11
  * Constructs a new DialogAssertions instance.
12
- *
13
12
  * @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
14
13
  * @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
15
14
  * @param {number} [iConfirmButtonIndex] Index of the 'confirm' button in the button aggregation; the default setting is 0 (first button from the left)
@@ -28,7 +27,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
28
27
 
29
28
  /**
30
29
  * Checks the dialog.
31
- *
32
30
  * @param {object} [mDialogState] Defines the expected state of the dialog
33
31
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
34
32
  * @public
@@ -44,7 +42,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
44
42
 
45
43
  /**
46
44
  * Checks the confirmation button of the dialog.
47
- *
48
45
  * @param {object} [mButtonState] Defines the expected state of the button
49
46
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
50
47
  * @public
@@ -66,7 +63,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
66
63
 
67
64
  /**
68
65
  * Checks the cancellation button of the dialog.
69
- *
70
66
  * @param {object} [mButtonState] Defines the expected state of the button
71
67
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
72
68
  * @public
@@ -88,7 +84,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
88
84
 
89
85
  /**
90
86
  * Checks the content and state of a field in a dialog.
91
- *
92
87
  * @param {sap.fe.test.api.DialogFieldIdentifier} vFieldIdentifier The identifier of the field
93
88
  * @param {string | Array | object} [vValue] Expected value(s) of the field.
94
89
  * if passed as an object, the following pattern will be considered:
@@ -122,7 +117,6 @@ sap.ui.define(["./DialogAPI", "sap/fe/test/Utils"], function (DialogAPI, Utils)
122
117
 
123
118
  /**
124
119
  * Checks the content and state of a field in an action parameter dialog.
125
- *
126
120
  * @param {sap.fe.test.api.ActionDialogFieldIdentifier} vFieldIdentifier The identifier of the field
127
121
  * @param {string | Array | object} [vValue] Expected value(s) of the field.
128
122
  * if passed as an object, the following pattern will be considered:
@@ -9,7 +9,6 @@ sap.ui.define(["./DialogActions", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"]
9
9
 
10
10
  /**
11
11
  * Constructs a new DialogCreateActions instance.
12
- *
13
12
  * @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
14
13
  * @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
15
14
  * @returns {sap.fe.test.api.DialogCreateActions} The new instance
@@ -28,7 +27,6 @@ sap.ui.define(["./DialogActions", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder"]
28
27
 
29
28
  /**
30
29
  * Executes the <code>Create</code> action on the create dialog.
31
- *
32
30
  * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
33
31
  * @public
34
32
  */