simplyfire
Version:
A lightweight firestore api for firebase cloud functions & Angular.
91 lines • 12.8 kB
JavaScript
export class QueryBuilder {
constructor() {
this._where = [];
this._orderBy = [];
this._leftJoins = [];
}
get joins() {
return this._leftJoins;
}
where(...where) {
this._where.push(where);
return this;
}
orderBy(...orderBy) {
this._orderBy.push(orderBy);
return this;
}
leftJoin(...leftJoin) {
this._leftJoins.push(leftJoin);
}
limit(limit) {
this._limit = limit;
return this;
}
limitToLast(limitToLast) {
this._limitToLast = limitToLast;
return this;
}
startAt(...startAt) {
this._startAt = startAt;
return this;
}
startAfter(...startAfter) {
this._startAfter = startAfter;
return this;
}
endAt(...endAt) {
this._endAt = endAt;
return this;
}
endBefore(...endBefore) {
this._endBefore = endBefore;
return this;
}
// Still have to use <any> type due to most interfaces of @google-cloud/firestore
// are not compatible with @firebase/firestore's interfaces.
exec(ref, queryOps) {
if (typeof window === 'undefined') {
return this.execQueryForCloud(ref);
}
if (!queryOps) {
throw Error('invalid arguments');
}
const { query, where, orderBy, limit, limitToLast, startAt, startAfter, endAt, endBefore } = queryOps;
const queryConstraints = [
...this._where.map((w) => where(...w)),
...this._orderBy.map((o) => orderBy(...o)),
...(this._limit ? [limit(this._limit)] : []),
...(this._limitToLast ? [limitToLast(this._limitToLast)] : []),
...(this._startAt?.every((i) => !!i) ? [startAt(...this._startAt)] : []),
...(this._startAfter?.every((i) => !!i) ? [startAfter(...this._startAfter)] : []),
...(this._endAt?.every((i) => !!i) ? [endAt(...this._endAt)] : []),
...(this._endBefore?.every((i) => !!i) ? [endBefore(...this._endBefore)] : [])
];
return query(ref, ...queryConstraints);
}
execQueryForCloud(ref) {
let query = this._where.reduce((q, wh) => q.where(...wh), ref);
query = this._orderBy.reduce((q, ob) => q.orderBy(...ob), query);
if (this._limit) {
query = query.limit(this._limit);
}
if (this._limitToLast) {
query = query.limitToLast(this._limitToLast);
}
if (this._startAt) {
query = query.startAt(this._startAt);
}
if (this._startAfter) {
query = query.startAfter(this._startAfter);
}
if (this._endAt) {
query = query.endAt(this._endAt);
}
if (this._endBefore) {
query = query.endBefore(this._endBefore);
}
return query;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd4L2RiL1F1ZXJ5QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFDVSxXQUFNLEdBQWlCLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQW1CLEVBQUUsQ0FBQztRQUM5QixlQUFVLEdBQW9CLEVBQUUsQ0FBQztJQW1IM0MsQ0FBQztJQTNHQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLEtBQWlCO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLE9BQXFCO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsV0FBbUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsT0FBb0I7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQUcsVUFBdUI7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsS0FBa0I7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUcsU0FBc0I7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLDREQUE0RDtJQUM1RCxJQUFJLENBQUMsR0FBNEMsRUFBRSxRQUFpQztRQUNsRixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRXRHLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUMvRSxDQUFDO1FBRUYsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBc0M7UUFDOUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDMUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29sbGVjdGlvblJlZmVyZW5jZSxcbiAgRG9jdW1lbnREYXRhLFxuICBEb2N1bWVudFNuYXBzaG90LFxuICBGaWVsZFBhdGgsXG4gIE9yZGVyQnlEaXJlY3Rpb24sXG4gIFF1ZXJ5LFxuICBXaGVyZUZpbHRlck9wXG59IGZyb20gJ0BmaXJlYmFzZS9maXJlc3RvcmUtdHlwZXMnO1xuXG50eXBlIFF1ZXJ5V2hlcmUgPSBbZmllbGRQYXRoOiBzdHJpbmcgfCBGaWVsZFBhdGgsIG9wU3RyOiBXaGVyZUZpbHRlck9wLCB2YWx1ZTogdW5rbm93bl07XG50eXBlIFF1ZXJ5T3JkZXJCeSA9IFtmaWVsZFBhdGg6IHN0cmluZyB8IEZpZWxkUGF0aCwgZGlyZWN0aW9uU3RyPzogT3JkZXJCeURpcmVjdGlvbl07XG50eXBlIFF1ZXJ5TGVmdEpvaW4gPSBbaWRGaWVsZDogc3RyaW5nLCBjb2xsZWN0aW9uOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmddO1xudHlwZSBRdWVyeUN1cnNvciA9IFtzbmFwc2hvdDogRG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPl0gfCB1bmtub3duW107XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXIge1xuICBwcml2YXRlIF93aGVyZTogUXVlcnlXaGVyZVtdID0gW107XG4gIHByaXZhdGUgX29yZGVyQnk6IFF1ZXJ5T3JkZXJCeVtdID0gW107XG4gIHByaXZhdGUgX2xlZnRKb2luczogUXVlcnlMZWZ0Sm9pbltdID0gW107XG4gIHByaXZhdGUgX2xpbWl0PzogbnVtYmVyO1xuICBwcml2YXRlIF9saW1pdFRvTGFzdD86IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRBdD86IFF1ZXJ5Q3Vyc29yO1xuICBwcml2YXRlIF9zdGFydEFmdGVyPzogUXVlcnlDdXJzb3I7XG4gIHByaXZhdGUgX2VuZEF0PzogUXVlcnlDdXJzb3I7XG4gIHByaXZhdGUgX2VuZEJlZm9yZT86IFF1ZXJ5Q3Vyc29yO1xuXG4gIGdldCBqb2lucygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGVmdEpvaW5zO1xuICB9XG5cbiAgd2hlcmUoLi4ud2hlcmU6IFF1ZXJ5V2hlcmUpIHtcbiAgICB0aGlzLl93aGVyZS5wdXNoKHdoZXJlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JkZXJCeSguLi5vcmRlckJ5OiBRdWVyeU9yZGVyQnkpIHtcbiAgICB0aGlzLl9vcmRlckJ5LnB1c2gob3JkZXJCeSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxlZnRKb2luKC4uLmxlZnRKb2luOiBRdWVyeUxlZnRKb2luKSB7XG4gICAgdGhpcy5fbGVmdEpvaW5zLnB1c2gobGVmdEpvaW4pO1xuICB9XG5cbiAgbGltaXQobGltaXQ6IG51bWJlcikge1xuICAgIHRoaXMuX2xpbWl0ID0gbGltaXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaW1pdFRvTGFzdChsaW1pdFRvTGFzdDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGltaXRUb0xhc3QgPSBsaW1pdFRvTGFzdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXJ0QXQoLi4uc3RhcnRBdDogUXVlcnlDdXJzb3IpIHtcbiAgICB0aGlzLl9zdGFydEF0ID0gc3RhcnRBdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXJ0QWZ0ZXIoLi4uc3RhcnRBZnRlcjogUXVlcnlDdXJzb3IpIHtcbiAgICB0aGlzLl9zdGFydEFmdGVyID0gc3RhcnRBZnRlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVuZEF0KC4uLmVuZEF0OiBRdWVyeUN1cnNvcikge1xuICAgIHRoaXMuX2VuZEF0ID0gZW5kQXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBlbmRCZWZvcmUoLi4uZW5kQmVmb3JlOiBRdWVyeUN1cnNvcikge1xuICAgIHRoaXMuX2VuZEJlZm9yZSA9IGVuZEJlZm9yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFN0aWxsIGhhdmUgdG8gdXNlIDxhbnk+IHR5cGUgZHVlIHRvIG1vc3QgaW50ZXJmYWNlcyBvZiBAZ29vZ2xlLWNsb3VkL2ZpcmVzdG9yZVxuICAvLyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBAZmlyZWJhc2UvZmlyZXN0b3JlJ3MgaW50ZXJmYWNlcy5cbiAgZXhlYyhyZWY6IENvbGxlY3Rpb25SZWZlcmVuY2U8RG9jdW1lbnREYXRhPiB8IGFueSwgcXVlcnlPcHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogUXVlcnk8RG9jdW1lbnREYXRhPiB8IGFueSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjUXVlcnlGb3JDbG91ZChyZWYpO1xuICAgIH1cblxuICAgIGlmICghcXVlcnlPcHMpIHtcbiAgICAgIHRocm93IEVycm9yKCdpbnZhbGlkIGFyZ3VtZW50cycpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcXVlcnksIHdoZXJlLCBvcmRlckJ5LCBsaW1pdCwgbGltaXRUb0xhc3QsIHN0YXJ0QXQsIHN0YXJ0QWZ0ZXIsIGVuZEF0LCBlbmRCZWZvcmUgfSA9IHF1ZXJ5T3BzO1xuXG4gICAgY29uc3QgcXVlcnlDb25zdHJhaW50cyA9IFtcbiAgICAgIC4uLnRoaXMuX3doZXJlLm1hcCgodykgPT4gd2hlcmUoLi4udykpLFxuICAgICAgLi4udGhpcy5fb3JkZXJCeS5tYXAoKG8pID0+IG9yZGVyQnkoLi4ubykpLFxuICAgICAgLi4uKHRoaXMuX2xpbWl0ID8gW2xpbWl0KHRoaXMuX2xpbWl0KV0gOiBbXSksXG4gICAgICAuLi4odGhpcy5fbGltaXRUb0xhc3QgPyBbbGltaXRUb0xhc3QodGhpcy5fbGltaXRUb0xhc3QpXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9zdGFydEF0Py5ldmVyeSgoaSkgPT4gISFpKSA/IFtzdGFydEF0KC4uLnRoaXMuX3N0YXJ0QXQpXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9zdGFydEFmdGVyPy5ldmVyeSgoaSkgPT4gISFpKSA/IFtzdGFydEFmdGVyKC4uLnRoaXMuX3N0YXJ0QWZ0ZXIpXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9lbmRBdD8uZXZlcnkoKGkpID0+ICEhaSkgPyBbZW5kQXQoLi4udGhpcy5fZW5kQXQpXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9lbmRCZWZvcmU/LmV2ZXJ5KChpKSA9PiAhIWkpID8gW2VuZEJlZm9yZSguLi50aGlzLl9lbmRCZWZvcmUpXSA6IFtdKVxuICAgIF07XG5cbiAgICByZXR1cm4gcXVlcnkocmVmLCAuLi5xdWVyeUNvbnN0cmFpbnRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY1F1ZXJ5Rm9yQ2xvdWQocmVmOiBDb2xsZWN0aW9uUmVmZXJlbmNlPERvY3VtZW50RGF0YT4pOiBRdWVyeTxEb2N1bWVudERhdGE+IHtcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl93aGVyZS5yZWR1Y2UoKHEsIHdoKSA9PiBxLndoZXJlKC4uLndoKSwgcmVmKTtcbiAgICBxdWVyeSA9IHRoaXMuX29yZGVyQnkucmVkdWNlKChxLCBvYikgPT4gcS5vcmRlckJ5KC4uLm9iKSwgcXVlcnkpO1xuXG4gICAgaWYgKHRoaXMuX2xpbWl0KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KHRoaXMuX2xpbWl0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGltaXRUb0xhc3QpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXRUb0xhc3QodGhpcy5fbGltaXRUb0xhc3QpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGFydEF0KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5LnN0YXJ0QXQodGhpcy5fc3RhcnRBdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXJ0QWZ0ZXIpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RhcnRBZnRlcih0aGlzLl9zdGFydEFmdGVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZW5kQXQpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5kQXQodGhpcy5fZW5kQXQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9lbmRCZWZvcmUpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5kQmVmb3JlKHRoaXMuX2VuZEJlZm9yZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG4iXX0=