@sapui5/sap.fe.test 1.93.3 → 1.96.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 +2 -2
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/Flexibility.js +33 -8
- package/src/sap/fe/test/JestTemplatingHelper.js +32 -7
- package/src/sap/fe/test/JestTemplatingHelper.ts +23 -6
- package/src/sap/fe/test/ListReport.js +20 -3
- package/src/sap/fe/test/ObjectPage.js +52 -0
- package/src/sap/fe/test/Shell.js +16 -11
- package/src/sap/fe/test/TemplatePage.js +48 -0
- package/src/sap/fe/test/UI5MockHelper.js +218 -0
- package/src/sap/fe/test/UI5MockHelper.ts +137 -0
- package/src/sap/fe/test/Utils.js +5 -1
- package/src/sap/fe/test/api/BaseAPI.js +10 -0
- package/src/sap/fe/test/api/ChartActions.js +11 -0
- package/src/sap/fe/test/api/ChartAssertions.js +35 -7
- package/src/sap/fe/test/api/DialogAPI.js +82 -37
- package/src/sap/fe/test/api/DialogActions.js +27 -0
- package/src/sap/fe/test/api/DialogAssertions.js +33 -0
- package/src/sap/fe/test/api/DialogCreateActions.js +3 -1
- package/src/sap/fe/test/api/DialogCreateAssertions.js +1 -1
- package/src/sap/fe/test/api/FilterBarActions.js +21 -15
- package/src/sap/fe/test/api/FilterBarAssertions.js +38 -6
- package/src/sap/fe/test/api/FormActions.js +33 -9
- package/src/sap/fe/test/api/HeaderAssertions.js +29 -12
- package/src/sap/fe/test/api/KPICardAPI.js +28 -0
- package/src/sap/fe/test/api/KPICardAssertions.js +204 -0
- package/src/sap/fe/test/api/TableActions.js +49 -0
- package/src/sap/fe/test/api/TableAssertions.js +27 -0
- package/src/sap/fe/test/builder/KPIBuilder.js +60 -4
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +2 -0
- package/src/sap/fe/test/builder/MdcTableBuilder.js +63 -0
- package/src/sap/fe/test/library.js +1 -1
- package/src/sap/fe/test/massEdit.js +33 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapui5/sap.fe.test",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.96.2",
|
|
4
4
|
"description": "SAPUI5 Library sap.fe.test",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "SAP SE (https://www.sap.com)",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"ui5"
|
|
17
17
|
],
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@babel/cli": "7.8
|
|
19
|
+
"@babel/cli": "^7.14.8",
|
|
20
20
|
"@ui5/cli": "^2.10.0",
|
|
21
21
|
"copyfiles": "2.2.0",
|
|
22
22
|
"xpath": "0.0.27"
|
package/src/sap/fe/test/.library
CHANGED
|
@@ -220,7 +220,7 @@ sap.ui.define(["sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/ui/qunit/QUnit
|
|
|
220
220
|
iExecutePopOverActionByIcon: function(sIcon, sDescription) {
|
|
221
221
|
return OpaBuilder.create(this)
|
|
222
222
|
.viewId(null)
|
|
223
|
-
.hasType("sap.
|
|
223
|
+
.hasType("sap.ui.unified.MenuItem")
|
|
224
224
|
.hasProperties({ icon: "sap-icon://" + sIcon }) // e.g. edit, add, rename, less (=remove), scissors (=cut), paste
|
|
225
225
|
.isDialogElement()
|
|
226
226
|
.doPress()
|
|
@@ -387,7 +387,9 @@ sap.ui.define(["sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/ui/qunit/QUnit
|
|
|
387
387
|
|
|
388
388
|
iEnterTextInSearchfield: function(sNewText) {
|
|
389
389
|
return OpaBuilder.create(this)
|
|
390
|
+
.viewId(null)
|
|
390
391
|
.hasType("sap.m.SearchField")
|
|
392
|
+
.isDialogElement()
|
|
391
393
|
.checkNumberOfMatches(1)
|
|
392
394
|
.doEnterText(sNewText)
|
|
393
395
|
.description("Enter text: '" + sNewText + "'")
|
|
@@ -575,7 +577,7 @@ sap.ui.define(["sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/ui/qunit/QUnit
|
|
|
575
577
|
|
|
576
578
|
iSeeThePopover: function() {
|
|
577
579
|
return OpaBuilder.create(this)
|
|
578
|
-
.hasType("sap.
|
|
580
|
+
.hasType("sap.ui.unified.Menu")
|
|
579
581
|
.description("Seeing the Popover")
|
|
580
582
|
.execute();
|
|
581
583
|
},
|
|
@@ -589,6 +591,15 @@ sap.ui.define(["sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/ui/qunit/QUnit
|
|
|
589
591
|
.execute();
|
|
590
592
|
},
|
|
591
593
|
|
|
594
|
+
iSeeTheMenuItemByIcon: function(sIcon, sDescription) {
|
|
595
|
+
return OpaBuilder.create(this)
|
|
596
|
+
.hasType("sap.ui.unified.MenuItem")
|
|
597
|
+
.isDialogElement()
|
|
598
|
+
.hasProperties({ icon: sIcon })
|
|
599
|
+
.description("Seeing " + sDescription)
|
|
600
|
+
.execute();
|
|
601
|
+
},
|
|
602
|
+
|
|
592
603
|
iDoNotSeeTheButtonByIcon: function(sIcon, sDescription) {
|
|
593
604
|
return OpaBuilder.create(this)
|
|
594
605
|
.hasType("sap.m.Button")
|
|
@@ -603,6 +614,20 @@ sap.ui.define(["sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/ui/qunit/QUnit
|
|
|
603
614
|
.execute();
|
|
604
615
|
},
|
|
605
616
|
|
|
617
|
+
iDoNotSeeTheMenuItemByIcon: function(sIcon, sDescription) {
|
|
618
|
+
return OpaBuilder.create(this)
|
|
619
|
+
.hasType("sap.ui.unified.MenuItem")
|
|
620
|
+
.isDialogElement()
|
|
621
|
+
.check(function(aButtons) {
|
|
622
|
+
var bFound = aButtons.some(function(oButton) {
|
|
623
|
+
return oButton.getProperty("icon") === sIcon;
|
|
624
|
+
});
|
|
625
|
+
return bFound === false;
|
|
626
|
+
}, true)
|
|
627
|
+
.description("Not seeing " + sDescription)
|
|
628
|
+
.execute();
|
|
629
|
+
},
|
|
630
|
+
|
|
606
631
|
iSeeTheVariantManagementPopover: function() {
|
|
607
632
|
return this.iSeeTheButtonByIcon("sap-icon://duplicate", "The Popover");
|
|
608
633
|
},
|
|
@@ -612,27 +637,27 @@ sap.ui.define(["sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/ui/qunit/QUnit
|
|
|
612
637
|
},
|
|
613
638
|
|
|
614
639
|
iSeeTheRenameButton: function() {
|
|
615
|
-
return this.
|
|
640
|
+
return this.iSeeTheMenuItemByIcon("sap-icon://edit", "the button 'rename'");
|
|
616
641
|
},
|
|
617
642
|
|
|
618
643
|
iSeeTheAddButton: function() {
|
|
619
|
-
return this.
|
|
644
|
+
return this.iSeeTheMenuItemByIcon("sap-icon://add", "the button 'add'");
|
|
620
645
|
},
|
|
621
646
|
|
|
622
647
|
iSeeTheCreateGroupButton: function() {
|
|
623
|
-
return this.
|
|
648
|
+
return this.iSeeTheMenuItemByIcon("sap-icon://add-folder", "the button 'create group'");
|
|
624
649
|
},
|
|
625
650
|
|
|
626
651
|
iDoNotSeeTheRenameButton: function() {
|
|
627
|
-
return this.
|
|
652
|
+
return this.iDoNotSeeTheMenuItemByIcon("sap-icon://edit", "the button 'rename'");
|
|
628
653
|
},
|
|
629
654
|
|
|
630
655
|
iDoNotSeeTheAddButton: function() {
|
|
631
|
-
return this.
|
|
656
|
+
return this.iDoNotSeeTheMenuItemByIcon("sap-icon://add", "the button 'add'");
|
|
632
657
|
},
|
|
633
658
|
|
|
634
659
|
iDoNotSeeTheRemoveButton: function() {
|
|
635
|
-
return this.
|
|
660
|
+
return this.iDoNotSeeTheMenuItemByIcon("sap-icon://less", "the button 'remove'");
|
|
636
661
|
},
|
|
637
662
|
|
|
638
663
|
iSeeThePopoverDialog: function() {
|
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/macros/
|
|
5
|
+
sap.ui.define(["sap/fe/macros/PhantomUtil", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/core/util/XMLPreprocessor", "sap/base/Log", "xpath", "fs", "@sap/cds-compiler", "prettier", "sap/ui/base/BindingParser", "sap/ui/model/json/JSONModel", "sap/ui/core/InvisibleText", "sap/base/util/merge", "path", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory"], function (PhantomUtil, _MetadataRequestor, ODataMetaModel, XMLPreprocessor, Log, xpath, fs, cds_compiler, prettier, BindingParser, JSONModel, InvisibleText, merge, path, ConverterContext, SideEffectsFactory) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var format = prettier.format;
|
|
10
10
|
var to = cds_compiler.to;
|
|
11
11
|
var compileSources = cds_compiler.compileSources;
|
|
12
|
-
var compactModel = cds_compiler.compactModel;
|
|
13
12
|
|
|
14
|
-
PhantomUtil.register(FieldMetadata);
|
|
15
13
|
Log.setLevel(1, "sap.ui.core.util.XMLPreprocessor");
|
|
16
14
|
jest.setTimeout(40000);
|
|
17
15
|
var nameSpaceMap = {
|
|
@@ -38,6 +36,16 @@ sap.ui.define(["sap/fe/macros/internal/Field.metadata", "sap/fe/macros/PhantomUt
|
|
|
38
36
|
|
|
39
37
|
_exports.registerMacro = registerMacro;
|
|
40
38
|
|
|
39
|
+
var unregisterMacro = function (macroMetadata) {
|
|
40
|
+
XMLPreprocessor.plugIn(null, macroMetadata.namespace, macroMetadata.name);
|
|
41
|
+
|
|
42
|
+
if (macroMetadata.publicName) {
|
|
43
|
+
XMLPreprocessor.plugIn(null, macroMetadata.publicNamespace, macroMetadata.publicName);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
_exports.unregisterMacro = unregisterMacro;
|
|
48
|
+
|
|
41
49
|
var runXPathQuery = function (selector, xmldom) {
|
|
42
50
|
return select(selector, xmldom);
|
|
43
51
|
};
|
|
@@ -96,8 +104,7 @@ sap.ui.define(["sap/fe/macros/internal/Field.metadata", "sap/fe/macros/PhantomUt
|
|
|
96
104
|
var csn = compileSources({
|
|
97
105
|
"string.cds": cdsString
|
|
98
106
|
}, {});
|
|
99
|
-
var
|
|
100
|
-
var edmxContent = to.edmx(csnModel, {
|
|
107
|
+
var edmxContent = to.edmx(csn, {
|
|
101
108
|
service: "sap.fe.test.JestService"
|
|
102
109
|
});
|
|
103
110
|
var dir = path.resolve(sCDSUrl, "..", "gen");
|
|
@@ -247,7 +254,15 @@ sap.ui.define(["sap/fe/macros/internal/Field.metadata", "sap/fe/macros/PhantomUt
|
|
|
247
254
|
try {
|
|
248
255
|
var templatedXml = "<root>".concat(xmlInput, "</root>");
|
|
249
256
|
var parser = new window.DOMParser();
|
|
250
|
-
var xmlDoc = parser.parseFromString(templatedXml, "text/xml");
|
|
257
|
+
var xmlDoc = parser.parseFromString(templatedXml, "text/xml"); // To ensure our macro can use #setBindingContext we ensure there is a pre existing JSONModel for converterContext
|
|
258
|
+
// if not already passed to teh templating
|
|
259
|
+
|
|
260
|
+
if (!mModels.hasOwnProperty("converterContext")) {
|
|
261
|
+
mModels = Object.assign(mModels, {
|
|
262
|
+
"converterContext": new JSONModel({})
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
251
266
|
return Promise.resolve(getMetaModel(sMetadataUrl)).then(function (oMetaModel) {
|
|
252
267
|
var oPreprocessorSettings = {
|
|
253
268
|
models: Object.assign({
|
|
@@ -279,6 +294,16 @@ sap.ui.define(["sap/fe/macros/internal/Field.metadata", "sap/fe/macros/PhantomUt
|
|
|
279
294
|
};
|
|
280
295
|
|
|
281
296
|
_exports.getTemplatingResult = getTemplatingResult;
|
|
297
|
+
|
|
298
|
+
var getTemplatedXML = function (xmlInput, sMetadataUrl, mBindingContexts, mModels) {
|
|
299
|
+
try {
|
|
300
|
+
return Promise.resolve(getTemplatingResult(xmlInput, sMetadataUrl, mBindingContexts, mModels)).then(serializeXML);
|
|
301
|
+
} catch (e) {
|
|
302
|
+
return Promise.reject(e);
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
_exports.getTemplatedXML = getTemplatedXML;
|
|
282
307
|
return _exports;
|
|
283
308
|
}, false);
|
|
284
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbIlBoYW50b21VdGlsIiwicmVnaXN0ZXIiLCJGaWVsZE1ldGFkYXRhIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJsZW5ndGgiLCJ0b05vdEhhdmVDb250cm9sIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsInhtbFN0cmluZyIsInNlcmlhbGl6ZVRvU3RyaW5nIiwicmVwbGFjZSIsImZvcm1hdCIsInBhcnNlciIsImNvbXBpbGVDRFMiLCJzQ0RTVXJsIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJjc24iLCJjb21waWxlU291cmNlcyIsImNzbk1vZGVsIiwiY29tcGFjdE1vZGVsIiwiZWRteENvbnRlbnQiLCJ0byIsImVkbXgiLCJzZXJ2aWNlIiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJlZG14VXJsIiwiYmFzZW5hbWUiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJvTWV0YU1vZGVsIiwib1NlcnZpY2VDb250ZXh0Iiwic2NvcGVPYmplY3QiLCJzY29wZVR5cGUiLCJzZXR0aW5ncyIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwibmFtZSIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkiLCJDb252ZXJ0ZXJDb250ZXh0IiwibWVyZ2UiLCJtZXRhTW9kZWxDYWNoZSIsInNNZXRhZGF0YVVybCIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsInVuZGVmaW5lZCIsImZldGNoRW50aXR5Q29udGFpbmVyIiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhcmdzIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJqc29uTW9kZWwiLCJKU09OTW9kZWwiLCJ0ZXh0IiwiSW52aXNpYmxlVGV4dCIsImJpbmRQcm9wZXJ0eSIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFRleHQiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1vZGVscyIsIk9iamVjdCIsImFzc2lnbiIsIm1ldGFNb2RlbCIsImJpbmRpbmdDb250ZXh0cyIsImtleXMiLCJmb3JFYWNoIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBdUJBQSxFQUFBQSxXQUFXLENBQUNDLFFBQVosQ0FBcUJDLGFBQXJCO0FBRUFDLEVBQUFBLEdBQUcsQ0FBQ0MsUUFBSixDQUFhLENBQWIsRUFBdUIsa0NBQXZCO0FBQ0FDLEVBQUFBLElBQUksQ0FBQ0MsVUFBTCxDQUFnQixLQUFoQjtBQUVBLE1BQU1DLFlBQVksR0FBRztBQUNwQixjQUFVLGVBRFU7QUFFcEIsYUFBUyxlQUZXO0FBR3BCLGlCQUFhLGtFQUhPO0FBSXBCLFdBQU8sa0VBSmE7QUFLcEIsZ0JBQVksMEVBTFE7QUFNcEIsZUFBVyxzQkFOUztBQU9wQixZQUFRLGFBUFk7QUFRcEIsU0FBSyxPQVJlO0FBU3BCLFNBQUssb0JBVGU7QUFVcEIsV0FBTyxZQVZhO0FBV3BCLGdCQUFZLGtCQVhRO0FBWXBCLFNBQUssZ0JBWmU7QUFhcEIsdUJBQW1CLDBCQWJDO0FBY3BCLGtCQUFjO0FBZE0sR0FBckI7QUFnQkEsTUFBTUMsTUFBTSxHQUFHQyxLQUFLLENBQUNDLGFBQU4sQ0FBb0JILFlBQXBCLENBQWY7O0FBRU8sTUFBTUksYUFBYSxHQUFHLFVBQVNDLGFBQVQsRUFBNkI7QUFDekRa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U0FBbkMsQ0FOQyxDQWdCRDs7QUFDQUgsUUFBQUEsTUFBTSxDQUFDSSxJQUFQLENBQVlaLGdCQUFaLEVBQThCYSxPQUE5QixDQUFzQyxVQUFTQyxJQUFULEVBQWU7QUFDcEQ7QUFDQXBJLFVBQUFBLE1BQU0sQ0FBQyxPQUFPNEMsVUFBVSxDQUFDeUYsU0FBWCxDQUFxQmYsZ0JBQWdCLENBQUNjLElBQUQsQ0FBckMsQ0FBUixDQUFOLENBQTRERSxXQUE1RDtBQUNBLGNBQU1DLE1BQU0sR0FBR2hCLE9BQU8sQ0FBQ2EsSUFBRCxDQUFQLElBQWlCeEYsVUFBaEM7QUFDQWdGLFVBQUFBLHFCQUFxQixDQUFDSyxlQUF0QixDQUFzQ0csSUFBdEMsSUFBOENHLE1BQU0sQ0FBQ3JCLG9CQUFQLENBQTRCSSxnQkFBZ0IsQ0FBQ2MsSUFBRCxDQUE1QyxDQUE5QyxDQUpvRCxDQUkrQzs7QUFDbkdSLFVBQUFBLHFCQUFxQixDQUFDQyxNQUF0QixDQUE2Qk8sSUFBN0IsSUFBcUNHLE1BQXJDO0FBQ0EsU0FORCxFQWpCQyxDQXlCRDs7QUFDQSxZQUFJWCxxQkFBcUIsQ0FBQ0MsTUFBdEIsQ0FBNkIsTUFBN0IsQ0FBSixFQUEwQztBQUN6Q0QsVUFBQUEscUJBQXFCLENBQUNLLGVBQXRCLENBQXNDLE1BQXRDLElBQWdETCxxQkFBcUIsQ0FBQ0MsTUFBdEIsQ0FBNkIsTUFBN0IsRUFBcUNYLG9CQUFyQyxDQUEwRCxHQUExRCxDQUFoRDtBQUNBOztBQUVELGVBQU9zQixlQUFlLENBQUNDLE9BQWhCLENBQXdCZixNQUFNLENBQUNnQixpQkFBL0IsRUFBbUQ7QUFBRS9ELFVBQUFBLElBQUksRUFBRTtBQUFSLFNBQW5ELEVBQThFaUQscUJBQTlFLENBQVA7QUE5QkM7QUErQkQsS0FwQytCO0FBQUE7QUFBQTtBQUFBLEdBQXpCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRmllbGRNZXRhZGF0YSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9GaWVsZC5tZXRhZGF0YVwiO1xuaW1wb3J0IHsgUGhhbnRvbVV0aWwgfSBmcm9tIFwic2FwL2ZlL21hY3Jvc1wiO1xuaW1wb3J0IHsgX01ldGFkYXRhUmVxdWVzdG9yIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9saWJcIjtcbmltcG9ydCB7IE9EYXRhTWV0YU1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NFwiO1xuaW1wb3J0IHsgWE1MUHJlcHJvY2Vzc29yIH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWxcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJzYXAvYmFzZVwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBjb21wYWN0TW9kZWwsIGNvbXBpbGVTb3VyY2VzLCB0byB9IGZyb20gXCJAc2FwL2Nkcy1jb21waWxlclwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgeyBCaW5kaW5nUGFyc2VyIH0gZnJvbSBcInNhcC91aS9iYXNlXCI7XG5pbXBvcnQgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZXJPdXRwdXQsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEpTT05Nb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvanNvblwiO1xuaW1wb3J0IHsgSW52aXNpYmxlVGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZVwiO1xuaW1wb3J0IHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwic2FwL2Jhc2UvdXRpbFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuXG5QaGFudG9tVXRpbC5yZWdpc3RlcihGaWVsZE1ldGFkYXRhKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcIm1kY1wiOiBcInNhcC51aS5tZGNcIixcblx0XCJtZGNGaWVsZFwiOiBcInNhcC51aS5tZGMuZmllbGRcIixcblx0XCJ1XCI6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0XCJtYWNyb01pY3JvQ2hhcnRcIjogXCJzYXAuZmUubWFjcm9zLm1pY3JvY2hhcnRcIixcblx0XCJtaWNyb0NoYXJ0XCI6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbihtYWNyb01ldGFkYXRhOiBhbnkpIHtcblx0UGhhbnRvbVV0aWwucmVnaXN0ZXIobWFjcm9NZXRhZGF0YSk7XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbihzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoYC9yb290JHtzZWxlY3Rvcn1gLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9XG59KTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbihjb250cm9sU2VsZWN0b3I6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nLCB4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VsZWN0b3IgPSBgc3RyaW5nKC9yb290JHtjb250cm9sU2VsZWN0b3J9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uKHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGNvbnN0IHhtbFN0cmluZyA9IHNlcmlhbGl6ZXJcblx0XHQuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKVxuXHRcdC5yZXBsYWNlKC8oPzpbXFx0IF0qKD86XFxyP1xcbnxcXHIpKSsvZywgXCJcXG5cIilcblx0XHQucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xuXHRyZXR1cm4gZm9ybWF0KHhtbFN0cmluZywgeyBwYXJzZXI6IFwiaHRtbFwiIH0pO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNDRFNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBNVVNUIGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24oc0NEU1VybDogc3RyaW5nKSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzQ0RTVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBjc24gPSBjb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHNTdHJpbmcgfSwge30pO1xuXHRjb25zdCBjc25Nb2RlbCA9IGNvbXBhY3RNb2RlbChjc24pO1xuXHRjb25zdCBlZG14Q29udGVudCA9IHRvLmVkbXgoY3NuTW9kZWwsIHsgc2VydmljZTogXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiIH0pO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoc0NEU1VybCwgXCIuLlwiLCBcImdlblwiKTtcblx0Y29uc3QgZWRteFVybCA9IHBhdGgucmVzb2x2ZShkaXIsIHBhdGguYmFzZW5hbWUoc0NEU1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpKTtcblxuXHRpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuXHRcdGZzLm1rZGlyU3luYyhkaXIpO1xuXHR9XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14VXJsLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14VXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UgPSBhc3luYyBmdW5jdGlvbihvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbihvU2VydmljZUluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBvSmVzdFNpZGVFZmZlY3RzU2VydmljZSA9IG9TZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0b0plc3RTaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2NvcGVPYmplY3Q6IHtcblx0XHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHJldHVybiBvSmVzdFNpZGVFZmZlY3RzU2VydmljZTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24oKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKGlzc3VlID0+IHtcblx0XHRcdFx0aXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbihcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlck91dHB1dCxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZFR5cGVzLmVudGl0eVNldHMuZmluZChlcyA9PiBlcy5uYW1lID09PSBtYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZW50aXR5U2V0IGFzIEVudGl0eVNldCwgZW50aXR5U2V0KTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlZFR5cGVzLCBtYW5pZmVzdFNldHRpbmdzLCBnZXRGYWtlRGlhZ25vc3RpY3MoKSwgbWVyZ2UsIGRhdGFNb2RlbFBhdGgpO1xufTtcbmNvbnN0IG1ldGFNb2RlbENhY2hlOiBhbnkgPSB7fTtcbmV4cG9ydCBjb25zdCBnZXRNZXRhTW9kZWwgPSBhc3luYyBmdW5jdGlvbihzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IE9EYXRhTWV0YU1vZGVsKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbihcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdHByb3BlcnR5PzogUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aDtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24oYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCA9IGZ1bmN0aW9uKGJpbmRpbmdTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCwgbW9kZWxDb250ZW50OiBhbnkpIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cdHRleHQuc2V0TW9kZWwoanNvbk1vZGVsKTtcblx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChqc29uTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpKTtcblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRpbmdSZXN1bHQgPSBhc3luYyBmdW5jdGlvbihcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9XG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9XG5cdH07XG5cblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbihzS2V5KSB7XG5cdFx0LyogQXNzZXJ0IHRvIG1ha2Ugc3VyZSB0aGUgYW5ub3RhdGlvbnMgYXJlIGluIHRoZSB0ZXN0IG1ldGFkYXRhIC0+IGF2b2lkIG1pc2xlYWRpbmcgdGVzdHMgKi9cblx0XHRleHBlY3QodHlwZW9mIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NLZXldID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pOyAvL1ZhbHVlIGlzIHNQYXRoXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cblx0Ly9UaGlzIGNvbnRleHQgZm9yIG1hY3JvIHRlc3Rpbmdcblx0aWYgKG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdKSB7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tcInRoaXNcIl0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblxuXHRyZXR1cm4gWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xufTtcbiJdfQ==
|
|
309
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbIkxvZyIsInNldExldmVsIiwiamVzdCIsInNldFRpbWVvdXQiLCJuYW1lU3BhY2VNYXAiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJyZWdpc3Rlck1hY3JvIiwibWFjcm9NZXRhZGF0YSIsIlBoYW50b21VdGlsIiwicmVnaXN0ZXIiLCJ1bnJlZ2lzdGVyTWFjcm8iLCJYTUxQcmVwcm9jZXNzb3IiLCJwbHVnSW4iLCJuYW1lc3BhY2UiLCJuYW1lIiwicHVibGljTmFtZSIsInB1YmxpY05hbWVzcGFjZSIsInJ1blhQYXRoUXVlcnkiLCJzZWxlY3RvciIsInhtbGRvbSIsImV4cGVjdCIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIndpbmRvdyIsIlhNTFNlcmlhbGl6ZXIiLCJ4bWxTdHJpbmciLCJzZXJpYWxpemVUb1N0cmluZyIsInJlcGxhY2UiLCJmb3JtYXQiLCJwYXJzZXIiLCJjb21waWxlQ0RTIiwic0NEU1VybCIsImNkc1N0cmluZyIsImZzIiwicmVhZEZpbGVTeW5jIiwiY3NuIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14Q29udGVudCIsInRvIiwiZWRteCIsInNlcnZpY2UiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImVkbXhVcmwiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsInNldHRpbmdzIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJ0aGVuIiwib1NlcnZpY2VJbnN0YW5jZSIsIm9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0Q29udGV4dCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJwdXNoIiwiZ2V0SXNzdWVzIiwiY2hlY2tJZklzc3VlRXhpc3RzIiwiZmluZCIsImlzc3VlIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QiLCJjb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0U2V0dGluZ3MiLCJlbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwiZXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiQ29udmVydGVyQ29udGV4dCIsIm1lcmdlIiwibWV0YU1vZGVsQ2FjaGUiLCJzTWV0YWRhdGFVcmwiLCJvUmVxdWVzdG9yIiwiX01ldGFkYXRhUmVxdWVzdG9yIiwiY3JlYXRlIiwiT0RhdGFNZXRhTW9kZWwiLCJ1bmRlZmluZWQiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiYXJncyIsImZvcm1hdHRlciIsImFwcGx5IiwiZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsIiwibW9kZWxDb250ZW50IiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRUZXh0IiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJ0ZW1wbGF0ZWRYbWwiLCJET01QYXJzZXIiLCJ4bWxEb2MiLCJwYXJzZUZyb21TdHJpbmciLCJoYXNPd25Qcm9wZXJ0eSIsIk9iamVjdCIsImFzc2lnbiIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1vZGVscyIsIm1ldGFNb2RlbCIsImJpbmRpbmdDb250ZXh0cyIsImtleXMiLCJmb3JFYWNoIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFvQkFBLEVBQUFBLEdBQUcsQ0FBQ0MsUUFBSixDQUFhLENBQWIsRUFBdUIsa0NBQXZCO0FBQ0FDLEVBQUFBLElBQUksQ0FBQ0MsVUFBTCxDQUFnQixLQUFoQjtBQUVBLE1BQU1DLFlBQVksR0FBRztBQUNwQixjQUFVLGVBRFU7QUFFcEIsYUFBUyxlQUZXO0FBR3BCLGlCQUFhLGtFQUhPO0FBSXBCLFdBQU8sa0VBSmE7QUFLcEIsZ0JBQVksMEVBTFE7QUFNcEIsZUFBVyxzQkFOUztBQU9wQixZQUFRLGFBUFk7QUFRcEIsU0FBSyxPQVJlO0FBU3BCLFNBQUssb0JBVGU7QUFVcEIsV0FBTyxZQVZhO0FBV3BCLGdCQUFZLGtCQVhRO0FBWXBCLFNBQUssZ0JBWmU7QUFhcEIsdUJBQW1CLDBCQWJDO0FBY3BCLGtCQUFjO0FBZE0sR0FBckI7QUFnQkEsTUFBTUMsTUFBTSxHQUFHQyxLQUFLLENBQUNDLGFBQU4sQ0FBb0JILFlBQXBCLENBQWY7O0FBRU8sTUFBTUks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QztBQUNBLFNBTkQsRUF0QkMsQ0E4QkQ7O0FBQ0EsWUFBSVQscUJBQXFCLENBQUNDLE1BQXRCLENBQTZCLE1BQTdCLENBQUosRUFBMEM7QUFDekNELFVBQUFBLHFCQUFxQixDQUFDRyxlQUF0QixDQUFzQyxNQUF0QyxJQUFnREgscUJBQXFCLENBQUNDLE1BQXRCLENBQTZCLE1BQTdCLEVBQXFDZCxvQkFBckMsQ0FBMEQsR0FBMUQsQ0FBaEQ7QUFDQTs7QUFFRCxlQUFPeEgsZUFBZSxDQUFDK0ksT0FBaEIsQ0FBd0JmLE1BQU0sQ0FBQ2dCLGlCQUEvQixFQUFtRDtBQUFFN0ksVUFBQUEsSUFBSSxFQUFFO0FBQVIsU0FBbkQsRUFBOEVrSSxxQkFBOUUsQ0FBUDtBQW5DQztBQW9DRCxLQXpDK0I7QUFBQTtBQUFBO0FBQUEsR0FBekI7Ozs7QUEyQ0EsTUFBTVksZUFBZSxhQUMzQnRCLFFBRDJCLEVBRTNCcEMsWUFGMkIsRUFHM0JxQyxnQkFIMkIsRUFJM0JDLE9BSjJCO0FBQUEsUUFLMUI7QUFBQSw2QkFDMEJILG1CQUFtQixDQUFDQyxRQUFELEVBQVdwQyxZQUFYLEVBQXlCcUMsZ0JBQXpCLEVBQTJDQyxPQUEzQyxDQUQ3QyxPQUVNOUcsWUFGTjtBQUdELEtBUjJCO0FBQUE7QUFBQTtBQUFBLEdBQXJCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaGFudG9tVXRpbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zXCI7XG5pbXBvcnQgeyBfTWV0YWRhdGFSZXF1ZXN0b3IgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYlwiO1xuaW1wb3J0IHsgT0RhdGFNZXRhTW9kZWwgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0XCI7XG5pbXBvcnQgeyBYTUxQcmVwcm9jZXNzb3IgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbFwiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcInNhcC9iYXNlXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGNvbXBpbGVTb3VyY2VzLCB0byB9IGZyb20gXCJAc2FwL2Nkcy1jb21waWxlclwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgeyBCaW5kaW5nUGFyc2VyIH0gZnJvbSBcInNhcC91aS9iYXNlXCI7XG5pbXBvcnQgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZXJPdXRwdXQsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEpTT05Nb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvanNvblwiO1xuaW1wb3J0IHsgSW52aXNpYmxlVGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZVwiO1xuaW1wb3J0IHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwic2FwL2Jhc2UvdXRpbFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuXG5Mb2cuc2V0TGV2ZWwoMSBhcyBhbnksIFwic2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3JcIik7XG5qZXN0LnNldFRpbWVvdXQoNDAwMDApO1xuXG5jb25zdCBuYW1lU3BhY2VNYXAgPSB7XG5cdFwibWFjcm9zXCI6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRcIm1hY3JvXCI6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRcIm1hY3JvZGF0YVwiOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0XCJsb2dcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwidW5pdHRlc3RcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9wcmVwcm9jZXNzb3JleHRlbnNpb24vc2FwLmZlLnVuaXR0ZXN0aW5nLzFcIixcblx0XCJjb250cm9sXCI6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0XCJjb3JlXCI6IFwic2FwLnVpLmNvcmVcIixcblx0XCJtXCI6IFwic2FwLm1cIixcblx0XCJmXCI6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY0ZpZWxkXCI6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRcInVcIjogXCJzYXAudWkudW5pZmllZFwiLFxuXHRcIm1hY3JvTWljcm9DaGFydFwiOiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRcIm1pY3JvQ2hhcnRcIjogXCJzYXAuc3VpdGUudWkubWljcm9jaGFydFwiXG59O1xuY29uc3Qgc2VsZWN0ID0geHBhdGgudXNlTmFtZXNwYWNlcyhuYW1lU3BhY2VNYXApO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJNYWNybyA9IGZ1bmN0aW9uKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRQaGFudG9tVXRpbC5yZWdpc3RlcihtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24obWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4obnVsbCwgbWFjcm9NZXRhZGF0YS5uYW1lc3BhY2UsIG1hY3JvTWV0YWRhdGEubmFtZSk7XG5cdGlmIChtYWNyb01ldGFkYXRhLnB1YmxpY05hbWUpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLnB1YmxpY05hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbihzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoYC9yb290JHtzZWxlY3Rvcn1gLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9XG59KTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbihjb250cm9sU2VsZWN0b3I6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nLCB4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VsZWN0b3IgPSBgc3RyaW5nKC9yb290JHtjb250cm9sU2VsZWN0b3J9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uKHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGNvbnN0IHhtbFN0cmluZyA9IHNlcmlhbGl6ZXJcblx0XHQuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKVxuXHRcdC5yZXBsYWNlKC8oPzpbXFx0IF0qKD86XFxyP1xcbnxcXHIpKSsvZywgXCJcXG5cIilcblx0XHQucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xuXHRyZXR1cm4gZm9ybWF0KHhtbFN0cmluZywgeyBwYXJzZXI6IFwiaHRtbFwiIH0pO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNDRFNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBNVVNUIGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24oc0NEU1VybDogc3RyaW5nKSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzQ0RTVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBjc24gPSBjb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHNTdHJpbmcgfSwge30pO1xuXHRjb25zdCBlZG14Q29udGVudCA9IHRvLmVkbXgoY3NuLCB7IHNlcnZpY2U6IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiB9KTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKHNDRFNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cdGNvbnN0IGVkbXhVcmwgPSBwYXRoLnJlc29sdmUoZGlyLCBwYXRoLmJhc2VuYW1lKHNDRFNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiLnhtbFwiKSk7XG5cblx0aWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcblx0XHRmcy5ta2RpclN5bmMoZGlyKTtcblx0fVxuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteFVybCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteFVybDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24ob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBQcm9taXNlPGFueT4ge1xuXHRjb25zdCBvU2VydmljZUNvbnRleHQgPSB7IHNjb3BlT2JqZWN0OiB7fSwgc2NvcGVUeXBlOiBcIlwiLCBzZXR0aW5nczoge30gfTtcblx0cmV0dXJuIG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQpLnRoZW4oZnVuY3Rpb24ob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNjb3BlT2JqZWN0OiB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZChpc3N1ZSA9PiB7XG5cdFx0XHRcdGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRUeXBlcy5lbnRpdHlTZXRzLmZpbmQoZXMgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGVudGl0eVNldCk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24oc01ldGFkYXRhVXJsOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1JlcXVlc3RvciA9IF9NZXRhZGF0YVJlcXVlc3Rvci5jcmVhdGUoe30sIFwiNC4wXCIsIHt9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyBPRGF0YU1ldGFNb2RlbChvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgbnVsbCk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZVxuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGg7XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwgPSBmdW5jdGlvbihiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsIG1vZGVsQ29udGVudDogYW55KSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1vZGVsQ29udGVudCk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGpzb25Nb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoanNvbk1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSk7XG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24oXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfVxuKSB7XG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IEpTT05Nb2RlbCh7fSkgfSk7XG5cdH1cblxuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24oc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsLmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0cmV0dXJuIFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbihcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9XG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWE1MID0gYXdhaXQgZ2V0VGVtcGxhdGluZ1Jlc3VsdCh4bWxJbnB1dCwgc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwpO1xufTtcbiJdfQ==
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import FieldMetadata from "sap/fe/macros/internal/Field.metadata";
|
|
2
1
|
import { PhantomUtil } from "sap/fe/macros";
|
|
3
2
|
import { _MetadataRequestor } from "sap/ui/model/odata/v4/lib";
|
|
4
3
|
import { ODataMetaModel } from "sap/ui/model/odata/v4";
|
|
@@ -6,7 +5,7 @@ import { XMLPreprocessor } from "sap/ui/core/util";
|
|
|
6
5
|
import { Log } from "sap/base";
|
|
7
6
|
import xpath from "xpath";
|
|
8
7
|
import * as fs from "fs";
|
|
9
|
-
import {
|
|
8
|
+
import { compileSources, to } from "@sap/cds-compiler";
|
|
10
9
|
import { format } from "prettier";
|
|
11
10
|
import { BindingParser } from "sap/ui/base";
|
|
12
11
|
import { AnyAnnotation, ConverterOutput, EntitySet, Property } from "@sap-ux/annotation-converter";
|
|
@@ -21,8 +20,6 @@ import * as path from "path";
|
|
|
21
20
|
import ConverterContext from "sap/fe/core/converters/ConverterContext";
|
|
22
21
|
import SideEffectsFactory from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
23
22
|
|
|
24
|
-
PhantomUtil.register(FieldMetadata);
|
|
25
|
-
|
|
26
23
|
Log.setLevel(1 as any, "sap.ui.core.util.XMLPreprocessor");
|
|
27
24
|
jest.setTimeout(40000);
|
|
28
25
|
|
|
@@ -47,6 +44,12 @@ const select = xpath.useNamespaces(nameSpaceMap);
|
|
|
47
44
|
export const registerMacro = function(macroMetadata: any) {
|
|
48
45
|
PhantomUtil.register(macroMetadata);
|
|
49
46
|
};
|
|
47
|
+
export const unregisterMacro = function(macroMetadata: any) {
|
|
48
|
+
XMLPreprocessor.plugIn(null, macroMetadata.namespace, macroMetadata.name);
|
|
49
|
+
if (macroMetadata.publicName) {
|
|
50
|
+
XMLPreprocessor.plugIn(null, macroMetadata.publicNamespace, macroMetadata.publicName);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
50
53
|
export const runXPathQuery = function(selector: string, xmldom: Node | undefined) {
|
|
51
54
|
return select(selector, xmldom);
|
|
52
55
|
};
|
|
@@ -98,8 +101,7 @@ export const serializeXML = function(xmlDom: Node) {
|
|
|
98
101
|
export const compileCDS = function(sCDSUrl: string) {
|
|
99
102
|
const cdsString = fs.readFileSync(sCDSUrl, "utf-8");
|
|
100
103
|
const csn = compileSources({ "string.cds": cdsString }, {});
|
|
101
|
-
const
|
|
102
|
-
const edmxContent = to.edmx(csnModel, { service: "sap.fe.test.JestService" });
|
|
104
|
+
const edmxContent = to.edmx(csn, { service: "sap.fe.test.JestService" });
|
|
103
105
|
const dir = path.resolve(sCDSUrl, "..", "gen");
|
|
104
106
|
const edmxUrl = path.resolve(dir, path.basename(sCDSUrl).replace(".cds", ".xml"));
|
|
105
107
|
|
|
@@ -212,6 +214,11 @@ export const getTemplatingResult = async function(
|
|
|
212
214
|
const templatedXml = `<root>${xmlInput}</root>`;
|
|
213
215
|
const parser = new window.DOMParser();
|
|
214
216
|
const xmlDoc = parser.parseFromString(templatedXml, "text/xml");
|
|
217
|
+
// To ensure our macro can use #setBindingContext we ensure there is a pre existing JSONModel for converterContext
|
|
218
|
+
// if not already passed to teh templating
|
|
219
|
+
if (!mModels.hasOwnProperty("converterContext")) {
|
|
220
|
+
mModels = Object.assign(mModels, { "converterContext": new JSONModel({}) });
|
|
221
|
+
}
|
|
215
222
|
|
|
216
223
|
const oMetaModel = await getMetaModel(sMetadataUrl);
|
|
217
224
|
const oPreprocessorSettings: any = {
|
|
@@ -240,3 +247,13 @@ export const getTemplatingResult = async function(
|
|
|
240
247
|
|
|
241
248
|
return XMLPreprocessor.process(xmlDoc.firstElementChild!, { name: "Test Fragment" }, oPreprocessorSettings);
|
|
242
249
|
};
|
|
250
|
+
|
|
251
|
+
export const getTemplatedXML = async function(
|
|
252
|
+
xmlInput: string,
|
|
253
|
+
sMetadataUrl: string,
|
|
254
|
+
mBindingContexts: { [x: string]: any; entitySet?: string },
|
|
255
|
+
mModels: { [x: string]: any }
|
|
256
|
+
) {
|
|
257
|
+
const templatedXML = await getTemplatingResult(xmlInput, sMetadataUrl, mBindingContexts, mModels);
|
|
258
|
+
return serializeXML(templatedXML);
|
|
259
|
+
};
|
|
@@ -16,7 +16,8 @@ sap.ui.define(
|
|
|
16
16
|
"sap/fe/test/api/FooterActionsBase",
|
|
17
17
|
"sap/fe/test/api/FooterAssertionsBase",
|
|
18
18
|
"sap/fe/test/api/HeaderActionsLR",
|
|
19
|
-
"sap/fe/test/api/HeaderAssertionsLR"
|
|
19
|
+
"sap/fe/test/api/HeaderAssertionsLR",
|
|
20
|
+
"sap/fe/test/api/KPICardAssertions"
|
|
20
21
|
],
|
|
21
22
|
function(
|
|
22
23
|
Utils,
|
|
@@ -31,7 +32,8 @@ sap.ui.define(
|
|
|
31
32
|
FooterActionsBase,
|
|
32
33
|
FooterAssertionsBase,
|
|
33
34
|
HeaderActionsLR,
|
|
34
|
-
HeaderAssertionsLR
|
|
35
|
+
HeaderAssertionsLR,
|
|
36
|
+
KPICardAssertions
|
|
35
37
|
) {
|
|
36
38
|
"use strict";
|
|
37
39
|
|
|
@@ -218,6 +220,12 @@ sap.ui.define(
|
|
|
218
220
|
.doSelectVariant(sVariantName)
|
|
219
221
|
.description(Utils.formatMessage("Selecting variant '{1}' from '{0}'", "Page Variant", sVariantName))
|
|
220
222
|
.execute();
|
|
223
|
+
},
|
|
224
|
+
iOpenKPICard: function(sTitle) {
|
|
225
|
+
return KPIBuilder.create(this)
|
|
226
|
+
.clickKPITag(sTitle)
|
|
227
|
+
.description("Opening card for KPI '" + sTitle + "'")
|
|
228
|
+
.execute();
|
|
221
229
|
}
|
|
222
230
|
},
|
|
223
231
|
/**
|
|
@@ -284,6 +292,9 @@ sap.ui.define(
|
|
|
284
292
|
onHeader: function() {
|
|
285
293
|
return new HeaderAssertionsLR(_getHeaderBuilder(this, PageId), { id: PageId });
|
|
286
294
|
},
|
|
295
|
+
onKPICard: function() {
|
|
296
|
+
return new KPICardAssertions(KPIBuilder.create(this));
|
|
297
|
+
},
|
|
287
298
|
iSeeTheMessageToast: function(sText) {
|
|
288
299
|
return this._iSeeTheMessageToast(sText);
|
|
289
300
|
},
|
|
@@ -533,9 +544,15 @@ sap.ui.define(
|
|
|
533
544
|
sDescription += " with properties " + JSON.stringify(oProperties);
|
|
534
545
|
}
|
|
535
546
|
return KPIBuilder.create(this)
|
|
536
|
-
.
|
|
547
|
+
.checkKPITag(sTitle, oProperties)
|
|
537
548
|
.description(sDescription)
|
|
538
549
|
.execute();
|
|
550
|
+
},
|
|
551
|
+
iSeeKPICard: function() {
|
|
552
|
+
return KPIBuilder.create(this)
|
|
553
|
+
.checkKPICard()
|
|
554
|
+
.description("Seeing KPI Card")
|
|
555
|
+
.execute();
|
|
539
556
|
}
|
|
540
557
|
}
|
|
541
558
|
}
|
|
@@ -657,6 +657,46 @@ sap.ui.define(
|
|
|
657
657
|
.description("FLP link with text '" + sDescription + "' is present")
|
|
658
658
|
.execute();
|
|
659
659
|
},
|
|
660
|
+
iSeeSimpleFormWithLabel: function(sDescription) {
|
|
661
|
+
return OpaBuilder.create(this)
|
|
662
|
+
.hasType("sap.m.Label")
|
|
663
|
+
.isDialogElement(true)
|
|
664
|
+
.hasProperties({ text: sDescription })
|
|
665
|
+
.description("SimpleForm has label '" + sDescription + "' is present")
|
|
666
|
+
.execute();
|
|
667
|
+
},
|
|
668
|
+
iSeeSimpleFormWithText: function(sText) {
|
|
669
|
+
return OpaBuilder.create(this)
|
|
670
|
+
.hasType("sap.ui.layout.form.SimpleForm")
|
|
671
|
+
.isDialogElement(true)
|
|
672
|
+
.doOnChildren(
|
|
673
|
+
OpaBuilder.create(this)
|
|
674
|
+
.hasType("sap.m.Text")
|
|
675
|
+
.hasProperties({ text: sText })
|
|
676
|
+
)
|
|
677
|
+
.description("SimpleForm has text '" + sText + "' is present")
|
|
678
|
+
.execute();
|
|
679
|
+
},
|
|
680
|
+
iSeeSimpleFormWithLink: function(sText) {
|
|
681
|
+
return OpaBuilder.create(this)
|
|
682
|
+
.hasType("sap.ui.layout.form.SimpleForm")
|
|
683
|
+
.isDialogElement(true)
|
|
684
|
+
.doOnChildren(
|
|
685
|
+
OpaBuilder.create(this)
|
|
686
|
+
.hasType("sap.m.Link")
|
|
687
|
+
.hasProperties({ text: sText })
|
|
688
|
+
)
|
|
689
|
+
.description("SimpleForm has link '" + sText + "' is present")
|
|
690
|
+
.execute();
|
|
691
|
+
},
|
|
692
|
+
iSeeSimpleFormWithTitle: function(sTitle) {
|
|
693
|
+
return OpaBuilder.create(this)
|
|
694
|
+
.hasType("sap.ui.core.Title")
|
|
695
|
+
.isDialogElement(true)
|
|
696
|
+
.hasProperties({ text: sTitle })
|
|
697
|
+
.description("SimpleForm has label '" + sTitle + "' is present")
|
|
698
|
+
.execute();
|
|
699
|
+
},
|
|
660
700
|
iSeeSelectLinksDialog: function() {
|
|
661
701
|
return OpaBuilder.create(this)
|
|
662
702
|
.hasType("sap.m.Title")
|
|
@@ -811,6 +851,18 @@ sap.ui.define(
|
|
|
811
851
|
.execute();
|
|
812
852
|
},
|
|
813
853
|
|
|
854
|
+
iCheckValueForFieldInCreateDialog: function(sFieldId, sValue, bIsRequired) {
|
|
855
|
+
return FieldBuilder.create(this)
|
|
856
|
+
.isDialogElement()
|
|
857
|
+
.hasId(sFieldId)
|
|
858
|
+
.hasValue(sValue)
|
|
859
|
+
.hasProperties({ required: !!bIsRequired })
|
|
860
|
+
.description(
|
|
861
|
+
Utils.formatMessage("Seeing Create dialog parameter '{0}' with value '{1}'", sFieldId, sValue)
|
|
862
|
+
)
|
|
863
|
+
.execute();
|
|
864
|
+
},
|
|
865
|
+
|
|
814
866
|
iClickBackOnMessageView: function() {
|
|
815
867
|
return OpaBuilder.create(this)
|
|
816
868
|
.hasType("sap.m.MessageView")
|
package/src/sap/fe/test/Shell.js
CHANGED
|
@@ -104,21 +104,26 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
|
|
|
104
104
|
* @public
|
|
105
105
|
*/
|
|
106
106
|
iPressTile: function(sTarget) {
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
return this.waitFor({
|
|
108
|
+
controlType: "sap.ushell.ui.launchpad.Tile",
|
|
109
|
+
matchers: function(oTile) {
|
|
110
|
+
return oTile.getTarget() === "#" + sTarget;
|
|
111
|
+
},
|
|
112
|
+
actions: function(oTile) {
|
|
113
|
+
oTile
|
|
114
|
+
.getTileViews()[0]
|
|
115
|
+
.$()
|
|
116
|
+
.trigger("tap");
|
|
117
|
+
},
|
|
118
|
+
success: function(oTile) {
|
|
119
|
+
Opa5.assert.ok(true, Utils.formatMessage("Clicking on tile with target '{0}'", sTarget));
|
|
120
|
+
},
|
|
121
|
+
errorMessage: "Could not find the tile"
|
|
122
|
+
});
|
|
115
123
|
},
|
|
116
124
|
iOpenDefaultValues: function() {
|
|
117
125
|
return OpaBuilder.create(this)
|
|
118
126
|
.hasId("meAreaHeaderButton")
|
|
119
|
-
.hasProperties({
|
|
120
|
-
icon: "sap-icon://person-placeholder"
|
|
121
|
-
})
|
|
122
127
|
.doPress()
|
|
123
128
|
.description("Opening FLP Default Values dialog")
|
|
124
129
|
.execute();
|
|
@@ -367,11 +367,59 @@ sap.ui.define(
|
|
|
367
367
|
iSeeThisPage: function() {
|
|
368
368
|
return OpaBuilder.create(this)
|
|
369
369
|
.hasId(sViewId)
|
|
370
|
+
.do(
|
|
371
|
+
function(oControl) {
|
|
372
|
+
//storing the placeholder object
|
|
373
|
+
var oContainer = oControl.getParent().oContainer;
|
|
374
|
+
var oView = oContainer;
|
|
375
|
+
do {
|
|
376
|
+
oView = oView.getParent();
|
|
377
|
+
} while (!oView.isA("sap.ui.core.mvc.XMLView"));
|
|
378
|
+
|
|
379
|
+
this.oPlaceholder = oView.getController().oPlaceholder;
|
|
380
|
+
}.bind(this)
|
|
381
|
+
)
|
|
370
382
|
.viewId(null)
|
|
371
383
|
.viewName(null)
|
|
372
384
|
.description(Utils.formatMessage("Seeing the page '{0}'", sViewId))
|
|
373
385
|
.execute();
|
|
374
386
|
},
|
|
387
|
+
|
|
388
|
+
iResetPlaceholderStatistics: function() {
|
|
389
|
+
return OpaBuilder.create(this)
|
|
390
|
+
.do(
|
|
391
|
+
function() {
|
|
392
|
+
this.oPlaceholder.resetPlaceholderDebugStats();
|
|
393
|
+
}.bind(this)
|
|
394
|
+
)
|
|
395
|
+
.description("Placeholder reset statistics")
|
|
396
|
+
.execute();
|
|
397
|
+
},
|
|
398
|
+
|
|
399
|
+
//this function check that the placeholder is hidden as soon as (10ms delay) the event pageReady or HeroesBatchReceived is fired
|
|
400
|
+
iCheckPlaceholderStatistics: function(sPlaceholderListener) {
|
|
401
|
+
var placeholderListener = {
|
|
402
|
+
pageReady: "iPageReadyEventTimestamp",
|
|
403
|
+
heroesBatchReceived: "iHeroesBatchReceivedEventTimestamp"
|
|
404
|
+
};
|
|
405
|
+
return OpaBuilder.create(this)
|
|
406
|
+
.check(
|
|
407
|
+
function() {
|
|
408
|
+
var oPlaceHolderDebugStats = this.oPlaceholder.getPlaceholderDebugStats();
|
|
409
|
+
var sListener = placeholderListener[sPlaceholderListener];
|
|
410
|
+
if (
|
|
411
|
+
oPlaceHolderDebugStats.iHidePlaceholderTimestamp - oPlaceHolderDebugStats[sListener] <
|
|
412
|
+
10
|
|
413
|
+
) {
|
|
414
|
+
return true;
|
|
415
|
+
} else {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
}.bind(this)
|
|
419
|
+
)
|
|
420
|
+
.description("Placeholder statistics are correct")
|
|
421
|
+
.execute();
|
|
422
|
+
},
|
|
375
423
|
iSeeFilterDefinedOnActionDialogValueHelp: function(sAction, sVHParameter, sFieldName, sValue) {
|
|
376
424
|
return OpaBuilder.create(this)
|
|
377
425
|
.hasId(sAction + "::" + sVHParameter + "::FilterBar::FilterField::" + sFieldName + "-inner")
|