@sapui5/sap.fe.test 1.101.1 → 1.102.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/CollaborationClient.js +77 -0
- package/src/sap/fe/test/CollaborationClient.ts +105 -0
- package/src/sap/fe/test/FeMocks.js +1 -1
- package/src/sap/fe/test/FeMocks.ts +6 -2
- package/src/sap/fe/test/JestTemplatingHelper.js +51 -22
- package/src/sap/fe/test/JestTemplatingHelper.ts +46 -19
- package/src/sap/fe/test/ListReport.js +7 -15
- package/src/sap/fe/test/LocationUtil.js +12 -16
- package/src/sap/fe/test/ObjectPage.js +38 -6
- package/src/sap/fe/test/Shell.js +94 -34
- package/src/sap/fe/test/TemplatePage.js +14 -0
- package/src/sap/fe/test/UI5MockHelper.js +99 -18
- package/src/sap/fe/test/UI5MockHelper.ts +81 -14
- package/src/sap/fe/test/api/CollaborationAPI.js +215 -0
- package/src/sap/fe/test/api/CollaborationAPI.ts +240 -0
- package/src/sap/fe/test/api/DialogMassEditActions.js +115 -0
- package/src/sap/fe/test/api/DialogMassEditAssertions.js +174 -0
- package/src/sap/fe/test/api/DialogType.js +11 -2
- package/src/sap/fe/test/api/HeaderAssertions.js +76 -41
- package/src/sap/fe/test/api/TableAPI.js +30 -34
- package/src/sap/fe/test/api/TableActions.js +1 -1
- package/src/sap/fe/test/api/TableAssertions.js +51 -46
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +161 -156
- package/src/sap/fe/test/builder/MdcTableBuilder.js +89 -12
- package/src/sap/fe/test/library.js +1 -1
- package/src/sap/fe/test/massEdit.js +0 -62
|
@@ -18,6 +18,7 @@ sap.ui.define([], function () {
|
|
|
18
18
|
function MockContext(oValues, oBinding) {
|
|
19
19
|
var _this = this;
|
|
20
20
|
|
|
21
|
+
this.isKeptAlive = false;
|
|
21
22
|
this.getProperty = jest.fn(function (key) {
|
|
22
23
|
return _this.oValues[key];
|
|
23
24
|
});
|
|
@@ -54,6 +55,14 @@ sap.ui.define([], function () {
|
|
|
54
55
|
return (_this$oBinding = _this.oBinding) === null || _this$oBinding === void 0 ? void 0 : _this$oBinding.getModel();
|
|
55
56
|
});
|
|
56
57
|
this.isTransient = jest.fn();
|
|
58
|
+
this.setKeepAlive = jest.fn(function (bool, _fnOnBeforeDestroy, _bRequestMessages) {
|
|
59
|
+
_this.isKeptAlive = bool;
|
|
60
|
+
});
|
|
61
|
+
this.isKeepAlive = jest.fn(function () {
|
|
62
|
+
return _this.isKeptAlive;
|
|
63
|
+
});
|
|
64
|
+
this.requestSideEffects = jest.fn();
|
|
65
|
+
this.requestObject = jest.fn();
|
|
57
66
|
this.oValues = oValues;
|
|
58
67
|
this.oBinding = oBinding;
|
|
59
68
|
}
|
|
@@ -94,6 +103,7 @@ sap.ui.define([], function () {
|
|
|
94
103
|
|
|
95
104
|
_this2 = _MockUI5Element.call.apply(_MockUI5Element, [this].concat(args)) || this;
|
|
96
105
|
_this2.getBindingContext = jest.fn();
|
|
106
|
+
_this2.getModel = jest.fn();
|
|
97
107
|
return _this2;
|
|
98
108
|
}
|
|
99
109
|
|
|
@@ -140,6 +150,9 @@ sap.ui.define([], function () {
|
|
|
140
150
|
this.getModel = jest.fn(function () {
|
|
141
151
|
return _this4.mockModel;
|
|
142
152
|
});
|
|
153
|
+
this.getUpdateGroupId = jest.fn(function () {
|
|
154
|
+
return "auto";
|
|
155
|
+
});
|
|
143
156
|
this.mockModel = mockModel;
|
|
144
157
|
aContexts = aContexts || [];
|
|
145
158
|
this.aMockContexts = aContexts.map(function (context) {
|
|
@@ -164,33 +177,100 @@ sap.ui.define([], function () {
|
|
|
164
177
|
|
|
165
178
|
_exports.MockListBinding = MockListBinding;
|
|
166
179
|
|
|
180
|
+
var MockPropertyBinding = /*#__PURE__*/function () {
|
|
181
|
+
function MockPropertyBinding(mockModel, mockPath) {
|
|
182
|
+
var _this5 = this;
|
|
183
|
+
|
|
184
|
+
this.getModel = jest.fn(function () {
|
|
185
|
+
return _this5.mockModel;
|
|
186
|
+
});
|
|
187
|
+
this.getPath = jest.fn(function () {
|
|
188
|
+
return _this5.mockPath;
|
|
189
|
+
});
|
|
190
|
+
this.getValue = jest.fn(function () {
|
|
191
|
+
var _this5$mockModel;
|
|
192
|
+
|
|
193
|
+
return _this5 === null || _this5 === void 0 ? void 0 : (_this5$mockModel = _this5.mockModel) === null || _this5$mockModel === void 0 ? void 0 : _this5$mockModel.getProperty("/" + _this5.mockPath);
|
|
194
|
+
});
|
|
195
|
+
this.setModel(mockModel);
|
|
196
|
+
this.setPath(mockPath);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
_exports.MockPropertyBinding = MockPropertyBinding;
|
|
200
|
+
var _proto3 = MockPropertyBinding.prototype;
|
|
201
|
+
|
|
202
|
+
_proto3.isA = function isA(sClassName) {
|
|
203
|
+
return sClassName === "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
_proto3.setModel = function setModel(oModel) {
|
|
207
|
+
this.mockModel = oModel;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
_proto3.setPath = function setPath(path) {
|
|
211
|
+
this.mockPath = path ? path : "";
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
return MockPropertyBinding;
|
|
215
|
+
}();
|
|
216
|
+
|
|
217
|
+
_exports.MockPropertyBinding = MockPropertyBinding;
|
|
218
|
+
|
|
219
|
+
var MockCompositeBinding = /*#__PURE__*/function () {
|
|
220
|
+
function MockCompositeBinding(aBindings) {
|
|
221
|
+
var _this6 = this;
|
|
222
|
+
|
|
223
|
+
this.getBindings = jest.fn(function () {
|
|
224
|
+
return _this6.aBindings;
|
|
225
|
+
});
|
|
226
|
+
this.getValue = jest.fn(function () {
|
|
227
|
+
return _this6.aBindings.map(function (binding) {
|
|
228
|
+
return binding.getValue();
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
this.aBindings = aBindings;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
_exports.MockCompositeBinding = MockCompositeBinding;
|
|
235
|
+
var _proto4 = MockCompositeBinding.prototype;
|
|
236
|
+
|
|
237
|
+
_proto4.isA = function isA(sClassName) {
|
|
238
|
+
return sClassName === "sap.ui.model.CompositeBinding";
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
return MockCompositeBinding;
|
|
242
|
+
}();
|
|
243
|
+
|
|
244
|
+
_exports.MockCompositeBinding = MockCompositeBinding;
|
|
245
|
+
|
|
167
246
|
var MockContextBinding = /*#__PURE__*/function () {
|
|
168
247
|
function MockContextBinding(oContext, mockModel) {
|
|
169
|
-
var
|
|
248
|
+
var _this7 = this;
|
|
170
249
|
|
|
250
|
+
this.isKeptAlive = false;
|
|
171
251
|
this.getBoundContext = jest.fn(function () {
|
|
172
|
-
return
|
|
252
|
+
return _this7.oMockContext;
|
|
173
253
|
});
|
|
174
254
|
this.attachEventOnce = jest.fn();
|
|
175
255
|
this.getModel = jest.fn(function () {
|
|
176
|
-
return
|
|
256
|
+
return _this7.mockModel;
|
|
177
257
|
});
|
|
178
258
|
this.mockModel = mockModel;
|
|
179
259
|
this.oMockContext = new MockContext(oContext || {}, this);
|
|
180
260
|
}
|
|
181
261
|
|
|
182
262
|
_exports.MockContextBinding = MockContextBinding;
|
|
183
|
-
var
|
|
263
|
+
var _proto5 = MockContextBinding.prototype;
|
|
184
264
|
|
|
185
|
-
|
|
265
|
+
_proto5.isA = function isA(sClassName) {
|
|
186
266
|
return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
|
|
187
267
|
};
|
|
188
268
|
|
|
189
|
-
|
|
269
|
+
_proto5.getInternalMockContext = function getInternalMockContext() {
|
|
190
270
|
return this.oMockContext;
|
|
191
271
|
};
|
|
192
272
|
|
|
193
|
-
|
|
273
|
+
_proto5.setModel = function setModel(oModel) {
|
|
194
274
|
this.mockModel = oModel;
|
|
195
275
|
} // Mocked API
|
|
196
276
|
;
|
|
@@ -205,7 +285,7 @@ sap.ui.define([], function () {
|
|
|
205
285
|
_exports.MockContextBinding = MockContextBinding;
|
|
206
286
|
|
|
207
287
|
var MockMetaModel = function MockMetaModel(oMetaData) {
|
|
208
|
-
var
|
|
288
|
+
var _this8 = this;
|
|
209
289
|
|
|
210
290
|
this.getMetaContext = jest.fn(function (sPath) {
|
|
211
291
|
return new MockContext({
|
|
@@ -213,7 +293,7 @@ sap.ui.define([], function () {
|
|
|
213
293
|
});
|
|
214
294
|
});
|
|
215
295
|
this.getObject = jest.fn(function (sPath) {
|
|
216
|
-
return
|
|
296
|
+
return _this8.oMetaContext.getProperty(sPath);
|
|
217
297
|
});
|
|
218
298
|
this.requestObject = jest.fn();
|
|
219
299
|
this.createBindingContext = jest.fn(function (sPath) {
|
|
@@ -238,20 +318,21 @@ sap.ui.define([], function () {
|
|
|
238
318
|
|
|
239
319
|
var MockModel = /*#__PURE__*/function () {
|
|
240
320
|
function MockModel(mockListBinding, mockContextBinding) {
|
|
241
|
-
var
|
|
321
|
+
var _this9 = this;
|
|
242
322
|
|
|
243
323
|
this.bindList = jest.fn(function () {
|
|
244
|
-
return
|
|
324
|
+
return _this9.mockListBinding;
|
|
245
325
|
});
|
|
246
326
|
this.bindContext = jest.fn(function () {
|
|
247
|
-
return
|
|
327
|
+
return _this9.mockContextBinding;
|
|
248
328
|
});
|
|
249
329
|
this.getMetaModel = jest.fn(function () {
|
|
250
|
-
return
|
|
330
|
+
return _this9.oMetaModel;
|
|
251
331
|
});
|
|
252
332
|
this.getProperty = jest.fn();
|
|
253
333
|
this.setProperty = jest.fn();
|
|
254
334
|
this.requestObject = jest.fn();
|
|
335
|
+
this.getKeepAliveContext = jest.fn();
|
|
255
336
|
this.mockListBinding = mockListBinding;
|
|
256
337
|
this.mockContextBinding = mockContextBinding;
|
|
257
338
|
|
|
@@ -275,9 +356,9 @@ sap.ui.define([], function () {
|
|
|
275
356
|
return new MockModel(undefined, mockContextBinding);
|
|
276
357
|
};
|
|
277
358
|
|
|
278
|
-
var
|
|
359
|
+
var _proto6 = MockModel.prototype;
|
|
279
360
|
|
|
280
|
-
|
|
361
|
+
_proto6.setMetaModel = function setMetaModel(oMetaModel) {
|
|
281
362
|
this.oMetaModel = oMetaModel;
|
|
282
363
|
} // Mocked API
|
|
283
364
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -298,9 +379,9 @@ sap.ui.define([], function () {
|
|
|
298
379
|
}
|
|
299
380
|
|
|
300
381
|
_exports.MockView = MockView;
|
|
301
|
-
var
|
|
382
|
+
var _proto7 = MockView.prototype;
|
|
302
383
|
|
|
303
|
-
|
|
384
|
+
_proto7.isA = function isA(sClassName) {
|
|
304
385
|
return sClassName === "sap.ui.core.mvc.View";
|
|
305
386
|
};
|
|
306
387
|
|
|
@@ -348,4 +429,4 @@ sap.ui.define([], function () {
|
|
|
348
429
|
_exports.mockMVC = mockMVC;
|
|
349
430
|
return _exports;
|
|
350
431
|
}, false);
|
|
351
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJnZXRQcm9wZXJ0eSIsImplc3QiLCJmbiIsImtleSIsInJlcXVlc3RQcm9wZXJ0eSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0UHJvcGVydHkiLCJ2YWx1ZSIsImdldE9iamVjdCIsInBhdGgiLCJ0aGF0IiwicmVzdWx0IiwiaW5kZXhPZiIsInBhcnRzIiwic3BsaXQiLCJyZWR1Y2UiLCJzdW0iLCJwYXJ0IiwiZ2V0UGF0aCIsImdldEJpbmRpbmciLCJnZXRNb2RlbCIsImlzVHJhbnNpZW50IiwiaXNBIiwic0NsYXNzTmFtZSIsIk1vY2tVSTVFbGVtZW50IiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm1vY2tSZXR1cm5WYWx1ZSIsImdldEJpbmRpbmdJbmZvIiwiZGF0YSIsImdldFBhcmVudCIsIk1vY2tDb250cm9sIiwiTW9ja0V2ZW50IiwicGFyYW1zIiwic291cmNlIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsImdldFNvdXJjZSIsIk1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0cyIsIm1vY2tNb2RlbCIsInNldEFnZ3JlZ2F0aW9uIiwiZmlsdGVyIiwic29ydCIsInJlcXVlc3RDb250ZXh0cyIsImFNb2NrQ29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrQ29udGV4dEJpbmRpbmciLCJvQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm9Nb2NrQ29udGV4dCIsImF0dGFjaEV2ZW50T25jZSIsImdldEludGVybmFsTW9ja0NvbnRleHQiLCJNb2NrTWV0YU1vZGVsIiwib01ldGFEYXRhIiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aCIsIiRwYXRoIiwib01ldGFDb250ZXh0IiwicmVxdWVzdE9iamVjdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJnZXRDb250ZXh0IiwiTW9ja01vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwiYmluZExpc3QiLCJiaW5kQ29udGV4dCIsImdldE1ldGFNb2RlbCIsIm9NZXRhTW9kZWwiLCJtb2RlbEZyb21MaXN0QmluZGluZyIsIm1vZGVsRnJvbUNvbnRleHRCaW5kaW5nIiwidW5kZWZpbmVkIiwic2V0TWV0YU1vZGVsIiwiTW9ja1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0Vmlld0RhdGEiLCJnZXRJZCIsIk1vY2tDb250cm9sbGVyIiwiZ2V0VmlldyIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb1RhcmdldCIsIl9lZGl0RmxvdyIsInN5bmNUYXNrIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJtb2NrTVZDIiwiZXhpc3RpbmciLCJtb2RlbCIsInZpZXciLCJjb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBRkE7QUFDQTtBQUNBO01BWWFBLFc7QUFDWix5QkFBMkJDLE9BQTNCLEVBQWtEQyxRQUFsRCxFQUFrRTtBQUFBOztBQUFBLFdBTTNEQyxXQU4yRCxHQU03Q0MsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUM3QyxlQUFPLEtBQUksQ0FBQ0wsT0FBTCxDQUFhSyxHQUFiLENBQVA7QUFDQSxPQUZvQixDQU42QztBQUFBLFdBUzNEQyxlQVQyRCxHQVN6Q0gsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUNqRCxlQUFPRSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsS0FBSSxDQUFDUixPQUFMLENBQWFLLEdBQWIsQ0FBaEIsQ0FBUDtBQUNBLE9BRndCLENBVHlDO0FBQUEsV0FZM0RJLFdBWjJELEdBWTdDTixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWNLLEtBQWQsRUFBNkI7QUFDekQsUUFBQSxLQUFJLENBQUNW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O0FBQ0FELElBQUFBLElBQUksQ0FBQ3pFLFFBQUwsQ0FBY08sZUFBZCxDQUE4QmlFLEtBQTlCO0FBQ0FFLElBQUFBLFVBQVUsQ0FBQ1gsT0FBWCxDQUFtQnhELGVBQW5CLENBQW1Da0UsSUFBbkM7QUFFQSxXQUFPO0FBQUVELE1BQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTQyxNQUFBQSxJQUFJLEVBQUpBLElBQVQ7QUFBZUMsTUFBQUEsVUFBVSxFQUFWQTtBQUFmLEtBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBhIFY0IENvbnRleHRcbiAqL1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHQgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRleHQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMub0JpbmRpbmc/LmdldE1vZGVsKCkgYXMgYW55KSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIGlzVHJhbnNpZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPFVJNUVsZW1lbnQ+IHtcblx0W2tleTogc3RyaW5nXTogYW55O1xuXHRwdWJsaWMgYmluZGluZ0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh0aGlzLmJpbmRpbmdDb250ZXh0KTtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZGF0YSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGFyZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2wgZXh0ZW5kcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbD4ge1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQ6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrRXZlbnQgaW1wbGVtZW50cyBQYXJ0aWFsPEV2ZW50PiB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30sIHB1YmxpYyBzb3VyY2U6IE1vY2tVSTVFbGVtZW50ID0gbmV3IE1vY2tVSTVFbGVtZW50KCkpIHt9XG5cblx0cHVibGljIGdldFBhcmFtZXRlciA9IGplc3QuZm4obmFtZSA9PiB0aGlzLnBhcmFtc1tuYW1lXSk7XG5cblx0cHVibGljIGdldFNvdXJjZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5zb3VyY2UgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBMaXN0QmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgTW9ja0xpc3RCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUxpc3RCaW5kaW5nPiB7XG5cdHByaXZhdGUgYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUNvbnRleHRzPzogYW55W10sIHByaXZhdGUgbW9ja01vZGVsPzogTW9ja01vZGVsKSB7XG5cdFx0YUNvbnRleHRzID0gYUNvbnRleHRzIHx8IFtdO1xuXG5cdFx0dGhpcy5hTW9ja0NvbnRleHRzID0gYUNvbnRleHRzLm1hcChjb250ZXh0ID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgodGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSkgYXMgQ29udGV4dFtdKTtcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldEN1cnJlbnRDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkpIGFzIENvbnRleHRbXTtcblx0fSk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrTW9kZWwgYXMgYW55KSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRwcml2YXRlIG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9Db250ZXh0PzogYW55LCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgYXR0YWNoRXZlbnRPbmNlID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMubW9ja01vZGVsIGFzIGFueSkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdHJlcXVlc3RWYWx1ZUxpc3RJbmZvITogamVzdC5Nb2NrPGFueSwgYW55PjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIChuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSkgYXMgYW55KSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHR9KTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBjcmVhdGVCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gKG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TWV0YVBhdGggPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9KTtcblx0cHVibGljIGdldENvbnRleHQgPSBqZXN0LmZuKCk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTW9kZWxcbiAqL1xuXG5leHBvcnQgY2xhc3MgTW9ja01vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1vZGVsPiB7XG5cdHByaXZhdGUgb01ldGFNb2RlbD86IE1vY2tNZXRhTW9kZWw7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBwcml2YXRlIG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykge1xuXHRcdGlmIChtb2NrTGlzdEJpbmRpbmcpIHtcblx0XHRcdG1vY2tMaXN0QmluZGluZy5zZXRNb2RlbCh0aGlzKTtcblx0XHR9XG5cdFx0aWYgKG1vY2tDb250ZXh0QmluZGluZykge1xuXHRcdFx0bW9ja0NvbnRleHRCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEZhY3Rvcmllc1xuXHRzdGF0aWMgbW9kZWxGcm9tTGlzdEJpbmRpbmcobW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKG1vY2tMaXN0QmluZGluZyk7XG5cdH1cblx0c3RhdGljIG1vZGVsRnJvbUNvbnRleHRCaW5kaW5nKG1vY2tDb250ZXh0QmluZGluZzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0XHRyZXR1cm4gbmV3IE1vY2tNb2RlbCh1bmRlZmluZWQsIG1vY2tDb250ZXh0QmluZGluZyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TWV0YU1vZGVsKG9NZXRhTW9kZWw6IE1vY2tNZXRhTW9kZWwpIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBiaW5kTGlzdCA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMubW9ja0xpc3RCaW5kaW5nIGFzIGFueSkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRDb250ZXh0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrQ29udGV4dEJpbmRpbmcgYXMgYW55KSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRQcm9wZXJ0eSA9IGplc3QuZm4oKTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgcmVxdWVzdE9iamVjdCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFZpZXdEYXRhID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRJZCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sbGVyIGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sbGVyPiB7XG5cdHB1YmxpYyBnZXRWaWV3ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShuZXcgTW9ja1ZpZXcoKSk7XG5cblx0cHVibGljIF9yb3V0aW5nID0ge1xuXHRcdG5hdmlnYXRlVG9UYXJnZXQ6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfZWRpdEZsb3cgPSB7XG5cdFx0c3luY1Rhc2s6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfc2lkZUVmZmVjdHMgPSB7XG5cdFx0aGFuZGxlRmllbGRDaGFuZ2U6IGplc3QuZm4oKVxuXHR9O1xuXG5cdGlzQSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IG5ldyBNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IG5ldyBNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgbmV3IE1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG4iXX0=
|
|
432
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInRoYXQiLCJyZXN1bHQiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsInJlZHVjZSIsInN1bSIsInBhcnQiLCJnZXRQYXRoIiwiZ2V0QmluZGluZyIsImdldE1vZGVsIiwiaXNUcmFuc2llbnQiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInJlcXVlc3RPYmplY3QiLCJpc0EiLCJzQ2xhc3NOYW1lIiwiTW9ja1VJNUVsZW1lbnQiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibW9ja1JldHVyblZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJkYXRhIiwiZ2V0UGFyZW50IiwiTW9ja0NvbnRyb2wiLCJNb2NrRXZlbnQiLCJwYXJhbXMiLCJzb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJuYW1lIiwiZ2V0U291cmNlIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwibW9ja01vZGVsIiwic2V0QWdncmVnYXRpb24iLCJmaWx0ZXIiLCJzb3J0IiwicmVxdWVzdENvbnRleHRzIiwiYU1vY2tDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldFVwZGF0ZUdyb3VwSWQiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwibW9ja1BhdGgiLCJnZXRWYWx1ZSIsInNldFBhdGgiLCJNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb250ZXh0QmluZGluZyIsIm9Db250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01vY2tDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE1ldGFQYXRoIiwiZ2V0Q29udGV4dCIsIk1vY2tNb2RlbCIsIm1vY2tMaXN0QmluZGluZyIsIm1vY2tDb250ZXh0QmluZGluZyIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsIm1vZGVsRnJvbUxpc3RCaW5kaW5nIiwibW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJzZXRNZXRhTW9kZWwiLCJNb2NrVmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRWaWV3RGF0YSIsImdldElkIiwiTW9ja0NvbnRyb2xsZXIiLCJnZXRWaWV3IiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiX2VkaXRGbG93Iiwic3luY1Rhc2siLCJfc2lkZUVmZmVjdHMiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm1vY2tNVkMiLCJleGlzdGluZyIsIm1vZGVsIiwidmlldyIsImNvbnRyb2xsZXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFGQTtBQUNBO0FBQ0E7TUFlYUEsVztBQUVaLHlCQUEyQkMsT0FBM0IsRUFBa0RDLFFBQWxELEVBQWtFO0FBQUE7O0FBQUEsV0FEMURDLFdBQzBELEdBRDVDLEtBQzRDO0FBQUEsV0FNM0RDLFdBTjJELEdBTTdDQyxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQzdDLGVBQU8s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QUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUUsSUFBVixLQUFrQixJQUFJZixRQUFKLEVBQS9CO0FBQ0EsUUFBTWdCLFVBQVUsR0FBRyxDQUFBSCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUcsVUFBVixLQUF3QixJQUFJWixjQUFKLEVBQTNDO0FBRUFXLElBQUFBLElBQUksQ0FBQ2QsYUFBTCxDQUFtQjdELGVBQW5CLENBQW1DNEUsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDekYsUUFBTCxDQUFjYyxlQUFkLENBQThCMEUsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CakUsZUFBbkIsQ0FBbUMyRSxJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZz8uZ2V0TW9kZWwoKSBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgc2V0S2VlcEFsaXZlID0gamVzdC5mbigoYm9vbDogYm9vbGVhbiwgX2ZuT25CZWZvcmVEZXN0cm95PzogYW55LCBfYlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmlzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdHB1YmxpYyBpc0tlZXBBbGl2ZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5pc0tlcHRBbGl2ZSk7XG5cdHB1YmxpYyByZXF1ZXN0U2lkZUVmZmVjdHMgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPFVJNUVsZW1lbnQ+IHtcblx0W2tleTogc3RyaW5nXTogYW55O1xuXHRwdWJsaWMgYmluZGluZ0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh0aGlzLmJpbmRpbmdDb250ZXh0KTtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZGF0YSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGFyZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2wgZXh0ZW5kcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbD4ge1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQ6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbDogamVzdC5Nb2NrPGFueSwgYW55PiA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tFdmVudCBpbXBsZW1lbnRzIFBhcnRpYWw8RXZlbnQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSwgcHVibGljIHNvdXJjZTogTW9ja1VJNUVsZW1lbnQgPSBuZXcgTW9ja1VJNUVsZW1lbnQoKSkge31cblxuXHRwdWJsaWMgZ2V0UGFyYW1ldGVyID0gamVzdC5mbigobmFtZSkgPT4gdGhpcy5wYXJhbXNbbmFtZV0pO1xuXG5cdHB1YmxpYyBnZXRTb3VyY2UgPSBqZXN0LmZuKCgpID0+IHRoaXMuc291cmNlIGFzIGFueSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tMaXN0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFMaXN0QmluZGluZz4ge1xuXHRwcml2YXRlIGFNb2NrQ29udGV4dHM6IE1vY2tDb250ZXh0W107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFDb250ZXh0cz86IGFueVtdLCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdGFDb250ZXh0cyA9IGFDb250ZXh0cyB8fCBbXTtcblxuXHRcdHRoaXMuYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0cy5tYXAoKGNvbnRleHQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFNb2NrQ29udGV4dHMgYXMgYW55IGFzIENvbnRleHRbXSk7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRDdXJyZW50Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkgYXMgQ29udGV4dFtdO1xuXHR9KTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIGdldFVwZGF0ZUdyb3VwSWQgPSBqZXN0LmZuKCgpID0+IFwiYXV0b1wiKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tQcm9wZXJ0eUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhUHJvcGVydHlCaW5kaW5nPiB7XG5cdHByaXZhdGUgbW9ja01vZGVsITogSlNPTk1vZGVsO1xuXHRwcml2YXRlIG1vY2tQYXRoITogc3RyaW5nO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2NrTW9kZWw6IEpTT05Nb2RlbCwgbW9ja1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuc2V0TW9kZWwobW9ja01vZGVsKTtcblx0XHR0aGlzLnNldFBhdGgobW9ja1BhdGgpO1xuXHR9XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIHNldFBhdGgocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5tb2NrUGF0aCA9IHBhdGggPyBwYXRoIDogXCJcIjtcblx0fVxuXHRwdWJsaWMgZ2V0UGF0aCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tQYXRoO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0VmFsdWUgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcz8ubW9ja01vZGVsPy5nZXRQcm9wZXJ0eShcIi9cIiArIHRoaXMubW9ja1BhdGgpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb21wb3NpdGVCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxDb21wb3NpdGVCaW5kaW5nPiB7XG5cdHByaXZhdGUgYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKSB7XG5cdFx0dGhpcy5hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmluZGluZ3MgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5hQmluZGluZ3M7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRWYWx1ZSA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHRCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdHByaXZhdGUgb01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0cHJpdmF0ZSBpc0tlcHRBbGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvQ29udGV4dD86IGFueSwgcHJpdmF0ZSBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm9Nb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgdGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH1cblx0cHVibGljIGdldEludGVybmFsTW9ja0NvbnRleHQoKTogTW9ja0NvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dDtcblx0fVxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIGdldEJvdW5kQ29udGV4dCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBhdHRhY2hFdmVudE9uY2UgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdHJlcXVlc3RWYWx1ZUxpc3RJbmZvITogamVzdC5Nb2NrPGFueSwgYW55PjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgY3JlYXRlQmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhUGF0aCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0Q29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNb2RlbFxuICovXG5cbmV4cG9ydCBjbGFzcyBNb2NrTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTW9kZWw+IHtcblx0cHJpdmF0ZSBvTWV0YU1vZGVsPzogTW9ja01ldGFNb2RlbDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIHByaXZhdGUgbW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0aWYgKG1vY2tMaXN0QmluZGluZykge1xuXHRcdFx0bW9ja0xpc3RCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAobW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0XHRtb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFjdG9yaWVzXG5cdHN0YXRpYyBtb2RlbEZyb21MaXN0QmluZGluZyhtb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwobW9ja0xpc3RCaW5kaW5nKTtcblx0fVxuXHRzdGF0aWMgbW9kZWxGcm9tQ29udGV4dEJpbmRpbmcobW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKHVuZGVmaW5lZCwgbW9ja0NvbnRleHRCaW5kaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRNZXRhTW9kZWwob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRMaXN0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tMaXN0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRDb250ZXh0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tDb250ZXh0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhTW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsIGFzIGFueSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIGdldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFZpZXdEYXRhID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRJZCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sbGVyIGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sbGVyPiB7XG5cdHB1YmxpYyBnZXRWaWV3ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShuZXcgTW9ja1ZpZXcoKSk7XG5cblx0cHVibGljIF9yb3V0aW5nID0ge1xuXHRcdG5hdmlnYXRlVG9UYXJnZXQ6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfZWRpdEZsb3cgPSB7XG5cdFx0c3luY1Rhc2s6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfc2lkZUVmZmVjdHMgPSB7XG5cdFx0aGFuZGxlRmllbGRDaGFuZ2U6IGplc3QuZm4oKVxuXHR9O1xuXG5cdGlzQSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IG5ldyBNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IG5ldyBNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgbmV3IE1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG4iXX0=
|
|
@@ -6,13 +6,17 @@ import Control from "sap/ui/core/Control";
|
|
|
6
6
|
import UI5Element from "sap/ui/core/Element";
|
|
7
7
|
import Controller from "sap/ui/core/mvc/Controller";
|
|
8
8
|
import View from "sap/ui/core/mvc/View";
|
|
9
|
+
import CompositeBinding from "sap/ui/model/CompositeBinding";
|
|
10
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
9
11
|
import Context from "sap/ui/model/odata/v4/Context";
|
|
10
|
-
import ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
11
12
|
import ODataContextBinding from "sap/ui/model/odata/v4/ODataContextBinding";
|
|
13
|
+
import ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
12
14
|
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
13
15
|
import ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
16
|
+
import ODataPropertyBinding from "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
14
17
|
|
|
15
18
|
export class MockContext implements Partial<Context> {
|
|
19
|
+
private isKeptAlive = false;
|
|
16
20
|
public constructor(private oValues?: any, private oBinding?: any) {}
|
|
17
21
|
|
|
18
22
|
public isA(sClassName: string): boolean {
|
|
@@ -52,9 +56,16 @@ export class MockContext implements Partial<Context> {
|
|
|
52
56
|
return this.oBinding;
|
|
53
57
|
});
|
|
54
58
|
public getModel = jest.fn(() => {
|
|
55
|
-
return
|
|
59
|
+
return this.oBinding?.getModel() as any as ODataModel;
|
|
56
60
|
});
|
|
57
61
|
public isTransient = jest.fn();
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
63
|
+
public setKeepAlive = jest.fn((bool: boolean, _fnOnBeforeDestroy?: any, _bRequestMessages?: boolean) => {
|
|
64
|
+
this.isKeptAlive = bool;
|
|
65
|
+
});
|
|
66
|
+
public isKeepAlive = jest.fn(() => this.isKeptAlive);
|
|
67
|
+
public requestSideEffects = jest.fn();
|
|
68
|
+
public requestObject = jest.fn();
|
|
58
69
|
}
|
|
59
70
|
|
|
60
71
|
export class MockUI5Element implements Partial<UI5Element> {
|
|
@@ -70,12 +81,13 @@ export class MockUI5Element implements Partial<UI5Element> {
|
|
|
70
81
|
|
|
71
82
|
export class MockControl extends MockUI5Element implements Partial<Control> {
|
|
72
83
|
public getBindingContext: jest.Mock<any, any> = jest.fn();
|
|
84
|
+
public getModel: jest.Mock<any, any> = jest.fn();
|
|
73
85
|
}
|
|
74
86
|
|
|
75
87
|
export class MockEvent implements Partial<Event> {
|
|
76
88
|
public constructor(public params: { [key: string]: any } = {}, public source: MockUI5Element = new MockUI5Element()) {}
|
|
77
89
|
|
|
78
|
-
public getParameter = jest.fn(name => this.params[name]);
|
|
90
|
+
public getParameter = jest.fn((name) => this.params[name]);
|
|
79
91
|
|
|
80
92
|
public getSource = jest.fn(() => this.source as any);
|
|
81
93
|
}
|
|
@@ -89,7 +101,7 @@ export class MockListBinding implements Partial<ODataListBinding> {
|
|
|
89
101
|
public constructor(aContexts?: any[], private mockModel?: MockModel) {
|
|
90
102
|
aContexts = aContexts || [];
|
|
91
103
|
|
|
92
|
-
this.aMockContexts = aContexts.map(context => {
|
|
104
|
+
this.aMockContexts = aContexts.map((context) => {
|
|
93
105
|
return new MockContext(context, this);
|
|
94
106
|
});
|
|
95
107
|
}
|
|
@@ -109,19 +121,73 @@ export class MockListBinding implements Partial<ODataListBinding> {
|
|
|
109
121
|
|
|
110
122
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
111
123
|
public requestContexts = jest.fn((...args) => {
|
|
112
|
-
return Promise.resolve(
|
|
124
|
+
return Promise.resolve(this.aMockContexts as any as Context[]);
|
|
113
125
|
});
|
|
114
126
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
115
127
|
public getCurrentContexts = jest.fn((...args) => {
|
|
116
|
-
return
|
|
128
|
+
return this.aMockContexts as any as Context[];
|
|
117
129
|
});
|
|
118
130
|
public getModel = jest.fn(() => {
|
|
119
|
-
return
|
|
131
|
+
return this.mockModel as any as ODataModel;
|
|
132
|
+
});
|
|
133
|
+
public getUpdateGroupId = jest.fn(() => "auto");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export class MockPropertyBinding implements Partial<ODataPropertyBinding> {
|
|
137
|
+
private mockModel!: JSONModel;
|
|
138
|
+
private mockPath!: string;
|
|
139
|
+
|
|
140
|
+
public constructor(mockModel: JSONModel, mockPath: string) {
|
|
141
|
+
this.setModel(mockModel);
|
|
142
|
+
this.setPath(mockPath);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
public isA(sClassName: string): boolean {
|
|
146
|
+
return sClassName === "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
public setModel(oModel: JSONModel) {
|
|
150
|
+
this.mockModel = oModel;
|
|
151
|
+
}
|
|
152
|
+
public getModel = jest.fn(() => {
|
|
153
|
+
return this.mockModel as any as ODataModel;
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
public setPath(path: string | undefined) {
|
|
157
|
+
this.mockPath = path ? path : "";
|
|
158
|
+
}
|
|
159
|
+
public getPath = jest.fn(() => {
|
|
160
|
+
return this.mockPath;
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
public getValue = jest.fn(() => {
|
|
164
|
+
return this?.mockModel?.getProperty("/" + this.mockPath);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export class MockCompositeBinding implements Partial<CompositeBinding> {
|
|
169
|
+
private aBindings: MockPropertyBinding[];
|
|
170
|
+
|
|
171
|
+
public constructor(aBindings: MockPropertyBinding[]) {
|
|
172
|
+
this.aBindings = aBindings;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public isA(sClassName: string): boolean {
|
|
176
|
+
return sClassName === "sap.ui.model.CompositeBinding";
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
public getBindings = jest.fn(() => {
|
|
180
|
+
return this.aBindings;
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
public getValue = jest.fn(() => {
|
|
184
|
+
return this.aBindings.map((binding) => binding.getValue());
|
|
120
185
|
});
|
|
121
186
|
}
|
|
122
187
|
|
|
123
188
|
export class MockContextBinding implements Partial<ODataContextBinding> {
|
|
124
189
|
private oMockContext: MockContext;
|
|
190
|
+
private isKeptAlive: boolean = false;
|
|
125
191
|
|
|
126
192
|
public constructor(oContext?: any, private mockModel?: MockModel) {
|
|
127
193
|
this.oMockContext = new MockContext(oContext || {}, this);
|
|
@@ -139,11 +205,11 @@ export class MockContextBinding implements Partial<ODataContextBinding> {
|
|
|
139
205
|
|
|
140
206
|
// Mocked API
|
|
141
207
|
public getBoundContext = jest.fn(() => {
|
|
142
|
-
return
|
|
208
|
+
return this.oMockContext as any as Context;
|
|
143
209
|
});
|
|
144
210
|
public attachEventOnce = jest.fn();
|
|
145
211
|
public getModel = jest.fn(() => {
|
|
146
|
-
return
|
|
212
|
+
return this.mockModel as any as ODataModel;
|
|
147
213
|
});
|
|
148
214
|
}
|
|
149
215
|
|
|
@@ -161,14 +227,14 @@ export class MockMetaModel implements Partial<ODataMetaModel> {
|
|
|
161
227
|
// Mocked API
|
|
162
228
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
163
229
|
public getMetaContext = jest.fn((sPath: string) => {
|
|
164
|
-
return
|
|
230
|
+
return new MockContext({ $path: sPath }) as any as Context;
|
|
165
231
|
});
|
|
166
232
|
public getObject = jest.fn((sPath: string) => {
|
|
167
233
|
return this.oMetaContext.getProperty(sPath);
|
|
168
234
|
});
|
|
169
235
|
public requestObject = jest.fn();
|
|
170
236
|
public createBindingContext = jest.fn((sPath: string) => {
|
|
171
|
-
return
|
|
237
|
+
return new MockContext({ $path: sPath }) as any as Context;
|
|
172
238
|
});
|
|
173
239
|
public getMetaPath = jest.fn((sPath: string) => {
|
|
174
240
|
return sPath;
|
|
@@ -207,19 +273,20 @@ export class MockModel implements Partial<ODataModel> {
|
|
|
207
273
|
// Mocked API
|
|
208
274
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
209
275
|
public bindList = jest.fn((...args) => {
|
|
210
|
-
return
|
|
276
|
+
return this.mockListBinding as any as ODataListBinding;
|
|
211
277
|
});
|
|
212
278
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
213
279
|
public bindContext = jest.fn((...args) => {
|
|
214
|
-
return
|
|
280
|
+
return this.mockContextBinding as any as ODataContextBinding;
|
|
215
281
|
});
|
|
216
282
|
public getMetaModel = jest.fn(() => {
|
|
217
|
-
return
|
|
283
|
+
return this.oMetaModel as any as ODataMetaModel;
|
|
218
284
|
});
|
|
219
285
|
|
|
220
286
|
public getProperty = jest.fn();
|
|
221
287
|
public setProperty = jest.fn();
|
|
222
288
|
public requestObject = jest.fn();
|
|
289
|
+
public getKeepAliveContext = jest.fn();
|
|
223
290
|
}
|
|
224
291
|
|
|
225
292
|
export class MockView implements Partial<View> {
|