zek 14.2.60 → 14.2.62

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9tb2RlbHMvbG9naW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhcHRjaGEgfSBmcm9tICcuL2NhcHRjaGEubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dpbkJhc2Uge1xyXG4gICAgaWQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgdXNlck5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcm9sZXM/OiBzdHJpbmdbXSB8IG51bGw7XHJcbiAgICBwZXJtaXNzaW9ucz86IHsgW2lkOiBudW1iZXJdOiBudW1iZXI7IH0gfCBudWxsO1xyXG4gICAgdG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGxhc3ROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGZ1bGxOYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHBvc2l0aW9uPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGNvbXBhbnk/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Ub2tlbiBleHRlbmRzIExvZ2luQmFzZSB7XHJcbiAgICBleHBpcmVkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHJlZnJlc2hUb2tlblRpbWU/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Vc2VyIGV4dGVuZHMgTG9naW5CYXNlIHtcclxuICAgIGV4cGlyZWQ6IERhdGUgfCBudWxsO1xyXG4gICAgcmVmcmVzaFRva2VuVGltZTogRGF0ZSB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9naW4gZXh0ZW5kcyBDYXB0Y2hhIHtcclxuICAgIHVzZXJOYW1lPzogc3RyaW5nO1xyXG4gICAgcmVtZW1iZXJNZT86IGJvb2xlYW47XHJcbiAgICBwYXNzd29yZD86IHN0cmluZztcclxufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9tb2RlbHMvbG9naW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhcHRjaGEgfSBmcm9tICcuL2NhcHRjaGEubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dpbkJhc2Uge1xyXG4gICAgaWQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgdXNlck5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcm9sZXM/OiBzdHJpbmdbXSB8IG51bGw7XHJcbiAgICBwZXJtaXNzaW9ucz86IHsgW2lkOiBudW1iZXJdOiBudW1iZXI7IH0gfCBudWxsO1xyXG4gICAgdG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGxhc3ROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGZ1bGxOYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHBvc2l0aW9uPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGNvbXBhbnk/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Ub2tlbiBleHRlbmRzIExvZ2luQmFzZSB7XHJcbiAgICBleHBpcmVkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHJlZnJlc2hUb2tlblRpbWU/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Vc2VyIGV4dGVuZHMgTG9naW5CYXNlIHtcclxuICAgIGV4cGlyZWQ/OiBEYXRlIHwgbnVsbDtcclxuICAgIHJlZnJlc2hUb2tlblRpbWU/OiBEYXRlIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dpbiBleHRlbmRzIENhcHRjaGEge1xyXG4gICAgdXNlck5hbWU/OiBzdHJpbmc7XHJcbiAgICByZW1lbWJlck1lPzogYm9vbGVhbjtcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG59Il19
@@ -1,12 +1,11 @@
1
1
  import { Injectable, } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { DateHelper, StorageHelper } from '../utils';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
+ import { Convert, DateHelper, StorageHelper } from '../utils';
4
4
  import { BitwiseHelper } from '../utils/bitwise-helper';
5
5
  import * as i0 from "@angular/core";
6
6
  export class AuthService {
7
7
  constructor() {
8
8
  this._isInitialized = false;
9
- this._subject = new BehaviorSubject(false); //todo check if need BehaviorSubject
10
9
  this._oldValueIsAuthenticated = false;
11
10
  this._user = null;
12
11
  }
@@ -14,25 +13,45 @@ export class AuthService {
14
13
  if (!this._isInitialized) {
15
14
  let tmp = StorageHelper.get('login');
16
15
  if (tmp) {
16
+ // let user:LoginUser = {
17
+ // id: +tmp.id,
18
+ // expired: DateHelper.parseDate(tmp.expired)
19
+ // }
20
+ tmp.id = Convert.parseNumber(tmp.id);
17
21
  tmp.expired = DateHelper.parseDate(tmp.expired);
18
22
  tmp.refreshTokenTime = DateHelper.parseDate(tmp.refreshTokenTime);
19
23
  }
20
24
  this._user = tmp;
21
25
  this._isInitialized = true;
26
+ this._starRefreshTokenTimer();
22
27
  }
23
28
  return this._user;
24
29
  }
25
- // private _expired: Date | null = null;
26
- // private _refreshTokenExpired: Date | null = null;
30
+ _starRefreshTokenTimer() {
31
+ this._stopRefreshTokenTimer();
32
+ let user = this.user;
33
+ if (user && user.refreshTokenTime) {
34
+ const timeout = user.refreshTokenTime.getTime() - Date.now(); // - (60 * 1000);
35
+ this._refreshTokenTimeout = setTimeout(() => {
36
+ if (this._onRefreshTokenSubject) {
37
+ this._onRefreshTokenSubject.next();
38
+ }
39
+ }, timeout);
40
+ }
41
+ }
42
+ _stopRefreshTokenTimer() {
43
+ if (typeof this._refreshTokenTimeout === 'number') {
44
+ clearTimeout(this._refreshTokenTimeout);
45
+ }
46
+ }
27
47
  isAuthenticated() {
28
48
  let expired = this.getExpired() || new Date(0);
29
49
  const newValue = new Date() < expired;
30
- if (this._oldValueIsAuthenticated != newValue) {
50
+ if (this._oldValueIsAuthenticated !== newValue) {
31
51
  this._oldValueIsAuthenticated = newValue;
32
- if (this.onSignedInSubject) {
33
- this.onSignedInSubject.next(newValue);
52
+ if (this._onSignedInSubject) {
53
+ this._onSignedInSubject.next(newValue);
34
54
  }
35
- this._subject.next(newValue);
36
55
  //if user is signed in and expired we need to logout (remove from localStorage)
37
56
  if (!newValue) {
38
57
  this.logout();
@@ -41,41 +60,41 @@ export class AuthService {
41
60
  }
42
61
  return newValue;
43
62
  }
44
- /**
45
- * @deprecated The method should not be used. please use onSignedIn
46
- */
47
- isSignedIn() {
48
- return this._subject.asObservable();
49
- }
50
63
  get onSignedIn() {
51
- if (!this.onSignedInSubject) {
52
- this.onSignedInSubject = new BehaviorSubject(false);
53
- this.onSignedInObservable = this.onSignedInSubject.asObservable();
64
+ if (!this._onSignedInSubject) {
65
+ this._onSignedInSubject = new BehaviorSubject(false);
66
+ this._onSignedInObservable = this._onSignedInSubject.asObservable();
67
+ }
68
+ if (!this._onSignedInObservable)
69
+ throw new Error("_onExecuteObservable is undefined");
70
+ return this._onSignedInObservable;
71
+ }
72
+ get onRefreshToken() {
73
+ if (!this._onRefreshTokenSubject) {
74
+ this._onRefreshTokenSubject = new Subject();
75
+ this._onRefreshTokenObservable = this._onRefreshTokenSubject.asObservable();
54
76
  }
55
- if (!this.onSignedInObservable)
56
- throw new Error("onExecuteObservable is undefined");
57
- return this.onSignedInObservable;
77
+ if (!this._onRefreshTokenObservable)
78
+ throw new Error("onRefreshTokenObservable is undefined");
79
+ return this._onRefreshTokenObservable;
58
80
  }
59
81
  login(user) {
60
82
  if (user) {
83
+ user.id = Convert.parseNumber(user.id);
84
+ user.expired = DateHelper.parseDate(user.expired);
85
+ user.refreshTokenTime = DateHelper.parseDate(user.refreshTokenTime);
61
86
  if (Array.isArray(user.roles)) {
62
87
  user.roles = user.roles.map(function (e) { return e.toUpperCase(); });
63
88
  }
64
89
  }
65
90
  StorageHelper.set('login', user);
66
91
  this._user = null;
67
- this._isInitialized = false;
68
- this.isAuthenticated(); //this method need to execute subject.next();
92
+ this._isInitialized = false; //user get method will init user
93
+ this.isAuthenticated(); //this method need to execute subject.next();
69
94
  }
70
95
  logout() {
71
96
  this.login(null);
72
97
  }
73
- // getUser(): LoginToken | null {
74
- // if (!this.model) {
75
- // this.model = StorageHelper.get('login');
76
- // }
77
- // return this.model;
78
- // }
79
98
  getExpired() {
80
99
  let user = this.user;
81
100
  if (user) {
@@ -165,4 +184,4 @@ AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version:
165
184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AuthService, decorators: [{
166
185
  type: Injectable
167
186
  }] });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBdUIsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUd4RCxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVZLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQyxDQUFBLG9DQUFvQztRQUNuRiw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFHMUMsVUFBSyxHQUFxQixJQUFJLENBQUM7S0E2TDFDO0lBNUxHLElBQVcsSUFBSTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsR0FBRyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsR0FBRyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDckU7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFD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QUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLEtBQUssRUFBRTtvQkFDUCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxhQUFhO3dCQUNiLE9BQU8sSUFBSSxDQUFDO2lCQUNuQjthQUNKO1NBQ0o7YUFBTTtZQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxLQUFLO29CQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ25CO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsaUJBQWlCLENBQUMsSUFBUztRQUN2Qix1REFBdUQ7UUFDdkQsbUNBQW1DO1FBQ25DLDhDQUE4QztRQUU5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5DLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkQsb0NBQW9DO1FBQ3BDLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7O3dHQWxNUSxXQUFXOzRHQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBLZXlQYWlyLCBMb2dpblRva2VuLCBMb2dpblVzZXIgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEYXRlSGVscGVyLCBTdG9yYWdlSGVscGVyIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBCaXR3aXNlSGVscGVyIH0gZnJvbSAnLi4vdXRpbHMvYml0d2lzZS1oZWxwZXInO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpOy8vdG9kbyBjaGVjayBpZiBuZWVkIEJlaGF2aW9yU3ViamVjdFxyXG4gICAgcHJpdmF0ZSBfb2xkVmFsdWVJc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfdXNlcjogTG9naW5Vc2VyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgZ2V0IHVzZXIoKTogTG9naW5Vc2VyIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGxldCB0bXAgPSBTdG9yYWdlSGVscGVyLmdldCgnbG9naW4nKTtcclxuICAgICAgICAgICAgaWYgKHRtcCkge1xyXG4gICAgICAgICAgICAgICAgdG1wLmV4cGlyZWQgPSBEYXRlSGVscGVyLnBhcnNlRGF0ZSh0bXAuZXhwaXJlZCk7XHJcbiAgICAgICAgICAgICAgICB0bXAucmVmcmVzaFRva2VuVGltZSA9IERhdGVIZWxwZXIucGFyc2VEYXRlKHRtcC5yZWZyZXNoVG9rZW5UaW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl91c2VyID0gdG1wO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XHJcbiAgICB9XHJcbiAgICBcclxuXHJcblxyXG4gICAgLy8gcHJpdmF0ZSBfZXhwaXJlZDogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgLy8gcHJpdmF0ZSBfcmVmcmVzaFRva2VuRXhwaXJlZDogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgZXhwaXJlZCA9IHRoaXMuZ2V0RXhwaXJlZCgpIHx8IG5ldyBEYXRlKDApO1xyXG5cclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBEYXRlKCkgPCBleHBpcmVkO1xyXG4gICAgICAgIGlmICh0aGlzLl9vbGRWYWx1ZUlzQXV0aGVudGljYXRlZCAhPSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbGRWYWx1ZUlzQXV0aGVudGljYXRlZCA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub25TaWduZWRJblN1YmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TaWduZWRJblN1YmplY3QubmV4dChuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KG5ld1ZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vaWYgdXNlciBpcyBzaWduZWQgaW4gYW5kIGV4cGlyZWQgd2UgbmVlZCB0byBsb2dvdXQgKHJlbW92ZSBmcm9tIGxvY2FsU3RvcmFnZSlcclxuICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuIHBsZWFzZSB1c2Ugb25TaWduZWRJblxyXG4gICAgKi9cclxuICAgIGlzU2lnbmVkSW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNpZ25lZEluU3ViamVjdD86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjsvL0JlaGF2aW9yU3ViamVjdCBpcyBmb3IgaW5pdGlhbCBmaXJ0IHZhbHVlID0gZmFsc2VcclxuICAgIHByaXZhdGUgb25TaWduZWRJbk9ic2VydmFibGU/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgcHVibGljIGdldCBvblNpZ25lZEluKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGlmICghdGhpcy5vblNpZ25lZEluU3ViamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2lnbmVkSW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWduZWRJbk9ic2VydmFibGUgPSB0aGlzLm9uU2lnbmVkSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm9uU2lnbmVkSW5PYnNlcnZhYmxlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvbkV4ZWN1dGVPYnNlcnZhYmxlIGlzIHVuZGVmaW5lZFwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25TaWduZWRJbk9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxvZ2luKHVzZXI6IExvZ2luVG9rZW4gfCBudWxsKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXNlci5yb2xlcykpIHtcclxuICAgICAgICAgICAgICAgIHVzZXIucm9sZXMgPSB1c2VyLnJvbGVzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS50b1VwcGVyQ2FzZSgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgU3RvcmFnZUhlbHBlci5zZXQoJ2xvZ2luJywgdXNlcik7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkKCk7Ly90aGlzIG1ldGhvZCBuZWVkIHRvIGV4ZWN1dGUgc3ViamVjdC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dpbihudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXRVc2VyKCk6IExvZ2luVG9rZW4gfCBudWxsIHtcclxuICAgIC8vICAgICBpZiAoIXRoaXMubW9kZWwpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5tb2RlbCA9IFN0b3JhZ2VIZWxwZXIuZ2V0KCdsb2dpbicpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gdGhpcy5tb2RlbDtcclxuICAgIC8vIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0RXhwaXJlZCgpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IHVzZXIgPSB0aGlzLnVzZXI7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVzZXIuZXhwaXJlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRSZWZyZXNoVG9rZW5FeHBpcmVkKCk6IERhdGUgfCBudWxsIHtcclxuICAgICAgICBsZXQgdXNlciA9IHRoaXMudXNlcjtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlci5yZWZyZXNoVG9rZW5UaW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIGlzSW5Sb2xlKGFsbG93ZWRSb2xlczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIC8vICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBhbGxvd2VkUm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgY29uc3QgdG1wID0gdGhpcy5nZXRVc2VyKCk7XHJcbiAgICAvLyAgICAgY29uc3Qgcm9sZXMgPSB0bXAgPyB0bXAucm9sZXMgOiBudWxsO1xyXG4gICAgLy8gICAgIGlmICghcm9sZXMgfHwgcm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIGxldCBpc0luUm9sZSA9IGFsbG93ZWRSb2xlcy5zb21lKHJvbGUgPT4gcm9sZXMuaW5kZXhPZihyb2xlKSAhPT0gLTEpO1xyXG4gICAgLy8gICAgIHJldHVybiBpc0luUm9sZTtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uPzogS2V5UGFpcjxudW1iZXIsIG51bWJlcj4gfCBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGtleSA9IDA7XHJcbiAgICAgICAgbGV0IHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHBlcm1pc3Npb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGtleSA9ICtwZXJtaXNzaW9uO1xyXG4gICAgICAgIH0vLyBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwZXJtaXNzaW9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb24ua2V5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBwZXJtaXNzaW9uLmtleTtcclxuICAgICAgICAgICAgdmFsdWUgPSBwZXJtaXNzaW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMoW2tleV0sIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzUGVybWlzc2lvbnMocGVybWlzc2lvbnM/OiBBcnJheTxudW1iZXI+LCB2YWx1ZT86IG51bWJlciB8IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXBlcm1pc3Npb25zIHx8IHBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXI7XHJcbiAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlciA/IHVzZXIucGVybWlzc2lvbnMgOiBudWxsO1xyXG4gICAgICAgIGlmICghdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGVybWlzc2lvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSB1c2VyUGVybWlzc2lvbnNbcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGVybWlzc2lvbiA9IEJpdHdpc2VIZWxwZXIuaGFzRmxhZyhmb3VuZCwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNQZXJtaXNzaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVybWlzc2lvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwZXJtaXNzaW9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IHVzZXJQZXJtaXNzaW9uc1twXTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoYXNEYXRhUGVybWlzc2lvbihkYXRhOiBhbnkpIHtcclxuICAgICAgICAvL2lmIChkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYWxsb3dlZFJvbGVzID0gZGF0YS5yb2xlcztcclxuICAgICAgICAvLyBsZXQgaXNJblJvbGUgPSB0aGlzLmlzSW5Sb2xlKGFsbG93ZWRSb2xlcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBkYXRhLnBlcm1pc3Npb247XHJcblxyXG4gICAgICAgIGxldCBoYXNQZXJtaXNzaW9uID0gdGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gaXNJblJvbGUgJiYgaGFzUGVybWlzc2lvbjtcclxuICAgICAgICByZXR1cm4gaGFzUGVybWlzc2lvbjtcclxuICAgIH1cclxufSJdfQ==
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQWdCLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBR3hELE1BQU0sT0FBTyxXQUFXO0lBRHhCO1FBRVksbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBQzFDLFVBQUssR0FBcUIsSUFBSSxDQUFDO0tBOE4xQztJQTFORyxJQUFJLElBQUk7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN0QixJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLElBQUksR0FBRyxFQUFFO2dCQUNMLHlCQUF5QjtnQkFDekIsbUJBQW1CO2dCQUNuQixpREFBaUQ7Z0JBQ2pELElBQUk7Z0JBQ0osR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsR0FBRyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsR0FBRyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDckU7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcs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SyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLEtBQUssRUFBRTtvQkFDUCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxhQUFhO3dCQUNiLE9BQU8sSUFBSSxDQUFDO2lCQUNuQjthQUNKO1NBQ0o7YUFBTTtZQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxLQUFLO29CQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ25CO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsaUJBQWlCLENBQUMsSUFBUztRQUN2Qix1REFBdUQ7UUFDdkQsbUNBQW1DO1FBQ25DLDhDQUE4QztRQUU5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5DLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkQsb0NBQW9DO1FBQ3BDLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7O3dHQWhPUSxXQUFXOzRHQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBLZXlQYWlyLCBMb2dpblRva2VuLCBMb2dpblVzZXIgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb252ZXJ0LCBEYXRlSGVscGVyLCBPYmplY3RIZWxwZXIsIFN0b3JhZ2VIZWxwZXIgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEJpdHdpc2VIZWxwZXIgfSBmcm9tICcuLi91dGlscy9iaXR3aXNlLWhlbHBlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9vbGRWYWx1ZUlzQXV0aGVudGljYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfdXNlcjogTG9naW5Vc2VyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuXHJcbiAgICBnZXQgdXNlcigpOiBMb2dpblVzZXIgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgbGV0IHRtcCA9IFN0b3JhZ2VIZWxwZXIuZ2V0KCdsb2dpbicpO1xyXG4gICAgICAgICAgICBpZiAodG1wKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgdXNlcjpMb2dpblVzZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgaWQ6ICt0bXAuaWQsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwaXJlZDogRGF0ZUhlbHBlci5wYXJzZURhdGUodG1wLmV4cGlyZWQpXHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICB0bXAuaWQgPSBDb252ZXJ0LnBhcnNlTnVtYmVyKHRtcC5pZCk7XHJcbiAgICAgICAgICAgICAgICB0bXAuZXhwaXJlZCA9IERhdGVIZWxwZXIucGFyc2VEYXRlKHRtcC5leHBpcmVkKTtcclxuICAgICAgICAgICAgICAgIHRtcC5yZWZyZXNoVG9rZW5UaW1lID0gRGF0ZUhlbHBlci5wYXJzZURhdGUodG1wLnJlZnJlc2hUb2tlblRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXIgPSB0bXA7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFyUmVmcmVzaFRva2VuVGltZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRva2VuVGltZW91dDogYW55O1xyXG4gICAgcHJpdmF0ZSBfc3RhclJlZnJlc2hUb2tlblRpbWVyKCkge1xyXG4gICAgICAgIHRoaXMuX3N0b3BSZWZyZXNoVG9rZW5UaW1lcigpO1xyXG5cclxuICAgICAgICBsZXQgdXNlciA9IHRoaXMudXNlcjtcclxuICAgICAgICBpZiAodXNlciAmJiB1c2VyLnJlZnJlc2hUb2tlblRpbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHVzZXIucmVmcmVzaFRva2VuVGltZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpOy8vIC0gKDYwICogMTAwMCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVG9rZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHByaXZhdGUgX3N0b3BSZWZyZXNoVG9rZW5UaW1lcigpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3JlZnJlc2hUb2tlblRpbWVvdXQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWZyZXNoVG9rZW5UaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBleHBpcmVkID0gdGhpcy5nZXRFeHBpcmVkKCkgfHwgbmV3IERhdGUoMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IERhdGUoKSA8IGV4cGlyZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuX29sZFZhbHVlSXNBdXRoZW50aWNhdGVkICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbGRWYWx1ZUlzQXV0aGVudGljYXRlZCA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblNpZ25lZEluU3ViamVjdC5uZXh0KG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiB1c2VyIGlzIHNpZ25lZCBpbiBhbmQgZXhwaXJlZCB3ZSBuZWVkIHRvIGxvZ291dCAocmVtb3ZlIGZyb20gbG9jYWxTdG9yYWdlKVxyXG4gICAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX29uU2lnbmVkSW5TdWJqZWN0PzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+Oy8vQmVoYXZpb3JTdWJqZWN0IGlzIGZvciBpbml0aWFsIGZpcnQgdmFsdWUgPSBmYWxzZVxyXG4gICAgcHJpdmF0ZSBfb25TaWduZWRJbk9ic2VydmFibGU/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgZ2V0IG9uU2lnbmVkSW4oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblNpZ25lZEluU3ViamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vblNpZ25lZEluU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9vblNpZ25lZEluT2JzZXJ2YWJsZSA9IHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblNpZ25lZEluT2JzZXJ2YWJsZSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiX29uRXhlY3V0ZU9ic2VydmFibGUgaXMgdW5kZWZpbmVkXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fb25TaWduZWRJbk9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgX29uUmVmcmVzaFRva2VuU3ViamVjdD86IFN1YmplY3Q8dm9pZD47XHJcbiAgICBwcml2YXRlIF9vblJlZnJlc2hUb2tlbk9ic2VydmFibGU/OiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgZ2V0IG9uUmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uUmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZSA9IHRoaXMuX29uUmVmcmVzaFRva2VuU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fb25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvblJlZnJlc2hUb2tlbk9ic2VydmFibGUgaXMgdW5kZWZpbmVkXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fb25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgbG9naW4odXNlcjogTG9naW5Ub2tlbiB8IExvZ2luVXNlciB8IG51bGwpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICB1c2VyLmlkID0gQ29udmVydC5wYXJzZU51bWJlcih1c2VyLmlkKTtcclxuICAgICAgICAgICAgdXNlci5leHBpcmVkID0gRGF0ZUhlbHBlci5wYXJzZURhdGUodXNlci5leHBpcmVkKTtcclxuICAgICAgICAgICAgdXNlci5yZWZyZXNoVG9rZW5UaW1lID0gRGF0ZUhlbHBlci5wYXJzZURhdGUodXNlci5yZWZyZXNoVG9rZW5UaW1lKTtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXNlci5yb2xlcykpIHtcclxuICAgICAgICAgICAgICAgIHVzZXIucm9sZXMgPSB1c2VyLnJvbGVzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS50b1VwcGVyQ2FzZSgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIFN0b3JhZ2VIZWxwZXIuc2V0KCdsb2dpbicsIHVzZXIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsvL3VzZXIgZ2V0IG1ldGhvZCB3aWxsIGluaXQgdXNlclxyXG4gICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkKCk7Ly90aGlzIG1ldGhvZCBuZWVkIHRvIGV4ZWN1dGUgc3ViamVjdC5uZXh0KCk7ICAgICAgICBcclxuICAgIH1cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICB0aGlzLmxvZ2luKG51bGwpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEV4cGlyZWQoKTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGxldCB1c2VyID0gdGhpcy51c2VyO1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyLmV4cGlyZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0UmVmcmVzaFRva2VuRXhwaXJlZCgpOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgbGV0IHVzZXIgPSB0aGlzLnVzZXI7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVzZXIucmVmcmVzaFRva2VuVGltZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBpc0luUm9sZShhbGxvd2VkUm9sZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAvLyAgICAgaWYgKCFhbGxvd2VkUm9sZXMgfHwgYWxsb3dlZFJvbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IHRtcCA9IHRoaXMuZ2V0VXNlcigpO1xyXG4gICAgLy8gICAgIGNvbnN0IHJvbGVzID0gdG1wID8gdG1wLnJvbGVzIDogbnVsbDtcclxuICAgIC8vICAgICBpZiAoIXJvbGVzIHx8IHJvbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICBsZXQgaXNJblJvbGUgPSBhbGxvd2VkUm9sZXMuc29tZShyb2xlID0+IHJvbGVzLmluZGV4T2Yocm9sZSkgIT09IC0xKTtcclxuICAgIC8vICAgICByZXR1cm4gaXNJblJvbGU7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbj86IEtleVBhaXI8bnVtYmVyLCBudW1iZXI+IHwgbnVtYmVyIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBrZXkgPSAwO1xyXG4gICAgICAgIGxldCB2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodHlwZW9mIHBlcm1pc3Npb24gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwZXJtaXNzaW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBrZXkgPSArcGVybWlzc2lvbjtcclxuICAgICAgICB9Ly8gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwZXJtaXNzaW9uKSkge1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uLmtleSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAga2V5ID0gcGVybWlzc2lvbi5rZXk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGVybWlzc2lvbi52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKFtrZXldLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGhhc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zPzogQXJyYXk8bnVtYmVyPiwgdmFsdWU/OiBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9ucyB8fCBwZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyO1xyXG4gICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXIgPyB1c2VyLnBlcm1pc3Npb25zIDogbnVsbDtcclxuICAgICAgICBpZiAoIXVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHBlcm1pc3Npb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gdXNlclBlcm1pc3Npb25zW3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1Blcm1pc3Npb24gPSBCaXR3aXNlSGVscGVyLmhhc0ZsYWcoZm91bmQsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGVybWlzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGVybWlzc2lvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSB1c2VyUGVybWlzc2lvbnNbcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzRGF0YVBlcm1pc3Npb24oZGF0YTogYW55KSB7XHJcbiAgICAgICAgLy9pZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnN0IGFsbG93ZWRSb2xlcyA9IGRhdGEucm9sZXM7XHJcbiAgICAgICAgLy8gbGV0IGlzSW5Sb2xlID0gdGhpcy5pc0luUm9sZShhbGxvd2VkUm9sZXMpO1xyXG5cclxuICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gZGF0YS5wZXJtaXNzaW9uO1xyXG5cclxuICAgICAgICBsZXQgaGFzUGVybWlzc2lvbiA9IHRoaXMuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIGlzSW5Sb2xlICYmIGhhc1Blcm1pc3Npb247XHJcbiAgICAgICAgcmV0dXJuIGhhc1Blcm1pc3Npb247XHJcbiAgICB9XHJcbn0iXX0=
@@ -13,6 +13,12 @@ export class Convert {
13
13
  }
14
14
  return false;
15
15
  }
16
+ static parseNumber(value) {
17
+ if (typeof value === 'undefined' || value == null || (typeof value === 'string' && value.length === 0))
18
+ return null;
19
+ let n = Number(value);
20
+ return !isNaN(n) ? n : null;
21
+ }
16
22
  static toNumber(value, defaultValue = 0) {
17
23
  return this.isNumber(value) ? Number(value) : defaultValue;
18
24
  }
@@ -23,4 +29,4 @@ export class Convert {
23
29
  return !isNaN(parseFloat(value)) && !isNaN(Number(value));
24
30
  }
25
31
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL3V0aWxzL2NvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLE9BQU87SUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUNoRSxRQUFRLEdBQUcsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzlCLEtBQUssTUFBTSxDQUFDO2dCQUNaLEtBQUssS0FBSyxDQUFDO2dCQUNYLEtBQUssR0FBRyxDQUFDO2dCQUNULEtBQUssSUFBSTtvQkFDTCxPQUFPLElBQUksQ0FBQztnQkFFaEI7b0JBQ0ksT0FBTyxLQUFLLENBQUM7YUFDcEI7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQVUsRUFBRSxZQUFZLEdBQUcsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQVU7UUFDdEIsaUdBQWlHO1FBQ2pHLDRGQUE0RjtRQUM1RixvRkFBb0Y7UUFDcEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBU0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ29udmVydCB7XHJcbiAgICBzdGF0aWMgdG9Cb29sZWFuKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChgJHt2YWx1ZX1gLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJUUlVFXCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiWUVTXCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiMVwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIk9OXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdG9OdW1iZXIodmFsdWU6IGFueSwgZGVmYXVsdFZhbHVlID0gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzTnVtYmVyKHZhbHVlKSA/IE51bWJlcih2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBwYXJzZUZsb2F0KHZhbHVlKSBoYW5kbGVzIG1vc3Qgb2YgdGhlIGNhc2VzIHdlJ3JlIGludGVyZXN0ZWQgaW4gKGl0IHRyZWF0cyBudWxsLCBlbXB0eSBzdHJpbmcsXHJcbiAgICAgICAgLy8gYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzIGFzIE5hTiwgd2hlcmUgTnVtYmVyIGp1c3QgdXNlcyAwKSBidXQgaXQgY29uc2lkZXJzIHRoZSBzdHJpbmdcclxuICAgICAgICAvLyAnMTIzaGVsbG8nIHRvIGJlIGEgdmFsaWQgbnVtYmVyLiBUaGVyZWZvcmUgd2UgYWxzbyBjaGVjayBpZiBOdW1iZXIodmFsdWUpIGlzIE5hTi5cclxuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUgYXMgYW55KSkgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN0YXRpYyB0b051bWJlcih2YWx1ZTogYW55KXtcclxuICAgIC8vICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuICt2YWx1ZTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIHJldHVybiAwO1xyXG4gICAgLy8gfVxyXG59Il19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL3V0aWxzL2NvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLE9BQU87SUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUNoRSxRQUFRLEdBQUcsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzlCLEtBQUssTUFBTSxDQUFDO2dCQUNaLEtBQUssS0FBSyxDQUFDO2dCQUNYLEtBQUssR0FBRyxDQUFDO2dCQUNULEtBQUssSUFBSTtvQkFDTCxPQUFPLElBQUksQ0FBQztnQkFFaEI7b0JBQ0ksT0FBTyxLQUFLLENBQUM7YUFDcEI7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQVU7UUFDekIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BILElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFVLEVBQUUsWUFBWSxHQUFHLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFVO1FBQ3RCLGlHQUFpRztRQUNqRyw0RkFBNEY7UUFDNUYsb0ZBQW9GO1FBQ3BGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztDQVNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIENvbnZlcnQge1xyXG4gICAgc3RhdGljIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoYCR7dmFsdWV9YC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiVFJVRVwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIllFU1wiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjFcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJPTlwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB2YWx1ZSA9PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGxldCBuID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gIWlzTmFOKG4pID8gbiA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9OdW1iZXIodmFsdWU6IGFueSwgZGVmYXVsdFZhbHVlID0gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzTnVtYmVyKHZhbHVlKSA/IE51bWJlcih2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBwYXJzZUZsb2F0KHZhbHVlKSBoYW5kbGVzIG1vc3Qgb2YgdGhlIGNhc2VzIHdlJ3JlIGludGVyZXN0ZWQgaW4gKGl0IHRyZWF0cyBudWxsLCBlbXB0eSBzdHJpbmcsXHJcbiAgICAgICAgLy8gYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzIGFzIE5hTiwgd2hlcmUgTnVtYmVyIGp1c3QgdXNlcyAwKSBidXQgaXQgY29uc2lkZXJzIHRoZSBzdHJpbmdcclxuICAgICAgICAvLyAnMTIzaGVsbG8nIHRvIGJlIGEgdmFsaWQgbnVtYmVyLiBUaGVyZWZvcmUgd2UgYWxzbyBjaGVjayBpZiBOdW1iZXIodmFsdWUpIGlzIE5hTi5cclxuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUgYXMgYW55KSkgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN0YXRpYyB0b051bWJlcih2YWx1ZTogYW55KXtcclxuICAgIC8vICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuICt2YWx1ZTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIHJldHVybiAwO1xyXG4gICAgLy8gfVxyXG59Il19
package/fesm2015/zek.mjs CHANGED
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, InjectionToken, Inject, NgModule, Directive, Input, EventEmitter, Output, ViewChild, Pipe, Component, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Optional, HostListener } from '@angular/core';
3
3
  import * as i1 from '@angular/router';
4
4
  import { NavigationStart, PRIMARY_OUTLET, RouterModule } from '@angular/router';
5
- import { BehaviorSubject, catchError, Subject, of, firstValueFrom, ReplaySubject, timer } from 'rxjs';
5
+ import { BehaviorSubject, Subject, catchError, of, firstValueFrom, ReplaySubject, timer } from 'rxjs';
6
6
  import * as i1$1 from '@ngx-translate/core';
7
7
  import { TranslateModule } from '@ngx-translate/core';
8
8
  import * as i1$2 from '@angular/common/http';
@@ -336,6 +336,12 @@ class Convert {
336
336
  }
337
337
  return false;
338
338
  }
339
+ static parseNumber(value) {
340
+ if (typeof value === 'undefined' || value == null || (typeof value === 'string' && value.length === 0))
341
+ return null;
342
+ let n = Number(value);
343
+ return !isNaN(n) ? n : null;
344
+ }
339
345
  static toNumber(value, defaultValue = 0) {
340
346
  return this.isNumber(value) ? Number(value) : defaultValue;
341
347
  }
@@ -1111,7 +1117,6 @@ class UrlHelper {
1111
1117
  class AuthService {
1112
1118
  constructor() {
1113
1119
  this._isInitialized = false;
1114
- this._subject = new BehaviorSubject(false); //todo check if need BehaviorSubject
1115
1120
  this._oldValueIsAuthenticated = false;
1116
1121
  this._user = null;
1117
1122
  }
@@ -1119,25 +1124,45 @@ class AuthService {
1119
1124
  if (!this._isInitialized) {
1120
1125
  let tmp = StorageHelper.get('login');
1121
1126
  if (tmp) {
1127
+ // let user:LoginUser = {
1128
+ // id: +tmp.id,
1129
+ // expired: DateHelper.parseDate(tmp.expired)
1130
+ // }
1131
+ tmp.id = Convert.parseNumber(tmp.id);
1122
1132
  tmp.expired = DateHelper.parseDate(tmp.expired);
1123
1133
  tmp.refreshTokenTime = DateHelper.parseDate(tmp.refreshTokenTime);
1124
1134
  }
1125
1135
  this._user = tmp;
1126
1136
  this._isInitialized = true;
1137
+ this._starRefreshTokenTimer();
1127
1138
  }
1128
1139
  return this._user;
1129
1140
  }
1130
- // private _expired: Date | null = null;
1131
- // private _refreshTokenExpired: Date | null = null;
1141
+ _starRefreshTokenTimer() {
1142
+ this._stopRefreshTokenTimer();
1143
+ let user = this.user;
1144
+ if (user && user.refreshTokenTime) {
1145
+ const timeout = user.refreshTokenTime.getTime() - Date.now(); // - (60 * 1000);
1146
+ this._refreshTokenTimeout = setTimeout(() => {
1147
+ if (this._onRefreshTokenSubject) {
1148
+ this._onRefreshTokenSubject.next();
1149
+ }
1150
+ }, timeout);
1151
+ }
1152
+ }
1153
+ _stopRefreshTokenTimer() {
1154
+ if (typeof this._refreshTokenTimeout === 'number') {
1155
+ clearTimeout(this._refreshTokenTimeout);
1156
+ }
1157
+ }
1132
1158
  isAuthenticated() {
1133
1159
  let expired = this.getExpired() || new Date(0);
1134
1160
  const newValue = new Date() < expired;
1135
- if (this._oldValueIsAuthenticated != newValue) {
1161
+ if (this._oldValueIsAuthenticated !== newValue) {
1136
1162
  this._oldValueIsAuthenticated = newValue;
1137
- if (this.onSignedInSubject) {
1138
- this.onSignedInSubject.next(newValue);
1163
+ if (this._onSignedInSubject) {
1164
+ this._onSignedInSubject.next(newValue);
1139
1165
  }
1140
- this._subject.next(newValue);
1141
1166
  //if user is signed in and expired we need to logout (remove from localStorage)
1142
1167
  if (!newValue) {
1143
1168
  this.logout();
@@ -1146,41 +1171,41 @@ class AuthService {
1146
1171
  }
1147
1172
  return newValue;
1148
1173
  }
1149
- /**
1150
- * @deprecated The method should not be used. please use onSignedIn
1151
- */
1152
- isSignedIn() {
1153
- return this._subject.asObservable();
1154
- }
1155
1174
  get onSignedIn() {
1156
- if (!this.onSignedInSubject) {
1157
- this.onSignedInSubject = new BehaviorSubject(false);
1158
- this.onSignedInObservable = this.onSignedInSubject.asObservable();
1175
+ if (!this._onSignedInSubject) {
1176
+ this._onSignedInSubject = new BehaviorSubject(false);
1177
+ this._onSignedInObservable = this._onSignedInSubject.asObservable();
1159
1178
  }
1160
- if (!this.onSignedInObservable)
1161
- throw new Error("onExecuteObservable is undefined");
1162
- return this.onSignedInObservable;
1179
+ if (!this._onSignedInObservable)
1180
+ throw new Error("_onExecuteObservable is undefined");
1181
+ return this._onSignedInObservable;
1182
+ }
1183
+ get onRefreshToken() {
1184
+ if (!this._onRefreshTokenSubject) {
1185
+ this._onRefreshTokenSubject = new Subject();
1186
+ this._onRefreshTokenObservable = this._onRefreshTokenSubject.asObservable();
1187
+ }
1188
+ if (!this._onRefreshTokenObservable)
1189
+ throw new Error("onRefreshTokenObservable is undefined");
1190
+ return this._onRefreshTokenObservable;
1163
1191
  }
1164
1192
  login(user) {
1165
1193
  if (user) {
1194
+ user.id = Convert.parseNumber(user.id);
1195
+ user.expired = DateHelper.parseDate(user.expired);
1196
+ user.refreshTokenTime = DateHelper.parseDate(user.refreshTokenTime);
1166
1197
  if (Array.isArray(user.roles)) {
1167
1198
  user.roles = user.roles.map(function (e) { return e.toUpperCase(); });
1168
1199
  }
1169
1200
  }
1170
1201
  StorageHelper.set('login', user);
1171
1202
  this._user = null;
1172
- this._isInitialized = false;
1173
- this.isAuthenticated(); //this method need to execute subject.next();
1203
+ this._isInitialized = false; //user get method will init user
1204
+ this.isAuthenticated(); //this method need to execute subject.next();
1174
1205
  }
1175
1206
  logout() {
1176
1207
  this.login(null);
1177
1208
  }
1178
- // getUser(): LoginToken | null {
1179
- // if (!this.model) {
1180
- // this.model = StorageHelper.get('login');
1181
- // }
1182
- // return this.model;
1183
- // }
1184
1209
  getExpired() {
1185
1210
  let user = this.user;
1186
1211
  if (user) {