@apollo-orbit/angular
Version:
A fully-featured GraphQL client for Angular with modular state management.
157 lines • 23.4 kB
JavaScript
import { Observable } from 'rxjs';
import { toQueryResult } from './result';
export class QueryObservable extends Observable {
observableQuery;
previousData;
constructor(observableQuery, { notifyOnLoading = true, throwError = false }) {
super(subscriber => {
let subscription;
if (notifyOnLoading) {
// on calling getCurrentResult apollo client sets lastResult based on fetchPolicy
// when lastResult is present, apollo client emits value on subscription
// otherwise, it is emitted here instead
const currentResult = this.getCurrentResult();
const lastResult = observableQuery.getLastResult();
if (!lastResult) {
const { previousData } = this;
subscriber.next({ ...currentResult, previousData });
this.previousData = currentResult.data ?? previousData;
}
}
const observer = {
next: () => {
const currentResult = this.getCurrentResult();
const { previousData } = this;
subscriber.next({ ...currentResult, previousData });
this.previousData = currentResult.data ?? previousData;
},
error: error => {
subscription = undefined;
if (throwError) {
subscriber.error(error);
}
else {
const currentResult = this.getCurrentResult();
const { previousData } = this;
subscriber.next({ ...currentResult, previousData });
this.previousData = currentResult.data ?? previousData;
subscription = observableQuery.resubscribeAfterError(observer);
}
},
complete: () => {
subscription = undefined;
subscriber.complete();
}
};
subscription = observableQuery.subscribe(observer);
return () => subscription?.unsubscribe();
});
this.observableQuery = observableQuery;
}
get query() {
return this.observableQuery.query;
}
get variables() {
return this.observableQuery.variables;
}
get options() {
return this.observableQuery.options;
}
get queryId() {
return this.observableQuery.queryId;
}
get queryName() {
return this.observableQuery.queryName;
}
result() {
return this.observableQuery.result();
}
getCurrentResult(saveAsLastResult = true) {
return toQueryResult(this.observableQuery.getCurrentResult(saveAsLastResult));
}
// Compares newResult to the snapshot we took of this.lastResult when it was
// first received.
isDifferentFromLastResult(newResult, variables) {
return this.observableQuery.isDifferentFromLastResult(newResult, variables);
}
getLastResult(variablesMustMatch) {
return this.observableQuery.getLastResult(variablesMustMatch);
}
getLastError(variablesMustMatch) {
return this.observableQuery.getLastError(variablesMustMatch);
}
resetLastResults() {
this.observableQuery.resetLastResults();
}
resetQueryStoreErrors() {
this.observableQuery.resetQueryStoreErrors();
}
/**
* Update the variables of this observable query, and fetch the new results.
* This method should be preferred over `setVariables` in most use cases.
*
* @param variables: The new set of variables. If there are missing variables,
* the previous values of those variables will be used.
*/
refetch(variables) {
return this.observableQuery.refetch(variables);
}
fetchMore(fetchMoreOptions) {
return this.observableQuery.fetchMore(fetchMoreOptions);
}
subscribeToMore(options) {
const { query: document, ...rest } = options;
return this.observableQuery.subscribeToMore({ document, ...rest });
}
setOptions(newOptions) {
return this.observableQuery.setOptions(newOptions);
}
silentSetOptions(newOptions) {
this.observableQuery.silentSetOptions(newOptions);
}
/**
* Update the variables of this observable query, and fetch the new results
* if they've changed. Most users should prefer `refetch` instead of
* `setVariables` in order to to be properly notified of results even when
* they come from the cache.
*
* Note: the `next` callback will *not* fire if the variables have not changed
* or if the result is coming from cache.
*
* Note: the promise will return the old results immediately if the variables
* have not changed.
*
* Note: the promise will return null immediately if the query is not active
* (there are no subscribers).
*
* @private
*
* @param variables: The new set of variables. If there are missing variables,
* the previous values of those variables will be used.
*/
setVariables(variables) {
return this.observableQuery.setVariables(variables);
}
updateQuery(mapFn) {
return this.observableQuery.updateQuery(mapFn);
}
startPolling(pollInterval) {
this.observableQuery.startPolling(pollInterval);
}
stopPolling() {
return this.observableQuery.stopPolling();
}
reobserveAsConcast(newOptions, newNetworkStatus) {
return this.observableQuery.reobserveAsConcast(newOptions, newNetworkStatus);
}
reobserve(newOptions, newNetworkStatus) {
return this.observableQuery.reobserve(newOptions, newNetworkStatus);
}
resubscribeAfterError(...args) {
return this.observableQuery.resubscribeAfterError(...args);
}
hasObservers() {
return this.observableQuery.hasObservers();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnlPYnNlcnZhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29yZS9zcmMvcXVlcnlPYnNlcnZhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUd6QyxNQUFNLE9BQU8sZUFBdUUsU0FBUSxVQUE4QjtJQUlyRztJQUhYLFlBQVksQ0FBb0I7SUFFeEMsWUFDbUIsZUFBbUQsRUFDcEUsRUFBRSxlQUFlLEdBQUcsSUFBSSxFQUFFLFVBQVUsR0FBRyxLQUFLLEVBQTBCO1FBRXRFLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQixJQUFJLFlBQWdELENBQUM7WUFFckQsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsaUZBQWlGO2dCQUNqRix3RUFBd0U7Z0JBQ3hFLHdDQUF3QztnQkFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzlDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNoQixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO29CQUM5QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBdUM7Z0JBQ25ELElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzlDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FB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V0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVNLGtCQUFrQixDQUN2QixVQUE4RCxFQUM5RCxnQkFBZ0M7UUFFaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFTSxTQUFTLENBQ2QsVUFBOEQsRUFDOUQsZ0JBQWdDO1FBRWhDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQVlNLHFCQUFxQixDQUFDLEdBQUcsSUFBdUI7UUFDckQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsb0Vycm9yLCBBcG9sbG9RdWVyeVJlc3VsdCwgV2F0Y2hRdWVyeU9wdGlvbnMgYXMgQ29yZVdhdGNoUXVlcnlPcHRpb25zLCBGZXRjaE1vcmVRdWVyeU9wdGlvbnMsIE5ldHdvcmtTdGF0dXMsIE9ic2VydmFibGVRdWVyeSwgT3BlcmF0aW9uVmFyaWFibGVzLCBUeXBlZERvY3VtZW50Tm9kZSwgT3BlcmF0aW9uVmFyaWFibGVzIGFzIFZhcmlhYmxlcyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xyXG5pbXBvcnQgeyBDb25jYXN0LCBPYnNlcnZhYmxlU3Vic2NyaXB0aW9uLCBPYnNlcnZlciB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L3V0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdG9RdWVyeVJlc3VsdCB9IGZyb20gJy4vcmVzdWx0JztcclxuaW1wb3J0IHsgRXh0cmFXYXRjaFF1ZXJ5T3B0aW9ucywgUXVlcnlSZXN1bHQsIFN1YnNjcmliZVRvTW9yZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU9ic2VydmFibGU8VERhdGEgPSBhbnksIFRWYXJpYWJsZXMgZXh0ZW5kcyBWYXJpYWJsZXMgPSBWYXJpYWJsZXM+IGV4dGVuZHMgT2JzZXJ2YWJsZTxRdWVyeVJlc3VsdDxURGF0YT4+IHtcclxuICBwcml2YXRlIHByZXZpb3VzRGF0YTogVERhdGEgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JzZXJ2YWJsZVF1ZXJ5OiBPYnNlcnZhYmxlUXVlcnk8VERhdGEsIFRWYXJpYWJsZXM+LFxyXG4gICAgeyBub3RpZnlPbkxvYWRpbmcgPSB0cnVlLCB0aHJvd0Vycm9yID0gZmFsc2UgfTogRXh0cmFXYXRjaFF1ZXJ5T3B0aW9uc1xyXG4gICkge1xyXG4gICAgc3VwZXIoc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgIGxldCBzdWJzY3JpcHRpb246IE9ic2VydmFibGVTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBpZiAobm90aWZ5T25Mb2FkaW5nKSB7XHJcbiAgICAgICAgLy8gb24gY2FsbGluZyBnZXRDdXJyZW50UmVzdWx0IGFwb2xsbyBjbGllbnQgc2V0cyBsYXN0UmVzdWx0IGJhc2VkIG9uIGZldGNoUG9saWN5XHJcbiAgICAgICAgLy8gd2hlbiBsYXN0UmVzdWx0IGlzIHByZXNlbnQsIGFwb2xsbyBjbGllbnQgZW1pdHMgdmFsdWUgb24gc3Vic2NyaXB0aW9uXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBpdCBpcyBlbWl0dGVkIGhlcmUgaW5zdGVhZFxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXN1bHQgPSB0aGlzLmdldEN1cnJlbnRSZXN1bHQoKTtcclxuICAgICAgICBjb25zdCBsYXN0UmVzdWx0ID0gb2JzZXJ2YWJsZVF1ZXJ5LmdldExhc3RSZXN1bHQoKTtcclxuICAgICAgICBpZiAoIWxhc3RSZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnN0IHsgcHJldmlvdXNEYXRhIH0gPSB0aGlzO1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHsgLi4uY3VycmVudFJlc3VsdCwgcHJldmlvdXNEYXRhIH0pO1xyXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0RhdGEgPSBjdXJyZW50UmVzdWx0LmRhdGEgPz8gcHJldmlvdXNEYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgb2JzZXJ2ZXI6IE9ic2VydmVyPEFwb2xsb1F1ZXJ5UmVzdWx0PFREYXRhPj4gPSB7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudFJlc3VsdCA9IHRoaXMuZ2V0Q3VycmVudFJlc3VsdCgpO1xyXG4gICAgICAgICAgY29uc3QgeyBwcmV2aW91c0RhdGEgfSA9IHRoaXM7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoeyAuLi5jdXJyZW50UmVzdWx0LCBwcmV2aW91c0RhdGEgfSk7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGF0YSA9IGN1cnJlbnRSZXN1bHQuZGF0YSA/PyBwcmV2aW91c0RhdGE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgaWYgKHRocm93RXJyb3IpIHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UmVzdWx0ID0gdGhpcy5nZXRDdXJyZW50UmVzdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJldmlvdXNEYXRhIH0gPSB0aGlzO1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoeyAuLi5jdXJyZW50UmVzdWx0LCBwcmV2aW91c0RhdGEgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNEYXRhID0gY3VycmVudFJlc3VsdC5kYXRhID8/IHByZXZpb3VzRGF0YTtcclxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZVF1ZXJ5LnJlc3Vic2NyaWJlQWZ0ZXJFcnJvcihvYnNlcnZlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGVRdWVyeS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xyXG5cclxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeSgpOiBUeXBlZERvY3VtZW50Tm9kZTxURGF0YSwgVFZhcmlhYmxlcz4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2YXJpYWJsZXMoKTogVFZhcmlhYmxlcyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkudmFyaWFibGVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcHRpb25zKCk6IENvcmVXYXRjaFF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzPiB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkub3B0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnF1ZXJ5SWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5TmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnF1ZXJ5TmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN1bHQoKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxURGF0YT4+IHtcclxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVRdWVyeS5yZXN1bHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDdXJyZW50UmVzdWx0KHNhdmVBc0xhc3RSZXN1bHQgPSB0cnVlKTogUXVlcnlSZXN1bHQ8VERhdGE+IHtcclxuICAgIHJldHVybiB0b1F1ZXJ5UmVzdWx0KHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LmdldEN1cnJlbnRSZXN1bHQoc2F2ZUFzTGFzdFJlc3VsdCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcGFyZXMgbmV3UmVzdWx0IHRvIHRoZSBzbmFwc2hvdCB3ZSB0b29rIG9mIHRoaXMubGFzdFJlc3VsdCB3aGVuIGl0IHdhc1xyXG4gIC8vIGZpcnN0IHJlY2VpdmVkLlxyXG4gIHB1YmxpYyBpc0RpZmZlcmVudEZyb21MYXN0UmVzdWx0KG5ld1Jlc3VsdDogQXBvbGxvUXVlcnlSZXN1bHQ8VERhdGE+LCB2YXJpYWJsZXM/OiBUVmFyaWFibGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkuaXNEaWZmZXJlbnRGcm9tTGFzdFJlc3VsdChuZXdSZXN1bHQsIHZhcmlhYmxlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGFzdFJlc3VsdCh2YXJpYWJsZXNNdXN0TWF0Y2g/OiBib29sZWFuKTogQXBvbGxvUXVlcnlSZXN1bHQ8VERhdGE+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVRdWVyeS5nZXRMYXN0UmVzdWx0KHZhcmlhYmxlc011c3RNYXRjaCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGFzdEVycm9yKHZhcmlhYmxlc011c3RNYXRjaD86IGJvb2xlYW4pOiBBcG9sbG9FcnJvciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkuZ2V0TGFzdEVycm9yKHZhcmlhYmxlc011c3RNYXRjaCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRMYXN0UmVzdWx0cygpOiB2b2lkIHtcclxuICAgIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnJlc2V0TGFzdFJlc3VsdHMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFF1ZXJ5U3RvcmVFcnJvcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9ic2VydmFibGVRdWVyeS5yZXNldFF1ZXJ5U3RvcmVFcnJvcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgdmFyaWFibGVzIG9mIHRoaXMgb2JzZXJ2YWJsZSBxdWVyeSwgYW5kIGZldGNoIHRoZSBuZXcgcmVzdWx0cy5cclxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIgYHNldFZhcmlhYmxlc2AgaW4gbW9zdCB1c2UgY2FzZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdmFyaWFibGVzOiBUaGUgbmV3IHNldCBvZiB2YXJpYWJsZXMuIElmIHRoZXJlIGFyZSBtaXNzaW5nIHZhcmlhYmxlcyxcclxuICAgKiB0aGUgcHJldmlvdXMgdmFsdWVzIG9mIHRob3NlIHZhcmlhYmxlcyB3aWxsIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgcHVibGljIHJlZmV0Y2godmFyaWFibGVzPzogUGFydGlhbDxUVmFyaWFibGVzPik6IFByb21pc2U8QXBvbGxvUXVlcnlSZXN1bHQ8VERhdGE+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkucmVmZXRjaCh2YXJpYWJsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZldGNoTW9yZTxcclxuICAgIFRGZXRjaERhdGEgPSBURGF0YSxcclxuICAgIFRGZXRjaFZhcnMgZXh0ZW5kcyBPcGVyYXRpb25WYXJpYWJsZXMgPSBUVmFyaWFibGVzLFxyXG4gID4oXHJcbiAgICBmZXRjaE1vcmVPcHRpb25zOlxyXG4gICAgICAmIEZldGNoTW9yZVF1ZXJ5T3B0aW9uczxURmV0Y2hWYXJzLCBURmV0Y2hEYXRhPlxyXG4gICAgICAmIHtcclxuICAgICAgICB1cGRhdGVRdWVyeT86IChcclxuICAgICAgICAgIHByZXZpb3VzUXVlcnlSZXN1bHQ6IFREYXRhLFxyXG4gICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBmZXRjaE1vcmVSZXN1bHQ6IFRGZXRjaERhdGE7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlczogVEZldGNoVmFycztcclxuICAgICAgICAgIH1cclxuICAgICAgICApID0+IFREYXRhO1xyXG4gICAgICB9XHJcbiAgKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxURmV0Y2hEYXRhPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LmZldGNoTW9yZShmZXRjaE1vcmVPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdWJzY3JpYmVUb01vcmU8XHJcbiAgICBUU3Vic2NyaXB0aW9uRGF0YSA9IFREYXRhLFxyXG4gICAgVFN1YnNjcmlwdGlvblZhcmlhYmxlcyBleHRlbmRzIFZhcmlhYmxlcyA9IFRWYXJpYWJsZXNcclxuICA+KFxyXG4gICAgb3B0aW9uczogU3Vic2NyaWJlVG9Nb3JlT3B0aW9uczxcclxuICAgICAgVERhdGEsXHJcbiAgICAgIFRTdWJzY3JpcHRpb25WYXJpYWJsZXMsXHJcbiAgICAgIFRTdWJzY3JpcHRpb25EYXRhXHJcbiAgICA+XHJcbiAgKTogKCkgPT4gdm9pZCB7XHJcbiAgICBjb25zdCB7IHF1ZXJ5OiBkb2N1bWVudCwgLi4ucmVzdCB9ID0gb3B0aW9ucztcclxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVRdWVyeS5zdWJzY3JpYmVUb01vcmUoeyBkb2N1bWVudCwgLi4ucmVzdCB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRPcHRpb25zKG5ld09wdGlvbnM6IFBhcnRpYWw8Q29yZVdhdGNoUXVlcnlPcHRpb25zPFRWYXJpYWJsZXMsIFREYXRhPj4pOiBQcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFREYXRhPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnNldE9wdGlvbnMobmV3T3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2lsZW50U2V0T3B0aW9ucyhuZXdPcHRpb25zOiBQYXJ0aWFsPENvcmVXYXRjaFF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzLCBURGF0YT4+KTogdm9pZCB7XHJcbiAgICB0aGlzLm9ic2VydmFibGVRdWVyeS5zaWxlbnRTZXRPcHRpb25zKG5ld09wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB2YXJpYWJsZXMgb2YgdGhpcyBvYnNlcnZhYmxlIHF1ZXJ5LCBhbmQgZmV0Y2ggdGhlIG5ldyByZXN1bHRzXHJcbiAgICogaWYgdGhleSd2ZSBjaGFuZ2VkLiBNb3N0IHVzZXJzIHNob3VsZCBwcmVmZXIgYHJlZmV0Y2hgIGluc3RlYWQgb2ZcclxuICAgKiBgc2V0VmFyaWFibGVzYCBpbiBvcmRlciB0byB0byBiZSBwcm9wZXJseSBub3RpZmllZCBvZiByZXN1bHRzIGV2ZW4gd2hlblxyXG4gICAqIHRoZXkgY29tZSBmcm9tIHRoZSBjYWNoZS5cclxuICAgKlxyXG4gICAqIE5vdGU6IHRoZSBgbmV4dGAgY2FsbGJhY2sgd2lsbCAqbm90KiBmaXJlIGlmIHRoZSB2YXJpYWJsZXMgaGF2ZSBub3QgY2hhbmdlZFxyXG4gICAqIG9yIGlmIHRoZSByZXN1bHQgaXMgY29taW5nIGZyb20gY2FjaGUuXHJcbiAgICpcclxuICAgKiBOb3RlOiB0aGUgcHJvbWlzZSB3aWxsIHJldHVybiB0aGUgb2xkIHJlc3VsdHMgaW1tZWRpYXRlbHkgaWYgdGhlIHZhcmlhYmxlc1xyXG4gICAqIGhhdmUgbm90IGNoYW5nZWQuXHJcbiAgICpcclxuICAgKiBOb3RlOiB0aGUgcHJvbWlzZSB3aWxsIHJldHVybiBudWxsIGltbWVkaWF0ZWx5IGlmIHRoZSBxdWVyeSBpcyBub3QgYWN0aXZlXHJcbiAgICogKHRoZXJlIGFyZSBubyBzdWJzY3JpYmVycykuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhcmlhYmxlczogVGhlIG5ldyBzZXQgb2YgdmFyaWFibGVzLiBJZiB0aGVyZSBhcmUgbWlzc2luZyB2YXJpYWJsZXMsXHJcbiAgICogdGhlIHByZXZpb3VzIHZhbHVlcyBvZiB0aG9zZSB2YXJpYWJsZXMgd2lsbCBiZSB1c2VkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBUVmFyaWFibGVzKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxURGF0YT4gfCB2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUXVlcnk8VFZhcnMgZXh0ZW5kcyBWYXJpYWJsZXMgPSBUVmFyaWFibGVzPihcclxuICAgIG1hcEZuOiAoXHJcbiAgICAgIHByZXZpb3VzUXVlcnlSZXN1bHQ6IFREYXRhLFxyXG4gICAgICBvcHRpb25zOiBQaWNrPENvcmVXYXRjaFF1ZXJ5T3B0aW9uczxUVmFycywgVERhdGE+LCAndmFyaWFibGVzJz5cclxuICAgICkgPT4gVERhdGFcclxuICApOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVRdWVyeS51cGRhdGVRdWVyeShtYXBGbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRQb2xsaW5nKHBvbGxJbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLm9ic2VydmFibGVRdWVyeS5zdGFydFBvbGxpbmcocG9sbEludGVydmFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdG9wUG9sbGluZygpOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVRdWVyeS5zdG9wUG9sbGluZygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlb2JzZXJ2ZUFzQ29uY2FzdChcclxuICAgIG5ld09wdGlvbnM/OiBQYXJ0aWFsPENvcmVXYXRjaFF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzLCBURGF0YT4+LFxyXG4gICAgbmV3TmV0d29ya1N0YXR1cz86IE5ldHdvcmtTdGF0dXNcclxuICApOiBDb25jYXN0PEFwb2xsb1F1ZXJ5UmVzdWx0PFREYXRhPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnJlb2JzZXJ2ZUFzQ29uY2FzdChuZXdPcHRpb25zLCBuZXdOZXR3b3JrU3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW9ic2VydmUoXHJcbiAgICBuZXdPcHRpb25zPzogUGFydGlhbDxDb3JlV2F0Y2hRdWVyeU9wdGlvbnM8VFZhcmlhYmxlcywgVERhdGE+PixcclxuICAgIG5ld05ldHdvcmtTdGF0dXM/OiBOZXR3b3JrU3RhdHVzXHJcbiAgKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxURGF0YT4+IHtcclxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVRdWVyeS5yZW9ic2VydmUobmV3T3B0aW9ucywgbmV3TmV0d29ya1N0YXR1cyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdWJzY3JpYmVBZnRlckVycm9yKFxyXG4gICAgb25OZXh0OiAodmFsdWU6IEFwb2xsb1F1ZXJ5UmVzdWx0PFREYXRhPikgPT4gdm9pZCxcclxuICAgIG9uRXJyb3I/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkXHJcbiAgKTogT2JzZXJ2YWJsZVN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHVibGljIHJlc3Vic2NyaWJlQWZ0ZXJFcnJvcihcclxuICAgIG9ic2VydmVyOiBPYnNlcnZlcjxBcG9sbG9RdWVyeVJlc3VsdDxURGF0YT4+XHJcbiAgKTogT2JzZXJ2YWJsZVN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHVibGljIHJlc3Vic2NyaWJlQWZ0ZXJFcnJvciguLi5hcmdzOiBbYW55LCBhbnk/LCBhbnk/XSk6IE9ic2VydmFibGVTdWJzY3JpcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZVF1ZXJ5LnJlc3Vic2NyaWJlQWZ0ZXJFcnJvciguLi5hcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNPYnNlcnZlcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlUXVlcnkuaGFzT2JzZXJ2ZXJzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==