ng-http-loader 15.0.0 → 16.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +33 -27
- package/esm2022/lib/components/abstract.loader.directive.mjs +5 -4
- package/esm2022/lib/components/ng-http-loader.component.mjs +41 -37
- package/esm2022/lib/components/sk-chasing-dots/sk-chasing-dots.component.mjs +5 -5
- package/esm2022/lib/components/sk-cube-grid/sk-cube-grid.component.mjs +5 -5
- package/esm2022/lib/components/sk-double-bounce/sk-double-bounce.component.mjs +5 -5
- package/esm2022/lib/components/sk-rotating-plane/sk-rotating-plane.component.mjs +5 -5
- package/esm2022/lib/components/sk-spinner-pulse/sk-spinner-pulse.component.mjs +5 -5
- package/esm2022/lib/components/sk-three-bounce/sk-three-bounce.component.mjs +5 -5
- package/esm2022/lib/components/sk-wandering-cubes/sk-wandering-cubes.component.mjs +5 -5
- package/esm2022/lib/components/sk-wave/sk-wave.component.mjs +5 -5
- package/esm2022/lib/ng-http-loader.module.mjs +17 -11
- package/esm2022/lib/services/pending-requests-interceptor-configurer.service.mjs +65 -0
- package/esm2022/lib/services/pending-requests-interceptor.mjs +30 -0
- package/esm2022/lib/services/spinner-visibility.service.mjs +12 -11
- package/esm2022/public_api.mjs +3 -2
- package/fesm2022/ng-http-loader.mjs +138 -127
- package/fesm2022/ng-http-loader.mjs.map +1 -1
- package/lib/components/ng-http-loader.component.d.ts +6 -6
- package/lib/components/sk-chasing-dots/sk-chasing-dots.component.d.ts +1 -1
- package/lib/components/sk-cube-grid/sk-cube-grid.component.d.ts +1 -1
- package/lib/components/sk-double-bounce/sk-double-bounce.component.d.ts +1 -1
- package/lib/components/sk-rotating-plane/sk-rotating-plane.component.d.ts +1 -1
- package/lib/components/sk-spinner-pulse/sk-spinner-pulse.component.d.ts +1 -1
- package/lib/components/sk-three-bounce/sk-three-bounce.component.d.ts +1 -1
- package/lib/components/sk-wandering-cubes/sk-wandering-cubes.component.d.ts +1 -1
- package/lib/components/sk-wave/sk-wave.component.d.ts +1 -1
- package/lib/ng-http-loader.module.d.ts +17 -11
- package/lib/services/{pending-requests-interceptor.service.d.ts → pending-requests-interceptor-configurer.service.d.ts} +11 -12
- package/lib/services/pending-requests-interceptor.d.ts +3 -0
- package/lib/services/spinner-visibility.service.d.ts +3 -3
- package/package.json +4 -2
- package/public_api.d.ts +2 -1
- package/esm2022/lib/services/pending-requests-interceptor.service.mjs +0 -93
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
3
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
4
|
-
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
5
|
-
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
6
|
-
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
7
|
-
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
8
|
-
*/
|
|
9
|
-
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
10
|
-
import { Injectable } from '@angular/core';
|
|
11
|
-
import { ReplaySubject } from 'rxjs';
|
|
12
|
-
import { finalize } from 'rxjs/operators';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
export class PendingRequestsInterceptor {
|
|
15
|
-
constructor() {
|
|
16
|
-
this._pendingRequests = 0;
|
|
17
|
-
this._pendingRequestsStatus$ = new ReplaySubject(1);
|
|
18
|
-
this._filteredUrlPatterns = [];
|
|
19
|
-
this._filteredMethods = [];
|
|
20
|
-
this._filteredHeaders = [];
|
|
21
|
-
this._forceByPass = false;
|
|
22
|
-
}
|
|
23
|
-
get pendingRequestsStatus$() {
|
|
24
|
-
return this._pendingRequestsStatus$.asObservable();
|
|
25
|
-
}
|
|
26
|
-
get pendingRequests() {
|
|
27
|
-
return this._pendingRequests;
|
|
28
|
-
}
|
|
29
|
-
get filteredUrlPatterns() {
|
|
30
|
-
return this._filteredUrlPatterns;
|
|
31
|
-
}
|
|
32
|
-
set filteredMethods(httpMethods) {
|
|
33
|
-
this._filteredMethods = httpMethods;
|
|
34
|
-
}
|
|
35
|
-
set filteredHeaders(value) {
|
|
36
|
-
this._filteredHeaders = value;
|
|
37
|
-
}
|
|
38
|
-
set forceByPass(value) {
|
|
39
|
-
this._forceByPass = value;
|
|
40
|
-
}
|
|
41
|
-
shouldBypassUrl(url) {
|
|
42
|
-
return this._filteredUrlPatterns.some(e => {
|
|
43
|
-
return e.test(url);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
shouldBypassMethod(req) {
|
|
47
|
-
return this._filteredMethods.some(e => {
|
|
48
|
-
return e.toUpperCase() === req.method.toUpperCase();
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
shouldBypassHeader(req) {
|
|
52
|
-
return this._filteredHeaders.some(e => {
|
|
53
|
-
return req.headers.has(e);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
shouldBypass(req) {
|
|
57
|
-
return this._forceByPass
|
|
58
|
-
|| this.shouldBypassUrl(req.urlWithParams)
|
|
59
|
-
|| this.shouldBypassMethod(req)
|
|
60
|
-
|| this.shouldBypassHeader(req);
|
|
61
|
-
}
|
|
62
|
-
intercept(req, next) {
|
|
63
|
-
const shouldBypass = this.shouldBypass(req);
|
|
64
|
-
if (!shouldBypass) {
|
|
65
|
-
this._pendingRequests++;
|
|
66
|
-
if (1 === this._pendingRequests) {
|
|
67
|
-
this._pendingRequestsStatus$.next(true);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return next.handle(req).pipe(finalize(() => {
|
|
71
|
-
if (!shouldBypass) {
|
|
72
|
-
this._pendingRequests--;
|
|
73
|
-
if (0 === this._pendingRequests) {
|
|
74
|
-
this._pendingRequestsStatus$.next(false);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: PendingRequestsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
80
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: PendingRequestsInterceptor, providedIn: 'root' }); }
|
|
81
|
-
}
|
|
82
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: PendingRequestsInterceptor, decorators: [{
|
|
83
|
-
type: Injectable,
|
|
84
|
-
args: [{
|
|
85
|
-
providedIn: 'root'
|
|
86
|
-
}]
|
|
87
|
-
}] });
|
|
88
|
-
export const PendingRequestsInterceptorProvider = [{
|
|
89
|
-
provide: HTTP_INTERCEPTORS,
|
|
90
|
-
useExisting: PendingRequestsInterceptor,
|
|
91
|
-
multi: true
|
|
92
|
-
}];
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1yZXF1ZXN0cy1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9wZW5kaW5nLXJlcXVlc3RzLWludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBd0QsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRyxPQUFPLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLMUMsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUtZLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztRQUN4RCx5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFDcEMscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUNoQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztLQTBFaEM7SUF4RUcsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNuQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsV0FBcUI7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsS0FBZTtRQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFTyxlQUFlLENBQUMsR0FBVztRQUMvQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQXFCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQXFCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFxQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxZQUFZO2VBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztlQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2VBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNDO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUN4QixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDZixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFFeEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM1QzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBaEZRLDBCQUEwQjtrSEFBMUIsMEJBQTBCLGNBRnZCLE1BQU07OzJGQUVULDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7O0FBb0ZELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUF1QixDQUFDO1FBQ25FLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxLQUFLLEVBQUUsSUFBSTtLQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTU1xuICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SXG4gKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVJcbiAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTLCBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXhpc3RpbmdQcm92aWRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVuZGluZ1JlcXVlc3RzSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuXG4gICAgcHJpdmF0ZSBfcGVuZGluZ1JlcXVlc3RzID0gMDtcbiAgICBwcml2YXRlIF9wZW5kaW5nUmVxdWVzdHNTdGF0dXMkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBfZmlsdGVyZWRVcmxQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcbiAgICBwcml2YXRlIF9maWx0ZXJlZE1ldGhvZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZmlsdGVyZWRIZWFkZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2ZvcmNlQnlQYXNzID0gZmFsc2U7XG5cbiAgICBnZXQgcGVuZGluZ1JlcXVlc3RzU3RhdHVzJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdSZXF1ZXN0c1N0YXR1cyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHBlbmRpbmdSZXF1ZXN0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1JlcXVlc3RzO1xuICAgIH1cblxuICAgIGdldCBmaWx0ZXJlZFVybFBhdHRlcm5zKCk6IFJlZ0V4cFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkVXJsUGF0dGVybnM7XG4gICAgfVxuXG4gICAgc2V0IGZpbHRlcmVkTWV0aG9kcyhodHRwTWV0aG9kczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyZWRNZXRob2RzID0gaHR0cE1ldGhvZHM7XG4gICAgfVxuXG4gICAgc2V0IGZpbHRlcmVkSGVhZGVycyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyZWRIZWFkZXJzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGZvcmNlQnlQYXNzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvcmNlQnlQYXNzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRCeXBhc3NVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkVXJsUGF0dGVybnMuc29tZShlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlLnRlc3QodXJsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRCeXBhc3NNZXRob2QocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZE1ldGhvZHMuc29tZShlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlLnRvVXBwZXJDYXNlKCkgPT09IHJlcS5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRCeXBhc3NIZWFkZXIocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZEhlYWRlcnMuc29tZShlID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXEuaGVhZGVycy5oYXMoZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdWxkQnlwYXNzKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yY2VCeVBhc3NcbiAgICAgICAgICAgIHx8IHRoaXMuc2hvdWxkQnlwYXNzVXJsKHJlcS51cmxXaXRoUGFyYW1zKVxuICAgICAgICAgICAgfHwgdGhpcy5zaG91bGRCeXBhc3NNZXRob2QocmVxKVxuICAgICAgICAgICAgfHwgdGhpcy5zaG91bGRCeXBhc3NIZWFkZXIocmVxKTtcbiAgICB9XG5cbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICAgICAgY29uc3Qgc2hvdWxkQnlwYXNzID0gdGhpcy5zaG91bGRCeXBhc3MocmVxKTtcblxuICAgICAgICBpZiAoIXNob3VsZEJ5cGFzcykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1JlcXVlc3RzKys7XG5cbiAgICAgICAgICAgIGlmICgxID09PSB0aGlzLl9wZW5kaW5nUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nUmVxdWVzdHNTdGF0dXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQnlwYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy0tO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0aGlzLl9wZW5kaW5nUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0c1N0YXR1cyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBlbmRpbmdSZXF1ZXN0c0ludGVyY2VwdG9yUHJvdmlkZXI6IEV4aXN0aW5nUHJvdmlkZXJbXSA9IFt7XG4gICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgdXNlRXhpc3Rpbmc6IFBlbmRpbmdSZXF1ZXN0c0ludGVyY2VwdG9yLFxuICAgIG11bHRpOiB0cnVlXG59XTtcbiJdfQ==
|