@knora/core
Version:
Knora ui module: core
169 lines • 17.7 kB
JavaScript
import { GravsearchGenerationService } from '../../services/v2/grav-search.service';
import { KnoraConstants, KnoraSchema } from './knora-constants';
export class Equals {
constructor() {
this.type = KnoraConstants.EqualsComparisonOperator;
this.label = KnoraConstants.EqualsComparisonLabel;
}
getClassName() {
return 'Equals';
}
}
export class NotEquals {
constructor() {
this.type = KnoraConstants.NotEqualsComparisonOperator;
this.label = KnoraConstants.NotEqualsComparisonLabel;
}
getClassName() {
return 'NotEquals';
}
}
export class GreaterThanEquals {
constructor() {
this.type = KnoraConstants.GreaterThanEqualsComparisonOperator;
this.label = KnoraConstants.GreaterThanEqualsComparisonLabel;
}
getClassName() {
return 'GreaterThanEquals';
}
}
export class GreaterThan {
constructor() {
this.type = KnoraConstants.GreaterThanComparisonOperator;
this.label = KnoraConstants.GreaterThanComparisonLabel;
}
getClassName() {
return 'GreaterThan';
}
}
export class LessThan {
constructor() {
this.type = KnoraConstants.LessThanComparisonOperator;
this.label = KnoraConstants.LessThanComparisonLabel;
}
getClassName() {
return 'LessThan';
}
}
export class LessThanEquals {
constructor() {
this.type = KnoraConstants.LessThanEqualsComparisonOperator;
this.label = KnoraConstants.LessThanQualsComparisonLabel;
}
getClassName() {
return 'LessThanEquals';
}
}
export class Exists {
constructor() {
this.type = KnoraConstants.ExistsComparisonOperator;
this.label = KnoraConstants.ExistsComparisonLabel;
}
getClassName() {
return 'Exists';
}
}
export class Like {
constructor() {
this.type = KnoraConstants.LikeComparisonOperator;
this.label = KnoraConstants.LikeComparisonLabel;
}
getClassName() {
return 'Like';
}
}
export class Match {
constructor() {
this.type = KnoraConstants.MatchComparisonOperator;
this.label = KnoraConstants.MatchComparisonLabel;
}
getClassName() {
return 'Match';
}
}
/**
* Combination of a comparison operator and a value literal or an IRI.
* In case the comparison operator is 'Exists', no value is given.
*/
export class ComparisonOperatorAndValue {
constructor(comparisonOperator, value) {
this.comparisonOperator = comparisonOperator;
this.value = value;
}
}
/**
* Represents a property's value as a literal with the indication of its type.
*/
export class ValueLiteral {
/**
* Constructs a [ValueLiteral].
*
* @param {string} value the literal representation of the value.
* @param {string} type the type of the value (making use of xsd).
*/
constructor(value, type) {
this.value = value;
this.type = type;
}
/**
* Creates a type annotated value literal to be used in a SPARQL query.
*
* @param schema indicates the Knora schema to be used.
* @returns {string}
*/
toSparql(schema) {
let literalType;
// check if a Knora schema conversion is necessary, e.g., knora-api:dateValue (complex) to knora-api:date (simple).
// xsd types will remain unchanged
if (schema === KnoraSchema.simple && GravsearchGenerationService.typeConversionComplexToSimple[this.type] !== undefined) {
// convert to simple schema
literalType = GravsearchGenerationService.typeConversionComplexToSimple[this.type];
}
else {
// do not convert
literalType = this.type;
}
return `"${this.value}"^^<${literalType}>`;
}
}
/**
* Represents an IRI.
*/
export class IRI {
/**
* Constructs an [IRI].
*
* @param {string} iri the IRI of a resource instance.
*/
constructor(iri) {
this.iri = iri;
}
/**
* Creates a SPARQL representation of the IRI.
*
* @param schema indicates the Knora schema to be used.
* @returns {string}
*/
toSparql(schema) {
// this is an instance Iri and does not have to be converted.
return `<${this.iri}>`;
}
}
/**
* Represents a property, the specified comparison operator, and value.
*/
export class PropertyWithValue {
/**
* Constructs a [PropertyWithValue].
*
* @param {Property} property the specified property.
* @param {ComparisonOperatorAndValue} valueLiteral the specified comparison operator and value.
* @param isSortCriterion indicates if the property is used as a sort criterion.
*/
constructor(property, valueLiteral, isSortCriterion) {
this.property = property;
this.valueLiteral = valueLiteral;
this.isSortCriterion = isSortCriterion;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtub3JhL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZGVjbGFyYXRpb25zL2FwaS9vcGVyYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWtCaEUsTUFBTSxPQUFPLE1BQU07SUFLZjtRQUhBLFNBQUksR0FBRyxjQUFjLENBQUMsd0JBQXdCLENBQUM7UUFDL0MsVUFBSyxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztJQUc3QyxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUdELE1BQU0sT0FBTyxTQUFTO0lBS2xCO1FBSEEsU0FBSSxHQUFHLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQztRQUNsRCxVQUFLLEdBQUcsY0FBYyxDQUFDLHdCQUF3QixDQUFDO0lBR2hELENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtJQUsxQjtRQUhBLFNBQUksR0FBRyxjQUFjLENBQUMsbUNBQW1DLENBQUM7UUFDMUQsVUFBSyxHQUFHLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUd4RCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sbUJBQW1CLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFLcEI7UUFIQSxTQUFJLEdBQUcsY0FBYyxDQUFDLDZCQUE2QixDQUFDO1FBQ3BELFVBQUssR0FBRyxjQUFjLENBQUMsMEJBQTBCLENBQUM7SUFHbEQsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sUUFBUTtJQUtqQjtR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QyxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmF2c2VhcmNoR2VuZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92Mi9ncmF2LXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdjIvb250b2xvZ3ktY2FjaGUuc2VydmljZSc7XG5cbmltcG9ydCB7IEtub3JhQ29uc3RhbnRzLCBLbm9yYVNjaGVtYSB9IGZyb20gJy4va25vcmEtY29uc3RhbnRzJztcblxuLyoqXG4gKiBBbiBhYnN0cmFjdCBpbnRlcmZhY2UgcmVwcmVzZW50aW5nIGEgY29tcGFyaXNvbiBvcGVyYXRvci5cbiAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGZvciB0aGUgc3VwcG9ydGVkIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmlzb25PcGVyYXRvciB7XG5cbiAgICAvLyB0eXBlIG9mIGNvbXBhcmlzb24gb3BlcmF0b3JcbiAgICB0eXBlOiBzdHJpbmc7XG5cbiAgICAvLyB0aGUgbGFiZWwgb2YgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgdG8gYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAvLyByZXR1cm5zIHRoZSBjbGFzcyBuYW1lIHdoZW4gY2FsbGVkIG9uIGFuIGluc3RhbmNlXG4gICAgZ2V0Q2xhc3NOYW1lKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEVxdWFscyBpbXBsZW1lbnRzIENvbXBhcmlzb25PcGVyYXRvciB7XG5cbiAgICB0eXBlID0gS25vcmFDb25zdGFudHMuRXF1YWxzQ29tcGFyaXNvbk9wZXJhdG9yO1xuICAgIGxhYmVsID0gS25vcmFDb25zdGFudHMuRXF1YWxzQ29tcGFyaXNvbkxhYmVsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ0VxdWFscyc7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBOb3RFcXVhbHMgaW1wbGVtZW50cyBDb21wYXJpc29uT3BlcmF0b3Ige1xuXG4gICAgdHlwZSA9IEtub3JhQ29uc3RhbnRzLk5vdEVxdWFsc0NvbXBhcmlzb25PcGVyYXRvcjtcbiAgICBsYWJlbCA9IEtub3JhQ29uc3RhbnRzLk5vdEVxdWFsc0NvbXBhcmlzb25MYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICdOb3RFcXVhbHMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyZWF0ZXJUaGFuRXF1YWxzIGltcGxlbWVudHMgQ29tcGFyaXNvbk9wZXJhdG9yIHtcblxuICAgIHR5cGUgPSBLbm9yYUNvbnN0YW50cy5HcmVhdGVyVGhhbkVxdWFsc0NvbXBhcmlzb25PcGVyYXRvcjtcbiAgICBsYWJlbCA9IEtub3JhQ29uc3RhbnRzLkdyZWF0ZXJUaGFuRXF1YWxzQ29tcGFyaXNvbkxhYmVsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ0dyZWF0ZXJUaGFuRXF1YWxzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcmVhdGVyVGhhbiBpbXBsZW1lbnRzIENvbXBhcmlzb25PcGVyYXRvciB7XG5cbiAgICB0eXBlID0gS25vcmFDb25zdGFudHMuR3JlYXRlclRoYW5Db21wYXJpc29uT3BlcmF0b3I7XG4gICAgbGFiZWwgPSBLbm9yYUNvbnN0YW50cy5HcmVhdGVyVGhhbkNvbXBhcmlzb25MYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICdHcmVhdGVyVGhhbic7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGVzc1RoYW4gaW1wbGVtZW50cyBDb21wYXJpc29uT3BlcmF0b3Ige1xuXG4gICAgdHlwZSA9IEtub3JhQ29uc3RhbnRzLkxlc3NUaGFuQ29tcGFyaXNvbk9wZXJhdG9yO1xuICAgIGxhYmVsID0gS25vcmFDb25zdGFudHMuTGVzc1RoYW5Db21wYXJpc29uTGFiZWw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAnTGVzc1RoYW4nO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExlc3NUaGFuRXF1YWxzIGltcGxlbWVudHMgQ29tcGFyaXNvbk9wZXJhdG9yIHtcblxuICAgIHR5cGUgPSBLbm9yYUNvbnN0YW50cy5MZXNzVGhhbkVxdWFsc0NvbXBhcmlzb25PcGVyYXRvcjtcbiAgICBsYWJlbCA9IEtub3JhQ29uc3RhbnRzLkxlc3NUaGFuUXVhbHNDb21wYXJpc29uTGFiZWw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAnTGVzc1RoYW5FcXVhbHMnO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRXhpc3RzIGltcGxlbWVudHMgQ29tcGFyaXNvbk9wZXJhdG9yIHtcblxuICAgIHR5cGUgPSBLbm9yYUNvbnN0YW50cy5FeGlzdHNDb21wYXJpc29uT3BlcmF0b3I7XG4gICAgbGFiZWwgPSBLbm9yYUNvbnN0YW50cy5FeGlzdHNDb21wYXJpc29uTGFiZWw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAnRXhpc3RzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaWtlIGltcGxlbWVudHMgQ29tcGFyaXNvbk9wZXJhdG9yIHtcblxuICAgIHR5cGUgPSBLbm9yYUNvbnN0YW50cy5MaWtlQ29tcGFyaXNvbk9wZXJhdG9yO1xuICAgIGxhYmVsID0gS25vcmFDb25zdGFudHMuTGlrZUNvbXBhcmlzb25MYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICdMaWtlJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIE1hdGNoIGltcGxlbWVudHMgQ29tcGFyaXNvbk9wZXJhdG9yIHtcblxuICAgIHR5cGUgPSBLbm9yYUNvbnN0YW50cy5NYXRjaENvbXBhcmlzb25PcGVyYXRvcjtcbiAgICBsYWJlbCA9IEtub3JhQ29uc3RhbnRzLk1hdGNoQ29tcGFyaXNvbkxhYmVsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ01hdGNoJztcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBDb21iaW5hdGlvbiBvZiBhIGNvbXBhcmlzb24gb3BlcmF0b3IgYW5kIGEgdmFsdWUgbGl0ZXJhbCBvciBhbiBJUkkuXG4gKiBJbiBjYXNlIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzICdFeGlzdHMnLCBubyB2YWx1ZSBpcyBnaXZlbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBhcmlzb25PcGVyYXRvckFuZFZhbHVlIHtcblxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLCByZWFkb25seSB2YWx1ZT86IFZhbHVlKSB7XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGFic3RyYWN0IGludGVyZmFjZSByZXByZXNlbnRpbmcgYSB2YWx1ZTogYW4gSVJJIG9yIGEgbGl0ZXJhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWx1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBUdXJucyB0aGUgdmFsdWUgaW50byBhIFNQQVJRTCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2NoZW1hIGluZGljYXRlcyB0aGUgS25vcmEgc2NoZW1hIHRvIGJlIHVzZWQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gU1BBUlFMIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKi9cbiAgICB0b1NwYXJxbChzY2hlbWE6IEtub3JhU2NoZW1hKTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHByb3BlcnR5J3MgdmFsdWUgYXMgYSBsaXRlcmFsIHdpdGggdGhlIGluZGljYXRpb24gb2YgaXRzIHR5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWx1ZUxpdGVyYWwgaW1wbGVtZW50cyBWYWx1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgW1ZhbHVlTGl0ZXJhbF0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgdGhlIGxpdGVyYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSAobWFraW5nIHVzZSBvZiB4c2QpLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZykge1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHR5cGUgYW5ub3RhdGVkIHZhbHVlIGxpdGVyYWwgdG8gYmUgdXNlZCBpbiBhIFNQQVJRTCBxdWVyeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzY2hlbWEgaW5kaWNhdGVzIHRoZSBLbm9yYSBzY2hlbWEgdG8gYmUgdXNlZC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyB0b1NwYXJxbChzY2hlbWE6IEtub3JhU2NoZW1hKTogc3RyaW5nIHtcblxuICAgICAgICBsZXQgbGl0ZXJhbFR5cGU6IHN0cmluZztcblxuICAgICAgICAvLyBjaGVjayBpZiBhIEtub3JhIHNjaGVtYSBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSwgZS5nLiwga25vcmEtYXBpOmRhdGVWYWx1ZSAoY29tcGxleCkgdG8ga25vcmEtYXBpOmRhdGUgKHNpbXBsZSkuXG4gICAgICAgIC8vIHhzZCB0eXBlcyB3aWxsIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgICAgaWYgKHNjaGVtYSA9PT0gS25vcmFTY2hlbWEuc2ltcGxlICYmIEdyYXZzZWFyY2hHZW5lcmF0aW9uU2VydmljZS50eXBlQ29udmVyc2lvbkNvbXBsZXhUb1NpbXBsZVt0aGlzLnR5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gc2ltcGxlIHNjaGVtYVxuICAgICAgICAgICAgbGl0ZXJhbFR5cGUgPSBHcmF2c2VhcmNoR2VuZXJhdGlvblNlcnZpY2UudHlwZUNvbnZlcnNpb25Db21wbGV4VG9TaW1wbGVbdGhpcy50eXBlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCBjb252ZXJ0XG4gICAgICAgICAgICBsaXRlcmFsVHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFwiJHt0aGlzLnZhbHVlfVwiXl48JHtsaXRlcmFsVHlwZX0+YDtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElSSS5cbiAqL1xuZXhwb3J0IGNsYXNzIElSSSBpbXBsZW1lbnRzIFZhbHVlIHtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYW4gW0lSSV0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXJpIHRoZSBJUkkgb2YgYSByZXNvdXJjZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBpcmk6IHN0cmluZykge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTUEFSUUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIElSSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzY2hlbWEgaW5kaWNhdGVzIHRoZSBLbm9yYSBzY2hlbWEgdG8gYmUgdXNlZC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyB0b1NwYXJxbChzY2hlbWE6IEtub3JhU2NoZW1hKTogc3RyaW5nIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbiBpbnN0YW5jZSBJcmkgYW5kIGRvZXMgbm90IGhhdmUgdG8gYmUgY29udmVydGVkLlxuICAgICAgICByZXR1cm4gYDwke3RoaXMuaXJpfT5gO1xuICAgIH1cblxufVxuXG4vKipcbiAqIEFuIGFic3RyYWN0IGludGVyZmFjZSB0aGF0IHJlcHJlc2VudHMgYSB2YWx1ZS5cbiAqIFRoaXMgaW50ZXJmYWNlIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgYWxsIHZhbHVlIHR5cGVzICh2YWx1ZSBjb21wb25lbnQgY2xhc3NlcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlWYWx1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHRoZSB2YWx1ZS5cbiAgICAgKi9cbiAgICB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtWYWx1ZX0uXG4gICAgICovXG4gICAgZ2V0VmFsdWUoKTogVmFsdWU7XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcHJvcGVydHksIHRoZSBzcGVjaWZpZWQgY29tcGFyaXNvbiBvcGVyYXRvciwgYW5kIHZhbHVlLlxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydHlXaXRoVmFsdWUge1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIFtQcm9wZXJ0eVdpdGhWYWx1ZV0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSB7Q29tcGFyaXNvbk9wZXJhdG9yQW5kVmFsdWV9IHZhbHVlTGl0ZXJhbCB0aGUgc3BlY2lmaWVkIGNvbXBhcmlzb24gb3BlcmF0b3IgYW5kIHZhbHVlLlxuICAgICAqIEBwYXJhbSBpc1NvcnRDcml0ZXJpb24gaW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0eSBpcyB1c2VkIGFzIGEgc29ydCBjcml0ZXJpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlYWRvbmx5IHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgcmVhZG9ubHkgdmFsdWVMaXRlcmFsOiBDb21wYXJpc29uT3BlcmF0b3JBbmRWYWx1ZSxcbiAgICAgICAgcmVhZG9ubHkgaXNTb3J0Q3JpdGVyaW9uOiBCb29sZWFuKSB7XG4gICAgfVxuXG59XG5cbi8qKlxuICogYSBsaXN0LCB3aGljaCBpcyB1c2VkIGluIHRoZSBtYXQtYXV0b2NvbXBsZXRlIGZvcm0gZmllbGRcbiAqIGNvbnRhaW5zIG9iamVjdHMgd2l0aCBpZCBhbmQgbmFtZS4gdGhlIGlkIGlzIHVzdWFsIHRoZSBpcmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVJdGVtIHtcbiAgICBpcmk6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbiJdfQ==