UNPKG

angular-odata

Version:

Client side OData typescript library for Angular

180 lines 25.7 kB
import { Expression } from './base'; import { CountExpression } from './count'; import { FieldFactory, functions, operators, RenderableFactory, syntax, } from './syntax'; export class FilterExpression extends Expression { _connector; _negated; constructor({ children, connector, negated, } = {}) { super({ children }); this._connector = connector || 'and'; this._negated = negated || false; } get [Symbol.toStringTag]() { return 'FilterExpression'; } static factory(opts, current) { return opts({ e: (connector = 'and') => new FilterExpression({ connector }), t: FieldFactory(), o: operators, f: functions, }, current); } toJson() { const json = super.toJson(); return Object.assign(json, { connector: this._connector, negated: this._negated, }); } static fromJson(json) { return new FilterExpression({ children: json['children'].map((c) => RenderableFactory(c)), connector: json['connector'], negated: json['negated'], }); } connector() { return this._connector; } negated() { return this._negated; } render({ aliases, escape, prefix, parser, options, } = {}) { let content = this._children .map((n) => n.render({ aliases, escape, prefix, parser, options })) .join(` ${this._connector} `); if (this._negated) { content = `not (${content})`; } return content; } clone() { return new FilterExpression({ children: this._children.map((c) => c.clone()), connector: this._connector, negated: this._negated, }); } _add(node, connector) { if (connector !== undefined && this._connector !== connector) { let children = []; if (this._children.length > 0) { if (this._children.length === 1) { children = [...this._children]; } else { let exp = new FilterExpression({ children: this._children, connector: this._connector, negated: this._negated, }); if (exp.length() > 1) { children.push(syntax.group(exp)); } else { children.push(exp); } } } if (node instanceof FilterExpression && (node.connector() === connector || node.length() === 1)) { children = [...children, ...node.children()]; } else { children.push(syntax.group(node)); } this._connector = connector; this._children = children; } else if (node instanceof FilterExpression && !node.negated() && (node.connector() === connector || node.length() === 1)) { this._children = [...this._children, ...node.children()]; } else { this._children.push(node instanceof FilterExpression && !node.negated() ? syntax.group(node) : node); } return this; } or(exp) { return this._add(exp, 'or'); } and(exp) { return this._add(exp, 'and'); } not(exp) { const notExp = new FilterExpression({ children: exp.children(), connector: exp.connector(), negated: true, }); return this._add(notExp, this._connector); } eq(left, right, normalize = 'right') { return this._add(operators.eq(left, right, normalize)); } ne(left, right, normalize = 'right') { return this._add(operators.ne(left, right, normalize)); } gt(left, right, normalize = 'right') { return this._add(operators.gt(left, right, normalize)); } ge(left, right, normalize = 'right') { return this._add(operators.ge(left, right, normalize)); } lt(left, right, normalize = 'right') { return this._add(operators.lt(left, right, normalize)); } le(left, right, normalize = 'right') { return this._add(operators.le(left, right, normalize)); } has(left, right, normalize = 'right') { return this._add(operators.has(left, right, normalize)); } in(left, right, normalize = 'right') { return this._add(operators.in(left, right, normalize)); } contains(left, right, normalize = 'right') { return this._add(functions.contains(left, right, normalize)); } startsWith(left, right, normalize = 'right') { return this._add(functions.startsWith(left, right, normalize)); } endsWith(left, right, normalize = 'right') { return this._add(functions.endsWith(left, right, normalize)); } any(left, opts, alias) { let exp = undefined; if (opts !== undefined) { exp = opts({ t: FieldFactory(), o: operators, f: functions, e: (connector = 'and') => new FilterExpression({ connector }), }); } return this._add(syntax.any(left, exp, alias)); } all(left, opts, alias) { let exp = undefined; if (opts !== undefined) { exp = opts({ t: FieldFactory(), o: operators, f: functions, e: (connector = 'and') => new FilterExpression({ connector }), }); } return this._add(syntax.all(left, exp, alias)); } count(left, opts) { return this._add(new CountExpression().field(left, opts)); } isof(left, type) { return this._add(syntax.isof(left, type)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sU0FBUyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxFQUlULFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sVUFBVSxDQUFDO0FBVWxCLE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxVQUFhO0lBQzVDLFVBQVUsQ0FBa0I7SUFDNUIsUUFBUSxDQUFVO0lBQzFCLFlBQVksRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULE9BQU8sTUFLTCxFQUFFO1FBQ0osS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUNaLElBR3dCLEVBQ3hCLE9BQTZCO1FBRTdCLE9BQU8sSUFBSSxDQUNUO1lBQ0UsQ0FBQyxFQUFFLENBQUMsWUFBNkIsS0FBSyxFQUFFLEVBQUUsQ0FDeEMsSUFBSSxnQkFBZ0IsQ0FBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLENBQUMsRUFBRSxZQUFZLEVBQWU7WUFDOUIsQ0FBQyxFQUFFLFNBQThCO1lBQ2pDLENBQUMsRUFBRSxTQUE4QjtTQUNsQyxFQUNELE9B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RSxDQUFDLFlBQTZCLEtBQUssRUFBRSxFQUFFLENBQ3hDLElBQUksZ0JBQWdCLENBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzthQUN6QyxDQUF3QixDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FDSCxJQUFTLEVBQ1QsSUFBNEQ7UUFFNUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxFQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFJRCxJQUFJLENBQUMsSUFBUyxFQUFFLElBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VyLCBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IENvdW50RXhwcmVzc2lvbiwgQ291bnRGaWVsZCB9IGZyb20gJy4vY291bnQnO1xuaW1wb3J0IHtcbiAgRmllbGRGYWN0b3J5LFxuICBmdW5jdGlvbnMsXG4gIE5vcm1hbGl6ZSxcbiAgT0RhdGFGdW5jdGlvbnMsXG4gIE9EYXRhT3BlcmF0b3JzLFxuICBvcGVyYXRvcnMsXG4gIFJlbmRlcmFibGUsXG4gIFJlbmRlcmFibGVGYWN0b3J5LFxuICBzeW50YXgsXG59IGZyb20gJy4vc3ludGF4JztcblxuZXhwb3J0IHR5cGUgRmlsdGVyQ29ubmVjdG9yID0gJ2FuZCcgfCAnb3InO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJFeHByZXNzaW9uQnVpbGRlcjxUPiA9IHtcbiAgdDogUmVxdWlyZWQ8VD47XG4gIGU6IChjb25uZWN0b3I/OiBGaWx0ZXJDb25uZWN0b3IpID0+IEZpbHRlckV4cHJlc3Npb248VD47XG4gIG86IE9EYXRhT3BlcmF0b3JzPFQ+O1xuICBmOiBPRGF0YUZ1bmN0aW9uczxUPjtcbn07XG5leHBvcnQgY2xhc3MgRmlsdGVyRXhwcmVzc2lvbjxGPiBleHRlbmRzIEV4cHJlc3Npb248Rj4ge1xuICBwcml2YXRlIF9jb25uZWN0b3I6IEZpbHRlckNvbm5lY3RvcjtcbiAgcHJpdmF0ZSBfbmVnYXRlZDogYm9vbGVhbjtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbm5lY3RvcixcbiAgICBuZWdhdGVkLFxuICB9OiB7XG4gICAgY2hpbGRyZW4/OiBSZW5kZXJhYmxlW107XG4gICAgY29ubmVjdG9yPzogRmlsdGVyQ29ubmVjdG9yO1xuICAgIG5lZ2F0ZWQ/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICBzdXBlcih7IGNoaWxkcmVuIH0pO1xuICAgIHRoaXMuX2Nvbm5lY3RvciA9IGNvbm5lY3RvciB8fCAnYW5kJztcbiAgICB0aGlzLl9uZWdhdGVkID0gbmVnYXRlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0ZpbHRlckV4cHJlc3Npb24nO1xuICB9XG5cbiAgc3RhdGljIGZhY3Rvcnk8VD4oXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXI8VD4sXG4gICAgICBjdXJyZW50PzogRmlsdGVyRXhwcmVzc2lvbjxUPixcbiAgICApID0+IEZpbHRlckV4cHJlc3Npb248VD4sXG4gICAgY3VycmVudD86IEZpbHRlckV4cHJlc3Npb248VD4sXG4gICk6IEZpbHRlckV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiBvcHRzKFxuICAgICAge1xuICAgICAgICBlOiAoY29ubmVjdG9yOiBGaWx0ZXJDb25uZWN0b3IgPSAnYW5kJykgPT5cbiAgICAgICAgICBuZXcgRmlsdGVyRXhwcmVzc2lvbjxUPih7IGNvbm5lY3RvciB9KSxcbiAgICAgICAgdDogRmllbGRGYWN0b3J5PFJlcXVpcmVkPFQ+PigpLFxuICAgICAgICBvOiBvcGVyYXRvcnMgYXMgT0RhdGFPcGVyYXRvcnM8VD4sXG4gICAgICAgIGY6IGZ1bmN0aW9ucyBhcyBPRGF0YUZ1bmN0aW9uczxUPixcbiAgICAgIH0sXG4gICAgICBjdXJyZW50LFxuICAgICkgYXMgRmlsdGVyRXhwcmVzc2lvbjxUPjtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSnNvbigpIHtcbiAgICBjb25zdCBqc29uID0gc3VwZXIudG9Kc29uKCk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwge1xuICAgICAgY29ubmVjdG9yOiB0aGlzLl9jb25uZWN0b3IsXG4gICAgICBuZWdhdGVkOiB0aGlzLl9uZWdhdGVkLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uPFQ+KGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogRmlsdGVyRXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXJFeHByZXNzaW9uPFQ+KHtcbiAgICAgIGNoaWxkcmVuOiBqc29uWydjaGlsZHJlbiddLm1hcCgoYzogYW55KSA9PiBSZW5kZXJhYmxlRmFjdG9yeShjKSksXG4gICAgICBjb25uZWN0b3I6IGpzb25bJ2Nvbm5lY3RvciddLFxuICAgICAgbmVnYXRlZDoganNvblsnbmVnYXRlZCddLFxuICAgIH0pO1xuICB9XG5cbiAgY29ubmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3I7XG4gIH1cblxuICBuZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9uZWdhdGVkO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gICAgcGFyc2VyLFxuICAgIG9wdGlvbnMsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgcGFyc2VyPzogUGFyc2VyPGFueT47XG4gICAgb3B0aW9ucz86IFBhcnNlck9wdGlvbnM7XG4gIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLl9jaGlsZHJlblxuICAgICAgLm1hcCgobikgPT4gbi5yZW5kZXIoeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgcGFyc2VyLCBvcHRpb25zIH0pKVxuICAgICAgLmpvaW4oYCAke3RoaXMuX2Nvbm5lY3Rvcn0gYCk7XG4gICAgaWYgKHRoaXMuX25lZ2F0ZWQpIHtcbiAgICAgIGNvbnRlbnQgPSBgbm90ICgke2NvbnRlbnR9KWA7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXJFeHByZXNzaW9uPEY+KHtcbiAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbi5tYXAoKGMpID0+IGMuY2xvbmUoKSksXG4gICAgICBjb25uZWN0b3I6IHRoaXMuX2Nvbm5lY3RvcixcbiAgICAgIG5lZ2F0ZWQ6IHRoaXMuX25lZ2F0ZWQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hZGQoXG4gICAgbm9kZTogUmVuZGVyYWJsZSxcbiAgICBjb25uZWN0b3I/OiBGaWx0ZXJDb25uZWN0b3IsXG4gICk6IEZpbHRlckV4cHJlc3Npb248Rj4ge1xuICAgIGlmIChjb25uZWN0b3IgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jb25uZWN0b3IgIT09IGNvbm5lY3Rvcikge1xuICAgICAgbGV0IGNoaWxkcmVuOiBSZW5kZXJhYmxlW10gPSBbXTtcbiAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjaGlsZHJlbiA9IFsuLi50aGlzLl9jaGlsZHJlbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGV4cCA9IG5ldyBGaWx0ZXJFeHByZXNzaW9uPEY+KHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbixcbiAgICAgICAgICAgIGNvbm5lY3RvcjogdGhpcy5fY29ubmVjdG9yLFxuICAgICAgICAgICAgbmVnYXRlZDogdGhpcy5fbmVnYXRlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZXhwLmxlbmd0aCgpID4gMSkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzeW50YXguZ3JvdXAoZXhwKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZXhwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIEZpbHRlckV4cHJlc3Npb24gJiZcbiAgICAgICAgKG5vZGUuY29ubmVjdG9yKCkgPT09IGNvbm5lY3RvciB8fCBub2RlLmxlbmd0aCgpID09PSAxKVxuICAgICAgKSB7XG4gICAgICAgIGNoaWxkcmVuID0gWy4uLmNoaWxkcmVuLCAuLi5ub2RlLmNoaWxkcmVuKCldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChzeW50YXguZ3JvdXAobm9kZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY29ubmVjdG9yID0gY29ubmVjdG9yO1xuICAgICAgdGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbm9kZSBpbnN0YW5jZW9mIEZpbHRlckV4cHJlc3Npb24gJiZcbiAgICAgICFub2RlLm5lZ2F0ZWQoKSAmJlxuICAgICAgKG5vZGUuY29ubmVjdG9yKCkgPT09IGNvbm5lY3RvciB8fCBub2RlLmxlbmd0aCgpID09PSAxKVxuICAgICkge1xuICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbLi4udGhpcy5fY2hpbGRyZW4sIC4uLm5vZGUuY2hpbGRyZW4oKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goXG4gICAgICAgIG5vZGUgaW5zdGFuY2VvZiBGaWx0ZXJFeHByZXNzaW9uICYmICFub2RlLm5lZ2F0ZWQoKVxuICAgICAgICAgID8gc3ludGF4Lmdyb3VwKG5vZGUpXG4gICAgICAgICAgOiBub2RlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcihleHA6IEZpbHRlckV4cHJlc3Npb248Rj4pOiBGaWx0ZXJFeHByZXNzaW9uPEY+IHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKGV4cCwgJ29yJyk7XG4gIH1cblxuICBhbmQoZXhwOiBGaWx0ZXJFeHByZXNzaW9uPEY+KTogRmlsdGVyRXhwcmVzc2lvbjxGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChleHAsICdhbmQnKTtcbiAgfVxuXG4gIG5vdChleHA6IEZpbHRlckV4cHJlc3Npb248Rj4pOiBGaWx0ZXJFeHByZXNzaW9uPEY+IHtcbiAgICBjb25zdCBub3RFeHAgPSBuZXcgRmlsdGVyRXhwcmVzc2lvbjxGPih7XG4gICAgICBjaGlsZHJlbjogZXhwLmNoaWxkcmVuKCksXG4gICAgICBjb25uZWN0b3I6IGV4cC5jb25uZWN0b3IoKSxcbiAgICAgIG5lZ2F0ZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fYWRkKG5vdEV4cCwgdGhpcy5fY29ubmVjdG9yKTtcbiAgfVxuXG4gIGVxKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChvcGVyYXRvcnMuZXEobGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5uZShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBndChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiB0aGlzLl9hZGQob3BlcmF0b3JzLmd0KGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGdlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChvcGVyYXRvcnMuZ2UobGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5sdChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBsZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiB0aGlzLl9hZGQob3BlcmF0b3JzLmxlKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGhhcyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiB0aGlzLl9hZGQob3BlcmF0b3JzLmhhcyhsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBpbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiB0aGlzLl9hZGQob3BlcmF0b3JzLmluKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGNvbnRhaW5zKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplOiBOb3JtYWxpemUgPSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChmdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgc3RhcnRzV2l0aChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZTogTm9ybWFsaXplID0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiB0aGlzLl9hZGQoZnVuY3Rpb25zLnN0YXJ0c1dpdGgobGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgZW5kc1dpdGgobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU6IE5vcm1hbGl6ZSA9ICdyaWdodCcpIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKGZ1bmN0aW9ucy5lbmRzV2l0aChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBhbnk8Tj4oXG4gICAgbGVmdDogTltdLFxuICAgIG9wdHM/OiAoZToge1xuICAgICAgZTogKGNvbm5lY3Rvcj86IEZpbHRlckNvbm5lY3RvcikgPT4gRmlsdGVyRXhwcmVzc2lvbjxOPjtcbiAgICAgIHQ6IE47XG4gICAgICBvOiBPRGF0YU9wZXJhdG9yczxOPjtcbiAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPE4+O1xuICAgIH0pID0+IEZpbHRlckV4cHJlc3Npb248Tj4sXG4gICAgYWxpYXM/OiBzdHJpbmcsXG4gICk6IEZpbHRlckV4cHJlc3Npb248Rj4ge1xuICAgIGxldCBleHAgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhwID0gb3B0cyh7XG4gICAgICAgIHQ6IEZpZWxkRmFjdG9yeTxSZXF1aXJlZDxOPj4oKSxcbiAgICAgICAgbzogb3BlcmF0b3JzIGFzIE9EYXRhT3BlcmF0b3JzPE4+LFxuICAgICAgICBmOiBmdW5jdGlvbnMgYXMgT0RhdGFGdW5jdGlvbnM8Tj4sXG4gICAgICAgIGU6IChjb25uZWN0b3I6IEZpbHRlckNvbm5lY3RvciA9ICdhbmQnKSA9PlxuICAgICAgICAgIG5ldyBGaWx0ZXJFeHByZXNzaW9uPE4+KHsgY29ubmVjdG9yIH0pLFxuICAgICAgfSkgYXMgRmlsdGVyRXhwcmVzc2lvbjxOPjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguYW55KGxlZnQsIGV4cCwgYWxpYXMpKTtcbiAgfVxuXG4gIGFsbDxOPihcbiAgICBsZWZ0OiBOW10sXG4gICAgb3B0cz86IChlOiB7XG4gICAgICB0OiBOO1xuICAgICAgZTogKGNvbm5lY3Rvcj86IEZpbHRlckNvbm5lY3RvcikgPT4gRmlsdGVyRXhwcmVzc2lvbjxOPjtcbiAgICAgIG86IE9EYXRhT3BlcmF0b3JzPE4+O1xuICAgICAgZjogT0RhdGFGdW5jdGlvbnM8Tj47XG4gICAgfSkgPT4gRmlsdGVyRXhwcmVzc2lvbjxOPixcbiAgICBhbGlhcz86IHN0cmluZyxcbiAgKTogRmlsdGVyRXhwcmVzc2lvbjxGPiB7XG4gICAgbGV0IGV4cCA9IHVuZGVmaW5lZDtcbiAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHAgPSBvcHRzKHtcbiAgICAgICAgdDogRmllbGRGYWN0b3J5PFJlcXVpcmVkPE4+PigpLFxuICAgICAgICBvOiBvcGVyYXRvcnMgYXMgT0RhdGFPcGVyYXRvcnM8Tj4sXG4gICAgICAgIGY6IGZ1bmN0aW9ucyBhcyBPRGF0YUZ1bmN0aW9uczxOPixcbiAgICAgICAgZTogKGNvbm5lY3RvcjogRmlsdGVyQ29ubmVjdG9yID0gJ2FuZCcpID0+XG4gICAgICAgICAgbmV3IEZpbHRlckV4cHJlc3Npb248Tj4oeyBjb25uZWN0b3IgfSksXG4gICAgICB9KSBhcyBGaWx0ZXJFeHByZXNzaW9uPE4+O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWRkKHN5bnRheC5hbGwobGVmdCwgZXhwLCBhbGlhcykpO1xuICB9XG5cbiAgY291bnQ8Tj4oXG4gICAgbGVmdDogTltdLFxuICAgIG9wdHM/OiAoZTogeyB0OiBOOyBmOiBDb3VudEZpZWxkPE4+IH0pID0+IENvdW50RXhwcmVzc2lvbjxOPixcbiAgKTogRmlsdGVyRXhwcmVzc2lvbjxGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChuZXcgQ291bnRFeHByZXNzaW9uPE4+KCkuZmllbGQobGVmdCwgb3B0cykpO1xuICB9XG5cbiAgaXNvZih0eXBlOiBzdHJpbmcpOiBGaWx0ZXJFeHByZXNzaW9uPEY+O1xuICBpc29mKGxlZnQ6IEYsIHR5cGU6IHN0cmluZyk6IEZpbHRlckV4cHJlc3Npb248Rj47XG4gIGlzb2YobGVmdDogYW55LCB0eXBlPzogc3RyaW5nKTogRmlsdGVyRXhwcmVzc2lvbjxGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguaXNvZihsZWZ0LCB0eXBlKSk7XG4gIH1cbn1cbiJdfQ==