jsii-pacmak 1.59.0 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/jsii-pacmak.js +10 -10
- package/bin/jsii-pacmak.js.map +1 -0
- package/lib/builder.js +2 -2
- package/lib/builder.js.map +1 -0
- package/lib/dependency-graph.js +7 -11
- package/lib/dependency-graph.js.map +1 -0
- package/lib/generator.js +4 -6
- package/lib/generator.js.map +1 -0
- package/lib/index.js +7 -7
- package/lib/index.js.map +1 -0
- package/lib/logging.js +1 -1
- package/lib/logging.js.map +1 -0
- package/lib/markdown.js +5 -9
- package/lib/markdown.js.map +1 -0
- package/lib/naming-util.js +1 -1
- package/lib/naming-util.js.map +1 -0
- package/lib/npm-modules.js +8 -9
- package/lib/npm-modules.js.map +1 -0
- package/lib/packaging.js +3 -4
- package/lib/packaging.js.map +1 -0
- package/lib/target.js +5 -7
- package/lib/target.js.map +1 -0
- package/lib/targets/_utils.js +4 -5
- package/lib/targets/_utils.js.map +1 -0
- package/lib/targets/dotnet/dotnetdocgenerator.js +8 -10
- package/lib/targets/dotnet/dotnetdocgenerator.js.map +1 -0
- package/lib/targets/dotnet/dotnetgenerator.js +11 -19
- package/lib/targets/dotnet/dotnetgenerator.js.map +1 -0
- package/lib/targets/dotnet/dotnetruntimegenerator.js +2 -3
- package/lib/targets/dotnet/dotnetruntimegenerator.js.map +1 -0
- package/lib/targets/dotnet/dotnettyperesolver.js +10 -14
- package/lib/targets/dotnet/dotnettyperesolver.js.map +1 -0
- package/lib/targets/dotnet/filegenerator.js +5 -5
- package/lib/targets/dotnet/filegenerator.js.map +1 -0
- package/lib/targets/dotnet/nameutils.js +3 -3
- package/lib/targets/dotnet/nameutils.js.map +1 -0
- package/lib/targets/dotnet.js +8 -8
- package/lib/targets/dotnet.js.map +1 -0
- package/lib/targets/go/comparators.js +1 -1
- package/lib/targets/go/comparators.js.map +1 -0
- package/lib/targets/go/dependencies.js +1 -1
- package/lib/targets/go/dependencies.js.map +1 -0
- package/lib/targets/go/documentation.js +1 -1
- package/lib/targets/go/documentation.js.map +1 -0
- package/lib/targets/go/emit-context.js +1 -1
- package/lib/targets/go/emit-context.js.map +1 -0
- package/lib/targets/go/package.js +18 -20
- package/lib/targets/go/package.js.map +1 -0
- package/lib/targets/go/readme-file.js +1 -1
- package/lib/targets/go/readme-file.js.map +1 -0
- package/lib/targets/go/runtime/class-constructor.js +6 -6
- package/lib/targets/go/runtime/class-constructor.js.map +1 -0
- package/lib/targets/go/runtime/constants.js +1 -1
- package/lib/targets/go/runtime/constants.js.map +1 -0
- package/lib/targets/go/runtime/emit-arguments.js +3 -3
- package/lib/targets/go/runtime/emit-arguments.js.map +1 -0
- package/lib/targets/go/runtime/function-call.js +2 -3
- package/lib/targets/go/runtime/function-call.js.map +1 -0
- package/lib/targets/go/runtime/index.js +7 -3
- package/lib/targets/go/runtime/index.js.map +1 -0
- package/lib/targets/go/runtime/method-call.js +5 -5
- package/lib/targets/go/runtime/method-call.js.map +1 -0
- package/lib/targets/go/runtime/property-access.js +5 -5
- package/lib/targets/go/runtime/property-access.js.map +1 -0
- package/lib/targets/go/runtime/util.js +1 -1
- package/lib/targets/go/runtime/util.js.map +1 -0
- package/lib/targets/go/types/class.js +11 -17
- package/lib/targets/go/types/class.js.map +1 -0
- package/lib/targets/go/types/enum.js +1 -1
- package/lib/targets/go/types/enum.js.map +1 -0
- package/lib/targets/go/types/go-type-reference.js +10 -14
- package/lib/targets/go/types/go-type-reference.js.map +1 -0
- package/lib/targets/go/types/go-type.js +1 -1
- package/lib/targets/go/types/go-type.js.map +1 -0
- package/lib/targets/go/types/index.js +7 -3
- package/lib/targets/go/types/index.js.map +1 -0
- package/lib/targets/go/types/interface.js +8 -11
- package/lib/targets/go/types/interface.js.map +1 -0
- package/lib/targets/go/types/struct.js +2 -2
- package/lib/targets/go/types/struct.js.map +1 -0
- package/lib/targets/go/types/type-member.js +11 -14
- package/lib/targets/go/types/type-member.js.map +1 -0
- package/lib/targets/go/util.js +5 -8
- package/lib/targets/go/util.js.map +1 -0
- package/lib/targets/go/version-file.js +1 -1
- package/lib/targets/go/version-file.js.map +1 -0
- package/lib/targets/go.js +4 -4
- package/lib/targets/go.js.map +1 -0
- package/lib/targets/index.js +3 -3
- package/lib/targets/index.js.map +1 -0
- package/lib/targets/java.d.ts.map +1 -1
- package/lib/targets/java.js +70 -84
- package/lib/targets/java.js.map +1 -0
- package/lib/targets/js.js +2 -2
- package/lib/targets/js.js.map +1 -0
- package/lib/targets/python/requirements-dev.txt +1 -1
- package/lib/targets/python/type-name.js +63 -62
- package/lib/targets/python/type-name.js.map +1 -0
- package/lib/targets/python/util.js +1 -1
- package/lib/targets/python/util.js.map +1 -0
- package/lib/targets/python.js +81 -91
- package/lib/targets/python.js.map +1 -0
- package/lib/targets/version-utils.js +6 -7
- package/lib/targets/version-utils.js.map +1 -0
- package/lib/timer.js +1 -1
- package/lib/timer.js.map +1 -0
- package/lib/toposort.js +1 -1
- package/lib/toposort.js.map +1 -0
- package/lib/util.js +15 -18
- package/lib/util.js.map +1 -0
- package/lib/version.d.ts +2 -2
- package/lib/version.js +4 -4
- package/lib/version.js.map +1 -0
- package/package.json +15 -22
|
@@ -99,8 +99,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
99
99
|
* Do generate docs if this is for a submodule though.
|
|
100
100
|
*/
|
|
101
101
|
onBeginNamespace(jsiiNs) {
|
|
102
|
-
|
|
103
|
-
const submodule = (_a = this.assembly.submodules) === null || _a === void 0 ? void 0 : _a[jsiiNs];
|
|
102
|
+
const submodule = this.assembly.submodules?.[jsiiNs];
|
|
104
103
|
if (submodule) {
|
|
105
104
|
const dotnetNs = this.typeresolver.resolveNamespace(this.assembly, this.assembly.name,
|
|
106
105
|
// Strip the `${assmName}.` prefix here, as the "assembly-relative" NS
|
|
@@ -141,7 +140,6 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
141
140
|
}
|
|
142
141
|
}
|
|
143
142
|
onInterfaceMethod(ifc, method) {
|
|
144
|
-
var _a;
|
|
145
143
|
this.dotnetDocGenerator.emitDocs(method, {
|
|
146
144
|
api: 'member',
|
|
147
145
|
fqn: ifc.fqn,
|
|
@@ -151,7 +149,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
151
149
|
const returnType = method.returns
|
|
152
150
|
? this.typeresolver.toDotNetType(method.returns.type)
|
|
153
151
|
: 'void';
|
|
154
|
-
const nullable =
|
|
152
|
+
const nullable = method.returns?.optional ? '?' : '';
|
|
155
153
|
this.code.line(`${returnType}${nullable} ${this.nameutils.convertMethodName(method.name)}(${this.renderMethodParameters(method)});`);
|
|
156
154
|
}
|
|
157
155
|
onInterfaceMethodOverload(ifc, overload, _originalMethod) {
|
|
@@ -349,9 +347,8 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
349
347
|
}
|
|
350
348
|
}
|
|
351
349
|
namespaceFor(assm, type) {
|
|
352
|
-
var _a;
|
|
353
350
|
let ns = type.namespace;
|
|
354
|
-
while (ns != null &&
|
|
351
|
+
while (ns != null && assm.types?.[`${assm.name}.${ns}`] != null) {
|
|
355
352
|
const nesting = assm.types[`${assm.name}.${ns}`];
|
|
356
353
|
ns = nesting.namespace;
|
|
357
354
|
}
|
|
@@ -538,7 +535,6 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
538
535
|
* @returns true if any ancestor of this type has a visible proxy.
|
|
539
536
|
*/
|
|
540
537
|
proxyMustUseNewModifier(type) {
|
|
541
|
-
var _a;
|
|
542
538
|
if (spec.isClassType(type)) {
|
|
543
539
|
if (type.base == null) {
|
|
544
540
|
return false;
|
|
@@ -550,7 +546,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
550
546
|
: // An abstract class could extend a concrete class... We must walk up the inheritance tree in this case...
|
|
551
547
|
this.proxyMustUseNewModifier(base)));
|
|
552
548
|
}
|
|
553
|
-
return (
|
|
549
|
+
return (type.interfaces?.find((fqn) => this.findType(fqn).assembly === type.assembly) != null);
|
|
554
550
|
}
|
|
555
551
|
/**
|
|
556
552
|
* Emits an Interface Datatype class
|
|
@@ -559,13 +555,12 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
559
555
|
* The generation of the interface proxy may not be needed if the interface is also set as a datatype
|
|
560
556
|
*/
|
|
561
557
|
emitInterfaceDataType(ifc) {
|
|
562
|
-
var _a;
|
|
563
558
|
// Interface datatypes do not need to be prefixed by I, we can call convertClassName
|
|
564
559
|
const name = this.nameutils.convertClassName(ifc);
|
|
565
560
|
const namespace = this.namespaceFor(this.assembly, ifc);
|
|
566
561
|
const isNested = this.isNested(ifc);
|
|
567
562
|
this.openFileIfNeeded(name, namespace, isNested);
|
|
568
|
-
if (
|
|
563
|
+
if (ifc.properties?.find((prop) => !prop.optional) != null) {
|
|
569
564
|
// We don't want to be annoyed by the lack of initialization of non-nullable fields in this case.
|
|
570
565
|
this.code.line('#pragma warning disable CS8618');
|
|
571
566
|
this.code.line();
|
|
@@ -602,8 +597,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
602
597
|
const excludedProperties = []; // Keeps track of the properties we already ran into and don't want to emit
|
|
603
598
|
const properties = {};
|
|
604
599
|
const collectAbstractMembers = (currentType) => {
|
|
605
|
-
|
|
606
|
-
for (const prop of (_a = currentType.properties) !== null && _a !== void 0 ? _a : []) {
|
|
600
|
+
for (const prop of currentType.properties ?? []) {
|
|
607
601
|
if (!excludedProperties.includes(prop.name)) {
|
|
608
602
|
// If we have never run into this property before and it is abstract, we keep it
|
|
609
603
|
if (prop.abstract) {
|
|
@@ -612,7 +606,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
612
606
|
excludedProperties.push(prop.name);
|
|
613
607
|
}
|
|
614
608
|
}
|
|
615
|
-
for (const method of
|
|
609
|
+
for (const method of currentType.methods ?? []) {
|
|
616
610
|
let methodParameters = '';
|
|
617
611
|
if (method.parameters) {
|
|
618
612
|
method.parameters.forEach((param) => {
|
|
@@ -631,7 +625,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
631
625
|
}
|
|
632
626
|
}
|
|
633
627
|
const bases = new Array();
|
|
634
|
-
bases.push(...(
|
|
628
|
+
bases.push(...(currentType.interfaces ?? []).map((iface) => this.findType(iface)));
|
|
635
629
|
if (spec.isClassType(currentType) && currentType.base) {
|
|
636
630
|
bases.push(this.findType(currentType.base));
|
|
637
631
|
}
|
|
@@ -784,12 +778,11 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
784
778
|
return `${type}.cs`;
|
|
785
779
|
}
|
|
786
780
|
openFileIfNeeded(typeName, namespace, isNested, usingDeputy = true) {
|
|
787
|
-
var _a, _b;
|
|
788
781
|
// If Nested type, we shouldn't open/close a file
|
|
789
782
|
if (isNested) {
|
|
790
783
|
return;
|
|
791
784
|
}
|
|
792
|
-
const dotnetPackageId =
|
|
785
|
+
const dotnetPackageId = this.assembly.targets?.dotnet?.packageId;
|
|
793
786
|
if (!dotnetPackageId) {
|
|
794
787
|
throw new Error(`The module ${this.assembly.name} does not have a dotnet.packageId setting`);
|
|
795
788
|
}
|
|
@@ -805,12 +798,11 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
805
798
|
this.code.openBlock(`namespace ${namespace}`);
|
|
806
799
|
}
|
|
807
800
|
closeFileIfNeeded(typeName, namespace, isNested) {
|
|
808
|
-
var _a, _b;
|
|
809
801
|
if (isNested) {
|
|
810
802
|
return;
|
|
811
803
|
}
|
|
812
804
|
this.code.closeBlock();
|
|
813
|
-
const dotnetPackageId =
|
|
805
|
+
const dotnetPackageId = this.assembly.targets?.dotnet?.packageId;
|
|
814
806
|
if (!dotnetPackageId) {
|
|
815
807
|
throw new Error(`The module ${this.assembly.name} does not have a dotnet.packageId setting`);
|
|
816
808
|
}
|
|
@@ -880,4 +872,4 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
880
872
|
}
|
|
881
873
|
}
|
|
882
874
|
exports.DotNetGenerator = DotNetGenerator;
|
|
883
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0Z2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0Z2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQywrQkFBK0I7QUFDL0IsK0JBQStCO0FBRy9CLDZCQUE2QjtBQUU3QiwrQ0FBc0Q7QUFFdEQsNkRBQTBEO0FBQzFELHFFQUFrRTtBQUNsRSw2REFBMEQ7QUFDMUQsbURBQWdEO0FBQ2hELDJDQUE4QztBQUU5Qzs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUztJQVk1QyxZQUNtQixnQ0FBMEMsRUFDMUMsT0FBZ0I7UUFFakMsS0FBSyxFQUFFLENBQUM7UUFIUyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQVU7UUFDMUMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQWJuQywyRUFBMkU7UUFDbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGNBQVMsR0FBb0IsSUFBSSwyQkFBZSxFQUFFLENBQUM7UUFZbEUsb0dBQW9HO1FBQ3BHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsSUFBSTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQ2YsV0FBbUIsRUFDbkIsUUFBMEI7UUFFMUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsV0FBb0I7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHVDQUFrQixDQUN4QyxJQUFJLENBQUMsUUFBUSxFQUNiLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxF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O1NBQ25CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLHNHQUFzRztRQUN0RywwR0FBMEc7UUFDMUcsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDJGQUEyRixDQUM1RixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdHBDRCwwQ0FzcENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIGNsb25lIGZyb20gJ2Nsb25lJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHJlZmxlY3QgZnJvbSAnanNpaS1yZWZsZWN0JztcbmltcG9ydCB7IFJvc2V0dGEgfSBmcm9tICdqc2lpLXJvc2V0dGEnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgR2VuZXJhdG9yLCBMZWdhbGVzZSB9IGZyb20gJy4uLy4uL2dlbmVyYXRvcic7XG5pbXBvcnQgeyBNZXRob2REZWZpbml0aW9uLCBQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuLi9fdXRpbHMnO1xuaW1wb3J0IHsgRG90TmV0RG9jR2VuZXJhdG9yIH0gZnJvbSAnLi9kb3RuZXRkb2NnZW5lcmF0b3InO1xuaW1wb3J0IHsgRG90TmV0UnVudGltZUdlbmVyYXRvciB9IGZyb20gJy4vZG90bmV0cnVudGltZWdlbmVyYXRvcic7XG5pbXBvcnQgeyBEb3ROZXRUeXBlUmVzb2x2ZXIgfSBmcm9tICcuL2RvdG5ldHR5cGVyZXNvbHZlcic7XG5pbXBvcnQgeyBGaWxlR2VuZXJhdG9yIH0gZnJvbSAnLi9maWxlZ2VuZXJhdG9yJztcbmltcG9ydCB7IERvdE5ldE5hbWVVdGlscyB9IGZyb20gJy4vbmFtZXV0aWxzJztcblxuLyoqXG4gKiBDT0RFIEdFTkVSQVRPUiBWMlxuICovXG5leHBvcnQgY2xhc3MgRG90TmV0R2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHtcbiAgLy8gRmxhZ3MgdGhhdCB0cmFja3MgaWYgd2UgaGF2ZSBhbHJlYWR5IHdyb3RlIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIGNsYXNzXG4gIHByaXZhdGUgZmlyc3RNZW1iZXJXcml0dGVuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0eXBlcmVzb2x2ZXIhOiBEb3ROZXRUeXBlUmVzb2x2ZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1ldXRpbHM6IERvdE5ldE5hbWVVdGlscyA9IG5ldyBEb3ROZXROYW1lVXRpbHMoKTtcblxuICBwcml2YXRlIGRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IhOiBEb3ROZXRSdW50aW1lR2VuZXJhdG9yO1xuXG4gIHByaXZhdGUgZG90bmV0RG9jR2VuZXJhdG9yITogRG90TmV0RG9jR2VuZXJhdG9yO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvc2V0dGE6IFJvc2V0dGEsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgb3BlbkJsb2NrIHRvIGdldCBhIGNvcnJlY3QgQyMgbG9va2luZyBjb2RlIGJsb2NrIHdpdGggdGhlIGN1cmx5IGJyYWNlIGFmdGVyIHRoZSBsaW5lXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICB0aGlzLmxpbmUodGV4dCk7XG4gICAgICB0aGlzLm9wZW4oJ3snKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWQoXG4gICAgcGFja2FnZVJvb3Q6IHN0cmluZyxcbiAgICBhc3NlbWJseTogcmVmbGVjdC5Bc3NlbWJseSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIubG9hZChwYWNrYWdlUm9vdCwgYXNzZW1ibHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIGdlbmVyYXRvciAoaW4tbWVtb3J5KS5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZShmaW5nZXJwcmludDogYm9vbGVhbikge1xuICAgIHRoaXMudHlwZXJlc29sdmVyID0gbmV3IERvdE5ldFR5cGVSZXNvbHZlcihcbiAgICAgIHRoaXMuYXNzZW1ibHksXG4gICAgICAoZnFuOiBzdHJpbmcpID0+IHRoaXMuZmluZE1vZHVsZShmcW4pLFxuICAgICAgKGZxbjogc3RyaW5nKSA9PiB0aGlzLmZpbmRUeXBlKGZxbiksXG4gICAgICB0aGlzLmFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkLFxuICAgICk7XG5cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IgPSBuZXcgRG90TmV0UnVudGltZUdlbmVyYXRvcihcbiAgICAgIHRoaXMuY29kZSxcbiAgICAgIHRoaXMudHlwZXJlc29sdmVyLFxuICAgICk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IgPSBuZXcgRG90TmV0RG9jR2VuZXJhdG9yKFxuICAgICAgdGhpcy5jb2RlLFxuICAgICAgdGhpcy5yb3NldHRhLFxuICAgICAgdGhpcy5hc3NlbWJseSxcbiAgICApO1xuXG4gICAgdGhpcy5lbWl0QXNzZW1ibHlEb2NzKCk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY3kgdHJlZVxuICAgIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVOYW1lc3BhY2VzRGVwZW5kZW5jaWVzKCk7XG4gICAgc3VwZXIuZ2VuZXJhdGUoZmluZ2VycHJpbnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUoXG4gICAgb3V0ZGlyOiBzdHJpbmcsXG4gICAgdGFyYmFsbDogc3RyaW5nLFxuICAgIHsgbGljZW5zZSwgbm90aWNlIH06IExlZ2FsZXNlLFxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgLy8gR2VuZXJhdGluZyB0aGUgY3Nwcm9qIGFuZCBBc3NlbWJseUluZm8uY3MgZmlsZXNcbiAgICBjb25zdCB0YXJiYWxsRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHRhcmJhbGwpO1xuICAgIGNvbnN0IGZpbGVnZW4gPSBuZXcgRmlsZUdlbmVyYXRvcihcbiAgICAgIHRoaXMuYXNzZW1ibHksXG4gICAgICB0YXJiYWxsRmlsZU5hbWUsXG4gICAgICB0aGlzLmNvZGUsXG4gICAgKTtcbiAgICBmaWxlZ2VuLmdlbmVyYXRlQXNzZW1ibHlJbmZvRmlsZSgpO1xuICAgIGZpbGVnZW4uZ2VuZXJhdGVQcm9qZWN0RmlsZSh0aGlzLnR5cGVyZXNvbHZlci5uYW1lc3BhY2VEZXBlbmRlbmNpZXMpO1xuICAgIC8vIENhbGxpbmcgc3VwZXIuc2F2ZSgpIGR1bXBzIHRoZSB0YXJiYWxsIGluIHRoZSBmb3JtYXQgbmFtZUB2ZXJzaW9uLmpzaWkudGd6LlxuICAgIC8vIFRoaXMgaXMgbm90IGluIHN5bmMgd2l0aCB0aGUgT2xkIC5ORVQgZ2VuZXJhdG9yIHdoZXJlIHRoZSBuYW1lIGlzIHNjb3BlLW5hbWUtdmVyc2lvbi50Z3ouXG4gICAgLy8gSGVuY2Ugd2UgYXJlIHNhdmluZyB0aGUgZmlsZXMgb3Vyc2VsdmVzIGhlcmU6XG4gICAgY29uc3QgYXNzbSA9IHRoaXMuYXNzZW1ibHk7XG4gICAgY29uc3QgcGFja2FnZUlkOiBzdHJpbmcgPSBhc3NtLnRhcmdldHMhLmRvdG5ldCEucGFja2FnZUlkO1xuICAgIGlmICghcGFja2FnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgbW9kdWxlICR7YXNzbS5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgZG90bmV0LnBhY2thZ2VJZCBzZXR0aW5nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQpKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZSh0YXJiYWxsLCBwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQsIHRhcmJhbGxGaWxlTmFtZSkpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGFuY2hvciBmaWxlIGZvciB0aGUgY3VycmVudCBtb2RlbFxuICAgIHRoaXMuZ2VuZXJhdGVEZXBlbmRlbmN5QW5jaG9yRmlsZSgpO1xuXG4gICAgaWYgKGxpY2Vuc2UpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQsICdMSUNFTlNFJyksIGxpY2Vuc2UsIHtcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobm90aWNlKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKG91dGRpciwgcGFja2FnZUlkLCAnTk9USUNFJyksIG5vdGljZSwge1xuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2F2aW5nIHRoZSBnZW5lcmF0ZWQgY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGFuY2hvciBmaWxlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVEZXBlbmRlbmN5QW5jaG9yRmlsZSgpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBgJHtcbiAgICAgIHRoaXMuYXNzZW1ibHkudGFyZ2V0cyEuZG90bmV0IS5uYW1lc3BhY2VcbiAgICB9LkludGVybmFsLkRlcGVuZGVuY3lSZXNvbHV0aW9uYDtcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQoJ0FuY2hvcicsIG5hbWVzcGFjZSwgZmFsc2UsIGZhbHNlKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKCdwdWJsaWMgc2VhbGVkIGNsYXNzIEFuY2hvcicpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soJ3B1YmxpYyBBbmNob3IoKScpO1xuICAgIHRoaXMudHlwZXJlc29sdmVyLm5hbWVzcGFjZURlcGVuZGVuY2llcy5mb3JFYWNoKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgbmV3ICR7dmFsdWUubmFtZXNwYWNlfS5JbnRlcm5hbC5EZXBlbmRlbmN5UmVzb2x1dGlvbi5BbmNob3IoKTtgLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKCdBbmNob3InLCBuYW1lc3BhY2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3QgdXNlZCBhcyB3ZSBvdmVycmlkZSB0aGUgc2F2ZSgpIG1ldGhvZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFzc2VtYmx5T3V0cHV0RGlyKG1vZDogc3BlYy5Bc3NlbWJseSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZXV0aWxzLmNvbnZlcnRQYWNrYWdlTmFtZShtb2QubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZXNwYWNlcyBhcmUgaGFuZGxlZCBpbXBsaWNpdGx5IGJ5IG9wZW5GaWxlSWZOZWVkZWQoKS5cbiAgICpcbiAgICogRG8gZ2VuZXJhdGUgZG9jcyBpZiB0aGlzIGlzIGZvciBhIHN1Ym1vZHVsZSB0aG91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgb25CZWdpbk5hbWVzcGFjZShqc2lpTnM6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Ym1vZHVsZSA9IHRoaXMuYXNzZW1ibHkuc3VibW9kdWxlcz8uW2pzaWlOc107XG4gICAgaWYgKHN1Ym1vZHVsZSkge1xuICAgICAgY29uc3QgZG90bmV0TnMgPSB0aGlzLnR5cGVyZXNvbHZlci5yZXNvbHZlTmFtZXNwYWNlKFxuICAgICAgICB0aGlzLmFzc2VtYmx5LFxuICAgICAgICB0aGlzLmFzc2VtYmx5Lm5hbWUsXG4gICAgICAgIC8vIFN0cmlwIHRoZSBgJHthc3NtTmFtZX0uYCBwcmVmaXggaGVyZSwgYXMgdGhlIFwiYXNzZW1ibHktcmVsYXRpdmVcIiBOU1xuICAgICAgICAvLyBpcyBleHBlY3RlZCBieSBgdGhpcy50eXBlUmVzb2x2ZXIucmVzb3ZsZU5hbWVzcGFjZWAuXG4gICAgICAgIGpzaWlOcy5zbGljZSh0aGlzLmFzc2VtYmx5Lm5hbWUubGVuZ3RoICsgMSksXG4gICAgICApO1xuICAgICAgdGhpcy5lbWl0TmFtZXNwYWNlRG9jcyhkb3RuZXROcywganNpaU5zLCBzdWJtb2R1bGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVuZE5hbWVzcGFjZShfbnM6IHN0cmluZykge1xuICAgIC8qIG5vb3AgKi9cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZ2luSW50ZXJmYWNlKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlKSB7XG4gICAgY29uc3QgaW1wbGVtZW50YXRpb25zID0gdGhpcy50eXBlcmVzb2x2ZXIucmVzb2x2ZUltcGxlbWVudGVkSW50ZXJmYWNlcyhpZmMpO1xuICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0SW50ZXJmYWNlTmFtZShpZmMpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKGludGVyZmFjZU5hbWUsIG5hbWVzcGFjZSwgdGhpcy5pc05lc3RlZChpZmMpKTtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKGlmYywgeyBhcGk6ICd0eXBlJywgZnFuOiBpZmMuZnFuIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvckludGVyZmFjZShpZmMpO1xuXG4gICAgaWYgKGltcGxlbWVudGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgcHVibGljIGludGVyZmFjZSAke2ludGVyZmFjZU5hbWV9IDogJHtpbXBsZW1lbnRhdGlvbnMuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGludGVyZmFjZSAke2ludGVyZmFjZU5hbWV9YCk7XG4gICAgfVxuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbihmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbmRJbnRlcmZhY2UoaWZjOiBzcGVjLkludGVyZmFjZVR5cGUpIHtcbiAgICAvLyBlbWl0IGludGVyZmFjZSBwcm94eSBjbGFzc1xuICAgIHRoaXMuZW1pdEludGVyZmFjZVByb3h5KGlmYyk7XG5cbiAgICBjb25zdCBpbnRlcmZhY2VOYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydEludGVyZmFjZU5hbWUoaWZjKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgdGhpcy5jbG9zZUZpbGVJZk5lZWRlZChpbnRlcmZhY2VOYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoaWZjKSk7XG5cbiAgICAvLyBlbWl0IGltcGxlbWVudGF0aW9uIGNsYXNzXG4gICAgLy8gVE9ETzogSWYgZGF0YXR5cGUgdGhlbiB3ZSBtYXkgbm90IG5lZWQgdGhlIGludGVyZmFjZSBwcm94eSB0byBiZSBjcmVhdGVkLCBXZSBjb3VsZCBkbyB3aXRoIGp1c3QgdGhlIGludGVyZmFjZSBpbXBsP1xuICAgIGlmIChpZmMuZGF0YXR5cGUpIHtcbiAgICAgIHRoaXMuZW1pdEludGVyZmFjZURhdGFUeXBlKGlmYyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uSW50ZXJmYWNlTWV0aG9kKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlLCBtZXRob2Q6IHNwZWMuTWV0aG9kKSB7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MobWV0aG9kLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBpZmMuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogbWV0aG9kLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yTWV0aG9kKGlmYywgbWV0aG9kKTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gbWV0aG9kLnJldHVybnNcbiAgICAgID8gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKG1ldGhvZC5yZXR1cm5zLnR5cGUpXG4gICAgICA6ICd2b2lkJztcbiAgICBjb25zdCBudWxsYWJsZSA9IG1ldGhvZC5yZXR1cm5zPy5vcHRpb25hbCA/ICc/JyA6ICcnO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYCR7cmV0dXJuVHlwZX0ke251bGxhYmxlfSAke3RoaXMubmFtZXV0aWxzLmNvbnZlcnRNZXRob2ROYW1lKFxuICAgICAgICBtZXRob2QubmFtZSxcbiAgICAgICl9KCR7dGhpcy5yZW5kZXJNZXRob2RQYXJhbWV0ZXJzKG1ldGhvZCl9KTtgLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25JbnRlcmZhY2VNZXRob2RPdmVybG9hZChcbiAgICBpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSxcbiAgICBvdmVybG9hZDogc3BlYy5NZXRob2QsXG4gICAgX29yaWdpbmFsTWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgdGhpcy5vbkludGVyZmFjZU1ldGhvZChpZmMsIG92ZXJsb2FkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkludGVyZmFjZVByb3BlcnR5KGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlLCBwcm9wOiBzcGVjLlByb3BlcnR5KSB7XG4gICAgaWYgKCFwcm9wLmFic3RyYWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVyZmFjZSBwcm9wZXJ0aWVzIG11c3QgYmUgYWJzdHJhY3Q6ICR7cHJvcC5uYW1lfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wLnByb3RlY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdGVjdGVkIHByb3BlcnRpZXMgYXJlIG5vdCBhbGxvd2VkIG9uIGludGVyZmFjZXM6ICR7cHJvcC5uYW1lfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wLnN0YXRpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvcGVydHkgJHtpZmMubmFtZX0uJHtwcm9wLm5hbWV9IGlzIG1hcmtlZCBhcyBzdGF0aWMsIGJ1dCBpbnRlcmZhY2VzIG11c3Qgbm90IGNvbnRhaW4gc3RhdGljIG1lbWJlcnMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0TmV3TGluZUlmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MocHJvcCwge1xuICAgICAgYXBpOiAnbWVtYmVyJyxcbiAgICAgIGZxbjogaWZjLmZxbixcbiAgICAgIG1lbWJlck5hbWU6IHByb3AubmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JQcm9wZXJ0eShwcm9wKTtcblxuICAgIGNvbnN0IHByb3BUeXBlID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHByb3AudHlwZSk7XG4gICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0UHJvcGVydHlOYW1lKHByb3AubmFtZSk7XG5cbiAgICBpZiAocHJvcC5vcHRpb25hbCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ1tBbWF6b24uSlNJSS5SdW50aW1lLkRlcHV0eS5Kc2lpT3B0aW9uYWxdJyk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lmeWluZyB0aGF0IGEgdHlwZSBpcyBudWxsYWJsZSBpcyBvbmx5IHJlcXVpcmVkIGZvciBwcmltaXRpdmUgdmFsdWUgdHlwZXNcbiAgICBjb25zdCBpc09wdGlvbmFsID0gcHJvcC5vcHRpb25hbCA/ICc/JyA6ICcnO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYCR7cHJvcFR5cGV9JHtpc09wdGlvbmFsfSAke3Byb3BOYW1lfWApO1xuXG4gICAgaWYgKHByb3Aub3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soJ2dldCcpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ3JldHVybiBudWxsOycpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgIGlmICghcHJvcC5pbW11dGFibGUpIHtcbiAgICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jaygnc2V0Jyk7XG4gICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgIGB0aHJvdyBuZXcgU3lzdGVtLk5vdFN1cHBvcnRlZEV4Y2VwdGlvbihcIidzZXQnIGZvciAnJHtwcm9wTmFtZX0nIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnZ2V0OycpO1xuICAgICAgaWYgKCFwcm9wLmltbXV0YWJsZSkge1xuICAgICAgICB0aGlzLmNvZGUubGluZSgnc2V0OycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQmVnaW5DbGFzcyhjbHM6IHNwZWMuQ2xhc3NUeXBlLCBhYnN0cmFjdDogYm9vbGVhbikge1xuICAgIGxldCBiYXNlVHlwZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGNscyk7XG5cbiAgICAvLyBBIGNsYXNzIGNhbiBkZXJpdmUgZnJvbSBvbmx5IG9uZSBiYXNlIGNsYXNzXG4gICAgLy8gQnV0IGNhbiBpbXBsZW1lbnQgbXVsdGlwbGUgaW50ZXJmYWNlc1xuICAgIGlmICghY2xzLmJhc2UpIHtcbiAgICAgIGJhc2VUeXBlTmFtZXMucHVzaCgnRGVwdXR5QmFzZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGFzc0Jhc2UgPSB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUoeyBmcW46IGNscy5iYXNlIH0pO1xuICAgICAgYmFzZVR5cGVOYW1lcy5wdXNoKGNsYXNzQmFzZSk7XG4gICAgfVxuXG4gICAgaWYgKGNscy5pbnRlcmZhY2VzICYmIGNscy5pbnRlcmZhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGltcGxlbWVudGF0aW9ucyA9XG4gICAgICAgIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVJbXBsZW1lbnRlZEludGVyZmFjZXMoY2xzKTtcbiAgICAgIGJhc2VUeXBlTmFtZXMgPSBiYXNlVHlwZU5hbWVzLmNvbmNhdChpbXBsZW1lbnRhdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRDbGFzc05hbWUoY2xzKTtcblxuICAgIC8vIE5lc3RlZCBjbGFzc2VzIHdpbGwgYmUgZGVhbHQgd2l0aCBkdXJpbmcgY2FsYyBjb2RlIGdlbmVyYXRpb25cbiAgICBjb25zdCBuZXN0ZWQgPSB0aGlzLmlzTmVzdGVkKGNscyk7XG4gICAgY29uc3QgYWJzUHJlZml4ID0gYWJzdHJhY3QgPyAnIGFic3RyYWN0JyA6ICcnO1xuXG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCBuZXN0ZWQpO1xuXG4gICAgY29uc3QgaW1wbGVtZW50c0V4cHIgPSBgIDogJHtiYXNlVHlwZU5hbWVzLmpvaW4oJywgJyl9YDtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKGNscywge1xuICAgICAgYXBpOiAndHlwZScsXG4gICAgICBmcW46IGNscy5mcW4sXG4gICAgfSk7XG5cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JDbGFzcyhjbHMpO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwdWJsaWMke2Fic1ByZWZpeH0gY2xhc3MgJHtjbGFzc05hbWV9JHtpbXBsZW1lbnRzRXhwcn1gLFxuICAgICk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBjbGFzcyBwYXJhbWV0ZXJzXG4gICAgbGV0IHBhcmFtZXRlcnNEZWZpbml0aW9uID0gJyc7XG4gICAgbGV0IHBhcmFtZXRlcnNCYXNlID0gJyc7XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjbHMuaW5pdGlhbGl6ZXI7XG4gICAgaWYgKGluaXRpYWxpemVyKSB7XG4gICAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhpbml0aWFsaXplciwge1xuICAgICAgICBhcGk6ICdpbml0aWFsaXplcicsXG4gICAgICAgIGZxbjogY2xzLmZxbixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoXG4gICAgICAgIGluaXRpYWxpemVyLFxuICAgICAgKTtcbiAgICAgIGlmIChpbml0aWFsaXplci5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHBhcmFtZXRlcnNEZWZpbml0aW9uID0gdGhpcy5yZW5kZXJQYXJhbWV0ZXJzU3RyaW5nKFxuICAgICAgICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMsXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBpbml0aWFsaXplci5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgcGFyYW1ldGVyc0Jhc2UgKz0gYCR7dGhpcy5uYW1ldXRpbHMuY29udmVydFBhcmFtZXRlck5hbWUocC5uYW1lKX1gO1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHBhcmFtZXRlciwgYXBwZW5kICxcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmluZGV4T2YocCkgIT09XG4gICAgICAgICAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmxlbmd0aCAtIDFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnNCYXNlICs9ICcsICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgY29uc3RydWN0b3JzOlxuICAgICAgLy8gQWJzdHJhY3QgY2xhc3NlcyBoYXZlIHByb3RlY3RlZCBjb25zdHJ1Y3RvcnMuXG4gICAgICBjb25zdCB2aXNpYmlsaXR5ID0gY2xzLmFic3RyYWN0ID8gJ3Byb3RlY3RlZCcgOiAncHVibGljJztcblxuICAgICAgY29uc3QgYXJncyA9XG4gICAgICAgIHBhcmFtZXRlcnNCYXNlLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGBuZXcgb2JqZWN0P1tdeyR7cGFyYW1ldGVyc0Jhc2V9fWBcbiAgICAgICAgICA6IGBTeXN0ZW0uQXJyYXkuRW1wdHk8b2JqZWN0Pz4oKWA7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgJHt2aXNpYmlsaXR5fSAke2NsYXNzTmFtZX0oJHtwYXJhbWV0ZXJzRGVmaW5pdGlvbn0pOiBiYXNlKG5ldyBEZXB1dHlQcm9wcygke2FyZ3N9KSlgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgJy8vLyA8c3VtbWFyeT5Vc2VkIGJ5IGpzaWkgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZnJvbSBhIEphdmFzY3JpcHQtb3duZWQgb2JqZWN0IHJlZmVyZW5jZTwvc3VtbWFyeT4nLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAnLy8vIDxwYXJhbSBuYW1lPVwicmVmZXJlbmNlXCI+VGhlIEphdmFzY3JpcHQtb3duZWQgb2JqZWN0IHJlZmVyZW5jZTwvcGFyYW0+JyxcbiAgICApO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0RGVwcmVjYXRlZEF0dHJpYnV0ZUlmTmVjZXNzYXJ5KGluaXRpYWxpemVyKTtcbiAgICB0aGlzLmVtaXRIaWRlQXR0cmlidXRlKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwcm90ZWN0ZWQgJHtjbGFzc05hbWV9KEJ5UmVmVmFsdWUgcmVmZXJlbmNlKTogYmFzZShyZWZlcmVuY2UpYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgJy8vLyA8c3VtbWFyeT5Vc2VkIGJ5IGpzaWkgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZnJvbSBEZXB1dHlQcm9wczwvc3VtbWFyeT4nLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8cGFyYW0gbmFtZT1cInByb3BzXCI+VGhlIGRlcHV0eSBwcm9wczwvcGFyYW0+Jyk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoaW5pdGlhbGl6ZXIpO1xuICAgIHRoaXMuZW1pdEhpZGVBdHRyaWJ1dGUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYHByb3RlY3RlZCAke2NsYXNzTmFtZX0oRGVwdXR5UHJvcHMgcHJvcHMpOiBiYXNlKHByb3BzKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgLy8gV2UgaGF2ZSBhbHJlYWR5IG91dHB1dHRlZCBtZW1iZXJzIChjb25zdHJ1Y3RvcnMpLCBzZXR0aW5nIHRoZSBmbGFnIHRvIHRydWVcbiAgICB0aGlzLmZsYWdGaXJzdE1lbWJlcldyaXR0ZW4odHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbmRDbGFzcyhjbHM6IHNwZWMuQ2xhc3NUeXBlKSB7XG4gICAgaWYgKGNscy5hYnN0cmFjdCkge1xuICAgICAgdGhpcy5lbWl0SW50ZXJmYWNlUHJveHkoY2xzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRDbGFzc05hbWUoY2xzKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBjbHMpO1xuICAgIHRoaXMuY2xvc2VGaWxlSWZOZWVkZWQoY2xhc3NOYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoY2xzKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25GaWVsZChcbiAgICBfY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBfcHJvcDogc3BlYy5Qcm9wZXJ0eSxcbiAgICBfdW5pb24/OiBzcGVjLlVuaW9uVHlwZVJlZmVyZW5jZSxcbiAgKSB7XG4gICAgLyogbm9vcCAqL1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTWV0aG9kKGNsczogc3BlYy5DbGFzc1R5cGUsIG1ldGhvZDogc3BlYy5NZXRob2QpIHtcbiAgICB0aGlzLmVtaXRNZXRob2QoY2xzLCBtZXRob2QsIGNscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25NZXRob2RPdmVybG9hZChcbiAgICBjbHM6IHNwZWMuQ2xhc3NUeXBlLFxuICAgIG92ZXJsb2FkOiBzcGVjLk1ldGhvZCxcbiAgICBfb3JpZ2luYWxNZXRob2Q6IHNwZWMuTWV0aG9kLFxuICApIHtcbiAgICB0aGlzLm9uTWV0aG9kKGNscywgb3ZlcmxvYWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHkoY2xzOiBzcGVjLkNsYXNzVHlwZSwgcHJvcDogc3BlYy5Qcm9wZXJ0eSkge1xuICAgIHRoaXMuZW1pdFByb3BlcnR5KGNscywgcHJvcCwgY2xzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblN0YXRpY01ldGhvZChjbHM6IHNwZWMuQ2xhc3NUeXBlLCBtZXRob2Q6IHNwZWMuTWV0aG9kKSB7XG4gICAgdGhpcy5lbWl0TWV0aG9kKGNscywgbWV0aG9kLCBjbHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3RhdGljTWV0aG9kT3ZlcmxvYWQoXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBvdmVybG9hZDogc3BlYy5NZXRob2QsXG4gICAgX29yaWdpbmFsTWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgdGhpcy5lbWl0TWV0aG9kKGNscywgb3ZlcmxvYWQsIGNscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdGF0aWNQcm9wZXJ0eShjbHM6IHNwZWMuQ2xhc3NUeXBlLCBwcm9wOiBzcGVjLlByb3BlcnR5KSB7XG4gICAgaWYgKHByb3AuY29uc3QpIHtcbiAgICAgIHRoaXMuZW1pdENvbnN0UHJvcGVydHkoY2xzLCBwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0UHJvcGVydHkoY2xzLCBwcm9wLCBjbHMpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblVuaW9uUHJvcGVydHkoXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBwcm9wOiBzcGVjLlByb3BlcnR5LFxuICAgIF91bmlvbjogc3BlYy5VbmlvblR5cGVSZWZlcmVuY2UsXG4gICkge1xuICAgIHRoaXMuZW1pdFByb3BlcnR5KGNscywgcHJvcCwgY2xzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZ2luRW51bShlbm06IHNwZWMuRW51bVR5cGUpIHtcbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRUeXBlTmFtZShlbm0ubmFtZSk7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2VGb3IodGhpcy5hc3NlbWJseSwgZW5tKTtcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQoZW51bU5hbWUsIG5hbWVzcGFjZSwgdGhpcy5pc05lc3RlZChlbm0pKTtcbiAgICB0aGlzLmVtaXROZXdMaW5lSWZOZWNlc3NhcnkoKTtcbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhlbm0sIHtcbiAgICAgIGFwaTogJ3R5cGUnLFxuICAgICAgZnFuOiBlbm0uZnFuLFxuICAgIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvckVudW0oZW5tLCBlbnVtTmFtZSk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGVudW0gJHtlbm0ubmFtZX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVuZEVudW0oZW5tOiBzcGVjLkVudW1UeXBlKSB7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRUeXBlTmFtZShlbm0ubmFtZSk7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2VGb3IodGhpcy5hc3NlbWJseSwgZW5tKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKGVudW1OYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoZW5tKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbnVtTWVtYmVyKGVubTogc3BlYy5FbnVtVHlwZSwgbWVtYmVyOiBzcGVjLkVudW1NZW1iZXIpIHtcbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhtZW1iZXIsIHtcbiAgICAgIGFwaTogJ21lbWJlcicsXG4gICAgICBmcW46IGVubS5mcW4sXG4gICAgICBtZW1iZXJOYW1lOiBtZW1iZXIubmFtZSxcbiAgICB9KTtcbiAgICBjb25zdCBlbnVtTWVtYmVyTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRFbnVtTWVtYmVyTmFtZShtZW1iZXIubmFtZSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yRW51bU1lbWJlcihcbiAgICAgIGVudW1NZW1iZXJOYW1lLFxuICAgICAgbWVtYmVyLFxuICAgICk7XG4gICAgLy8gSWYgd2UgYXJlIG9uIHRoZSBsYXN0IGVudW0gbWVtYmVyLCB3ZSBkb24ndCBuZWVkIGEgY29tbWFcbiAgICBpZiAoZW5tLm1lbWJlcnMuaW5kZXhPZihtZW1iZXIpICE9PSBlbm0ubWVtYmVycy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShgJHtlbnVtTWVtYmVyTmFtZX0sYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAke2VudW1NZW1iZXJOYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmFtZXNwYWNlRm9yKGFzc206IHNwZWMuQXNzZW1ibHksIHR5cGU6IHNwZWMuVHlwZSk6IHN0cmluZyB7XG4gICAgbGV0IG5zID0gdHlwZS5uYW1lc3BhY2U7XG4gICAgd2hpbGUgKG5zICE9IG51bGwgJiYgYXNzbS50eXBlcz8uW2Ake2Fzc20ubmFtZX0uJHtuc31gXSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBuZXN0aW5nID0gYXNzbS50eXBlc1tgJHthc3NtLm5hbWV9LiR7bnN9YF07XG4gICAgICBucyA9IG5lc3RpbmcubmFtZXNwYWNlO1xuICAgIH1cbiAgICBpZiAobnMgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVOYW1lc3BhY2UoYXNzbSwgYXNzbS5uYW1lLCBucyk7XG4gICAgfVxuICAgIHJldHVybiBhc3NtLnRhcmdldHMhLmRvdG5ldCEubmFtZXNwYWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TWV0aG9kKFxuICAgIGNsczogc3BlYy5DbGFzc1R5cGUgfCBzcGVjLkludGVyZmFjZVR5cGUsXG4gICAgbWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgICBkZWZpbmluZ1R5cGU6IHNwZWMuVHlwZSxcbiAgICBlbWl0Rm9yUHJveHlPckRhdGF0eXBlID0gZmFsc2UsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW1pdE5ld0xpbmVJZk5lY2Vzc2FyeSgpO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBtZXRob2QucmV0dXJuc1xuICAgICAgPyB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUobWV0aG9kLnJldHVybnMudHlwZSlcbiAgICAgIDogJ3ZvaWQnO1xuICAgIGNvbnN0IHN0YXRpY0tleVdvcmQgPSBtZXRob2Quc3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG4gICAgbGV0IG92ZXJyaWRlS2V5V29yZCA9ICcnO1xuICAgIGxldCB2aXJ0dWFsS2V5V29yZCA9ICcnO1xuXG4gICAgbGV0IGRlZmluZWRPbkFuY2VzdG9yID0gZmFsc2U7XG4gICAgLy8gSW4gdGhlIGNhc2Ugb2YgdGhlIHNvdXJjZSBiZWluZyBhIGNsYXNzLCB3ZSBjaGVjayBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgb24gYW4gYW5jZXN0b3JcbiAgICBpZiAoc3BlYy5pc0NsYXNzVHlwZShjbHMpKSB7XG4gICAgICBkZWZpbmVkT25BbmNlc3RvciA9IHRoaXMuaXNNZW1iZXJEZWZpbmVkT25BbmNlc3RvcihjbHMsIG1ldGhvZCk7XG4gICAgfVxuICAgIC8vIFRoZSBtZXRob2QgaXMgYW4gb3ZlcnJpZGUgaWYgaXQncyBkZWZpbmVkIG9uIHRoZSBhbmNlc3Rvciwgb3IgaWYgdGhlIHBhcmVudCBpcyBhIGNsYXNzIGFuZCB3ZSBhcmUgZ2VuZXJhdGluZyBhIHByb3h5IG9yIGRhdGF0eXBlIGNsYXNzXG4gICAgbGV0IG92ZXJyaWRlcyA9XG4gICAgICBkZWZpbmVkT25BbmNlc3RvciB8fCAoc3BlYy5pc0NsYXNzVHlwZShjbHMpICYmIGVtaXRGb3JQcm94eU9yRGF0YXR5cGUpO1xuICAgIC8vIFdlIGFsc28gaW5zcGVjdCB0aGUganNpaSBtb2RlbCB0byBzZWUgaWYgaXQgb3ZlcnJpZGVzIGEgY2xhc3MgbWVtYmVyLlxuICAgIGlmIChtZXRob2Qub3ZlcnJpZGVzKSB7XG4gICAgICBjb25zdCBvdmVycmlkZVR5cGUgPSB0aGlzLmZpbmRUeXBlKG1ldGhvZC5vdmVycmlkZXMpO1xuICAgICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUob3ZlcnJpZGVUeXBlKSkge1xuICAgICAgICAvLyBPdmVycmlkZXMgYSBjbGFzcywgbmVlZHMgb3ZlcnJpZGVzIGtleXdvcmRcbiAgICAgICAgb3ZlcnJpZGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlcykge1xuICAgICAgLy8gQWRkIHRoZSBvdmVycmlkZSBrZXkgd29yZCBpZiB0aGUgbWV0aG9kIGlzIGVtaXR0ZWQgZm9yIGEgcHJveHkgb3IgZGF0YSB0eXBlIG9yIGlzIGRlZmluZWQgb24gYW4gYW5jZXN0b3IuIElmXG4gICAgICAvLyB0aGUgbWVtYmVyIGlzIHN0YXRpYywgdXNlIHRoZSBcIm5ld1wiIGtleXdvcmQgaW5zdGVhZCwgdG8gaW5kaWNhdGUgd2UgYXJlIGludGVudGlvbmFsbHkgaGlkaW5nIHRoZSBhbmNlc3RvclxuICAgICAgLy8gZGVjbGFyYXRpb24gKGFzIEMjIGRvZXMgbm90IGluaGVyaXQgc3RhdGljcywgdGhleSBjYW4gYmUgaGlkZGVuIGJ1dCBub3Qgb3ZlcnJpZGRlbikuIFRoZSBcIm5ld1wiIGtleXdvcmQgaXNcbiAgICAgIC8vIG9wdGlvbmFsIGluIHRoaXMgY29udGV4dCwgYnV0IGhlbHBzIGNsYXJpZnkgaW50ZW50aW9uLlxuICAgICAgb3ZlcnJpZGVLZXlXb3JkID0gbWV0aG9kLnN0YXRpYyA/ICduZXcgJyA6ICdvdmVycmlkZSAnO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhbWV0aG9kLnN0YXRpYyAmJlxuICAgICAgKG1ldGhvZC5hYnN0cmFjdCB8fCAhZGVmaW5lZE9uQW5jZXN0b3IpICYmXG4gICAgICAhZW1pdEZvclByb3h5T3JEYXRhdHlwZVxuICAgICkge1xuICAgICAgLy8gQWRkIHRoZSB2aXJ0dWFsIGtleSB3b3JkIGlmIHRoZSBtZXRob2QgaXMgYWJzdHJhY3Qgb3Igbm90IGRlZmluZWQgb24gYW4gYW5jZXN0b3IgYW5kIHdlIGFyZSBOT1QgZ2VuZXJhdGluZyBhIHByb3h5IG9yIGRhdGF0eXBlIGNsYXNzXG4gICAgICAvLyBNZXRob2RzIHNob3VsZCBhbHdheXMgYmUgdmlydHVhbCB3aGVuIHBvc3NpYmxlXG4gICAgICB2aXJ0dWFsS2V5V29yZCA9ICd2aXJ0dWFsICc7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXNzID0gdGhpcy5yZW5kZXJBY2Nlc3NMZXZlbChtZXRob2QpO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0TWV0aG9kTmFtZShtZXRob2QubmFtZSk7XG5cbiAgICBjb25zdCBpc09wdGlvbmFsID0gbWV0aG9kLnJldHVybnMgJiYgbWV0aG9kLnJldHVybnMub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICBjb25zdCBzaWduYXR1cmUgPSBgJHtyZXR1cm5UeXBlfSR7aXNPcHRpb25hbH0gJHttZXRob2ROYW1lfSgke3RoaXMucmVuZGVyTWV0aG9kUGFyYW1ldGVycyhcbiAgICAgIG1ldGhvZCxcbiAgICApfSlgO1xuXG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MobWV0aG9kLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBkZWZpbmluZ1R5cGUuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogbWV0aG9kLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yTWV0aG9kKFxuICAgICAgY2xzLFxuICAgICAgbWV0aG9kIC8qLCBlbWl0Rm9yUHJveHlPckRhdGF0eXBlKi8sXG4gICAgKTtcblxuICAgIGlmIChtZXRob2QuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAke2FjY2Vzc30gJHtvdmVycmlkZUtleVdvcmR9YWJzdHJhY3QgJHtzaWduYXR1cmV9O2ApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgYCR7YWNjZXNzfSAke3N0YXRpY0tleVdvcmR9JHtvdmVycmlkZUtleVdvcmR9JHt2aXJ0dWFsS2V5V29yZH0ke3NpZ25hdHVyZX1gLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuY3JlYXRlSW52b2tlTWV0aG9kSWRlbnRpZmllcihcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgY2xzIGFzIHNwZWMuQ2xhc3NUeXBlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvdW5kcyBvdXQgaWYgYSBtZW1iZXIgKHByb3BlcnR5IG9yIG1ldGhvZCkgaXMgYWxyZWFkeSBkZWZpbmVkIGluIG9uZSBvZiB0aGUgYmFzZSBjbGFzc2VzXG4gICAqXG4gICAqIFVzZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgb3ZlcnJpZGUgb3IgdmlydHVhbCBrZXl3b3JkcyBhcmUgbmVjZXNzYXJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBpc01lbWJlckRlZmluZWRPbkFuY2VzdG9yKFxuICAgIGNsczogc3BlYy5DbGFzc1R5cGUsXG4gICAgbWVtYmVyOiBzcGVjLlByb3BlcnR5IHwgc3BlYy5NZXRob2QsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChtZW1iZXIgYXMgc3BlYy5NZXRob2QpIHtcbiAgICAgIGNvbnN0IG9iamVjdE1ldGhvZHMgPSBbJ1RvU3RyaW5nJywgJ0dldEhhc2hDb2RlJywgJ0VxdWFscyddO1xuICAgICAgLy8gTWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBPYmplY3QgY2xhc3Mgc2hvdWxkIGJlIG92ZXJyaWRkZW4sIHJldHVybiB0cnVlO1xuICAgICAgaWYgKFxuICAgICAgICBvYmplY3RNZXRob2RzLmluY2x1ZGVzKHRoaXMubmFtZXV0aWxzLmNvbnZlcnRNZXRob2ROYW1lKG1lbWJlci5uYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gY2xzLmJhc2U7XG4gICAgaWYgKGJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2VUeXBlID0gdGhpcy5maW5kVHlwZShiYXNlKSBhcyBzcGVjLkNsYXNzVHlwZTtcblxuICAgICAgaWYgKG1lbWJlciBhcyBzcGVjLlByb3BlcnR5KSB7XG4gICAgICAgIGlmIChiYXNlVHlwZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYmFzZVR5cGUucHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gbWVtYmVyLm5hbWUsXG4gICAgICAgICAgICApLmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGZvdW5kIGluIGJhc2UgcGFyZW50XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNZW1iZXJEZWZpbmVkT25BbmNlc3RvcihiYXNlVHlwZSwgbWVtYmVyKTtcbiAgICAgIH0gZWxzZSBpZiAobWVtYmVyIGFzIHNwZWMuTWV0aG9kKSB7XG4gICAgICAgIGlmIChiYXNlVHlwZS5tZXRob2RzKSB7XG4gICAgICAgICAgY29uc3QgbXlNZXRob2QgPSBtZW1iZXIgYXMgc3BlYy5NZXRob2Q7XG4gICAgICAgICAgLy8gSWYgdGhlIG5hbWUsIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYXJlIHNpbWlsYXIgdGhlbiBpdCBpcyB0aGUgc2FtZSBtZXRob2QgaW4gLk5FVFxuICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBiYXNlVHlwZS5tZXRob2RzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG0ubmFtZSA9PT0gbXlNZXRob2QubmFtZSAmJlxuICAgICAgICAgICAgICBtLnBhcmFtZXRlcnMgPT09IG15TWV0aG9kLnBhcmFtZXRlcnMgJiZcbiAgICAgICAgICAgICAgbS5yZXR1cm5zID09PSBteU1ldGhvZC5yZXR1cm5zXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzTWVtYmVyRGVmaW5lZE9uQW5jZXN0b3IoYmFzZVR5cGUsIG1lbWJlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIG1ldGhvZCBwYXJhbWV0ZXJzIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJNZXRob2RQYXJhbWV0ZXJzKG1ldGhvZDogc3BlYy5NZXRob2QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlbmRlclBhcmFtZXRlcnNTdHJpbmcobWV0aG9kLnBhcmFtZXRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgcGFyYW1ldGVycyBzdHJpbmcgZm9yIG1ldGhvZHMgb3IgY29uc3RydWN0b3JzXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclBhcmFtZXRlcnNTdHJpbmcoXG4gICAgcGFyYW1ldGVyczogc3BlYy5QYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZCxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICBpZiAocGFyYW1ldGVycykge1xuICAgICAgZm9yIChjb25zdCBwIG9mIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgbGV0IG9wdGlvbmFsUHJpbWl0aXZlID0gJyc7XG4gICAgICAgIGxldCBvcHRpb25hbEtleXdvcmQgPSAnJztcbiAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUocC50eXBlKTtcbiAgICAgICAgaWYgKHAub3B0aW9uYWwpIHtcbiAgICAgICAgICBvcHRpb25hbEtleXdvcmQgPSAnID0gbnVsbCc7XG4gICAgICAgICAgaWYgKHAub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIG9wdGlvbmFsUHJpbWl0aXZlID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwLnZhcmlhZGljKSB7XG4gICAgICAgICAgdHlwZSA9IGBwYXJhbXMgJHt0eXBlfVtdYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdCA9IGAke3R5cGV9JHtvcHRpb25hbFByaW1pdGl2ZX0gJHt0aGlzLm5hbWV1dGlscy5jb252ZXJ0UGFyYW1ldGVyTmFtZShcbiAgICAgICAgICBwLm5hbWUsXG4gICAgICAgICl9JHtvcHRpb25hbEtleXdvcmR9YDtcbiAgICAgICAgcGFyYW1zLnB1c2goc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLmpvaW4oJywgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYW4gaW50ZXJmYWNlIHByb3h5IGZvciBhbiBpbnRlcmZhY2Ugb3IgYW4gYWJzdHJhY3QgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGVtaXRJbnRlcmZhY2VQcm94eShpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSB8IHNwZWMuQ2xhc3NUeXBlKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9ICdfUHJveHknO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgY29uc3QgaXNOZXN0ZWQgPSB0cnVlO1xuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChuYW1lLCBuYW1lc3BhY2UsIGlzTmVzdGVkKTtcblxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MoaWZjLCB7XG4gICAgICBhcGk6ICd0eXBlJyxcbiAgICAgIGZxbjogaWZjLmZxbixcbiAgICB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JJbnRlcmZhY2VQcm94eShpZmMpO1xuXG4gICAgY29uc3QgaW50ZXJmYWNlRnFuID0gdGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oaWZjLmZxbik7XG4gICAgY29uc3Qgc3VmZml4ID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoaWZjKVxuICAgICAgPyBgOiBEZXB1dHlCYXNlLCAke2ludGVyZmFjZUZxbn1gXG4gICAgICA6IGA6ICR7aW50ZXJmYWNlRnFufWA7XG4gICAgY29uc3QgbmV3TW9kaWZpZXIgPSB0aGlzLnByb3h5TXVzdFVzZU5ld01vZGlmaWVyKGlmYykgPyAnbmV3ICcgOiAnJztcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgJHtuZXdNb2RpZmllcn1pbnRlcm5hbCBzZWFsZWQgY2xhc3MgJHtuYW1lfSAke3N1ZmZpeH1gLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHByaXZhdGUgY29uc3RydWN0b3JcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYHByaXZhdGUgJHtuYW1lfShCeVJlZlZhbHVlIHJlZmVyZW5jZSk6IGJhc2UocmVmZXJlbmNlKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgLy8gV2UgaGF2ZSBhbHJlYWR5IG91dHB1dCBhIG1lbWJlciAoY29uc3RydWN0b3IpLCBzZXR0aW5nIHRoZSBmaXJzdCBtZW1iZXIgZmxhZyB0byB0cnVlXG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuXG4gICAgY29uc3QgZGF0YXR5cGUgPSBmYWxzZTtcbiAgICBjb25zdCBwcm94eSA9IHRydWU7XG4gICAgdGhpcy5lbWl0SW50ZXJmYWNlTWVtYmVyc0ZvclByb3h5T3JEYXRhdHlwZShpZmMsIGRhdGF0eXBlLCBwcm94eSk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIHRoaXMuY2xvc2VGaWxlSWZOZWVkZWQobmFtZSwgbmFtZXNwYWNlLCBpc05lc3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFueSBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gdHlwZSBtdXN0IHVzZSB0aGUgYG5ld2BcbiAgICogbW9kaWZpZXIgd2hlbiBpbnRyb2R1Y2luZyBpdCdzIG93biBwcm94eS5cbiAgICpcbiAgICogSWYgdGhlIHR5cGUgaXMgYSBgY2xhc3NgLCB0aGVuIGl0IG11c3QgdXNlIGBuZXdgIGlmIGl0IGV4dGVuZHMgYW5vdGhlclxuICAgKiBhYnN0cmFjdCBjbGFzcyBkZWZpbmVkIGluIHRoZSBzYW1lIGFzc2VtYmx5IChzaW5jZSBwcm94aWVzIGFyZSBpbnRlcm5hbCxcbiAgICogZXh0ZXJuYWwgdHlwZXMnIHByb3hpZXMgYXJlIG5vdCB2aXNpYmxlIGluIHRoYXQgY29udGV4dCkuXG4gICAqXG4gICAqIElmIHRoZSB0eXBlIGlzIGFuIGBpbnRlcmZhY2VgLCB0aGVuIGl0IG11c3QgdXNlIGBuZXdgIGlmIGl0IGV4dGVuZHMgYW5vdGhlclxuICAgKiBpbnRlcmZhY2UgZnJvbSB0aGUgc2FtZSBhc3NlbWJseS5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgdGhlIHRlc3RlZCBwcm94eS1hYmxlIHR5cGUgKGFuIGFic3RyYWN0IGNsYXNzIG9yIGFuIGludGVyZmFjZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYW55IGFuY2VzdG9yIG9mIHRoaXMgdHlwZSBoYXMgYSB2aXNpYmxlIHByb3h5LlxuICAgKi9cbiAgcHJpdmF0ZSBwcm94eU11c3RVc2VOZXdNb2RpZmllcihcbiAgICB0eXBlOiBzcGVjLkNsYXNzVHlwZSB8IHNwZWMuSW50ZXJmYWNlVHlwZSxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUodHlwZSkpIHtcbiAgICAgIGlmICh0eXBlLmJhc2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmZpbmRUeXBlKHR5cGUuYmFzZSkgYXMgc3BlYy5DbGFzc1R5cGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBiYXNlLmFzc2VtYmx5ID09PSB0eXBlLmFzc2VtYmx5ICYmXG4gICAgICAgIChiYXNlLmFic3RyYWN0XG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiAvLyBBbiBhYnN0cmFjdCBjbGFzcyBjb3VsZCBleHRlbmQgYSBjb25jcmV0ZSBjbGFzcy4uLiBXZSBtdXN0IHdhbGsgdXAgdGhlIGluaGVyaXRhbmNlIHRyZWUgaW4gdGhpcyBjYXNlLi4uXG4gICAgICAgICAgICB0aGlzLnByb3h5TXVzdFVzZU5ld01vZGlmaWVyKGJhc2UpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgdHlwZS5pbnRlcmZhY2VzPy5maW5kKFxuICAgICAgICAoZnFuKSA9PiB0aGlzLmZpbmRUeXBlKGZxbikuYXNzZW1ibHkgPT09IHR5cGUuYXNzZW1ibHksXG4gICAgICApICE9IG51bGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIEludGVyZmFjZSBEYXRhdHlwZSBjbGFzc1xuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gZW1pdCBhIGNsYXNzIGltcGxlbWVudGluZyBhbiBpbnRlcmZhY2Ugd2hlbiB0aGUgZGF0YXR5cGUgcHJvcGVydHkgaXMgdHJ1ZSBpbiB0aGUganNpaSBtb2RlbFxuICAgKiBUaGUgZ2VuZXJhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIHByb3h5IG1heSBub3QgYmUgbmVlZGVkIGlmIHRoZSBpbnRlcmZhY2UgaXMgYWxzbyBzZXQgYXMgYSBkYXRhdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0SW50ZXJmYWNlRGF0YVR5cGUoaWZjOiBzcGVjLkludGVyZmFjZVR5cGUpOiB2b2lkIHtcbiAgICAvLyBJbnRlcmZhY2UgZGF0YXR5cGVzIGRvIG5vdCBuZWVkIHRvIGJlIHByZWZpeGVkIGJ5IEksIHdlIGNhbiBjYWxsIGNvbnZlcnRDbGFzc05hbWVcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydENsYXNzTmFtZShpZmMpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgY29uc3QgaXNOZXN0ZWQgPSB0aGlzLmlzTmVzdGVkKGlmYyk7XG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKG5hbWUsIG5hbWVzcGFjZSwgaXNOZXN0ZWQpO1xuXG4gICAgaWYgKGlmYy5wcm9wZXJ0aWVzPy5maW5kKChwcm9wKSA9PiAhcHJvcC5vcHRpb25hbCkgIT0gbnVsbCkge1xuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBiZSBhbm5veWVkIGJ5IHRoZSBsYWNrIG9mIGluaXRpYWxpemF0aW9uIG9mIG5vbi1udWxsYWJsZSBmaWVsZHMgaW4gdGhpcyBjYXNlLlxuICAgICAgdGhpcy5jb2RlLmxpbmUoJyNwcmFnbWEgd2FybmluZyBkaXNhYmxlIENTODYxOCcpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhpZmMsIHtcbiAgICAgIGFwaTogJ3R5cGUnLFxuICAgICAgZnFuOiBpZmMuZnFuLFxuICAgIH0pO1xuICAgIGNvbnN0IHN1ZmZpeCA9IGA6ICR7dGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oaWZjLmZxbil9YDtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JJbnRlcmZhY2VEYXRhdHlwZShpZmMpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBjbGFzcyAke25hbWV9ICR7c3VmZml4fWApO1xuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbihmYWxzZSk7XG4gICAgY29uc3QgZGF0YXR5cGUgPSB0cnVlO1xuICAgIGNvbnN0IHByb3h5ID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0SW50ZXJmYWNlTWVtYmVyc0ZvclByb3h5T3JEYXRhdHlwZShpZmMsIGRhdGF0eXBlLCBwcm94eSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKG5hbWUsIG5hbWVzcGFjZSwgaXNOZXN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgYm9keSBvZiB0aGUgaW50ZXJmYWNlIHByb3h5IG9yIGRhdGEgdHlwZSBjbGFzc1xuICAgKlxuICAgKiBUaGlzIGxvb3BzIHRocm91Z2ggYWxsIHRoZSBtZW1iZXIgYW5kIGdlbmVyYXRlcyB0aGVtXG4gICAqL1xuICBwcml2YXRlIGVtaXRJbnRlcmZhY2VNZW1iZXJzRm9yUHJveHlPckRhdGF0eXBlKFxuICAgIGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlIHwgc3BlYy5DbGFzc1R5cGUsXG4gICAgZGF0YXR5cGU6IGJvb2xlYW4sXG4gICAgcHJveHk6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIC8vIFRoZSBrZXkgaXMgaW4gdGhlIGZvcm0gJ21ldGhvZC5uYW1lO3BhcmFtZXRlcjE7cGFyYW1ldGVyMjsnIGV0Y1xuICAgIGNvbnN0IG1ldGhvZHMgPSBuZXcgTWFwPHN0cmluZywgTWV0aG9kRGVmaW5pdGlvbj4oKTtcbiAgICAvKlxuICAgICAgICAgIE9ubHkgZ2V0IHRoZSBmaXJzdCBkZWNsYXJhdGlvbiBlbmNvdW50ZXJlZCwgYW5kIGtlZXAgaXQgaWYgaXQgaXMgYWJzdHJhY3QuIFRoZSBsaXN0IGNvbnRhaW5zIEFMTFxuICAgICAgICAgIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgZW5jb3VudGVyZWQsIGluIHRoZSBvcmRlciBlbmNvdW50ZXJlZC4gQW4gYWJzdHJhY3QgY2xhc3MgY2FuIGhhdmUgY29uY3JldGVcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuIFRoZXJlZm9yZSwgd2Ugb25seSBnZW5lcmF0ZSBtZXRob2RzL3Byb3BlcnRpZXMgaWYgdGhlIGZpcnN0IG1lbWJlciBlbmNvdW50ZXJlZFxuICAgICAgICAgIGlzIHVuaW1wbGVtZW50ZWQuXG4gICAgICAgICovXG4gICAgY29uc3QgZXhjbHVkZWRNZXRob2Q6IHN0cmluZ1tdID0gW107IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBtZXRob2RzIHdlIGFscmVhZHkgcmFuIGludG8gYW5kIGRvbid0IHdhbnQgdG8gZW1pdFxuICAgIGNvbnN0IGV4Y2x1ZGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHByb3BlcnRpZXMgd2UgYWxyZWFkeSByYW4gaW50byBhbmQgZG9uJ3Qgd2FudCB0byBlbWl0XG4gICAgY29uc3QgcHJvcGVydGllczogeyBbbmFtZTogc3RyaW5nXTogUHJvcGVydHlEZWZpbml0aW9uIH0gPSB7fTtcbiAgICBjb25zdCBjb2xsZWN0QWJzdHJhY3RNZW1iZXJzID0gKFxuICAgICAgY3VycmVudFR5cGU6IHNwZWMuSW50ZXJmYWNlVHlwZSB8IHNwZWMuQ2xhc3NUeXBlLFxuICAgICkgPT4ge1xuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGN1cnJlbnRUeXBlLnByb3BlcnRpZXMgPz8gW10pIHtcbiAgICAgICAgaWYgKCFleGNsdWRlZFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcC5uYW1lKSkge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbmV2ZXIgcnVuIGludG8gdGhpcyBwcm9wZXJ0eSBiZWZvcmUgYW5kIGl0IGlzIGFic3RyYWN0LCB3ZSBrZWVwIGl0XG4gICAgICAgICAgaWYgKHByb3AuYWJzdHJhY3QpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcC5uYW1lXSA9IHsgcHJvcCwgZGVmaW5pbmdUeXBlOiBjdXJyZW50VHlwZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBleGNsdWRlZFByb3BlcnRpZXMucHVzaChwcm9wLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGN1cnJlbnRUeXBlLm1ldGhvZHMgPz8gW10pIHtcbiAgICAgICAgbGV0IG1ldGhvZFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgaWYgKG1ldGhvZC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgbWV0aG9kLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgIG1ldGhvZFBhcmFtZXRlcnMgKz0gYDske3RoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShcbiAgICAgICAgICAgICAgcGFyYW0udHlwZSxcbiAgICAgICAgICAgICl9YDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4Y2x1ZGVkTWV0aG9kLmluY2x1ZGVzKGAke21ldGhvZC5uYW1lfSR7bWV0aG9kUGFyYW1ldGVyc31gKSkge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbmV2ZXIgcnVuIGludG8gdGhpcyBtZXRob2QgYmVmb3JlIGFuZCBpdCBpcyBhYnN0cmFjdCwgd2Uga2VlcCBpdFxuICAgICAgICAgIGlmIChtZXRob2QuYWJzdHJhY3QpIHtcbiAgICAgICAgICAgIG1ldGhvZHMuc2V0KGAke21ldGhvZC5uYW1lfSR7bWV0aG9kUGFyYW1ldGVyc31gLCB7XG4gICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgZGVmaW5pbmdUeXBlOiBjdXJyZW50VHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBleGNsdWRlZE1ldGhvZC5wdXNoKGAke21ldGhvZC5uYW1lfSR7bWV0aG9kUGFyYW1ldGVyc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBiYXNlcyA9IG5ldyBBcnJheTxzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZT4oKTtcbiAgICAgIGJhc2VzLnB1c2goXG4gICAgICAgIC4uLihjdXJyZW50VHlwZS5pbnRlcmZhY2VzID8/IFtdKS5tYXAoKGlmYWNlKSA9PiB0aGlzLmZpbmRUeXBlKGlmYWNlKSksXG4gICAgICApO1xuICAgICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUoY3VycmVudFR5cGUpICYmIGN1cnJlbnRUeXBlLmJhc2UpIHtcbiAgICAgICAgYmFzZXMucHVzaCh0aGlzLmZpbmRUeXBlKGN1cnJlbnRUeXBlLmJhc2UpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgYmFzZSBvZiBiYXNlcykge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZShiYXNlLmZxbik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlLmtpbmQgIT09IHNwZWMuVHlwZUtpbmQuSW50ZXJmYWNlICYmXG4gICAgICAgICAgdHlwZS5raW5kICE9PSBzcGVjLlR5cGVLaW5kLkNsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBCYXNlIGludGVyZmFjZXMgb2YgYW4gaW50ZXJmYWNlIG11c3QgYmUgYW4gaW50ZXJmYWNlIG9yIGEgY2xhc3MgKCR7YmFzZS5mcW59IGlzIG9mIHR5cGUgJHt0eXBlLmtpbmR9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb2xsZWN0QWJzdHJhY3RNZW1iZXJzKHR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29sbGVjdEFic3RyYWN0TWVtYmVycyhpZmMpO1xuXG4gICAgLy8gZW1pdCBhbGwgcHJvcGVydGllc1xuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMocHJvcGVydGllcykpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBjbG9uZShwcm9wZXJ0aWVzW3Byb3BOYW1lXSk7XG4gICAgICBwcm9wLnByb3AuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1pdFByb3BlcnR5KGlmYywgcHJvcC5wcm9wLCBwcm9wLmRlZmluaW5nVHlwZSwgZGF0YXR5cGUsIHByb3h5KTtcbiAgICB9XG4gICAgLy8gZW1pdCBhbGwgdGhlIG1ldGhvZHNcbiAgICBmb3IgKGNvbnN0IG1ldGhvZE5hbWVBbmRQYXJhbWV0ZXJzIG9mIG1ldGhvZHMua2V5cygpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IG1ldGhvZHMuZ2V0KG1ldGhvZE5hbWVBbmRQYXJhbWV0ZXJzKTtcbiAgICAgIGlmIChvcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBjbG9uZShvcmlnaW5hbE1ldGhvZCk7XG4gICAgICAgIG1ldGhvZC5tZXRob2QuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0TWV0aG9kKFxuICAgICAgICAgIGlmYyxcbiAgICAgICAgICBtZXRob2QubWV0aG9kLFxuICAgICAgICAgIG1ldGhvZC5kZWZpbmluZ1R5cGUsXG4gICAgICAgICAgLyogZW1pdEZvclByb3h5T3JEYXRhdHlwZSAqLyB0cnVlLFxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRlZE1ldGhvZCBvZiB0aGlzLmNyZWF0ZU92ZXJsb2Fkc0Zvck9wdGlvbmFscyhcbiAgICAgICAgICBtZXRob2QubWV0aG9kLFxuICAgICAgICApKSB7XG4gICAgICAgICAgb3ZlcmxvYWRlZE1ldGhvZC5hYnN0cmFjdCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZW1pdE1ldGhvZChcbiAgICAgICAgICAgIGlmYyxcbiAgICAgICAgICAgIG92ZXJsb2FkZWRNZXRob2QsXG4gICAgICAgICAgICBtZXRob2QuZGVmaW5pbmdUeXBlLFxuICAgICAgICAgICAgLyogZW1pdEZvclByb3h5T3JEYXRhdHlwZSAqLyB0cnVlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0UHJvcGVydHkoXG4gICAgY2xzOiBzcGVjLlR5cGUsXG4gICAgcHJvcDogc3BlYy5Qcm9wZXJ0eSxcbiAgICBkZWZpbmluZ1R5cGU6IHNwZWMuVHlwZSxcbiAgICBkYXRhdHlwZSA9IGZhbHNlLFxuICAgIHByb3h5ID0gZmFsc2UsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW1pdE5ld0xpbmVJZk5lY2Vzc2FyeSgpO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oY2xzLmZxbik7XG4gICAgY29uc3QgYWNjZXNzID0gdGhpcy5yZW5kZXJBY2Nlc3NMZXZlbChwcm9wKTtcbiAgICBjb25zdCBzdGF0aWNLZXlXb3JkID0gcHJvcC5zdGF0aWMgPyAnc3RhdGljICcgOiAnJztcbiAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRQcm9wZXJ0eU5hbWUocHJvcC5uYW1lKTtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKHByb3AsIHtcbiAgICAgIGFwaTogJ21lbWJlcicsXG4gICAgICBmcW46IGRlZmluaW5nVHlwZS5mcW4sXG4gICAgICBtZW1iZXJOYW1lOiBwcm9wLm5hbWUsXG4gICAgfSk7XG4gICAgaWYgKHByb3Aub3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCdbSnNpaU9wdGlvbmFsXScpO1xuICAgIH1cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JQcm9wZXJ0eShwcm9wKTtcblxuICAgIGxldCBpc092ZXJyaWRlS2V5V29yZCA9ICcnO1xuICAgIGxldCBpc1ZpcnR1YWxLZXlXb3JkID0gJyc7XG4gICAgbGV0IGlzQWJzdHJhY3RLZXl3b3JkID0gJyc7XG5cbiAgICAvLyBJZiB0aGUgcHJvcCBwYXJlbnQgaXMgYSBjbGFzc1xuICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKGNscykpIHtcbiAgICAgIGNvbnN0IGltcGxlbWVudGVkSW5CYXNlID0gdGhpcy5pc01lbWJlckRlZmluZWRPbkFuY2VzdG9yKFxuICAgICAgICBjbHMgYXMgc3BlYy5DbGFzc1R5cGUsXG4gICAgICAgIHByb3AsXG4gICAgICApO1xuICAgICAgaWYgKGltcGxlbWVudGVkSW5CYXNlIHx8IGRhdGF0eXBlIHx8IHByb3h5KSB7XG4gICAgICAgIC8vIE92ZXJyaWRlIGlmIHRoZSBwcm9wZXJ0eSBpcyBpbiBhIGRhdGF0eXBlIG9yIHByb3h5IGNsYXNzIG9yIGRlY2xhcmVkIGluIGEgcGFyZW50IGNsYXNzLiBJZiB0aGUgbWVtYmVyIGlzXG4gICAgICAgIC8vIHN0YXRpYywgdXNlIHRoZSBcIm5ld1wiIGtleXdvcmQgaW5zdGVhZCwgdG8gaW5kaWNhdGUgd2UgYXJlIGludGVudGlvbmFsbHkgaGlkaW5nIHRoZSBhbmNlc3RvciBkZWNsYXJhdGlvbiAoYXNcbiAgICAgICAgLy8gQyMgZG9lcyBub3QgaW5oZXJpdCBzdGF0aWNzLCB0aGV5IGNhbiBiZSBoaWRkZW4gYnV0IG5vdCBvdmVycmlkZGVuKS5UaGUgXCJuZXdcIiBrZXl3b3JkIGlzIG9wdGlvbmFsIGluIHRoaXNcbiAgICAgICAgLy8gY29udGV4dCwgYnV0IGhlbHBzIGNsYXJpZnkgaW50ZW50aW9uLlxuICAgICAgICBpc092ZXJyaWRlS2V5V29yZCA9IHByb3Auc3RhdGljID8gJ25ldyAnIDogJ292ZXJyaWRlICc7XG4gICAgICB9IGVsc2UgaWYgKHByb3AuYWJzdHJhY3QpIHtcbiAgICAgICAgLy8gQWJzdHJhY3QgbWVtYmVycyBnZXQgZGVjb3JhdGVkIGFzIHN1Y2hcbiAgICAgICAgaXNBYnN0cmFjdEtleXdvcmQgPSAnYWJzdHJhY3QgJztcbiAgICAgIH0gZWxzZSBpZiAoIXByb3Auc3RhdGljICYmICFpbXBsZW1lbnRlZEluQmFzZSkge1xuICAgICAgICAvLyBWaXJ0dWFsIGlmIHRoZSBwcm9wIGlzIG5vdCBzdGF0aWMsIGFuZCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gYmFzZSBtZW1iZXIsIHRoaXMgd2F5IHdlIGNhbiBsYXRlciBvdmVycmlkZSBpdC5cbiAgICAgICAgaXNWaXJ0dWFsS2V5V29yZCA9ICd2aXJ0dWFsICc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcFR5cGVGUU4gPSB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUocHJvcC50eXBlKTtcbiAgICBjb25zdCBpc09wdGlvbmFsID0gcHJvcC5vcHRpb25hbCA/ICc/JyA6ICcnO1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IGAke2FjY2Vzc30gJHtpc0Fic3RyYWN0S2V5d29yZH0ke2lzVmlydHVhbEtleVdvcmR9JHtzdGF0aWNLZXlXb3JkfSR7aXNPdmVycmlkZUtleVdvcmR9JHtwcm9wVHlwZUZRTn0ke2lzT3B0aW9uYWx9ICR7cHJvcE5hbWV9YDtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKHN0YXRlbWVudCk7XG5cbiAgICAvLyBFbWl0IGdldHRlcnNcbiAgICBpZiAoZGF0YXR5cGUgfHwgcHJvcC5jb25zdCB8fCBwcm9wLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnZ2V0OycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm9uLW9wdGlvbmFsLCBhZGQgYSBiYW5nIHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZ1xuICAgICAgY29uc3QgYmFuZyA9IHByb3Aub3B0aW9uYWwgPyAnJyA6ICchJztcbiAgICAgIGlmIChwcm9wLnN0YXRpYykge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgZ2V0ID0+IEdldFN0YXRpY1Byb3BlcnR5PCR7cHJvcFR5cGVGUU59JHtpc09wdGlvbmFsfT4odHlwZW9mKCR7Y2xhc3NOYW1lfSkpJHtiYW5nfTtgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGdldCA9PiBHZXRJbnN0YW5jZVByb3BlcnR5PCR7cHJvcFR5cGVGUU59JHtpc09wdGlvbmFsfT4oKSR7YmFuZ307YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbWl0IHNldHRlcnNcbiAgICBpZiAoZGF0YXR5cGUgfHwgKCFwcm9wLmltbXV0YWJsZSAmJiBwcm9wLmFic3RyYWN0KSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ3NldDsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFwcm9wLmltbXV0YWJsZSkge1xuICAgICAgICBpZiAocHJvcC5zdGF0aWMpIHtcbiAgICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICAgIGBzZXQgPT4gU2V0U3RhdGljUHJvcGVydHkodHlwZW9mKCR7Y2xhc3NOYW1lfSksIHZhbHVlKTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoJ3NldCA9PiBTZXRJbnN0YW5jZVByb3BlcnR5KHZhbHVlKTsnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmZsYWdGaXJzdE1lbWJlcldyaXR0ZW4odHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBjb25zdGFudCBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0Q29uc3RQcm9wZXJ0eShjbHM6IHNwZWMuQ2xhc3NUeXBlLCBwcm9wOiBzcGVjLlByb3BlcnR5KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0TmV3TGluZUlmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuICAgIGNvbnN0IHByb3BUeXBlID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHByb3AudHlwZSk7XG4gICAgY29uc3QgaXNPcHRpb25hbCA9IHByb3Aub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhwcm9wLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBjbHMuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogcHJvcC5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvclByb3BlcnR5KHByb3ApO1xuICAgIGNvbnN0IGFjY2VzcyA9IHRoaXMucmVuZGVyQWNjZXNzTGV2ZWwocHJvcCk7XG4gICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0UHJvcGVydHlOYW1lKHByb3AubmFtZSk7XG4gICAgY29uc3Qgc3RhdGljS2V5d29yZCA9IHByb3Auc3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYCR7YWNjZXNzfSAke3N0YXRpY0tleXdvcmR9JHtwcm9wVHlwZX0ke2lzT3B0aW9uYWx9ICR7cHJvcE5hbWV9YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKCdnZXQ7Jyk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnR5cGVyZXNvbHZlci50b05hdGl2ZUZxbihjbHMuZnFuKTtcbiAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm9uLW9wdGlvbmFsLCBhZGQgYSBiYW5nIHRvIHNpbGVuY2UgdGhlIGNvbXBpbGVyIHdhcm5pbmdcbiAgICBjb25zdCBiYW5nID0gcHJvcC5vcHRpb25hbCA/ICcnIDogJyEnO1xuICAgIGNvbnN0IGluaXRpYWxpemVyID0gcHJvcC5zdGF0aWNcbiAgICAgID8gYD0gR2V0U3RhdGljUHJvcGVydHk8JHtwcm9wVHlwZX0+KHR5cGVvZigke2NsYXNzTmFtZX0pKSR7YmFuZ307YFxuICAgICAgOiBgPSBHZXRJbnN0YW5jZVByb3BlcnR5PCR7cHJvcFR5cGV9Pih0eXBlb2YoJHtjbGFzc05hbWV9KSkke2Jhbmd9O2A7XG4gICAgdGhpcy5jb2RlLmxpbmUoaW5pdGlhbGl6ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJBY2Nlc3NMZXZlbChtZXRob2Q6IHNwZWMuTWV0aG9kIHwgc3BlYy5Qcm9wZXJ0eSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1ldGhvZC5wcm90ZWN0ZWQgPyAncHJvdGVjdGVkJyA6ICdwdWJsaWMnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05lc3RlZCh0eXBlOiBzcGVjLlR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYXNzZW1ibHkudHlwZXMgfHwgIXR5cGUubmFtZXNwYWNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGAke3R5cGUuYXNzZW1ibHl9LiR7dHlwZS5uYW1lc3BhY2V9YDtcbiAgICByZXR1cm4gcGFyZW50IGluIHRoaXMuYXNzZW1ibHkudHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHRvQ1NoYXJwRmlsZVBhdGgodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dHlwZX0uY3NgO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZUlmTmVlZGVkKFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAgaXNOZXN0ZWQ6IGJvb2xlYW4sXG4gICAgdXNpbmdEZXB1dHkgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICAvLyBJZiBOZXN0ZWQgdHlwZSwgd2Ugc2hvdWxkbid0IG9wZW4vY2xvc2UgYSBmaWxlXG4gICAgaWYgKGlzTmVzdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG90bmV0UGFja2FnZUlkID0gdGhpcy5hc3NlbWJseS50YXJnZXRzPy5kb3RuZXQ/LnBhY2thZ2VJZDtcbiAgICBpZiAoIWRvdG5ldFBhY2thZ2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIG1vZHVsZSAke3RoaXMuYXNzZW1ibHkubmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRvdG5ldC5wYWNrYWdlSWQgc2V0dGluZ2AsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IG5hbWVzcGFjZS5yZXBsYWNlKC9bLl0vZywgJy8nKTtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoXG4gICAgICBwYXRoLmpvaW4oZG90bmV0UGFja2FnZUlkLCBmaWxlUGF0aCwgdGhpcy50b0NTaGFycEZpbGVQYXRoKHR5cGVOYW1lKSksXG4gICAgKTtcbiAgICBpZiAodXNpbmdEZXB1dHkpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCd1c2luZyBBbWF6b24uSlNJSS5SdW50aW1lLkRlcHV0eTsnKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgfVxuXG4gICAgLy8gU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgbWlzc2luZyBYTUxEb2MsIE9ic29sZXRlIGluY29uc2lzdGVuY2llc1xuICAgIHRoaXMuY29kZS5saW5lKCcjcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSBDUzA2NzIsQ1MwODA5LENTMTU5MScpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRmlsZUlmTmVlZGVkKFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAgaXNOZXN0ZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGlmIChpc05lc3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgY29uc3QgZG90bmV0UGFja2FnZUlkID0gdGhpcy5hc3NlbWJseS50YXJnZXRzPy5kb3RuZXQ/LnBhY2thZ2VJZDtcbiAgICBpZiAoIWRvdG5ldFBhY2thZ2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIG1vZHVsZSAke3RoaXMuYXNzZW1ibHkubmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRvdG5ldC5wYWNrYWdlSWQgc2V0dGluZ2AsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IG5hbWVzcGFjZS5yZXBsYWNlKC9bLl0vZywgJy8nKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKFxuICAgICAgcGF0aC5qb2luKGRvdG5ldFBhY2thZ2VJZCwgZmlsZVBhdGgsIHRoaXMudG9DU2hhcnBGaWxlUGF0aCh0eXBlTmFtZSkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBmaXJzdE1lbWJlciBib29sZWFuIGZsYWcgdG8ga2VlcCB0cmFjayBvZiB0aGUgZmlyc3QgbWVtYmVyIG9mIGEgbmV3IGZpbGVcbiAgICpcbiAgICogVGhpcyBhdm9pZHMgdW5uZWNlc3Nhcnkgd2hpdGUgbGluZXNcbiAgICovXG4gIHByaXZhdGUgZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbihmaXJzdDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlyc3RNZW1iZXJXcml0dGVuID0gZmlyc3Q7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBuZXcgbGluZSBwcmlvciB0byB3cml0aW5nIGEgbmV3IHByb3BlcnR5LCBtZXRob2QsIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdGhlIGZpcnN0IG9uZSBpbiB0aGUgY2xhc3NcbiAgICpcbiAgICogVGhpcyBhdm9pZHMgdW5uZWNlc3Nhcnkgd2hpdGUgbGluZXMuXG4gICAqL1xuICBwcml2YXRlIGVtaXROZXdMaW5lSWZOZWNlc3NhcnkoKTogdm9pZCB7XG4gICAgLy8gSWYgdGhlIGZpcnN0IG1lbWJlciBoYXMgYWxyZWFkeSBiZWVuIHdyaXR0ZW4sIGl0IGlzIHNhZmUgdG8gd3JpdGUgYSBuZXcgbGluZVxuICAgIGlmICh0aGlzLmZpcnN0TWVtYmVyV3JpdHRlbikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maXJzdE1lbWJlcldyaXR0ZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRBc3NlbWJseURvY3MoKSB7XG4gICAgdGhpcy5lbWl0TmFtZXNwYWNlRG9jcyhcbiAgICAgIHRoaXMuYXNzZW1ibHkudGFyZ2V0cyEuZG90bmV0IS5uYW1lc3BhY2UsXG4gICAgICB0aGlzLmFzc2VtYmx5Lm5hbWUsXG4gICAgICB0aGlzLmFzc2VtYmx5LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhbiB1bnVzZWQsIGVtcHR5IGNsYXNzIGNhbGxlZCBgTmFtZXNwYWNlRG9jYCB0byBhdHRhY2ggdGhlIG1vZHVsZSBSRUFETUUgdG9cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gd2F5IHRvIGF0dGFjaCBkb2MgY29tbWVudHMgdG8gYSBuYW1lc3BhY2UgaW4gQyMsIGFuZCB0aGlzIHRyaWNrIGhhcyBiZWVuXG4gICAqIHNlbWktc3RhbmRhcmRpemVkIGJ5IE5Eb2MgYW5kIFNhbmRjYXN0bGUgSGVscCBGaWxlIEJ1aWxkZXIuXG4gICAqXG4gICAqIERvY0ZYIGRvZXNuJ3Qgc3VwcG9ydCBpdCBvdXQgb2YgdGhlIGJveCwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGVyZSB3aXRoIGFcbiAgICogYml0IG9mIGhhY2tlcnkuXG4gICAqXG4gICAqIEluIGFueSBjYXNlLCB3ZSBuZWVkIGEgcGxhY2UgdG8gYXR0YWNoIHRoZSBkb2NzIHdoZXJlIHRoZXkgY2FuIGJlIHRyYW5zcG9ydGVkIGFyb3VuZCxcbiAgICogbWlnaHQgYXMgd2VsbCBiZSB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgZW1pdE5hbWVzcGFjZURvY3MoXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAganNpaUZxbjogc3RyaW5nLFxuICAgIGRvY1NvdXJjZTogc3BlYy5UYXJnZXRhYmxlICYgc3BlYy5SZWFkTWVDb250YWluZXIsXG4gICkge1xuICAgIGlmICghZG9jU291cmNlLnJlYWRtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9ICdOYW1lc3BhY2VEb2MnO1xuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChjbGFzc05hbWUsIG5hbWVzcGFjZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXRNYXJrZG93bkFzUmVtYXJrcyhkb2NTb3VyY2UucmVhZG1lLm1hcmtkb3duLCB7XG4gICAgICBhcGk6ICdtb2R1bGVSZWFkbWUnLFxuICAgICAgbW9kdWxlRnFuOiBqc2lpRnFuLFxuICAgIH0pO1xuICAgIHRoaXMuZW1pdEhpZGVBdHRyaWJ1dGUoKTtcbiAgICAvLyBUcmFkaXRpb25hbGx5IHRoaXMgY2xhc3MgaXMgbWFkZSAnaW50ZXJuYWwnLCBidXQgdGhhdCBpbnRlcmFjdHMgcG9vcmx5IHdpdGggRG9jRlgncyBkZWZhdWx0IGZpbHRlcnNcbiAgICAvLyB3aGljaCBhcmVuJ3Qgb3ZlcnJpZGFibGUuIFNvIHdlIG1ha2UgaXQgcHVibGljLCBidXQgdXNlIGF0dHJpYnV0ZXMgdG8gaGlkZSBpdCBmcm9tIHVzZXJzJyBJbnRlbGxpU2Vuc2UsXG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjbGFzcyBpbiBEb2NGWC5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgY2xhc3MgJHtjbGFzc05hbWV9YCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhbiBhdHRyaWJ1dGUgdGhhdCB3aWxsIGhpZGUgdGhlIHN1YnNlcXVlbnQgQVBJIGVsZW1lbnQgZnJvbSB1c2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBlbWl0SGlkZUF0dHJpYnV0ZSgpIHtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICdbU3lzdGVtLkNvbXBvbmVudE1vZGVsLkVkaXRvckJyb3dzYWJsZShTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRWRpdG9yQnJvd3NhYmxlU3RhdGUuTmV2ZXIpXScsXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
875
|
+
//# sourceMappingURL=dotnetgenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotnetgenerator.js","sourceRoot":"","sources":["dotnetgenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,7 +128,6 @@ class DotNetRuntimeGenerator {
|
|
|
128
128
|
* Returns the jsii .NET method identifier
|
|
129
129
|
*/
|
|
130
130
|
createInvokeMethodIdentifier(method, cls) {
|
|
131
|
-
var _a;
|
|
132
131
|
const className = this.typeresolver.toNativeFqn(cls.fqn);
|
|
133
132
|
const isStatic = method.static ? 'Static' : 'Instance';
|
|
134
133
|
const returns = method.returns ? '' : 'Void';
|
|
@@ -149,7 +148,7 @@ class DotNetRuntimeGenerator {
|
|
|
149
148
|
params.push(this.nameutils.convertParameterName(param.name));
|
|
150
149
|
}
|
|
151
150
|
}
|
|
152
|
-
const hasOptional =
|
|
151
|
+
const hasOptional = method.parameters?.find((param) => param.optional) != null ? '?' : '';
|
|
153
152
|
return `${invokeMethodName}${returnType}(${typeofStatement}new System.Type[]{${paramTypes.join(', ')}}, new object${hasOptional}[]{${params.join(', ')}})${bang};`;
|
|
154
153
|
}
|
|
155
154
|
/**
|
|
@@ -175,4 +174,4 @@ class DotNetRuntimeGenerator {
|
|
|
175
174
|
}
|
|
176
175
|
}
|
|
177
176
|
exports.DotNetRuntimeGenerator = DotNetRuntimeGenerator;
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0cnVudGltZWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRvdG5ldHJ1bnRpbWVnZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBSW5DLDJDQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxzQkFBc0I7SUFLakMsWUFBbUIsSUFBZSxFQUFFLFlBQWdDO1FBRm5ELGNBQVMsR0FBb0IsSUFBSSwyQkFBZSxFQUFFLENBQUM7UUFHbEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwwQkFBMEIsQ0FBQyxHQUF1QjtRQUN2RCxNQUFNLGFBQWEsR0FBRyxxQ0FBcUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FDNUYsR0FBRyxDQUNKLDJCQUEyQixHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQ0FBa0MsQ0FBQyxHQUF1QjtRQUMvRCxNQUFNLGFBQWEsR0FBRyxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCLENBQUMsR0FBbUI7UUFDL0MsMERBQTBEO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLGFBQWEsR0FBRyxpQ0FBaUMsU0FBUywyQkFBMkIsR0FB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Yyc7XG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tICdjb2RlbWFrZXInO1xuXG5pbXBvcnQgeyBEb3ROZXRUeXBlUmVzb2x2ZXIgfSBmcm9tICcuL2RvdG5ldHR5cGVyZXNvbHZlcic7XG5pbXBvcnQgeyBEb3ROZXROYW1lVXRpbHMgfSBmcm9tICcuL25hbWV1dGlscyc7XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBKc2lpIGF0dHJpYnV0ZXMgYW5kIGNhbGxzIGZvciB0aGUganNpaSAuTkVUIHJ1bnRpbWVcbiAqXG4gKiBVc2VzIHRoZSBzYW1lIGluc3RhbmNlIG9mIENvZGVNYWtlciBhcyB0aGUgcmVzdCBvZiB0aGUgY29kZVxuICovXG5leHBvcnQgY2xhc3MgRG90TmV0UnVudGltZUdlbmVyYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGVyZXNvbHZlcjogRG90TmV0VHlwZVJlc29sdmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWV1dGlsczogRG90TmV0TmFtZVV0aWxzID0gbmV3IERvdE5ldE5hbWVVdGlscygpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb2RlOiBDb2RlTWFrZXIsIHR5cGVyZXNvbHZlcjogRG90TmV0VHlwZVJlc29sdmVyKSB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLnR5cGVyZXNvbHZlciA9IHR5cGVyZXNvbHZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUganNpaSBhdHRyaWJ1dGUgZm9yIGFuIGludGVyZmFjZVxuICAgKlxuICAgKiBFeDogW0pzaWlJbnRlcmZhY2UobmF0aXZlVHlwZTogdHlwZW9mKElHcmVldGVlKSwgZnVsbHlRdWFsaWZpZWROYW1lOiBcImpzaWktY2FsYy5HcmVldGVlXCIpXVxuICAgKi9cbiAgcHVibGljIGVtaXRBdHRyaWJ1dGVzRm9ySW50ZXJmYWNlKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlKSB7XG4gICAgY29uc3QganNpaUF0dHJpYnV0ZSA9IGBbSnNpaUludGVyZmFjZShuYXRpdmVUeXBlOiB0eXBlb2YoJHt0aGlzLm5hbWV1dGlscy5jb252ZXJ0SW50ZXJmYWNlTmFtZShcbiAgICAgIGlmYyxcbiAgICApfSksIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCIke2lmYy5mcW59XCIpXWA7XG4gICAgdGhpcy5jb2RlLmxpbmUoanNpaUF0dHJpYnV0ZSk7XG4gICAgdGhpcy5lbWl0RGVwcmVjYXRlZEF0dHJpYnV0ZUlmTmVjZXNzYXJ5KGlmYyk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIGpzaWkgYXR0cmlidXRlIGZvciBhbiBpbnRlcmZhY2UgZGF0YXR5cGVcbiAgICpcbiAgICogQHBhcmFtIGlmYyB0aGUgYW5ub3RhdGVkIGludGVyZmFjZSB0eXBlLlxuICAgKlxuICAgKiBFeDogW0pzaWlCeVZhbHVlKGZxbjogXCJhc3NlbWJseS5UeXBlTmFtZVwiKV1cbiAgICovXG4gIHB1YmxpYyBlbWl0QXR0cmlidXRlc0ZvckludGVyZmFjZURhdGF0eXBlKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlKSB7XG4gICAgY29uc3QganNpaUF0dHJpYnV0ZSA9IGBbSnNpaUJ5VmFsdWUoZnFuOiBcIiR7aWZjLmZxbn1cIildYDtcbiAgICB0aGlzLmNvZGUubGluZShqc2lpQXR0cmlidXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUganNpaSBhdHRyaWJ1dGUgZm9yIGEgY2xhc3NcbiAgICpcbiAgICogRXg6IFtKc2lpQ2xhc3MobmF0aXZlVHlwZTogdHlwZW9mKFZlcnkpLCBmdWxseVF1YWxpZmllZE5hbWU6IFwiQHNjb3BlL2pzaWktY2FsYy1iYXNlLW9mLWJhc2UuVmVyeVwiKV1cbiAgICovXG4gIHB1YmxpYyBlbWl0QXR0cmlidXRlc0ZvckNsYXNzKGNsczogc3BlYy5DbGFzc1R5cGUpIHtcbiAgICAvLyBjb25zdCBjbGFzc05hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0Q2xhc3NOYW1lKGNscyk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oY2xzLmZxbik7XG4gICAgbGV0IGpzaWlBdHRyaWJ1dGUgPSBgW0pzaWlDbGFzcyhuYXRpdmVUeXBlOiB0eXBlb2YoJHtjbGFzc05hbWV9KSwgZnVsbHlRdWFsaWZpZWROYW1lOiBcIiR7Y2xzLmZxbn1cIildYDtcbiAgICBjb25zdCBpbml0aWFsaXplciA9IGNscy5pbml0aWFsaXplcjtcbiAgICBpZiAoaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGlmIChpbml0aWFsaXplci5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGpzaWlBdHRyaWJ1dGUgPVxuICAgICAgICAgIGBbSnNpaUNsYXNzKG5hdGl2ZVR5cGU6IHR5cGVvZigke2NsYXNzTmFtZX0pLCBmdWxseVF1YWxpZmllZE5hbWU6IGAgK1xuICAgICAgICAgIGBcIiR7Y2xzLmZxbn1cIiwgcGFyYW1ldGVyc0pzb246IFwiJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFx7Mn1cIi9nLCAndGVzdCcpfVwiKV1gO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZShqc2lpQXR0cmlidXRlKTtcbiAgICB0aGlzLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoY2xzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgcHJvcGVyIGpzaWkgLk5FVCBhdHRyaWJ1dGUgZm9yIGEgbWV0aG9kXG4gICAqXG4gICAqIEV4OiBbSnNpaU1ldGhvZChuYW1lOiBcImhleVwiLCByZXR1cm5zSnNvbjogXCJ7XFxcInR5cGVcXFwiOntcXFwicHJpbWl0aXZlXFxcIjpcXFwibnVtYmVyXFxcIn19XCIpXG4gICAqL1xuICBwdWJsaWMgZW1pdEF0dHJpYnV0ZXNGb3JNZXRob2QoXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSB8IHNwZWMuSW50ZXJmYWNlVHlwZSxcbiAgICBtZXRob2Q6IHNwZWMuTWV0aG9kIC8qLCBlbWl0Rm9yUHJveHlPckRhdGF0eXBlOiBib29sZWFuID0gZmFsc2UqLyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaXNBc3luYyA9XG4gICAgICBzcGVjLmlzQ2xhc3NUeXBlKGNscykgJiYgbWV0aG9kLmFzeW5jID8gJywgaXNBc3luYzogdHJ1ZScgOiAnJztcbiAgICBjb25zdCBwYXJhbWV0ZXJzSnNvbiA9IG1ldGhvZC5wYXJhbWV0ZXJzXG4gICAgICA/IGAsIHBhcmFtZXRlcnNKc29uOiBcIiR7SlNPTi5zdHJpbmdpZnkobWV0aG9kLnBhcmFtZXRlcnMpXG4gICAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXFxcezJ9XCIvZywgJ3Rlc3QnKX1cImBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgcmV0dXJuc0pzb24gPSBtZXRob2QucmV0dXJuc1xuICAgICAgPyBgLCByZXR1cm5zSnNvbjogXCIke0pTT04uc3RyaW5naWZ5KG1ldGhvZC5yZXR1cm5zKVxuICAgICAgICAgIC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJylcbiAgICAgICAgICAucmVwbGFjZSgvXFxcXHsyfVwiL2csICd0ZXN0Jyl9XCJgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGpzaWlBdHRyaWJ1dGUgPSBgW0pzaWlNZXRob2QobmFtZTogXCIke21ldGhvZC5uYW1lfVwiJHtyZXR1cm5zSnNvbn0ke3BhcmFtZXRlcnNKc29ufSR7aXNBc3luY30pXWA7XG4gICAgdGhpcy5jb2RlLmxpbmUoanNpaUF0dHJpYnV0ZSk7XG4gICAgdGhpcy5lbWl0RGVwcmVjYXRlZEF0dHJpYnV0ZUlmTmVjZXNzYXJ5KG1ldGhvZCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHByb3BlciBqc2lpIC5ORVQgYXR0cmlidXRlIGZvciBhIHByb3BlcnR5XG4gICAqXG4gICAqIEV4OiBbSnNpaVByb3BlcnR5KG5hbWU6IFwiZm9vXCIsIHR5cGVKc29uOiBcIntcXFwiZnFuXFxcIjpcXFwiQHNjb3BlL2pzaWktY2FsYy1iYXNlLW9mLWJhc2UuVmVyeVxcXCJ9XCIsIGlzT3B0aW9uYWw6IHRydWUpXVxuICAgKi9cbiAgcHVibGljIGVtaXRBdHRyaWJ1dGVzRm9yUHJvcGVydHkocHJvcDogc3BlYy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIGNvbnN0IGlzT3B0aW9uYWxKc2lpID0gcHJvcC5vcHRpb25hbCA/ICcsIGlzT3B0aW9uYWw6IHRydWUnIDogJyc7XG4gICAgY29uc3QganNpaUF0dHJpYnV0ZSA9XG4gICAgICBgW0pzaWlQcm9wZXJ0eShuYW1lOiBcIiR7cHJvcC5uYW1lfVwiLCBgICtcbiAgICAgIGB0eXBlSnNvbjogXCIke0pTT04uc3RyaW5naWZ5KHByb3AudHlwZSlcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxcXHsyfVwiL2csICd0ZXN0Jyl9XCIke2lzT3B0aW9uYWxKc2lpfSldYDtcbiAgICB0aGlzLmNvZGUubGluZShqc2lpQXR0cmlidXRlKTtcbiAgICB0aGlzLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkocHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHByb3BlciBqc2lpIC5ORVQgYXR0cmlidXRlIGZvciBhbiBpbnRlcmZhY2UgcHJveHlcbiAgICpcbiAgICogRXg6IFtKc2lpVHlwZVByb3h5KG5hdGl2ZVR5cGU6IHR5cGVvZihJVmVyeUJhc2VQcm9wcyksIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJAc2NvcGUvanNpaS1jYWxjLWJhc2Utb2YtYmFzZS5WZXJ5QmFzZVByb3BzXCIpXVxuICAgKi9cbiAgcHVibGljIGVtaXRBdHRyaWJ1dGVzRm9ySW50ZXJmYWNlUHJveHkoXG4gICAgaWZjOiBzcGVjLkNsYXNzVHlwZSB8IHNwZWMuSW50ZXJmYWNlVHlwZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHNwZWMuaXNJbnRlcmZhY2VUeXBlKGlmYylcbiAgICAgID8gdGhpcy5uYW1ldXRpbHMuY29udmVydEludGVyZmFjZU5hbWUoaWZjKVxuICAgICAgOiB0aGlzLnR5cGVyZXNvbHZlci50b05hdGl2ZUZxbihpZmMuZnFuKTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBbSnNpaVR5cGVQcm94eShuYXRpdmVUeXBlOiB0eXBlb2YoJHtuYW1lfSksIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCIke2lmYy5mcW59XCIpXWAsXG4gICAgKTtcbiAgICB0aGlzLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoaWZjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgcHJvcGVyIGpzaWkgLk5FVCBhdHRyaWJ1dGUgZm9yIGFuIGVudW1cbiAgICpcbiAgICogRXg6IFtKc2lpRW51bShuYXRpdmVUeXBlOiB0eXBlb2YoVGVzdCksIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJqc2lpLWNhbGMuVGVzdFwiKV1cbiAgICovXG4gIHB1YmxpYyBlbWl0QXR0cmlidXRlc0ZvckVudW0oZW5tOiBzcGVjLkVudW1UeXBlLCBlbnVtTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QganNpaUF0dHJpYnV0ZSA9IGBbSnNpaUVudW0obmF0aXZlVHlwZTogdHlwZW9mKCR7ZW51bU5hbWV9KSwgZnVsbHlRdWFsaWZpZWROYW1lOiBcIiR7ZW5tLmZxbn1cIildYDtcbiAgICB0aGlzLmNvZGUubGluZShqc2lpQXR0cmlidXRlKTtcbiAgICB0aGlzLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoZW5tKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgcHJvcGVyIGpzaWkgLk5FVCBhdHRyaWJ1dGUgZm9yIGFuIGVudW0gbWVtYmVyXG4gICAqXG4gICAqIEV4OiBbSnNpaUVudW1NZW1iZXIobmFtZTogXCJOb3JtYWxcIildXG4gICAqL1xuICBwdWJsaWMgZW1pdEF0dHJpYnV0ZXNGb3JFbnVtTWVtYmVyKFxuICAgIGVudW1NZW1iZXJOYW1lOiBzdHJpbmcsXG4gICAgZW5tbWVtYmVyOiBzcGVjLkVudW1NZW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGpzaWlBdHRyaWJ1dGUgPSBgW0pzaWlFbnVtTWVtYmVyKG5hbWU6IFwiJHtlbnVtTWVtYmVyTmFtZX1cIildYDtcbiAgICB0aGlzLmNvZGUubGluZShqc2lpQXR0cmlidXRlKTtcbiAgICB0aGlzLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoZW5tbWVtYmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBqc2lpIC5ORVQgbWV0aG9kIGlkZW50aWZpZXJcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVJbnZva2VNZXRob2RJZGVudGlmaWVyKFxuICAgIG1ldGhvZDogc3BlYy5NZXRob2QsXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnR5cGVyZXNvbHZlci50b05hdGl2ZUZxbihjbHMuZnFuKTtcbiAgICBjb25zdCBpc1N0YXRpYyA9IG1ldGhvZC5zdGF0aWMgPyAnU3RhdGljJyA6ICdJbnN0YW5jZSc7XG4gICAgY29uc3QgcmV0dXJucyA9IG1ldGhvZC5yZXR1cm5zID8gJycgOiAnVm9pZCc7XG4gICAgY29uc3QgaW52b2tlTWV0aG9kTmFtZSA9IG1ldGhvZC5yZXR1cm5zXG4gICAgICA/IGByZXR1cm4gSW52b2tlJHtpc1N0YXRpY30ke3JldHVybnN9TWV0aG9kYFxuICAgICAgOiBgSW52b2tlJHtpc1N0YXRpY30ke3JldHVybnN9TWV0aG9kYDtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gbWV0aG9kLnJldHVybnNcbiAgICAgID8gYDwke3RoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShtZXRob2QucmV0dXJucy50eXBlKX0ke1xuICAgICAgICAgIG1ldGhvZC5yZXR1cm5zLm9wdGlvbmFsID8gJz8nIDogJydcbiAgICAgICAgfT5gXG4gICAgICA6ICcnO1xuICAgIC8vIElmIHRoZSBtZXRob2QgcmV0dXJucyBhIG5vbi1vcHRpb25hbCB2YWx1ZSwgYXBwbHkgYSBcIiFcIiB0byBzaWxlbmNlIGNvbXBpbGF0aW9uIHdhcm5pbmcuXG4gICAgY29uc3QgYmFuZyA9IG1ldGhvZC5yZXR1cm5zICYmICFtZXRob2QucmV0dXJucy5vcHRpb25hbCA/ICchJyA6ICcnO1xuICAgIGNvbnN0IHR5cGVvZlN0YXRlbWVudCA9IG1ldGhvZC5zdGF0aWMgPyBgdHlwZW9mKCR7Y2xhc3NOYW1lfSksIGAgOiAnJztcbiAgICBjb25zdCBwYXJhbVR5cGVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGlmIChtZXRob2QucGFyYW1ldGVycykge1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBtZXRob2QucGFyYW1ldGVycykge1xuICAgICAgICBwYXJhbVR5cGVzLnB1c2goXG4gICAgICAgICAgYHR5cGVvZigke3RoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShwYXJhbS50eXBlKX0ke1xuICAgICAgICAgICAgcGFyYW0udmFyaWFkaWMgPyAnW10nIDogJydcbiAgICAgICAgICB9KWAsXG4gICAgICAgICk7XG4gICAgICAgIHBhcmFtcy5wdXNoKHRoaXMubmFtZXV0aWxzLmNvbnZlcnRQYXJhbWV0ZXJOYW1lKHBhcmFtLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaGFzT3B0aW9uYWwgPVxuICAgICAgbWV0aG9kLnBhcmFtZXRlcnM/LmZpbmQoKHBhcmFtKSA9PiBwYXJhbS5vcHRpb25hbCkgIT0gbnVsbCA/ICc/JyA6ICcnO1xuICAgIHJldHVybiBgJHtpbnZva2VNZXRob2ROYW1lfSR7cmV0dXJuVHlwZX0oJHt0eXBlb2ZTdGF0ZW1lbnR9bmV3IFN5c3RlbS5UeXBlW117JHtwYXJhbVR5cGVzLmpvaW4oXG4gICAgICAnLCAnLFxuICAgICl9fSwgbmV3IG9iamVjdCR7aGFzT3B0aW9uYWx9W117JHtwYXJhbXMuam9pbignLCAnKX19KSR7YmFuZ307YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgcHJvcGVyIC5ORVQgYXR0cmlidXRlIGZvciBhIGRlcHJlY2F0ZWQgY2xhc3MvaW50ZXJmYWNlL21lbWJlclxuICAgKlxuICAgKiBFeDogW1N5c3RlbS5PYnNvbGV0ZSgpXVxuICAgKi9cbiAgcHVibGljIGVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoXG4gICAgb2JqOlxuICAgICAgfCBzcGVjLk1ldGhvZFxuICAgICAgfCBzcGVjLkNsYXNzVHlwZVxuICAgICAgfCBzcGVjLkludGVyZmFjZVR5cGVcbiAgICAgIHwgc3BlYy5Qcm9wZXJ0eVxuICAgICAgfCBzcGVjLkVudW1UeXBlXG4gICAgICB8IHNwZWMuRW51bU1lbWJlclxuICAgICAgfCBzcGVjLkluaXRpYWxpemVyXG4gICAgICB8IHVuZGVmaW5lZCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZG9jcyA9IG9iai5kb2NzO1xuICAgIGlmIChkb2NzKSB7XG4gICAgICBpZiAoZG9jcy5zdGFiaWxpdHkhID09PSBzcGVjLlN0YWJpbGl0eS5EZXByZWNhdGVkKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGRvY3MuZGVwcmVjYXRlZFxuICAgICAgICAgID8gYFtTeXN0ZW0uT2Jzb2xldGUoXCIke2RvY3MuZGVwcmVjYXRlZFxuICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICcgJykgLy8gUmVwbGFjaW5nIG5ldyBsaW5lcyBpbiBPYnNvbGV0ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiKV1gXG4gICAgICAgICAgOiAnW1N5c3RlbS5PYnNvbGV0ZSgpXSc7XG4gICAgICAgIHRoaXMuY29kZS5saW5lKGF0dHJpYnV0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
177
|
+
//# sourceMappingURL=dotnetruntimegenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotnetruntimegenerator.js","sourceRoot":"","sources":["dotnetruntimegenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,6 @@ class DotNetTypeResolver {
|
|
|
20
20
|
* Translates a type fqn to a native .NET full type
|
|
21
21
|
*/
|
|
22
22
|
toNativeFqn(fqn) {
|
|
23
|
-
var _a, _b, _c;
|
|
24
23
|
const type = this.findType(fqn);
|
|
25
24
|
let typeName = '';
|
|
26
25
|
switch (type.kind) {
|
|
@@ -38,14 +37,14 @@ class DotNetTypeResolver {
|
|
|
38
37
|
}
|
|
39
38
|
const [mod] = fqn.split('.');
|
|
40
39
|
const depMod = this.findModule(mod);
|
|
41
|
-
const dotnetNamespace =
|
|
40
|
+
const dotnetNamespace = depMod.targets?.dotnet?.namespace;
|
|
42
41
|
if (!dotnetNamespace) {
|
|
43
42
|
throw new Error(`The assembly ${mod} does not have a dotnet.namespace setting`);
|
|
44
43
|
}
|
|
45
44
|
if (type.namespace) {
|
|
46
45
|
// If the type is declared in an additional namespace.
|
|
47
46
|
const namespaceFqn = `${this.assembly.name}.${type.namespace}`;
|
|
48
|
-
const associatedNamespace =
|
|
47
|
+
const associatedNamespace = this.assembly.types?.[namespaceFqn];
|
|
49
48
|
if (associatedNamespace) {
|
|
50
49
|
// Checking if there is a C# type associated with this namespace, in case we need to slugify it
|
|
51
50
|
const actualNamespace = this.toDotNetType(this.findType(namespaceFqn));
|
|
@@ -61,9 +60,8 @@ class DotNetTypeResolver {
|
|
|
61
60
|
* Resolves the namespaces dependencies by looking at the .jsii model
|
|
62
61
|
*/
|
|
63
62
|
resolveNamespacesDependencies() {
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
const assmConfigurations = (_b = this.assembly.dependencyClosure) !== null && _b !== void 0 ? _b : {};
|
|
63
|
+
const assmDependencies = this.assembly.dependencies ?? {};
|
|
64
|
+
const assmConfigurations = this.assembly.dependencyClosure ?? {};
|
|
67
65
|
for (const [depName, version] of Object.entries(assmDependencies)) {
|
|
68
66
|
const depInfo = assmConfigurations[depName];
|
|
69
67
|
if (!this.namespaceDependencies.has(depName)) {
|
|
@@ -82,8 +80,7 @@ class DotNetTypeResolver {
|
|
|
82
80
|
*
|
|
83
81
|
*/
|
|
84
82
|
resolveImplementedInterfaces(ifc) {
|
|
85
|
-
|
|
86
|
-
const interfaces = (_a = ifc.interfaces) !== null && _a !== void 0 ? _a : [];
|
|
83
|
+
const interfaces = ifc.interfaces ?? [];
|
|
87
84
|
const baseTypeNames = [];
|
|
88
85
|
// For all base members
|
|
89
86
|
for (const base of interfaces) {
|
|
@@ -111,20 +108,19 @@ class DotNetTypeResolver {
|
|
|
111
108
|
throw new Error(`Invalid type reference: ${JSON.stringify(typeref)}`);
|
|
112
109
|
}
|
|
113
110
|
resolveNamespace(assm, assmName, ns) {
|
|
114
|
-
|
|
115
|
-
let resolved = (_b = (_a = assm.targets) === null || _a === void 0 ? void 0 : _a.dotnet) === null || _b === void 0 ? void 0 : _b.namespace;
|
|
111
|
+
let resolved = assm.targets?.dotnet?.namespace;
|
|
116
112
|
if (!resolved) {
|
|
117
113
|
throw new Error(`Assembly ${assmName} does not have targets.dotnet.namespace configured!`);
|
|
118
114
|
}
|
|
119
115
|
const segments = ns.split('.');
|
|
120
116
|
for (let i = 0; i < segments.length; i++) {
|
|
121
117
|
const submoduleName = `${assmName}.${segments.slice(0, i + 1).join('.')}`;
|
|
122
|
-
const submodule =
|
|
123
|
-
if (submodule &&
|
|
118
|
+
const submodule = assm.submodules?.[submoduleName];
|
|
119
|
+
if (submodule && submodule.targets?.dotnet?.namespace) {
|
|
124
120
|
resolved = submodule.targets.dotnet.namespace;
|
|
125
121
|
}
|
|
126
122
|
else {
|
|
127
|
-
resolved = `${resolved}.${codemaker_1.toPascalCase(segments[i])}`;
|
|
123
|
+
resolved = `${resolved}.${(0, codemaker_1.toPascalCase)(segments[i])}`;
|
|
128
124
|
}
|
|
129
125
|
}
|
|
130
126
|
return resolved;
|
|
@@ -166,4 +162,4 @@ class DotNetTypeResolver {
|
|
|
166
162
|
}
|
|
167
163
|
}
|
|
168
164
|
exports.DotNetTypeResolver = DotNetTypeResolver;
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0dHlwZXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0dHlwZXJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyx5Q0FBeUM7QUFFekMsbURBQW1EO0FBQ25ELDJDQUE4QztBQUs5QyxNQUFhLGtCQUFrQjtJQWE3QixZQUNFLFFBQXVCLEVBQ3ZCLFVBQThCLEVBQzlCLFFBQTBCLEVBQ1QsZ0NBQTBDO1FBQTFDLHFDQUFnQyxHQUFoQyxnQ0FBZ0MsQ0FBVTtRQWhCN0Qsd0RBQXdEO1FBQ3hELDBDQUEwQztRQUNuQywwQkFBcUIsR0FBa0MsSUFBSSxHQUFHLEVBR2xFLENBQUM7UUFLYSxjQUFTLEdBQW9CLElBQUksMkJBQWUsRUFBRSxDQUFDO1FBUWxFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxHQUFXOztRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzFCLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxNQUFNO1lBQ1IsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7Z0JBQ3RCLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQXNCLENBQUMsQ0FBQztnQkFDbkUsTUFBTTtZQUNSLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FB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QyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDNUIsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07Z0JBQzVCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHO2dCQUN6QixPQUFPLFFBQVEsQ0FBQztZQUNsQjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixTQUFnQixFQUFFLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEdBQWlDO1FBQzFELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hFLFFBQVEsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDM0IsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUs7Z0JBQzVCLE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxDQUFDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHO2dCQUMxQixPQUFPLGtEQUFrRCxpQkFBaUIsR0FBRyxDQUFDO1lBQ2hGO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBVyxFQUFFLENBQzdELENBQUM7U0FDTDtJQUNILENBQUM7Q0FDRjtBQWpNRCxnREFpTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlIH0gZnJvbSAnY29kZW1ha2VyJztcblxuaW1wb3J0IHsgRG90TmV0RGVwZW5kZW5jeSB9IGZyb20gJy4vZmlsZWdlbmVyYXRvcic7XG5pbXBvcnQgeyBEb3ROZXROYW1lVXRpbHMgfSBmcm9tICcuL25hbWV1dGlscyc7XG5cbnR5cGUgRmluZE1vZHVsZUNhbGxiYWNrID0gKGZxbjogc3RyaW5nKSA9PiBzcGVjLkFzc2VtYmx5Q29uZmlndXJhdGlvbjtcbnR5cGUgRmluZFR5cGVDYWxsYmFjayA9IChmcW46IHN0cmluZykgPT4gc3BlYy5UeXBlO1xuXG5leHBvcnQgY2xhc3MgRG90TmV0VHlwZVJlc29sdmVyIHtcbiAgLy8gVGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgdGhlIGN1cnJlbnQganNpaSBpbnB1dCBtb2RlbC5cbiAgLy8gVGhpcyBpcyBsYXRlciB1c2VkIHRvIG91dHB1dCB0aGUgY3Nwcm9qXG4gIHB1YmxpYyBuYW1lc3BhY2VEZXBlbmRlbmNpZXM6IE1hcDxzdHJpbmcsIERvdE5ldERlcGVuZGVuY3k+ID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgRG90TmV0RGVwZW5kZW5jeVxuICA+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBmaW5kTW9kdWxlOiBGaW5kTW9kdWxlQ2FsbGJhY2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmluZFR5cGU6IEZpbmRUeXBlQ2FsbGJhY2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzZW1ibHk6IHNwZWMuQXNzZW1ibHk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZXV0aWxzOiBEb3ROZXROYW1lVXRpbHMgPSBuZXcgRG90TmV0TmFtZVV0aWxzKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGFzc2VtYmx5OiBzcGVjLkFzc2VtYmx5LFxuICAgIGZpbmRNb2R1bGU6IEZpbmRNb2R1bGVDYWxsYmFjayxcbiAgICBmaW5kVHlwZTogRmluZFR5cGVDYWxsYmFjayxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgdGhpcy5hc3NlbWJseSA9IGFzc2VtYmx5O1xuICAgIHRoaXMuZmluZE1vZHVsZSA9IGZpbmRNb2R1bGU7XG4gICAgdGhpcy5maW5kVHlwZSA9IGZpbmRUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZXMgYSB0eXBlIGZxbiB0byBhIG5hdGl2ZSAuTkVUIGZ1bGwgdHlwZVxuICAgKi9cbiAgcHVibGljIHRvTmF0aXZlRnFuKGZxbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZShmcW4pO1xuICAgIGxldCB0eXBlTmFtZSA9ICcnO1xuICAgIHN3aXRjaCAodHlwZS5raW5kKSB7XG4gICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuSW50ZXJmYWNlOlxuICAgICAgICB0eXBlTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRJbnRlcmZhY2VOYW1lKHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5DbGFzczpcbiAgICAgICAgdHlwZU5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0Q2xhc3NOYW1lKHR5cGUgYXMgc3BlYy5DbGFzc1R5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugc3BlYy5UeXBlS2luZC5FbnVtOlxuICAgICAgICB0eXBlTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRUeXBlTmFtZSh0eXBlLm5hbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlOiAke3R5cGUgYXMgYW55fWApO1xuICAgIH1cbiAgICBjb25zdCBbbW9kXSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGRlcE1vZCA9IHRoaXMuZmluZE1vZHVsZShtb2QpO1xuXG4gICAgY29uc3QgZG90bmV0TmFtZXNwYWNlID0gZGVwTW9kLnRhcmdldHM/LmRvdG5ldD8ubmFtZXNwYWNlO1xuICAgIGlmICghZG90bmV0TmFtZXNwYWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgYXNzZW1ibHkgJHttb2R9IGRvZXMgbm90IGhhdmUgYSBkb3RuZXQubmFtZXNwYWNlIHNldHRpbmdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGUubmFtZXNwYWNlKSB7XG4gICAgICAvLyBJZiB0aGUgdHlwZSBpcyBkZWNsYXJlZCBpbiBhbiBhZGRpdGlvbmFsIG5hbWVzcGFjZS5cbiAgICAgIGNvbnN0IG5hbWVzcGFjZUZxbiA9IGAke3RoaXMuYXNzZW1ibHkubmFtZX0uJHt0eXBlLm5hbWVzcGFjZX1gO1xuICAgICAgY29uc3QgYXNzb2NpYXRlZE5hbWVzcGFjZSA9IHRoaXMuYXNzZW1ibHkudHlwZXM/LltuYW1lc3BhY2VGcW5dO1xuICAgICAgaWYgKGFzc29jaWF0ZWROYW1lc3BhY2UpIHtcbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlcmUgaXMgYSBDIyB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hbWVzcGFjZSwgaW4gY2FzZSB3ZSBuZWVkIHRvIHNsdWdpZnkgaXRcbiAgICAgICAgY29uc3QgYWN0dWFsTmFtZXNwYWNlID0gdGhpcy50b0RvdE5ldFR5cGUodGhpcy5maW5kVHlwZShuYW1lc3BhY2VGcW4pKTtcbiAgICAgICAgcmV0dXJuIGAke2FjdHVhbE5hbWVzcGFjZX0uJHt0eXBlTmFtZX1gO1xuICAgICAgfVxuICAgICAgY29uc3QgbnMgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2UoZGVwTW9kLCBtb2QsIHR5cGUubmFtZXNwYWNlKTtcbiAgICAgIHJldHVybiBgJHtuc30uJHt0eXBlTmFtZX1gO1xuICAgIH1cbiAgICAvLyBXaGVuIHVuZGVmaW5lZCwgdGhlIHR5cGUgaXMgbG9jYXRlZCBhdCB0aGUgcm9vdCBvZiB0aGUgYXNzZW1ibHlcbiAgICByZXR1cm4gYCR7ZG90bmV0TmFtZXNwYWNlfS4ke3R5cGVOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIG5hbWVzcGFjZXMgZGVwZW5kZW5jaWVzIGJ5IGxvb2tpbmcgYXQgdGhlIC5qc2lpIG1vZGVsXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZU5hbWVzcGFjZXNEZXBlbmRlbmNpZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYXNzbURlcGVuZGVuY2llcyA9IHRoaXMuYXNzZW1ibHkuZGVwZW5kZW5jaWVzID8/IHt9O1xuICAgIGNvbnN0IGFzc21Db25maWd1cmF0aW9ucyA9IHRoaXMuYXNzZW1ibHkuZGVwZW5kZW5jeUNsb3N1cmUgPz8ge307XG4gICAgZm9yIChjb25zdCBbZGVwTmFtZSwgdmVyc2lvbl0gb2YgT2JqZWN0LmVudHJpZXMoYXNzbURlcGVuZGVuY2llcykpIHtcbiAgICAgIGNvbnN0IGRlcEluZm8gPSBhc3NtQ29uZmlndXJhdGlvbnNbZGVwTmFtZV07XG4gICAgICBpZiAoIXRoaXMubmFtZXNwYWNlRGVwZW5kZW5jaWVzLmhhcyhkZXBOYW1lKSkge1xuICAgICAgICBjb25zdCBkb3RuZXRJbmZvID0gZGVwSW5mby50YXJnZXRzIS5kb3RuZXQhO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBkb3RuZXRJbmZvLm5hbWVzcGFjZTtcbiAgICAgICAgY29uc3QgcGFja2FnZUlkID0gZG90bmV0SW5mby5wYWNrYWdlSWQ7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGRlcEluZm8udGFyZ2V0cyEuZG90bmV0IS52ZXJzaW9uU3VmZml4O1xuXG4gICAgICAgIHRoaXMubmFtZXNwYWNlRGVwZW5kZW5jaWVzLnNldChcbiAgICAgICAgICBkZXBOYW1lLFxuICAgICAgICAgIG5ldyBEb3ROZXREZXBlbmRlbmN5KFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgcGFja2FnZUlkLFxuICAgICAgICAgICAgZGVwTmFtZSxcbiAgICAgICAgICAgIC8vIHN1ZmZpeCwgd2hlbiBwcmVzZW50LCBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IHdpdGggYSBsZWFkaW5nIGAtYFxuICAgICAgICAgICAgc3VmZml4ID8gYCR7dmVyc2lvbn0ke3N1ZmZpeH1gIDogdmVyc2lvbixcbiAgICAgICAgICAgIHRoaXMuYXNzZW1ibGllc0N1cnJlbnRseUJlaW5nQ29tcGlsZWQuaW5jbHVkZXMoZGVwTmFtZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9vcHMgdGhyb3VnaCB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlcyBhbmQgcmV0dXJucyB0aGUgZnVsbHkgcXVhbGlmaWVkIC5ORVQgdHlwZXMgb2YgdGhlIGludGVyZmFjZXNcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZXNvbHZlSW1wbGVtZW50ZWRJbnRlcmZhY2VzKFxuICAgIGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlIHwgc3BlYy5DbGFzc1R5cGUsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBpbnRlcmZhY2VzID0gaWZjLmludGVyZmFjZXMgPz8gW107XG4gICAgY29uc3QgYmFzZVR5cGVOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEZvciBhbGwgYmFzZSBtZW1iZXJzXG4gICAgZm9yIChjb25zdCBiYXNlIG9mIGludGVyZmFjZXMpIHtcbiAgICAgIGNvbnN0IGludGVyZmFjZUZ1bGxUeXBlID0gdGhpcy50b05hdGl2ZUZxbihiYXNlKTtcbiAgICAgIGJhc2VUeXBlTmFtZXMucHVzaChpbnRlcmZhY2VGdWxsVHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlVHlwZU5hbWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZXMgYW55IGpzaWkgdHlwZSB0byBpdHMgY29ycmVzcG9uZGluZyAuTkVUIHR5cGVcbiAgICovXG4gIHB1YmxpYyB0b0RvdE5ldFR5cGUodHlwZXJlZjogc3BlYy5UeXBlUmVmZXJlbmNlKTogc3RyaW5nIHtcbiAgICBpZiAoc3BlYy5pc1ByaW1pdGl2ZVR5cGVSZWZlcmVuY2UodHlwZXJlZikpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvRG90TmV0UHJpbWl0aXZlKHR5cGVyZWYucHJpbWl0aXZlKTtcbiAgICB9IGVsc2UgaWYgKHNwZWMuaXNDb2xsZWN0aW9uVHlwZVJlZmVyZW5jZSh0eXBlcmVmKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9Eb3ROZXRDb2xsZWN0aW9uKHR5cGVyZWYpO1xuICAgIH0gZWxzZSBpZiAoc3BlYy5pc05hbWVkVHlwZVJlZmVyZW5jZSh0eXBlcmVmKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9OYXRpdmVGcW4odHlwZXJlZi5mcW4pO1xuICAgIH0gZWxzZSBpZiAodHlwZXJlZi51bmlvbikge1xuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSByZWZlcmVuY2U6ICR7SlNPTi5zdHJpbmdpZnkodHlwZXJlZil9YCk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZU5hbWVzcGFjZShcbiAgICBhc3NtOiBzcGVjLkFzc2VtYmx5Q29uZmlndXJhdGlvbixcbiAgICBhc3NtTmFtZTogc3RyaW5nLFxuICAgIG5zOiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHJlc29sdmVkID0gYXNzbS50YXJnZXRzPy5kb3RuZXQ/Lm5hbWVzcGFjZTtcbiAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBc3NlbWJseSAke2Fzc21OYW1lfSBkb2VzIG5vdCBoYXZlIHRhcmdldHMuZG90bmV0Lm5hbWVzcGFjZSBjb25maWd1cmVkIWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzZWdtZW50cyA9IG5zLnNwbGl0KCcuJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3VibW9kdWxlTmFtZSA9IGAke2Fzc21OYW1lfS4ke3NlZ21lbnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCcuJyl9YDtcbiAgICAgIGNvbnN0IHN1Ym1vZHVsZSA9IGFzc20uc3VibW9kdWxlcz8uW3N1Ym1vZHVsZU5hbWVdO1xuICAgICAgaWYgKHN1Ym1vZHVsZSAmJiBzdWJtb2R1bGUudGFyZ2V0cz8uZG90bmV0Py5uYW1lc3BhY2UpIHtcbiAgICAgICAgcmVzb2x2ZWQgPSBzdWJtb2R1bGUudGFyZ2V0cy5kb3RuZXQubmFtZXNwYWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZWQgPSBgJHtyZXNvbHZlZH0uJHt0b1Bhc2NhbENhc2Uoc2VnbWVudHNbaV0pfWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIGEgcHJpbWl0aXZlIGluIGpzaWkgdG8gYSBuYXRpdmUgLk5FVCBwcmltaXRpdmVcbiAgICovXG4gIHByaXZhdGUgdG9Eb3ROZXRQcmltaXRpdmUocHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAocHJpbWl0aXZlKSB7XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Cb29sZWFuOlxuICAgICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuRGF0ZTpcbiAgICAgICAgcmV0dXJuICdTeXN0ZW0uRGF0ZVRpbWUnO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbjpcbiAgICAgICAgcmV0dXJuICdOZXd0b25zb2Z0Lkpzb24uTGlucS5KT2JqZWN0JztcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLk51bWJlcjpcbiAgICAgICAgcmV0dXJuICdkb3VibGUnO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuU3RyaW5nOlxuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Bbnk6XG4gICAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwcmltaXRpdmUgdHlwZTogJHtwcmltaXRpdmUgYXMgYW55fWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIGEgY29sbGVjdGlvbiBpbiBqc2lpIHRvIGEgbmF0aXZlIC5ORVQgY29sbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSB0b0RvdE5ldENvbGxlY3Rpb24ocmVmOiBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbGVtZW50RG90TmV0VHlwZSA9IHRoaXMudG9Eb3ROZXRUeXBlKHJlZi5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlKTtcbiAgICBzd2l0Y2ggKHJlZi5jb2xsZWN0aW9uLmtpbmQpIHtcbiAgICAgIGNhc2Ugc3BlYy5Db2xsZWN0aW9uS2luZC5BcnJheTpcbiAgICAgICAgcmV0dXJuIGAke2VsZW1lbnREb3ROZXRUeXBlfVtdYDtcbiAgICAgIGNhc2Ugc3BlYy5Db2xsZWN0aW9uS2luZC5NYXA6XG4gICAgICAgIHJldHVybiBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSURpY3Rpb25hcnk8c3RyaW5nLCAke2VsZW1lbnREb3ROZXRUeXBlfT5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBjb2xsZWN0aW9uIGtpbmQ6ICR7cmVmLmNvbGxlY3Rpb24ua2luZCBhcyBhbnl9YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
165
|
+
//# sourceMappingURL=dotnettyperesolver.js.map
|