angular-odata
Version:
Client side OData typescript library for Angular
159 lines • 19.8 kB
JavaScript
import { CsdlAnnotable } from './csdl-annotation';
import { CsdlProperty, CsdlNavigationProperty, } from './csdl-structural-property';
export class CsdlStructuredType extends CsdlAnnotable {
schema;
Name;
Property;
NavigationProperty;
BaseType;
OpenType;
Abstract;
constructor(schema, { Name, Property, NavigationProperty, BaseType, OpenType, Abstract, Annotation, }) {
super({ Annotation });
this.schema = schema;
this.Name = Name;
this.Property = Property?.map((p) => new CsdlProperty(p));
this.NavigationProperty = NavigationProperty?.map((n) => new CsdlNavigationProperty(n));
this.BaseType = BaseType;
this.OpenType = OpenType;
this.Abstract = Abstract;
}
toJson() {
const json = { ...super.toJson(), Name: this.Name };
if (Array.isArray(this.Property) && this.Property.length > 0) {
json['Property'] = this.Property.map((p) => p.toJson());
}
if (Array.isArray(this.NavigationProperty) &&
this.NavigationProperty.length > 0) {
json['NavigationProperty'] = this.NavigationProperty.map((n) => n.toJson());
}
if (this.BaseType !== undefined) {
json['BaseType'] = this.BaseType;
}
if (this.OpenType !== undefined) {
json['OpenType'] = this.OpenType;
}
if (this.Abstract !== undefined) {
json['Abstract'] = this.Abstract;
}
return json;
}
name() {
return `${this.Name}`;
}
namespace() {
return `${this.schema.Namespace}`;
}
fullName() {
return `${this.schema.Namespace}.${this.Name}`;
}
}
export class CsdlComplexType extends CsdlStructuredType {
constructor(schema, { Name, Property, NavigationProperty, BaseType, OpenType, Abstract, Annotation, }) {
super(schema, {
Name,
Property,
NavigationProperty,
BaseType,
OpenType,
Abstract,
Annotation,
});
}
toJson() {
return {
...super.toJson(),
};
}
toConfig(base) {
return {
...super.toConfig(),
name: this.Name,
base: this.BaseType,
open: base?.open ?? this.OpenType,
model: base?.model,
collection: base?.collection,
fields: [
...(this.Property ?? []).map((t) => t.toConfig()),
...(this.NavigationProperty ?? []).map((t) => t.toConfig()),
].reduce((acc, p) => Object.assign(acc, { [p.name]: p }), {}),
};
}
}
export class CsdlEntityType extends CsdlStructuredType {
Key;
HasStream;
constructor(schema, { Name, Key, Property, NavigationProperty, BaseType, OpenType, Abstract, HasStream, Annotation, }) {
super(schema, {
Name,
Property,
NavigationProperty,
BaseType,
OpenType,
Abstract,
Annotation,
});
this.Key = Key ? new CsdlKey(Key) : undefined;
this.HasStream = HasStream;
}
toJson() {
const json = { ...super.toJson() };
if (this.Key !== undefined) {
json['Key'] = this.Key.toJson();
}
if (this.HasStream !== undefined) {
json['HasStream'] = this.HasStream;
}
return json;
}
toConfig(base) {
return {
...super.toConfig(),
name: this.Name,
base: this.BaseType,
open: base?.open ?? this.OpenType,
model: base?.model,
collection: base?.collection,
keys: this.Key?.toConfig(),
fields: [
...(this.Property ?? []).map((t) => t.toConfig()),
...(this.NavigationProperty ?? []).map((t) => t.toConfig()),
].reduce((acc, p) => Object.assign(acc, { [p.name]: p }), {}),
};
}
}
export class CsdlKey {
PropertyRef;
constructor({ PropertyRef }) {
this.PropertyRef = PropertyRef?.map((p) => new CsdlPropertyRef(p));
}
toJson() {
return {
PropertyRef: this.PropertyRef?.map((p) => p.toJson()),
};
}
toConfig() {
return this.PropertyRef?.map((t) => t.toConfig());
}
}
export class CsdlPropertyRef {
Name;
Alias;
constructor({ Name, Alias }) {
this.Name = Name;
this.Alias = Alias;
}
toJson() {
return {
Name: this.Name,
Alias: this.Alias,
};
}
toConfig() {
return {
name: this.Name,
alias: this.Alias,
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NkbC1zdHJ1Y3R1cmVkLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvbWV0YWRhdGEvY3NkbC9jc2RsLXN0cnVjdHVyZWQtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUNMLFlBQVksRUFDWixzQkFBc0IsR0FDdkIsTUFBTSw0QkFBNEIsQ0FBQztBQUdwQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsYUFBYTtJQVN6QztJQVJWLElBQUksQ0FBUztJQUNiLFFBQVEsQ0FBa0I7SUFDMUIsa0JBQWtCLENBQTRCO0lBQzlDLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQVc7SUFDbkIsUUFBUSxDQUFXO0lBRW5CLFlBQ1UsTUFBa0IsRUFDMUIsRUFDRSxJQUFJLEVBQ0osUUFBUSxFQUNSLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixVQUFVLEdBU1g7UUFFRCxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBbkJkLFdBQU0sR0FBTixNQUFNLENBQVk7UUFvQjFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxDQUMvQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FDckMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFUSxNQUFNO1FBQ2IsTUFBTSxJQUFJLEdBQTJCLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQ0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2xDLENBQUM7WUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDN0QsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUNYLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQWtCO0lBQ3JELFlBQ0UsTUFBa0IsRUFDbEIsRUFDRSxJQUFJLEVBQ0osUUFBUSxFQUNSLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixVQUFVLEdBU1g7UUFFRCxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ1osSUFBSTtZQUNKLFFBQVE7WUFDUixrQkFBa0I7WUFDbEIsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsVUFBVTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUSxNQUFNO1FBQ2IsT0FBTztZQUNMLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtTQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVRLFFBQVEsQ0FDZixJQUFvQztRQUVwQyxPQUFPO1lBQ0wsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtZQUNqQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO1lBQzVCLE1BQU0sRUFBRTtnQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakQsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUM1RCxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDdEMsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FBZSxTQUFRLGtCQUFrQjtJQUNwRCxHQUFHLENBQVc7SUFDZCxTQUFTLENBQVc7SUFFcEIsWUFDRSxNQUFrQixFQUNsQixFQUNFLElBQUksRUFDSixHQUFHLEVBQ0gsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixTQUFTLEVBQ1QsVUFBVSxHQVdYO1FBRUQsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNaLElBQUk7WUFDSixRQUFRO1lBQ1Isa0JBQWtCO1lBQ2xCLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRVEsTUFBTTtRQUNiLE1BQU0sSUFBSSxHQUEyQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDM0QsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVRLFFBQVEsQ0FDZixJQUFvQztRQUVwQyxPQUFPO1lBQ0wsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtZQUNqQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO1lBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRTtZQUMxQixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDNUQsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ3RDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFDbEIsV0FBVyxDQUFvQjtJQUUvQixZQUFZLEVBQUUsV0FBVyxFQUEwQjtRQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGVBQWU7SUFDMUIsSUFBSSxDQUFTO0lBQ2IsS0FBSyxDQUFVO0lBRWYsWUFBWSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQW9DO1FBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdHJ1Y3R1cmVkVHlwZUNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENzZGxBbm5vdGFibGUgfSBmcm9tICcuL2NzZGwtYW5ub3RhdGlvbic7XG5pbXBvcnQge1xuICBDc2RsUHJvcGVydHksXG4gIENzZGxOYXZpZ2F0aW9uUHJvcGVydHksXG59IGZyb20gJy4vY3NkbC1zdHJ1Y3R1cmFsLXByb3BlcnR5JztcbmltcG9ydCB0eXBlIHsgQ3NkbFNjaGVtYSB9IGZyb20gJy4vY3NkbC1zY2hlbWEnO1xuXG5leHBvcnQgY2xhc3MgQ3NkbFN0cnVjdHVyZWRUeXBlIGV4dGVuZHMgQ3NkbEFubm90YWJsZSB7XG4gIE5hbWU6IHN0cmluZztcbiAgUHJvcGVydHk/OiBDc2RsUHJvcGVydHlbXTtcbiAgTmF2aWdhdGlvblByb3BlcnR5PzogQ3NkbE5hdmlnYXRpb25Qcm9wZXJ0eVtdO1xuICBCYXNlVHlwZT86IHN0cmluZztcbiAgT3BlblR5cGU/OiBib29sZWFuO1xuICBBYnN0cmFjdD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY2hlbWE6IENzZGxTY2hlbWEsXG4gICAge1xuICAgICAgTmFtZSxcbiAgICAgIFByb3BlcnR5LFxuICAgICAgTmF2aWdhdGlvblByb3BlcnR5LFxuICAgICAgQmFzZVR5cGUsXG4gICAgICBPcGVuVHlwZSxcbiAgICAgIEFic3RyYWN0LFxuICAgICAgQW5ub3RhdGlvbixcbiAgICB9OiB7XG4gICAgICBOYW1lOiBzdHJpbmc7XG4gICAgICBQcm9wZXJ0eT86IGFueVtdO1xuICAgICAgTmF2aWdhdGlvblByb3BlcnR5PzogYW55W107XG4gICAgICBCYXNlVHlwZT86IHN0cmluZztcbiAgICAgIE9wZW5UeXBlPzogYm9vbGVhbjtcbiAgICAgIEFic3RyYWN0PzogYm9vbGVhbjtcbiAgICAgIEFubm90YXRpb24/OiBhbnlbXTtcbiAgICB9LFxuICApIHtcbiAgICBzdXBlcih7IEFubm90YXRpb24gfSk7XG4gICAgdGhpcy5OYW1lID0gTmFtZTtcbiAgICB0aGlzLlByb3BlcnR5ID0gUHJvcGVydHk/Lm1hcCgocCkgPT4gbmV3IENzZGxQcm9wZXJ0eShwKSk7XG4gICAgdGhpcy5OYXZpZ2F0aW9uUHJvcGVydHkgPSBOYXZpZ2F0aW9uUHJvcGVydHk/Lm1hcChcbiAgICAgIChuKSA9PiBuZXcgQ3NkbE5hdmlnYXRpb25Qcm9wZXJ0eShuKSxcbiAgICApO1xuICAgIHRoaXMuQmFzZVR5cGUgPSBCYXNlVHlwZTtcbiAgICB0aGlzLk9wZW5UeXBlID0gT3BlblR5cGU7XG4gICAgdGhpcy5BYnN0cmFjdCA9IEFic3RyYWN0O1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IC4uLnN1cGVyLnRvSnNvbigpLCBOYW1lOiB0aGlzLk5hbWUgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLlByb3BlcnR5KSAmJiB0aGlzLlByb3BlcnR5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGpzb25bJ1Byb3BlcnR5J10gPSB0aGlzLlByb3BlcnR5Lm1hcCgocCkgPT4gcC50b0pzb24oKSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5OYXZpZ2F0aW9uUHJvcGVydHkpICYmXG4gICAgICB0aGlzLk5hdmlnYXRpb25Qcm9wZXJ0eS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBqc29uWydOYXZpZ2F0aW9uUHJvcGVydHknXSA9IHRoaXMuTmF2aWdhdGlvblByb3BlcnR5Lm1hcCgobikgPT5cbiAgICAgICAgbi50b0pzb24oKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLkJhc2VUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25bJ0Jhc2VUeXBlJ10gPSB0aGlzLkJhc2VUeXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy5PcGVuVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydPcGVuVHlwZSddID0gdGhpcy5PcGVuVHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuQWJzdHJhY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnQWJzdHJhY3QnXSA9IHRoaXMuQWJzdHJhY3Q7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgbmFtZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5OYW1lfWA7XG4gIH1cblxuICBuYW1lc3BhY2UoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2NoZW1hLk5hbWVzcGFjZX1gO1xuICB9XG5cbiAgZnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2NoZW1hLk5hbWVzcGFjZX0uJHt0aGlzLk5hbWV9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3NkbENvbXBsZXhUeXBlIGV4dGVuZHMgQ3NkbFN0cnVjdHVyZWRUeXBlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NoZW1hOiBDc2RsU2NoZW1hLFxuICAgIHtcbiAgICAgIE5hbWUsXG4gICAgICBQcm9wZXJ0eSxcbiAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICAgIEJhc2VUeXBlLFxuICAgICAgT3BlblR5cGUsXG4gICAgICBBYnN0cmFjdCxcbiAgICAgIEFubm90YXRpb24sXG4gICAgfToge1xuICAgICAgTmFtZTogc3RyaW5nO1xuICAgICAgUHJvcGVydHk/OiBhbnlbXTtcbiAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eT86IGFueVtdO1xuICAgICAgQmFzZVR5cGU/OiBzdHJpbmc7XG4gICAgICBPcGVuVHlwZT86IGJvb2xlYW47XG4gICAgICBBYnN0cmFjdD86IGJvb2xlYW47XG4gICAgICBBbm5vdGF0aW9uPzogYW55W107XG4gICAgfSxcbiAgKSB7XG4gICAgc3VwZXIoc2NoZW1hLCB7XG4gICAgICBOYW1lLFxuICAgICAgUHJvcGVydHksXG4gICAgICBOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICBCYXNlVHlwZSxcbiAgICAgIE9wZW5UeXBlLFxuICAgICAgQWJzdHJhY3QsXG4gICAgICBBbm5vdGF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9Kc29uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci50b0pzb24oKSxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9Db25maWcoXG4gICAgYmFzZT86IFBhcnRpYWw8U3RydWN0dXJlZFR5cGVDb25maWc+LFxuICApOiBTdHJ1Y3R1cmVkVHlwZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnRvQ29uZmlnKCksXG4gICAgICBuYW1lOiB0aGlzLk5hbWUsXG4gICAgICBiYXNlOiB0aGlzLkJhc2VUeXBlLFxuICAgICAgb3BlbjogYmFzZT8ub3BlbiA/PyB0aGlzLk9wZW5UeXBlLFxuICAgICAgbW9kZWw6IGJhc2U/Lm1vZGVsLFxuICAgICAgY29sbGVjdGlvbjogYmFzZT8uY29sbGVjdGlvbixcbiAgICAgIGZpZWxkczogW1xuICAgICAgICAuLi4odGhpcy5Qcm9wZXJ0eSA/PyBbXSkubWFwKCh0KSA9PiB0LnRvQ29uZmlnKCkpLFxuICAgICAgICAuLi4odGhpcy5OYXZpZ2F0aW9uUHJvcGVydHkgPz8gW10pLm1hcCgodCkgPT4gdC50b0NvbmZpZygpKSxcbiAgICAgIF0ucmVkdWNlKChhY2MsIHApID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtwLm5hbWVdOiBwIH0pLCB7fSksXG4gICAgfSBhcyBTdHJ1Y3R1cmVkVHlwZUNvbmZpZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3NkbEVudGl0eVR5cGUgZXh0ZW5kcyBDc2RsU3RydWN0dXJlZFR5cGUge1xuICBLZXk/OiBDc2RsS2V5O1xuICBIYXNTdHJlYW0/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjaGVtYTogQ3NkbFNjaGVtYSxcbiAgICB7XG4gICAgICBOYW1lLFxuICAgICAgS2V5LFxuICAgICAgUHJvcGVydHksXG4gICAgICBOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICBCYXNlVHlwZSxcbiAgICAgIE9wZW5UeXBlLFxuICAgICAgQWJzdHJhY3QsXG4gICAgICBIYXNTdHJlYW0sXG4gICAgICBBbm5vdGF0aW9uLFxuICAgIH06IHtcbiAgICAgIE5hbWU6IHN0cmluZztcbiAgICAgIEtleT86IGFueTtcbiAgICAgIFByb3BlcnR5PzogYW55W107XG4gICAgICBOYXZpZ2F0aW9uUHJvcGVydHk/OiBhbnlbXTtcbiAgICAgIEJhc2VUeXBlPzogc3RyaW5nO1xuICAgICAgT3BlblR5cGU/OiBib29sZWFuO1xuICAgICAgQWJzdHJhY3Q/OiBib29sZWFuO1xuICAgICAgSGFzU3RyZWFtPzogYm9vbGVhbjtcbiAgICAgIEFubm90YXRpb24/OiBhbnlbXTtcbiAgICB9LFxuICApIHtcbiAgICBzdXBlcihzY2hlbWEsIHtcbiAgICAgIE5hbWUsXG4gICAgICBQcm9wZXJ0eSxcbiAgICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICAgIEJhc2VUeXBlLFxuICAgICAgT3BlblR5cGUsXG4gICAgICBBYnN0cmFjdCxcbiAgICAgIEFubm90YXRpb24sXG4gICAgfSk7XG4gICAgdGhpcy5LZXkgPSBLZXkgPyBuZXcgQ3NkbEtleShLZXkpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuSGFzU3RyZWFtID0gSGFzU3RyZWFtO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IC4uLnN1cGVyLnRvSnNvbigpIH07XG4gICAgaWYgKHRoaXMuS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25bJ0tleSddID0gdGhpcy5LZXkudG9Kc29uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLkhhc1N0cmVhbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydIYXNTdHJlYW0nXSA9IHRoaXMuSGFzU3RyZWFtO1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvQ29uZmlnKFxuICAgIGJhc2U/OiBQYXJ0aWFsPFN0cnVjdHVyZWRUeXBlQ29uZmlnPixcbiAgKTogU3RydWN0dXJlZFR5cGVDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci50b0NvbmZpZygpLFxuICAgICAgbmFtZTogdGhpcy5OYW1lLFxuICAgICAgYmFzZTogdGhpcy5CYXNlVHlwZSxcbiAgICAgIG9wZW46IGJhc2U/Lm9wZW4gPz8gdGhpcy5PcGVuVHlwZSxcbiAgICAgIG1vZGVsOiBiYXNlPy5tb2RlbCxcbiAgICAgIGNvbGxlY3Rpb246IGJhc2U/LmNvbGxlY3Rpb24sXG4gICAgICBrZXlzOiB0aGlzLktleT8udG9Db25maWcoKSxcbiAgICAgIGZpZWxkczogW1xuICAgICAgICAuLi4odGhpcy5Qcm9wZXJ0eSA/PyBbXSkubWFwKCh0KSA9PiB0LnRvQ29uZmlnKCkpLFxuICAgICAgICAuLi4odGhpcy5OYXZpZ2F0aW9uUHJvcGVydHkgPz8gW10pLm1hcCgodCkgPT4gdC50b0NvbmZpZygpKSxcbiAgICAgIF0ucmVkdWNlKChhY2MsIHApID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtwLm5hbWVdOiBwIH0pLCB7fSksXG4gICAgfSBhcyBTdHJ1Y3R1cmVkVHlwZUNvbmZpZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3NkbEtleSB7XG4gIFByb3BlcnR5UmVmOiBDc2RsUHJvcGVydHlSZWZbXTtcblxuICBjb25zdHJ1Y3Rvcih7IFByb3BlcnR5UmVmIH06IHsgUHJvcGVydHlSZWY6IGFueVtdIH0pIHtcbiAgICB0aGlzLlByb3BlcnR5UmVmID0gUHJvcGVydHlSZWY/Lm1hcCgocCkgPT4gbmV3IENzZGxQcm9wZXJ0eVJlZihwKSk7XG4gIH1cblxuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFByb3BlcnR5UmVmOiB0aGlzLlByb3BlcnR5UmVmPy5tYXAoKHApID0+IHAudG9Kc29uKCkpLFxuICAgIH07XG4gIH1cblxuICB0b0NvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5Qcm9wZXJ0eVJlZj8ubWFwKCh0KSA9PiB0LnRvQ29uZmlnKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDc2RsUHJvcGVydHlSZWYge1xuICBOYW1lOiBzdHJpbmc7XG4gIEFsaWFzPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHsgTmFtZSwgQWxpYXMgfTogeyBOYW1lOiBzdHJpbmc7IEFsaWFzPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLk5hbWUgPSBOYW1lO1xuICAgIHRoaXMuQWxpYXMgPSBBbGlhcztcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgTmFtZTogdGhpcy5OYW1lLFxuICAgICAgQWxpYXM6IHRoaXMuQWxpYXMsXG4gICAgfTtcbiAgfVxuXG4gIHRvQ29uZmlnKCk6IHsgbmFtZTogc3RyaW5nOyBhbGlhcz86IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5OYW1lLFxuICAgICAgYWxpYXM6IHRoaXMuQWxpYXMsXG4gICAgfTtcbiAgfVxufVxuIl19