UNPKG

@knora/core

Version:
169 lines 17.7 kB
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==