UNPKG

angular-odata

Version:

Client side OData typescript library for Angular

273 lines 32.9 kB
export class CsdlAnnotable { Annotation; constructor({ Annotation }) { this.Annotation = Annotation?.map((a) => new CsdlAnnotation(a)); } toJson() { const json = {}; if (Array.isArray(this.Annotation) && this.Annotation.length > 0) { json['Annotation'] = this.Annotation.map((a) => a.toJson()); } return json; } toConfig() { const config = {}; if (this.Annotation) { config['annotations'] = this.Annotation.map((a) => a.toConfig()); } return config; } } export class CsdlAnnotations extends CsdlAnnotable { schema; Target; Qualifier; constructor(schema, { Target, Qualifier, Annotation, }) { super({ Annotation }); this.schema = schema; this.Target = Target; this.Qualifier = Qualifier; } toJson() { const json = { ...super.toJson(), Target: this.Target, }; if (this.Qualifier !== undefined) { json['Qualifier'] = this.Qualifier; } return json; } toConfig() { return (this.Annotation ?? []).map((a) => a.toConfig()); } } export class CsdlAnnotation { Term; String; Bool; Int; Collection; Record; EnumMember; constructor({ Term, String, Bool, Int, Collection, Record, EnumMember, }) { this.Term = Term; this.String = String; this.Bool = Bool; this.Int = Int; this.Collection = Collection?.map((a) => new CsdlCollection(a)); this.Record = Record?.map((a) => new CsdlRecord(a)); this.EnumMember = EnumMember?.map((a) => new CsdlEnumMember(a)); } toJson() { const json = { Term: this.Term }; if (this.String !== undefined) { json['String'] = this.String; } if (this.Bool !== undefined) { json['Bool'] = this.Bool; } if (this.Int !== undefined) { json['Int'] = this.Int; } if (Array.isArray(this.Collection) && this.Collection.length > 0) { json['Collection'] = this.Collection.map((m) => m.toJson()); } if (Array.isArray(this.Record) && this.Record.length > 0) { json['Record'] = this.Record.map((m) => m.toJson()); } if (Array.isArray(this.EnumMember) && this.EnumMember.length > 0) { json['EnumMember'] = this.EnumMember.map((m) => m.toJson()); } return json; } toConfig() { return { term: this.Term, string: this.String, bool: this.Bool, int: this.Int, }; } } export class CsdlTerm { schema; Name; Type; BaseTerm; DefaultValue; AppliesTo; Nullable; MaxLength; Precision; Scale; SRID; String; Bool; Int; constructor(schema, { Name, Type, BaseTerm, DefaultValue, AppliesTo, Nullable, MaxLength, Precision, Scale, SRID, String, Bool, Int, }) { this.schema = schema; this.Name = Name; this.Type = Type; this.BaseTerm = BaseTerm; this.DefaultValue = DefaultValue; this.AppliesTo = AppliesTo; this.Nullable = Nullable; this.MaxLength = MaxLength; this.Precision = Precision; this.Scale = Scale; this.SRID = SRID; this.String = String; this.Bool = Bool; this.Int = Int; } toJson() { const json = { Name: this.Name, Type: this.Type }; if (this.BaseTerm !== undefined) { json['BaseTerm'] = this.BaseTerm; } if (this.DefaultValue !== undefined) { json['DefaultValue'] = this.DefaultValue; } if (this.AppliesTo !== undefined) { json['AppliesTo'] = this.AppliesTo; } if (this.Nullable !== undefined) { json['Nullable'] = this.Nullable; } if (this.MaxLength !== undefined) { json['MaxLength'] = this.MaxLength; } if (this.Precision !== undefined) { json['Precision'] = this.Precision; } if (this.Scale !== undefined) { json['Scale'] = this.Scale; } if (this.SRID !== undefined) { json['SRID'] = this.SRID; } if (this.String !== undefined) { json['String'] = this.String; } if (this.Bool !== undefined) { json['Bool'] = this.Bool; } if (this.Int !== undefined) { json['Int'] = this.Int; } return json; } } export class CsdlCollection { String; Record; PropertyPath; NavigationPropertyPath; constructor({ String, Record, PropertyPath, NavigationPropertyPath, }) { this.String = String?.map((a) => new CsdlString(a)); this.Record = Record?.map((a) => new CsdlRecord(a)); this.PropertyPath = PropertyPath?.map((a) => new CsdlPropertyPath(a)); this.NavigationPropertyPath = NavigationPropertyPath?.map((a) => new CsdlNavigationPropertyPath(a)); } toJson() { const json = {}; if (Array.isArray(this.String) && this.String.length > 0) { json['String'] = this.String.map((s) => s.toJson()); } if (Array.isArray(this.Record) && this.Record.length > 0) { json['Record'] = this.Record.map((r) => r.toJson()); } if (Array.isArray(this.PropertyPath) && this.PropertyPath.length > 0) { json['PropertyPath'] = this.PropertyPath.map((p) => p.toJson()); } if (Array.isArray(this.NavigationPropertyPath) && this.NavigationPropertyPath.length > 0) { json['NavigationPropertyPath'] = this.NavigationPropertyPath.map((p) => p.toJson()); } return json; } } export class CsdlRecord { PropertyValue; constructor({ PropertyValue }) { this.PropertyValue = PropertyValue?.map((a) => new CsdlPropertyValue(a)); } toJson() { const json = {}; if (Array.isArray(this.PropertyValue) && this.PropertyValue.length > 0) { json['PropertyValue'] = this.PropertyValue.map((p) => p.toJson()); } return json; } } export class CsdlPropertyValue { Name; String; Date; EnumMember; constructor({ Name, String, Date, EnumMember, }) { this.Name = Name; this.String = String; this.Date = Date; this.EnumMember = EnumMember?.map((a) => new CsdlEnumMember(a)); } toJson() { const json = { Name: this.Name }; if (this.String !== undefined) { json['String'] = this.String; } if (this.Date !== undefined) { json['Date'] = this.Date; } if (Array.isArray(this.EnumMember) && this.EnumMember.length > 0) { json['EnumMember'] = this.EnumMember.map((m) => m.toJson()); } return json; } } export class CsdlEnumMember { TextContent; constructor({ TextContent }) { this.TextContent = TextContent; } toJson() { return { TextContent: this.TextContent, }; } } export class CsdlString { TextContent; constructor({ TextContent }) { this.TextContent = TextContent; } toJson() { return { TextContent: this.TextContent, }; } } export class CsdlPropertyPath { TextContent; constructor({ TextContent }) { this.TextContent = TextContent; } toJson() { return { TextContent: this.TextContent, }; } } export class CsdlNavigationPropertyPath { TextContent; constructor({ TextContent }) { this.TextContent = TextContent; } toJson() { return { TextContent: this.TextContent, }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NkbC1hbm5vdGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL21ldGFkYXRhL2NzZGwvY3NkbC1hbm5vdGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFVBQVUsQ0FBb0I7SUFDOUIsWUFBWSxFQUFFLFVBQVUsRUFBMEI7UUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxJQUFJLEdBQTJCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQUVE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TUFBTTtRQUNKLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsV0FBVyxDQUFTO0lBQ3BCLFlBQVksRUFBRSxXQUFXLEVBQTJCO1FBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxXQUFXLENBQVM7SUFDcEIsWUFBWSxFQUFFLFdBQVcsRUFBMkI7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDc2RsU2NoZW1hIH0gZnJvbSAnLi9jc2RsLXNjaGVtYSc7XG5cbmV4cG9ydCBjbGFzcyBDc2RsQW5ub3RhYmxlIHtcbiAgQW5ub3RhdGlvbj86IENzZGxBbm5vdGF0aW9uW107XG4gIGNvbnN0cnVjdG9yKHsgQW5ub3RhdGlvbiB9OiB7IEFubm90YXRpb24/OiBhbnlbXSB9KSB7XG4gICAgdGhpcy5Bbm5vdGF0aW9uID0gQW5ub3RhdGlvbj8ubWFwKChhKSA9PiBuZXcgQ3NkbEFubm90YXRpb24oYSkpO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLkFubm90YXRpb24pICYmIHRoaXMuQW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBqc29uWydBbm5vdGF0aW9uJ10gPSB0aGlzLkFubm90YXRpb24ubWFwKChhKSA9PiBhLnRvSnNvbigpKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICB0b0NvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWc6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAodGhpcy5Bbm5vdGF0aW9uKSB7XG4gICAgICBjb25maWdbJ2Fubm90YXRpb25zJ10gPSB0aGlzLkFubm90YXRpb24ubWFwKChhKSA9PiBhLnRvQ29uZmlnKCkpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDc2RsQW5ub3RhdGlvbnMgZXh0ZW5kcyBDc2RsQW5ub3RhYmxlIHtcbiAgVGFyZ2V0OiBzdHJpbmc7XG4gIFF1YWxpZmllcj86IHN0cmluZztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY2hlbWE6IENzZGxTY2hlbWEsXG4gICAge1xuICAgICAgVGFyZ2V0LFxuICAgICAgUXVhbGlmaWVyLFxuICAgICAgQW5ub3RhdGlvbixcbiAgICB9OiB7XG4gICAgICBUYXJnZXQ6IHN0cmluZztcbiAgICAgIFF1YWxpZmllcj86IHN0cmluZztcbiAgICAgIEFubm90YXRpb246IGFueVtdO1xuICAgIH0sXG4gICkge1xuICAgIHN1cGVyKHsgQW5ub3RhdGlvbiB9KTtcbiAgICB0aGlzLlRhcmdldCA9IFRhcmdldDtcbiAgICB0aGlzLlF1YWxpZmllciA9IFF1YWxpZmllcjtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSnNvbigpIHtcbiAgICBjb25zdCBqc29uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuICAgICAgLi4uc3VwZXIudG9Kc29uKCksXG4gICAgICBUYXJnZXQ6IHRoaXMuVGFyZ2V0LFxuICAgIH07XG4gICAgaWYgKHRoaXMuUXVhbGlmaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25bJ1F1YWxpZmllciddID0gdGhpcy5RdWFsaWZpZXI7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9Db25maWcoKTogQW5ub3RhdGlvbkNvbmZpZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMuQW5ub3RhdGlvbiA/PyBbXSkubWFwKChhKSA9PiBhLnRvQ29uZmlnKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDc2RsQW5ub3RhdGlvbiB7XG4gIFRlcm06IHN0cmluZztcbiAgU3RyaW5nPzogc3RyaW5nO1xuICBCb29sPzogYm9vbGVhbjtcbiAgSW50PzogbnVtYmVyO1xuICBDb2xsZWN0aW9uPzogQ3NkbENvbGxlY3Rpb25bXTtcbiAgUmVjb3JkPzogQ3NkbFJlY29yZFtdO1xuICBFbnVtTWVtYmVyPzogQ3NkbEVudW1NZW1iZXJbXTtcbiAgY29uc3RydWN0b3Ioe1xuICAgIFRlcm0sXG4gICAgU3RyaW5nLFxuICAgIEJvb2wsXG4gICAgSW50LFxuICAgIENvbGxlY3Rpb24sXG4gICAgUmVjb3JkLFxuICAgIEVudW1NZW1iZXIsXG4gIH06IHtcbiAgICBUZXJtOiBzdHJpbmc7XG4gICAgU3RyaW5nPzogc3RyaW5nO1xuICAgIEJvb2w/OiBib29sZWFuO1xuICAgIEludD86IG51bWJlcjtcbiAgICBDb2xsZWN0aW9uPzogYW55W107XG4gICAgUmVjb3JkPzogYW55W107XG4gICAgRW51bU1lbWJlcj86IGFueVtdO1xuICB9KSB7XG4gICAgdGhpcy5UZXJtID0gVGVybTtcbiAgICB0aGlzLlN0cmluZyA9IFN0cmluZztcbiAgICB0aGlzLkJvb2wgPSBCb29sO1xuICAgIHRoaXMuSW50ID0gSW50O1xuICAgIHRoaXMuQ29sbGVjdGlvbiA9IENvbGxlY3Rpb24/Lm1hcCgoYSkgPT4gbmV3IENzZGxDb2xsZWN0aW9uKGEpKTtcbiAgICB0aGlzLlJlY29yZCA9IFJlY29yZD8ubWFwKChhKSA9PiBuZXcgQ3NkbFJlY29yZChhKSk7XG4gICAgdGhpcy5FbnVtTWVtYmVyID0gRW51bU1lbWJlcj8ubWFwKChhKSA9PiBuZXcgQ3NkbEVudW1NZW1iZXIoYSkpO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IFRlcm06IHRoaXMuVGVybSB9O1xuICAgIGlmICh0aGlzLlN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydTdHJpbmcnXSA9IHRoaXMuU3RyaW5nO1xuICAgIH1cbiAgICBpZiAodGhpcy5Cb29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25bJ0Jvb2wnXSA9IHRoaXMuQm9vbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuSW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25bJ0ludCddID0gdGhpcy5JbnQ7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuQ29sbGVjdGlvbikgJiYgdGhpcy5Db2xsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGpzb25bJ0NvbGxlY3Rpb24nXSA9IHRoaXMuQ29sbGVjdGlvbi5tYXAoKG0pID0+IG0udG9Kc29uKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLlJlY29yZCkgJiYgdGhpcy5SZWNvcmQubGVuZ3RoID4gMCkge1xuICAgICAganNvblsnUmVjb3JkJ10gPSB0aGlzLlJlY29yZC5tYXAoKG0pID0+IG0udG9Kc29uKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLkVudW1NZW1iZXIpICYmIHRoaXMuRW51bU1lbWJlci5sZW5ndGggPiAwKSB7XG4gICAgICBqc29uWydFbnVtTWVtYmVyJ10gPSB0aGlzLkVudW1NZW1iZXIubWFwKChtKSA9PiBtLnRvSnNvbigpKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICB0b0NvbmZpZygpOiBBbm5vdGF0aW9uQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGVybTogdGhpcy5UZXJtLFxuICAgICAgc3RyaW5nOiB0aGlzLlN0cmluZyxcbiAgICAgIGJvb2w6IHRoaXMuQm9vbCxcbiAgICAgIGludDogdGhpcy5JbnQsXG4gICAgfSBhcyBBbm5vdGF0aW9uQ29uZmlnO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDc2RsVGVybSB7XG4gIE5hbWU6IHN0cmluZztcbiAgVHlwZTogc3RyaW5nO1xuICBCYXNlVGVybT86IHN0cmluZztcbiAgRGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICBBcHBsaWVzVG8/OiBzdHJpbmc7XG4gIE51bGxhYmxlPzogYm9vbGVhbjtcbiAgTWF4TGVuZ3RoPzogbnVtYmVyO1xuICBQcmVjaXNpb24/OiBudW1iZXI7XG4gIFNjYWxlPzogbnVtYmVyO1xuICBTUklEPzogc3RyaW5nO1xuICBTdHJpbmc/OiBzdHJpbmc7XG4gIEJvb2w/OiBib29sZWFuO1xuICBJbnQ/OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2NoZW1hOiBDc2RsU2NoZW1hLFxuICAgIHtcbiAgICAgIE5hbWUsXG4gICAgICBUeXBlLFxuICAgICAgQmFzZVRlcm0sXG4gICAgICBEZWZhdWx0VmFsdWUsXG4gICAgICBBcHBsaWVzVG8sXG4gICAgICBOdWxsYWJsZSxcbiAgICAgIE1heExlbmd0aCxcbiAgICAgIFByZWNpc2lvbixcbiAgICAgIFNjYWxlLFxuICAgICAgU1JJRCxcbiAgICAgIFN0cmluZyxcbiAgICAgIEJvb2wsXG4gICAgICBJbnQsXG4gICAgfToge1xuICAgICAgTmFtZTogc3RyaW5nO1xuICAgICAgVHlwZTogc3RyaW5nO1xuICAgICAgQmFzZVRlcm0/OiBzdHJpbmc7XG4gICAgICBEZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG4gICAgICBBcHBsaWVzVG8/OiBzdHJpbmc7XG4gICAgICBOdWxsYWJsZT86IGJvb2xlYW47XG4gICAgICBNYXhMZW5ndGg/OiBudW1iZXI7XG4gICAgICBQcmVjaXNpb24/OiBudW1iZXI7XG4gICAgICBTY2FsZT86IG51bWJlcjtcbiAgICAgIFNSSUQ/OiBzdHJpbmc7XG4gICAgICBTdHJpbmc/OiBzdHJpbmc7XG4gICAgICBCb29sPzogYm9vbGVhbjtcbiAgICAgIEludD86IG51bWJlcjtcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLk5hbWUgPSBOYW1lO1xuICAgIHRoaXMuVHlwZSA9IFR5cGU7XG4gICAgdGhpcy5CYXNlVGVybSA9IEJhc2VUZXJtO1xuICAgIHRoaXMuRGVmYXVsdFZhbHVlID0gRGVmYXVsdFZhbHVlO1xuICAgIHRoaXMuQXBwbGllc1RvID0gQXBwbGllc1RvO1xuICAgIHRoaXMuTnVsbGFibGUgPSBOdWxsYWJsZTtcbiAgICB0aGlzLk1heExlbmd0aCA9IE1heExlbmd0aDtcbiAgICB0aGlzLlByZWNpc2lvbiA9IFByZWNpc2lvbjtcbiAgICB0aGlzLlNjYWxlID0gU2NhbGU7XG4gICAgdGhpcy5TUklEID0gU1JJRDtcbiAgICB0aGlzLlN0cmluZyA9IFN0cmluZztcbiAgICB0aGlzLkJvb2wgPSBCb29sO1xuICAgIHRoaXMuSW50ID0gSW50O1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IE5hbWU6IHRoaXMuTmFtZSwgVHlwZTogdGhpcy5UeXBlIH07XG4gICAgaWYgKHRoaXMuQmFzZVRlcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnQmFzZVRlcm0nXSA9IHRoaXMuQmFzZVRlcm07XG4gICAgfVxuICAgIGlmICh0aGlzLkRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydEZWZhdWx0VmFsdWUnXSA9IHRoaXMuRGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5BcHBsaWVzVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnQXBwbGllc1RvJ10gPSB0aGlzLkFwcGxpZXNUbztcbiAgICB9XG4gICAgaWYgKHRoaXMuTnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnTnVsbGFibGUnXSA9IHRoaXMuTnVsbGFibGU7XG4gICAgfVxuICAgIGlmICh0aGlzLk1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydNYXhMZW5ndGgnXSA9IHRoaXMuTWF4TGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodGhpcy5QcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnUHJlY2lzaW9uJ10gPSB0aGlzLlByZWNpc2lvbjtcbiAgICB9XG4gICAgaWYgKHRoaXMuU2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnU2NhbGUnXSA9IHRoaXMuU2NhbGU7XG4gICAgfVxuICAgIGlmICh0aGlzLlNSSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnU1JJRCddID0gdGhpcy5TUklEO1xuICAgIH1cbiAgICBpZiAodGhpcy5TdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnU3RyaW5nJ10gPSB0aGlzLlN0cmluZztcbiAgICB9XG4gICAgaWYgKHRoaXMuQm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydCb29sJ10gPSB0aGlzLkJvb2w7XG4gICAgfVxuICAgIGlmICh0aGlzLkludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydJbnQnXSA9IHRoaXMuSW50O1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3NkbENvbGxlY3Rpb24ge1xuICBTdHJpbmc6IENzZGxTdHJpbmdbXTtcbiAgUmVjb3JkOiBDc2RsUmVjb3JkW107XG4gIFByb3BlcnR5UGF0aDogQ3NkbFByb3BlcnR5UGF0aFtdO1xuICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBDc2RsTmF2aWdhdGlvblByb3BlcnR5UGF0aFtdO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgU3RyaW5nLFxuICAgIFJlY29yZCxcbiAgICBQcm9wZXJ0eVBhdGgsXG4gICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aCxcbiAgfToge1xuICAgIFN0cmluZzogYW55W107XG4gICAgUmVjb3JkOiBhbnlbXTtcbiAgICBQcm9wZXJ0eVBhdGg6IGFueVtdO1xuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFueVtdO1xuICB9KSB7XG4gICAgdGhpcy5TdHJpbmcgPSBTdHJpbmc/Lm1hcCgoYSkgPT4gbmV3IENzZGxTdHJpbmcoYSkpO1xuICAgIHRoaXMuUmVjb3JkID0gUmVjb3JkPy5tYXAoKGEpID0+IG5ldyBDc2RsUmVjb3JkKGEpKTtcbiAgICB0aGlzLlByb3BlcnR5UGF0aCA9IFByb3BlcnR5UGF0aD8ubWFwKChhKSA9PiBuZXcgQ3NkbFByb3BlcnR5UGF0aChhKSk7XG4gICAgdGhpcy5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gTmF2aWdhdGlvblByb3BlcnR5UGF0aD8ubWFwKFxuICAgICAgKGEpID0+IG5ldyBDc2RsTmF2aWdhdGlvblByb3BlcnR5UGF0aChhKSxcbiAgICApO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLlN0cmluZykgJiYgdGhpcy5TdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAganNvblsnU3RyaW5nJ10gPSB0aGlzLlN0cmluZy5tYXAoKHMpID0+IHMudG9Kc29uKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLlJlY29yZCkgJiYgdGhpcy5SZWNvcmQubGVuZ3RoID4gMCkge1xuICAgICAganNvblsnUmVjb3JkJ10gPSB0aGlzLlJlY29yZC5tYXAoKHIpID0+IHIudG9Kc29uKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLlByb3BlcnR5UGF0aCkgJiYgdGhpcy5Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuICAgICAganNvblsnUHJvcGVydHlQYXRoJ10gPSB0aGlzLlByb3BlcnR5UGF0aC5tYXAoKHApID0+IHAudG9Kc29uKCkpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KHRoaXMuTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgJiZcbiAgICAgIHRoaXMuTmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBqc29uWydOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJ10gPSB0aGlzLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubWFwKChwKSA9PlxuICAgICAgICBwLnRvSnNvbigpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENzZGxSZWNvcmQge1xuICBQcm9wZXJ0eVZhbHVlOiBDc2RsUHJvcGVydHlWYWx1ZVtdO1xuICBjb25zdHJ1Y3Rvcih7IFByb3BlcnR5VmFsdWUgfTogeyBQcm9wZXJ0eVZhbHVlOiBhbnlbXSB9KSB7XG4gICAgdGhpcy5Qcm9wZXJ0eVZhbHVlID0gUHJvcGVydHlWYWx1ZT8ubWFwKChhKSA9PiBuZXcgQ3NkbFByb3BlcnR5VmFsdWUoYSkpO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIGNvbnN0IGpzb246IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLlByb3BlcnR5VmFsdWUpICYmIHRoaXMuUHJvcGVydHlWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBqc29uWydQcm9wZXJ0eVZhbHVlJ10gPSB0aGlzLlByb3BlcnR5VmFsdWUubWFwKChwKSA9PiBwLnRvSnNvbigpKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENzZGxQcm9wZXJ0eVZhbHVlIHtcbiAgTmFtZTogc3RyaW5nO1xuICBTdHJpbmc/OiBzdHJpbmc7XG4gIERhdGU/OiBEYXRlO1xuICBFbnVtTWVtYmVyPzogQ3NkbEVudW1NZW1iZXJbXTtcbiAgY29uc3RydWN0b3Ioe1xuICAgIE5hbWUsXG4gICAgU3RyaW5nLFxuICAgIERhdGUsXG4gICAgRW51bU1lbWJlcixcbiAgfToge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBTdHJpbmc/OiBzdHJpbmc7XG4gICAgRGF0ZT86IERhdGU7XG4gICAgRW51bU1lbWJlcj86IGFueVtdO1xuICB9KSB7XG4gICAgdGhpcy5OYW1lID0gTmFtZTtcbiAgICB0aGlzLlN0cmluZyA9IFN0cmluZztcbiAgICB0aGlzLkRhdGUgPSBEYXRlO1xuICAgIHRoaXMuRW51bU1lbWJlciA9IEVudW1NZW1iZXI/Lm1hcCgoYSkgPT4gbmV3IENzZGxFbnVtTWVtYmVyKGEpKTtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICBjb25zdCBqc29uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0geyBOYW1lOiB0aGlzLk5hbWUgfTtcbiAgICBpZiAodGhpcy5TdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblsnU3RyaW5nJ10gPSB0aGlzLlN0cmluZztcbiAgICB9XG4gICAgaWYgKHRoaXMuRGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uWydEYXRlJ10gPSB0aGlzLkRhdGU7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuRW51bU1lbWJlcikgJiYgdGhpcy5FbnVtTWVtYmVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGpzb25bJ0VudW1NZW1iZXInXSA9IHRoaXMuRW51bU1lbWJlci5tYXAoKG0pID0+IG0udG9Kc29uKCkpO1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3NkbEVudW1NZW1iZXIge1xuICBUZXh0Q29udGVudDogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcih7IFRleHRDb250ZW50IH06IHsgVGV4dENvbnRlbnQ6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5UZXh0Q29udGVudCA9IFRleHRDb250ZW50O1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBUZXh0Q29udGVudDogdGhpcy5UZXh0Q29udGVudCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDc2RsU3RyaW5nIHtcbiAgVGV4dENvbnRlbnQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IoeyBUZXh0Q29udGVudCB9OiB7IFRleHRDb250ZW50OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuVGV4dENvbnRlbnQgPSBUZXh0Q29udGVudDtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgVGV4dENvbnRlbnQ6IHRoaXMuVGV4dENvbnRlbnQsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3NkbFByb3BlcnR5UGF0aCB7XG4gIFRleHRDb250ZW50OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHsgVGV4dENvbnRlbnQgfTogeyBUZXh0Q29udGVudDogc3RyaW5nIH0pIHtcbiAgICB0aGlzLlRleHRDb250ZW50ID0gVGV4dENvbnRlbnQ7XG4gIH1cblxuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFRleHRDb250ZW50OiB0aGlzLlRleHRDb250ZW50LFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENzZGxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIHtcbiAgVGV4dENvbnRlbnQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IoeyBUZXh0Q29udGVudCB9OiB7IFRleHRDb250ZW50OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuVGV4dENvbnRlbnQgPSBUZXh0Q29udGVudDtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgVGV4dENvbnRlbnQ6IHRoaXMuVGV4dENvbnRlbnQsXG4gICAgfTtcbiAgfVxufVxuIl19