@alauda-fe/common 1.3.1 → 1.4.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.
Files changed (69) hide show
  1. package/array-form-table/form/component.d.ts +1 -1
  2. package/authorization/interceptor.service.d.ts +0 -1
  3. package/authorization/state.service.d.ts +13 -13
  4. package/core/abstract/base-nested-form-control.d.ts +1 -1
  5. package/core/constants/patterns.d.ts +4 -0
  6. package/core/directives/scroll-to-first-invalid.directive.d.ts +1 -1
  7. package/core/module.d.ts +21 -21
  8. package/core/pipes/time.pipe.d.ts +1 -1
  9. package/core/services/context.service.d.ts +3 -4
  10. package/core/services/feature-gate.service.d.ts +1 -1
  11. package/core/services/workspace-helper.service.d.ts +3 -1
  12. package/core/utils/common.d.ts +0 -2
  13. package/core/utils/public-api.d.ts +1 -0
  14. package/core/utils/router.d.ts +3 -0
  15. package/core/utils/version.d.ts +1 -1
  16. package/editable/editable.component.d.ts +23 -0
  17. package/editable/editable.directive.d.ts +9 -0
  18. package/editable/editable.type.d.ts +5 -0
  19. package/editable/public-api.d.ts +2 -0
  20. package/esm2022/authorization/guard.service.mjs +2 -2
  21. package/esm2022/authorization/interceptor.service.mjs +7 -22
  22. package/esm2022/authorization/state.service.mjs +58 -92
  23. package/esm2022/core/constants/patterns.mjs +6 -4
  24. package/esm2022/core/module.mjs +7 -12
  25. package/esm2022/core/pipes/time.pipe.mjs +3 -3
  26. package/esm2022/core/services/context.service.mjs +9 -12
  27. package/esm2022/core/services/workspace-helper.service.mjs +7 -1
  28. package/esm2022/core/types/k8s/crd.mjs +1 -1
  29. package/esm2022/core/utils/common.mjs +1 -11
  30. package/esm2022/core/utils/public-api.mjs +2 -1
  31. package/esm2022/core/utils/router.mjs +20 -0
  32. package/esm2022/editable/editable.component.mjs +136 -0
  33. package/esm2022/editable/editable.directive.mjs +25 -0
  34. package/esm2022/editable/editable.type.mjs +6 -0
  35. package/esm2022/editable/public-api.mjs +3 -0
  36. package/esm2022/exec/terminal/component.mjs +12 -19
  37. package/esm2022/k8s-resource-list/footer/component.mjs +57 -21
  38. package/esm2022/k8s-resource-list/k8s-resource-list.module.mjs +18 -6
  39. package/esm2022/k8s-resource-list/utils.mjs +7 -3
  40. package/esm2022/page-scaffold/navigation/breadcrumb/breadcrumb.component.mjs +55 -53
  41. package/esm2022/page-scaffold/navigation/navconfig-loader/navconfig-loader.service.mjs +4 -4
  42. package/esm2022/page-scaffold/page-header/common-layout/product-select/component.mjs +6 -10
  43. package/esm2022/pie-derivative-chart/pie-derivative-chart.module.mjs +6 -6
  44. package/esm2022/pie-derivative-chart/radial-bar/radial-bar-chart.component.mjs +51 -40
  45. package/esm2022/pie-derivative-chart/units.mjs +14 -0
  46. package/esm2022/public-api.mjs +2 -1
  47. package/esm2022/table/component.mjs +47 -30
  48. package/esm2022/table/module.mjs +1 -1
  49. package/esm2022/view-chart/view-chart.component.mjs +5 -8
  50. package/esm2022/widget/public-api.mjs +2 -1
  51. package/esm2022/widget/resource-label/component.mjs +131 -0
  52. package/esm2022/widget/zero-state/zero-state.component.mjs +36 -21
  53. package/exec/terminal/component.d.ts +1 -3
  54. package/k8s-resource-list/footer/component.d.ts +8 -1
  55. package/k8s-resource-list/k8s-resource-list.module.d.ts +1 -1
  56. package/k8s-resource-list/k8s-resource-paged-list.d.ts +2 -2
  57. package/package.json +1 -1
  58. package/page-scaffold/page-header/common-layout/product-select/component.d.ts +1 -3
  59. package/pie-derivative-chart/radial-bar/radial-bar-chart.component.d.ts +4 -0
  60. package/pie-derivative-chart/units.d.ts +2 -0
  61. package/public-api.d.ts +1 -0
  62. package/styles/global.scss +1 -0
  63. package/styles/tailwind-preset.scss +1 -1
  64. package/table/component.d.ts +5 -4
  65. package/table/helper.d.ts +1 -1
  66. package/table/module.d.ts +1 -1
  67. package/widget/public-api.d.ts +1 -0
  68. package/widget/resource-label/component.d.ts +25 -0
  69. package/widget/zero-state/zero-state.component.d.ts +4 -1
@@ -78,7 +78,7 @@ export declare class ArrayFormTableComponent implements OnDestroy {
78
78
  addDisabled: boolean | '';
79
79
  actionColumnDivider: boolean | '';
80
80
  showZeroState: boolean;
81
- get formDirective(): NgForm | FormGroupDirective;
81
+ get formDirective(): FormGroupDirective | NgForm;
82
82
  /**
83
83
  * 自定义是否展示错误内容
84
84
  * 例如 control 是 FormGroup,只有在内部子 control 错误时才需要展示错误内容
@@ -19,7 +19,6 @@ export declare class AuthorizationInterceptorService implements HttpInterceptor
19
19
  intercept(req: HttpRequest<unknown>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<any>>;
20
20
  isConsoleRelative(url: string): boolean;
21
21
  private retryAuth;
22
- private cloneReq;
23
22
  private getAuth;
24
23
  private needAuthorization;
25
24
  private is401;
@@ -2,44 +2,44 @@ import { Observable } from 'rxjs';
2
2
  import { AccountInfo } from '../page-scaffold/public-api';
3
3
  import * as i0 from "@angular/core";
4
4
  export interface AuthorizationState {
5
- idToken?: string;
6
- refreshToken?: string;
5
+ expireAt?: string;
6
+ issuedAt?: string;
7
7
  state?: string;
8
8
  authUrl?: string;
9
9
  logoutUrl?: string;
10
+ info?: AccountInfo;
10
11
  }
11
12
  export interface TokenResponse {
12
13
  token_storage: StorageType;
13
- id_token: string;
14
- refresh_token: string;
14
+ token_type: string;
15
+ expire_at: string;
16
+ issued_at: string;
15
17
  }
16
18
  export type StorageType = 'local' | 'session';
17
19
  export declare const STORAGE_TYPE_KEY = "token_storage";
18
- export declare const ID_TOKEN_KEY = "id_token";
19
- export declare const REFRESH_TOKEN_KEY = "refresh_token";
20
20
  export declare const CODE_KEY = "code";
21
+ export declare const ID_TOKEN = "id_token";
21
22
  export declare class AuthorizationStateService {
22
23
  private readonly http;
23
- private readonly refreshToken$$;
24
24
  private readonly state$;
25
- private checkTokenCache;
25
+ private checkTokenCache$;
26
26
  private refreshTokenCache$;
27
27
  stateSnapshot: AuthorizationState;
28
28
  payloadSnapshot: AccountInfo;
29
29
  logout(specificUrl?: boolean): void;
30
30
  logoutAudit(): Observable<Object>;
31
31
  redirectToDex(redirectUrl?: string): Promise<void>;
32
- refreshToken(): Observable<string>;
33
- checkToken(token: string): Observable<unknown>;
34
- getToken(): Observable<string>;
32
+ refreshToken(): Observable<unknown>;
33
+ checkToken(): Observable<unknown>;
35
34
  getTokenPayload<T>(): Observable<T>;
36
- getAccountInfo(): Observable<AccountInfo>;
35
+ getAccountInfo(): Observable<any>;
37
36
  private getAuthConfiguration;
38
37
  private getExistedToken;
39
38
  private getTokenFromLocal;
40
- private getTokenByRefreshToken;
41
39
  private getTokenByCode;
40
+ private getCookieByToken;
42
41
  private getParams;
43
42
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthorizationStateService, never>;
44
43
  static ɵprov: i0.ɵɵInjectableDeclaration<AuthorizationStateService>;
45
44
  }
45
+ export declare function redirectSSOEntry(entry: string): string;
@@ -21,7 +21,7 @@ export declare class BaseNestedFormControl<V, M = V> implements AfterViewInit, O
21
21
  protected asyncValidator: boolean;
22
22
  protected cdr: ChangeDetectorRef;
23
23
  protected destroy$$: Subject<void>;
24
- protected hostForm: NgForm | FormGroupDirective;
24
+ protected hostForm: FormGroupDirective | NgForm;
25
25
  constructor();
26
26
  ngAfterViewInit(): void;
27
27
  ngOnDestroy(): void;
@@ -69,6 +69,10 @@ export declare const POSITIVE_INT_PATTERN: {
69
69
  pattern: RegExp;
70
70
  tip: string;
71
71
  };
72
+ export declare const POSITIVE_NUMBER_PATTERN: {
73
+ pattern: RegExp;
74
+ tip: string;
75
+ };
72
76
  export declare const K8S_RESOURCE_NAME_BASE: {
73
77
  pattern: RegExp;
74
78
  tip: string;
@@ -13,7 +13,7 @@ export declare class ScrollToFirstInvalidDirective {
13
13
  private readonly cdkScrollable;
14
14
  labelOffset: number;
15
15
  aclScrollToFirstInvalid: boolean | '';
16
- get containerEl(): HTMLElement | (Window & typeof globalThis);
16
+ get containerEl(): (Window & typeof globalThis) | HTMLElement;
17
17
  onSubmit(): void;
18
18
  constructor(elRef: ElementRef<HTMLElement>, controlContainer: ControlContainer, cdkScrollable: CdkScrollable);
19
19
  scrollToFirstInvalid(): void;
package/core/module.d.ts CHANGED
@@ -1,24 +1,24 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "./pipes/time.pipe";
3
- import * as i2 from "./pipes/crontab-next.pipe";
4
- import * as i3 from "./pipes/marked.pipe";
5
- import * as i4 from "./pipes/page-env.pipe";
6
- import * as i5 from "./pipes/timezone-display.pipe";
7
- import * as i6 from "./pipes/cron-human-readable.pipe";
8
- import * as i7 from "./directives/scroll-to-first-invalid.directive";
9
- import * as i8 from "./directives/last-form-item.directive";
10
- import * as i9 from "./directives/readonly-field.directive";
11
- import * as i10 from "@angular/common";
12
- import * as i11 from "@angular/forms";
13
- import * as i12 from "./pipes/k8s-util.pipe.module";
14
- import * as i13 from "../effect-directive/module";
15
- import * as i14 from "../code/code.module";
16
- import * as i15 from "./pipes/parse-json-translate.pipe";
17
- import * as i16 from "./pipes/field-not-available.pipe";
18
- import * as i17 from "./pipes/img-header.pipe";
19
- import * as i18 from "./pipes/img-theme.pipe";
20
- import * as i19 from "./pipes/safe.pipe";
21
- import * as i20 from "./pipes/sanitize.pipe";
2
+ import * as i1 from "./pipes/crontab-next.pipe";
3
+ import * as i2 from "./pipes/marked.pipe";
4
+ import * as i3 from "./pipes/page-env.pipe";
5
+ import * as i4 from "./pipes/timezone-display.pipe";
6
+ import * as i5 from "./pipes/cron-human-readable.pipe";
7
+ import * as i6 from "./directives/scroll-to-first-invalid.directive";
8
+ import * as i7 from "./directives/last-form-item.directive";
9
+ import * as i8 from "./directives/readonly-field.directive";
10
+ import * as i9 from "@angular/common";
11
+ import * as i10 from "@angular/forms";
12
+ import * as i11 from "./pipes/k8s-util.pipe.module";
13
+ import * as i12 from "../effect-directive/module";
14
+ import * as i13 from "../code/code.module";
15
+ import * as i14 from "./pipes/parse-json-translate.pipe";
16
+ import * as i15 from "./pipes/field-not-available.pipe";
17
+ import * as i16 from "./pipes/img-header.pipe";
18
+ import * as i17 from "./pipes/img-theme.pipe";
19
+ import * as i18 from "./pipes/safe.pipe";
20
+ import * as i19 from "./pipes/sanitize.pipe";
21
+ import * as i20 from "./pipes/time.pipe";
22
22
  import * as i21 from "./directives/page-header-content.directive";
23
23
  import * as i22 from "./directives/intercept-deactivate.directive";
24
24
  import * as i23 from "./directives/disabled.directive";
@@ -29,6 +29,6 @@ import * as i27 from "./directives/feature-gate.directive";
29
29
  import * as i28 from "./pipes/pure.pipe";
30
30
  export declare class CoreModule {
31
31
  static ɵfac: i0.ɵɵFactoryDeclaration<CoreModule, never>;
32
- static ɵmod: i0.ɵɵNgModuleDeclaration<CoreModule, [typeof i1.StandardDatePipe, typeof i2.CrontabNextPipe, typeof i3.MarkedPipe, typeof i4.LocaleTransformPipe, typeof i4.ThemeTransformPipe, typeof i5.TimezoneDisplayPipe, typeof i6.CronHumanReadablePipe, typeof i7.ScrollToFirstInvalidMarkerDirective, typeof i8.FormItemMarginEffectDirective, typeof i9.SpanComponent], [typeof i10.CommonModule, typeof i11.ReactiveFormsModule, typeof i12.K8sUtilPipeModule, typeof i13.EffectDirectiveModule, typeof i14.CodeModule, typeof i9.ReadonlyFieldDirective, typeof i15.ParseJsonTranslatePipe, typeof i16.FieldNotAvailablePipe, typeof i17.ImgHeaderPipe, typeof i18.ImgThemePipe, typeof i19.SafePipe, typeof i20.SanitizePipe, typeof i1.RelativeTimePipe, typeof i21.PageHeaderContentDirective, typeof i1.StandardTimePipe, typeof i7.ScrollToFirstInvalidDirective, typeof i22.InterceptDeactivateDirective, typeof i23.DisabledDirective, typeof i24.ClickOutsideDirective, typeof i25.ScrollBorderObserverDirective, typeof i26.ResizeDirective, typeof i27.FeatureGateDirective, typeof i28.PurePipe], [typeof i1.StandardDatePipe, typeof i2.CrontabNextPipe, typeof i3.MarkedPipe, typeof i4.LocaleTransformPipe, typeof i4.ThemeTransformPipe, typeof i5.TimezoneDisplayPipe, typeof i6.CronHumanReadablePipe, typeof i7.ScrollToFirstInvalidMarkerDirective, typeof i8.FormItemMarginEffectDirective, typeof i9.ReadonlyFieldDirective, typeof i15.ParseJsonTranslatePipe, typeof i16.FieldNotAvailablePipe, typeof i17.ImgHeaderPipe, typeof i18.ImgThemePipe, typeof i19.SafePipe, typeof i20.SanitizePipe, typeof i1.RelativeTimePipe, typeof i21.PageHeaderContentDirective, typeof i1.StandardTimePipe, typeof i7.ScrollToFirstInvalidDirective, typeof i22.InterceptDeactivateDirective, typeof i23.DisabledDirective, typeof i24.ClickOutsideDirective, typeof i25.ScrollBorderObserverDirective, typeof i26.ResizeDirective, typeof i27.FeatureGateDirective, typeof i28.PurePipe, typeof i12.K8sUtilPipeModule, typeof i14.CodeModule, typeof i13.EffectDirectiveModule]>;
32
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CoreModule, [typeof i1.CrontabNextPipe, typeof i2.MarkedPipe, typeof i3.LocaleTransformPipe, typeof i3.ThemeTransformPipe, typeof i4.TimezoneDisplayPipe, typeof i5.CronHumanReadablePipe, typeof i6.ScrollToFirstInvalidMarkerDirective, typeof i7.FormItemMarginEffectDirective, typeof i8.SpanComponent], [typeof i9.CommonModule, typeof i10.ReactiveFormsModule, typeof i11.K8sUtilPipeModule, typeof i12.EffectDirectiveModule, typeof i13.CodeModule, typeof i8.ReadonlyFieldDirective, typeof i14.ParseJsonTranslatePipe, typeof i15.FieldNotAvailablePipe, typeof i16.ImgHeaderPipe, typeof i17.ImgThemePipe, typeof i18.SafePipe, typeof i19.SanitizePipe, typeof i20.RelativeTimePipe, typeof i21.PageHeaderContentDirective, typeof i20.StandardTimePipe, typeof i6.ScrollToFirstInvalidDirective, typeof i22.InterceptDeactivateDirective, typeof i23.DisabledDirective, typeof i24.ClickOutsideDirective, typeof i25.ScrollBorderObserverDirective, typeof i26.ResizeDirective, typeof i27.FeatureGateDirective, typeof i28.PurePipe, typeof i20.StandardDatePipe], [typeof i1.CrontabNextPipe, typeof i2.MarkedPipe, typeof i3.LocaleTransformPipe, typeof i3.ThemeTransformPipe, typeof i4.TimezoneDisplayPipe, typeof i5.CronHumanReadablePipe, typeof i6.ScrollToFirstInvalidMarkerDirective, typeof i7.FormItemMarginEffectDirective, typeof i8.ReadonlyFieldDirective, typeof i14.ParseJsonTranslatePipe, typeof i15.FieldNotAvailablePipe, typeof i16.ImgHeaderPipe, typeof i17.ImgThemePipe, typeof i18.SafePipe, typeof i19.SanitizePipe, typeof i20.RelativeTimePipe, typeof i21.PageHeaderContentDirective, typeof i20.StandardTimePipe, typeof i6.ScrollToFirstInvalidDirective, typeof i22.InterceptDeactivateDirective, typeof i23.DisabledDirective, typeof i24.ClickOutsideDirective, typeof i25.ScrollBorderObserverDirective, typeof i26.ResizeDirective, typeof i27.FeatureGateDirective, typeof i28.PurePipe, typeof i20.StandardDatePipe, typeof i11.K8sUtilPipeModule, typeof i13.CodeModule, typeof i12.EffectDirectiveModule]>;
33
33
  static ɵinj: i0.ɵɵInjectorDeclaration<CoreModule>;
34
34
  }
@@ -37,5 +37,5 @@ export declare class StandardTimePipe extends DateTimePipe implements PipeTransf
37
37
  export declare class StandardDatePipe extends DateTimePipe implements PipeTransform {
38
38
  format: string;
39
39
  static ɵfac: i0.ɵɵFactoryDeclaration<StandardDatePipe, never>;
40
- static ɵpipe: i0.ɵɵPipeDeclaration<StandardDatePipe, "aclStandardDate", false>;
40
+ static ɵpipe: i0.ɵɵPipeDeclaration<StandardDatePipe, "aclStandardDate", true>;
41
41
  }
@@ -21,13 +21,12 @@ import * as i0 from "@angular/core";
21
21
  */
22
22
  export declare const CONTEXT_INIT_VALUE_TOKEN: InjectionToken<unknown>;
23
23
  export declare class ContextService<T> {
24
- private readonly initValue;
24
+ private initValue;
25
25
  private readonly value$$;
26
- value$: Observable<T>;
27
- constructor(initValue: T);
26
+ readonly value$: Observable<T>;
28
27
  set(value?: T): void;
29
28
  get(): T;
30
29
  reset(): void;
31
- static ɵfac: i0.ɵɵFactoryDeclaration<ContextService<any>, [{ optional: true; }]>;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContextService<any>, never>;
32
31
  static ɵprov: i0.ɵɵInjectableDeclaration<ContextService<any>>;
33
32
  }
@@ -9,7 +9,7 @@ export declare class FeatureGateService {
9
9
  private readonly http;
10
10
  private readonly cacheStore;
11
11
  constructor(http: HttpClient);
12
- loadState(cluster?: string): Observable<"loaded" | "loadFailed" | "loading">;
12
+ loadState(cluster?: string): Observable<"loading" | "loaded" | "loadFailed">;
13
13
  /**
14
14
  * check gate status
15
15
  * @param gate - specified feature gate
@@ -3,10 +3,12 @@ import { WorkspaceParams } from '../types/public-api';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class WorkspaceHelperService {
5
5
  private readonly baseParams$$;
6
- baseActivatedRoute: ActivatedRoute;
6
+ private _baseActivatedRoute;
7
7
  readonly baseParams: import("rxjs").Observable<WorkspaceParams>;
8
8
  get baseParamsSnapshot(): WorkspaceParams;
9
+ get baseActivatedRoute(): ActivatedRoute;
9
10
  setBaseParams(params: WorkspaceParams): void;
11
+ setBaseActivatedRoute(route: ActivatedRoute): void;
10
12
  static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceHelperService, never>;
11
13
  static ɵprov: i0.ɵɵInjectableDeclaration<WorkspaceHelperService>;
12
14
  }
@@ -3,7 +3,6 @@
3
3
  * @module utils
4
4
  */
5
5
  import { Sort } from '@alauda/ui';
6
- import { ActivatedRouteSnapshot } from '@angular/router';
7
6
  import { UnionToIntersection } from 'ts-essentials';
8
7
  import { Terminal } from 'xterm';
9
8
  import { Callback, Keys, KubernetesResource, Nullable, Readonlyable } from '../types/public-api';
@@ -57,4 +56,3 @@ export declare const parseImageAddress: (addr: string) => {
57
56
  };
58
57
  export declare const setWindowsXtermTools: (xterm: Terminal) => void;
59
58
  export declare const clearWindowsXtermTools: () => void;
60
- export declare function getParamFromParent(key: string, snapshot: ActivatedRouteSnapshot): string;
@@ -21,4 +21,5 @@ export * from './format-number';
21
21
  export * from './node';
22
22
  export * from './sort-fn';
23
23
  export * from './workload';
24
+ export * from './router';
24
25
  export * from './disabled-state';
@@ -0,0 +1,3 @@
1
+ import { ActivatedRouteSnapshot } from '@angular/router';
2
+ export declare function getParamFromParent(key: string, snapshot: ActivatedRouteSnapshot): string;
3
+ export declare function initParamFromParent$(key: string): import("rxjs").Observable<string>;
@@ -36,4 +36,4 @@ export declare const compareVersion: {
36
36
  gte: (v1: string, v2: string) => boolean;
37
37
  cmp: (v1: string, v2: string, operator: CompareOperator) => boolean;
38
38
  };
39
- export declare const compareMinorVersion: (v1: string, v2: string) => 0 | 1 | -1;
39
+ export declare const compareMinorVersion: (v1: string, v2: string) => 1 | 0 | -1;
@@ -0,0 +1,23 @@
1
+ import { CustomBeforeAction } from '@alauda/ui';
2
+ import { EventEmitter, TemplateRef } from '@angular/core';
3
+ import { ButtonPosition, EditableMode } from './editable.type';
4
+ import * as i0 from "@angular/core";
5
+ export declare class EditableComponent {
6
+ beforeSave: import("@angular/core").InputSignal<CustomBeforeAction<unknown>>;
7
+ position: import("@angular/core").InputSignal<ButtonPosition>;
8
+ save: EventEmitter<void>;
9
+ cancel: EventEmitter<void>;
10
+ modeChange: EventEmitter<EditableMode>;
11
+ viewer: TemplateRef<unknown>;
12
+ editor: TemplateRef<unknown>;
13
+ EditableMode: typeof EditableMode;
14
+ bem: import("@alauda/ui").Bem;
15
+ loading: boolean;
16
+ mode: import("@angular/core").WritableSignal<EditableMode>;
17
+ hostClass: import("@angular/core").Signal<string>;
18
+ constructor();
19
+ saveEdit(): void;
20
+ cancelEdit(): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditableComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditableComponent, "acl-editable", never, { "beforeSave": { "alias": "beforeSave"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, { "save": "save"; "cancel": "cancel"; "modeChange": "modeChange"; }, ["viewer", "editor"], never, true, never>;
23
+ }
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class EditableViewerDirective {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditableViewerDirective, never>;
4
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EditableViewerDirective, "*[aclEditableViewer]", never, {}, {}, never, never, true, never>;
5
+ }
6
+ export declare class EditableEditorDirective {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditableEditorDirective, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<EditableEditorDirective, "*[aclEditableEditor]", never, {}, {}, never, never, true, never>;
9
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum EditableMode {
2
+ View = "view",
3
+ Edit = "edit"
4
+ }
5
+ export type ButtonPosition = 'top' | 'center' | 'bottom';
@@ -0,0 +1,2 @@
1
+ export * from './editable.component';
2
+ export * from './editable.directive';
@@ -21,7 +21,7 @@ export class AuthorizationGuardService {
21
21
  this.silentlyNavigate = silentlyNavigate;
22
22
  }
23
23
  canActivate(_route, state) {
24
- return this.auth.getToken().pipe(map(token => !!token), catchError(() => {
24
+ return this.auth.getAccountInfo().pipe(map(info => !!info), catchError(() => {
25
25
  this.silentlyNavigate.navigate(state.url, this.emptyUrl);
26
26
  return of(false);
27
27
  }));
@@ -39,4 +39,4 @@ export class AuthorizationGuardService {
39
39
  type: Inject,
40
40
  args: [ABNORMAL_EMPTY_URL_TOKEN]
41
41
  }] }, { type: i1.AuthorizationStateService }, { type: i2.SilentlyNavigateService }], null); })();
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2d1YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUU1RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxpQkFBaUIsQ0FBQztBQUU1RCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sMEJBQTBCLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUN4RCxvQkFBb0IsRUFDcEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUN6RCxDQUFDO0FBR0YsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxZQUVtQixRQUFnQixFQUNoQixJQUErQixFQUMvQixnQkFBeUM7UUFGekMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO0lBQ3pELENBQUM7SUFFSixXQUFXLENBQUMsTUFBOEIsRUFBRSxLQUEwQjtRQUNwRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUM5QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUN4RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7MEZBdEJVLHlCQUF5QixjQUkxQix3QkFBd0I7dUVBSnZCLHlCQUF5QixXQUF6Qix5QkFBeUIsbUJBRFosTUFBTTs7aUZBQ25CLHlCQUF5QjtjQURyQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztzQkFLN0IsTUFBTTt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBhdXRob3JpemF0aW9uXG4gKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIENhbkFjdGl2YXRlLFxuICBDYW5BY3RpdmF0ZUNoaWxkLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgb2YsIGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTaWxlbnRseU5hdmlnYXRlU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IEF1dGhvcml6YXRpb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3N0YXRlLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQk5PUk1BTF9FTVBUWV9VUkwgPSAnc3lzdGVtLWFibm9ybWFsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFibm9ybWFsRW1wdHlVcmxGYWN0b3J5KCkge1xuICByZXR1cm4gREVGQVVMVF9BQk5PUk1BTF9FTVBUWV9VUkw7XG59XG5cbmV4cG9ydCBjb25zdCBBQk5PUk1BTF9FTVBUWV9VUkxfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcbiAgJ2Fibm9ybWFsX2VtcHR5X3VybCcsXG4gIHsgcHJvdmlkZWRJbjogJ3Jvb3QnLCBmYWN0b3J5OiBhYm5vcm1hbEVtcHR5VXJsRmFjdG9yeSB9LFxuKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uR3VhcmRTZXJ2aWNlXG4gIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGRcbntcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBQk5PUk1BTF9FTVBUWV9VUkxfVE9LRU4pXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbXB0eVVybDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aDogQXV0aG9yaXphdGlvblN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNpbGVudGx5TmF2aWdhdGU6IFNpbGVudGx5TmF2aWdhdGVTZXJ2aWNlLFxuICApIHt9XG5cbiAgY2FuQWN0aXZhdGUoX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIHJldHVybiB0aGlzLmF1dGguZ2V0VG9rZW4oKS5waXBlKFxuICAgICAgbWFwKHRva2VuID0+ICEhdG9rZW4pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2lsZW50bHlOYXZpZ2F0ZS5uYXZpZ2F0ZShzdGF0ZS51cmwsIHRoaXMuZW1wdHlVcmwpO1xuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGUocm91dGUsIHN0YXRlKTtcbiAgfVxufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2d1YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUU1RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxpQkFBaUIsQ0FBQztBQUU1RCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sMEJBQTBCLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUN4RCxvQkFBb0IsRUFDcEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUN6RCxDQUFDO0FBR0YsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxZQUVtQixRQUFnQixFQUNoQixJQUErQixFQUMvQixnQkFBeUM7UUFGekMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO0lBQ3pELENBQUM7SUFFSixXQUFXLENBQUMsTUFBOEIsRUFBRSxLQUEwQjtRQUNwRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUN4RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7MEZBdEJVLHlCQUF5QixjQUkxQix3QkFBd0I7dUVBSnZCLHlCQUF5QixXQUF6Qix5QkFBeUIsbUJBRFosTUFBTTs7aUZBQ25CLHlCQUF5QjtjQURyQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztzQkFLN0IsTUFBTTt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBhdXRob3JpemF0aW9uXG4gKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIENhbkFjdGl2YXRlLFxuICBDYW5BY3RpdmF0ZUNoaWxkLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgb2YsIGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTaWxlbnRseU5hdmlnYXRlU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IEF1dGhvcml6YXRpb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3N0YXRlLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQk5PUk1BTF9FTVBUWV9VUkwgPSAnc3lzdGVtLWFibm9ybWFsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFibm9ybWFsRW1wdHlVcmxGYWN0b3J5KCkge1xuICByZXR1cm4gREVGQVVMVF9BQk5PUk1BTF9FTVBUWV9VUkw7XG59XG5cbmV4cG9ydCBjb25zdCBBQk5PUk1BTF9FTVBUWV9VUkxfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcbiAgJ2Fibm9ybWFsX2VtcHR5X3VybCcsXG4gIHsgcHJvdmlkZWRJbjogJ3Jvb3QnLCBmYWN0b3J5OiBhYm5vcm1hbEVtcHR5VXJsRmFjdG9yeSB9LFxuKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uR3VhcmRTZXJ2aWNlXG4gIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGRcbntcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBQk5PUk1BTF9FTVBUWV9VUkxfVE9LRU4pXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbXB0eVVybDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aDogQXV0aG9yaXphdGlvblN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNpbGVudGx5TmF2aWdhdGU6IFNpbGVudGx5TmF2aWdhdGVTZXJ2aWNlLFxuICApIHt9XG5cbiAgY2FuQWN0aXZhdGUoX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIHJldHVybiB0aGlzLmF1dGguZ2V0QWNjb3VudEluZm8oKS5waXBlKFxuICAgICAgbWFwKGluZm8gPT4gISFpbmZvKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICB0aGlzLnNpbGVudGx5TmF2aWdhdGUubmF2aWdhdGUoc3RhdGUudXJsLCB0aGlzLmVtcHR5VXJsKTtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjYW5BY3RpdmF0ZUNoaWxkKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlKHJvdXRlLCBzdGF0ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { DialogService } from '@alauda/ui';
6
6
  import { Inject, Injectable, Injector } from '@angular/core';
7
- import { NEVER, combineLatest, throwError, catchError, concatMap, take, map, of, switchMap, } from 'rxjs';
7
+ import { NEVER, throwError, catchError, concatMap, take, map, of, switchMap, } from 'rxjs';
8
8
  import { ApiGatewayService } from '../api/public-api';
9
9
  import { ANONYMOUS_APIS, catchPromise } from '../core/public-api';
10
10
  import { TranslateService } from '../public-api';
@@ -24,24 +24,16 @@ export class AuthorizationInterceptorService {
24
24
  this.dialog = dialog;
25
25
  this.sessionManage = sessionManage;
26
26
  }
27
- // eslint-disable-next-line sonarjs/cognitive-complexity
28
27
  intercept(req, next) {
29
28
  if (this.isConsoleRelative(req.url)) {
30
29
  return next.handle(req);
31
30
  }
32
31
  const auth = this.getAuth();
33
- return combineLatest([
34
- this.apiGateway.getApiAddress(),
35
- auth.getToken(),
36
- ]).pipe(take(1), concatMap(([apiAddress, idToken]) => {
32
+ return auth.getTokenPayload().pipe(switchMap(() => this.apiGateway.getApiAddress()), take(1), concatMap(apiAddress => {
37
33
  if (!this.needAuthorization(apiAddress, req)) {
38
34
  return next.handle(req);
39
35
  }
40
- if (!idToken) {
41
- return NEVER;
42
- }
43
- const authReq = this.cloneReq(req, idToken);
44
- return next.handle(authReq).pipe(catchError((error) => {
36
+ return next.handle(req).pipe(catchError((error) => {
45
37
  if (this.isSessionInvalid(error)) {
46
38
  this.handleSessionInvalid();
47
39
  return NEVER;
@@ -54,10 +46,10 @@ export class AuthorizationInterceptorService {
54
46
  if (!this.isUnauthorized(error)) {
55
47
  return throwError(() => error);
56
48
  }
57
- if (this.isWatchReq(apiAddress, authReq)) {
49
+ if (this.isWatchReq(apiAddress, req)) {
58
50
  return NEVER;
59
51
  }
60
- return auth.checkToken(idToken).pipe(map(() => false), catchError(() => of(true)), switchMap(expired => expired ? this.retryAuth(next, req) : throwError(() => error)));
52
+ return auth.checkToken().pipe(map(() => false), catchError(() => of(true)), switchMap(expired => expired ? this.retryAuth(next, req) : throwError(() => error)));
61
53
  }));
62
54
  }));
63
55
  }
@@ -70,20 +62,13 @@ export class AuthorizationInterceptorService {
70
62
  }
71
63
  retryAuth(next, req) {
72
64
  const auth = this.getAuth();
73
- return auth.refreshToken().pipe(concatMap(token => next.handle(this.cloneReq(req, token)).pipe(catchError((error) => {
65
+ return auth.refreshToken().pipe(concatMap(() => next.handle(req).pipe(catchError((error) => {
74
66
  if (this.isUnauthorized(error)) {
75
67
  auth.logout(true);
76
68
  }
77
69
  return throwError(() => error);
78
70
  }))));
79
71
  }
80
- cloneReq(req, idToken) {
81
- return req.clone({
82
- setHeaders: {
83
- Authorization: `Bearer ${idToken}`,
84
- },
85
- });
86
- }
87
72
  getAuth() {
88
73
  if (!this.auth) {
89
74
  this.auth = this.injector.get(AuthorizationStateService);
@@ -146,4 +131,4 @@ export class AuthorizationInterceptorService {
146
131
  type: Inject,
147
132
  args: [ANONYMOUS_APIS]
148
133
  }] }, { type: i1.ApiGatewayService }, { type: i0.Injector }, { type: i2.DialogService }, { type: i3.SessionManageService }], null); })();
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2ludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQU8zQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUNMLEtBQUssRUFDTCxhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSCxFQUFFLEVBQ0YsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQVUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsR0FDckIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFFNUQsd0VBQXdFO0FBQ3hFLGtEQUFrRDtBQUVsRCxNQUFNLE9BQU8sK0JBQStCO0lBRzFDLFlBRW1CLGFBQXFDLEVBQ3JDLFVBQTZCLEVBQzdCLFFBQWtCLEVBQ2xCLE1BQXFCLEVBQ3JCLGFBQW1DO1FBSm5DLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsa0JBQWEsR0FBYixhQUFhLENBQXNCO0lB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Q0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUM7UUFDaEUsT0FBTyxhQUFhLElBQUksU0FBUyxDQUFDO0lBQ3BDLENBQUM7Z0dBbkxVLCtCQUErQixjQUloQyxjQUFjO3VFQUpiLCtCQUErQixXQUEvQiwrQkFBK0I7O2lGQUEvQiwrQkFBK0I7Y0FEM0MsVUFBVTs7c0JBS04sTUFBTTt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgYXV0aG9yaXphdGlvblxuICovXG5cbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7XG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwSGFuZGxlcixcbiAgSHR0cEludGVyY2VwdG9yLFxuICBIdHRwUmVxdWVzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTkVWRVIsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIHRocm93RXJyb3IsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbmNhdE1hcCxcbiAgdGFrZSxcbiAgbWFwLFxuICBvZixcbiAgc3dpdGNoTWFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBpR2F0ZXdheVNlcnZpY2UgfSBmcm9tICcuLi9hcGkvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBBTk9OWU1PVVNfQVBJUywgY2F0Y2hQcm9taXNlIH0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFN0YXR1cywgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xuXG5pbXBvcnQge1xuICBTRVNTSU9OX01BTkFHRV9LRVksXG4gIFNlc3Npb25NYW5hZ2VTZXJ2aWNlLFxufSBmcm9tICcuL3Nlc3Npb24tbWFuYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aG9yaXphdGlvblN0YXRlU2VydmljZSB9IGZyb20gJy4vc3RhdGUuc2VydmljZSc7XG5cbi8vIEludGVyY2VwdG9yIG11c3QgcHJvdmlkZSB3aXRoIGNvcnJlY3Qgb3JkZXIsIG5vdCBwcm92aWRlIGluIHJvb3QgaGVyZVxuLy8gaHR0cHM6Ly9hbmd1bGFyLmNuL2d1aWRlL2h0dHAjaW50ZXJjZXB0b3Itb3JkZXJcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uSW50ZXJjZXB0b3JTZXJ2aWNlIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHJpdmF0ZSBhdXRoOiBBdXRob3JpemF0aW9uU3RhdGVTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQU5PTllNT1VTX0FQSVMpXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbm9ueW1vdXNBcGlzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpR2F0ZXdheTogQXBpR2F0ZXdheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uTWFuYWdlOiBTZXNzaW9uTWFuYWdlU2VydmljZSxcbiAgKSB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIGlmICh0aGlzLmlzQ29uc29sZVJlbGF0aXZlKHJlcS51cmwpKSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoID0gdGhpcy5nZXRBdXRoKCk7XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFwaUdhdGV3YXkuZ2V0QXBpQWRkcmVzcygpLFxuICAgICAgYXV0aC5nZXRUb2tlbigpLFxuICAgIF0pLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgY29uY2F0TWFwKChbYXBpQWRkcmVzcywgaWRUb2tlbl0pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLm5lZWRBdXRob3JpemF0aW9uKGFwaUFkZHJlc3MsIHJlcSkpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWRUb2tlbikge1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF1dGhSZXEgPSB0aGlzLmNsb25lUmVxKHJlcSwgaWRUb2tlbik7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShhdXRoUmVxKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZXNzaW9uSW52YWxpZChlcnJvcikpIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTZXNzaW9uSW52YWxpZCgpO1xuICAgICAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOW9k+eUqOaIt+iiq+emgeeUqOiHquWKqOeZu+WHulxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkVXNlcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgYXV0aC5sb2dvdXQodHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVW5hdXRob3JpemVkKGVycm9yKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2F0Y2hSZXEoYXBpQWRkcmVzcywgYXV0aFJlcSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXV0aC5jaGVja1Rva2VuKGlkVG9rZW4pLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoKSA9PiBmYWxzZSksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodHJ1ZSkpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoZXhwaXJlZCA9PlxuICAgICAgICAgICAgICAgIGV4cGlyZWQgPyB0aGlzLnJldHJ5QXV0aChuZXh0LCByZXEpIDogdGhyb3dFcnJvcigoKSA9PiBlcnJvciksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNvbnNvbGUgcmVsYXRpdmUgbWVhbnMgdXJsIHByb3RvY29sK2hvc3RuYW1lK3BvcnQgc2FtZSB3aXRoIGNvbnNvbGUsIGZvciB0aGlzIGNhc2UsIGp1c3QgY2hlY2sgdXJsIHN0YXJ0IHdpdGggYGBgaHR0cChzKTovL2BgYCBvciBgYGAvL2BgYFxuICBpc0NvbnNvbGVSZWxhdGl2ZSh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyQ2FzZVVybCA9ICh1cmwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgIWxvd2VyQ2FzZVVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgJiZcbiAgICAgICFsb3dlckNhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSAmJlxuICAgICAgIWxvd2VyQ2FzZVVybC5zdGFydHNXaXRoKCcvLycpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0cnlBdXRoKG5leHQ6IEh0dHBIYW5kbGVyLCByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KSB7XG4gICAgY29uc3QgYXV0aCA9IHRoaXMuZ2V0QXV0aCgpO1xuICAgIHJldHVybiBhdXRoLnJlZnJlc2hUb2tlbigpLnBpcGUoXG4gICAgICBjb25jYXRNYXAodG9rZW4gPT5cbiAgICAgICAgbmV4dC5oYW5kbGUodGhpcy5jbG9uZVJlcShyZXEsIHRva2VuKSkucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVW5hdXRob3JpemVkKGVycm9yKSkge1xuICAgICAgICAgICAgICBhdXRoLmxvZ291dCh0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVJlcShyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBpZFRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVxLmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2lkVG9rZW59YCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEF1dGgoKSB7XG4gICAgaWYgKCF0aGlzLmF1dGgpIHtcbiAgICAgIHRoaXMuYXV0aCA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhvcml6YXRpb25TdGF0ZVNlcnZpY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hdXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBuZWVkQXV0aG9yaXphdGlvbihcbiAgICBhcGlBZGRyZXNzOiBzdHJpbmcsXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyZXEudXJsLnN0YXJ0c1dpdGgoYXBpQWRkcmVzcykgfHwgcmVxLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMuYW5vbnltb3VzQXBpcy5zb21lKGFwaSA9PlxuICAgICAgYXBpIGluc3RhbmNlb2YgUmVnRXhwID8gYXBpLnRlc3QocmVxLnVybCkgOiByZXEudXJsLmluY2x1ZGVzKGFwaSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXM0MDEoeyBlcnJvciB9OiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLmlzU3RhdHVzKGVycm9yKSAmJiBlcnJvci5jb2RlID09PSA0MDE7XG4gIH1cblxuICBwcml2YXRlIGlzU2Vzc2lvbkludmFsaWQoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gZXJyb3JSZXM7XG4gICAgcmV0dXJuIHRoaXMuaXM0MDEoZXJyb3JSZXMpICYmIGVycm9yLnJlYXNvbiA9PT0gJ1Nlc3Npb25JbnZhbGlkJztcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2Vzc2lvbkludmFsaWQoKSB7XG4gICAgdGhpcy5zZXNzaW9uTWFuYWdlLmNvbXBsZXRlKCk7XG4gICAgaWYgKFxuICAgICAgRGF0ZS5ub3coKSAtIHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oU0VTU0lPTl9NQU5BR0VfS0VZKSkgPFxuICAgICAgNTAwMFxuICAgICkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShTRVNTSU9OX01BTkFHRV9LRVkpO1xuICAgICAgdGhpcy5hdXRoLmxvZ291dCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZml4IGNpcmNsZSBkZXBlbmRlbmN5IGVycm9yXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgY2F0Y2hQcm9taXNlKFxuICAgICAgdGhpcy5kaWFsb2cuY29uZmlybSh7XG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUuZ2V0KCdzZXNzaW9uX2ludmFsaWRfaGludCcpLFxuICAgICAgICBjb25maXJtVGV4dDogdHJhbnNsYXRlLmdldCgnaV9rbm93JyksXG4gICAgICAgIGNhbmNlbEJ1dHRvbjogZmFsc2UsXG4gICAgICB9KSxcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmF1dGgubG9nb3V0KHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VuYXV0aG9yaXplZChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdGhpcy5pczQwMShlcnJvclJlcykgJiYgZXJyb3JSZXMuZXJyb3IucmVhc29uID09PSAnVW5hdXRob3JpemVkJztcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnZhbGlkVXNlcihlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdGhpcy5pczQwMShlcnJvclJlcykgJiYgZXJyb3JSZXMuZXJyb3IucmVhc29uID09PSAnSW52YWxpZFVzZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0YXR1cyhlcnJvcjogc3RyaW5nIHwgU3RhdHVzKTogZXJyb3IgaXMgU3RhdHVzIHtcbiAgICByZXR1cm4gZXJyb3IgJiYgdHlwZW9mIGVycm9yICE9PSAnc3RyaW5nJyAmJiAnY29kZScgaW4gZXJyb3I7XG4gIH1cblxuICBwcml2YXRlIGlzV2F0Y2hSZXEoXG4gICAgYXBpQWRkcmVzczogc3RyaW5nLFxuICAgIHsgdXJsLCBwYXJhbXMgfTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gICkge1xuICAgIGNvbnN0IGlzU3RhbmRhcmRBcGkgPVxuICAgICAgdXJsLnN0YXJ0c1dpdGgoYXBpQWRkcmVzcyArICcvYXBpLycpIHx8XG4gICAgICB1cmwuc3RhcnRzV2l0aChhcGlBZGRyZXNzICsgJy9hcGlzLycpIHx8XG4gICAgICB1cmwuc3RhcnRzV2l0aChhcGlBZGRyZXNzICsgJy9rdWJlcm5ldGVzLycpO1xuICAgIGNvbnN0IGlzV2F0Y2hPbiA9IHBhcmFtcy5nZXQoJ3dhdGNoJyk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbiAgICByZXR1cm4gaXNTdGFuZGFyZEFwaSAmJiBpc1dhdGNoT247XG4gIH1cbn1cbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL2ludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQU8zQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUNMLEtBQUssRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILEVBQUUsRUFDRixTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xFLE9BQU8sRUFBVSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQUU1RCx3RUFBd0U7QUFDeEUsa0RBQWtEO0FBRWxELE1BQU0sT0FBTywrQkFBK0I7SUFHMUMsWUFFbUIsYUFBcUMsRUFDckMsVUFBNkIsRUFDN0IsUUFBa0IsRUFDbEIsTUFBcUIsRUFDckIsYUFBbUM7UUFKbkMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQ3JDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7SUFDbkQsQ0FBQztJ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QUssQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUM7SUFDMUUsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUEyQjtRQUMvQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDO0lBQ3pFLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBc0I7UUFDckMsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUM7SUFDL0QsQ0FBQztJQUVPLFVBQVUsQ0FDaEIsVUFBa0IsRUFDbEIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUF3QjtRQUVyQyxNQUFNLGFBQWEsR0FDakIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUNyQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztRQUNoRSxPQUFPLGFBQWEsSUFBSSxTQUFTLENBQUM7SUFDcEMsQ0FBQztnR0FuS1UsK0JBQStCLGNBSWhDLGNBQWM7dUVBSmIsK0JBQStCLFdBQS9CLCtCQUErQjs7aUZBQS9CLCtCQUErQjtjQUQzQyxVQUFVOztzQkFLTixNQUFNO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBhdXRob3JpemF0aW9uXG4gKi9cblxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBORVZFUixcbiAgdGhyb3dFcnJvcixcbiAgY2F0Y2hFcnJvcixcbiAgY29uY2F0TWFwLFxuICB0YWtlLFxuICBtYXAsXG4gIG9mLFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlHYXRld2F5U2VydmljZSB9IGZyb20gJy4uL2FwaS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEFOT05ZTU9VU19BUElTLCBjYXRjaFByb21pc2UgfSBmcm9tICcuLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgU3RhdHVzLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5cbmltcG9ydCB7XG4gIFNFU1NJT05fTUFOQUdFX0tFWSxcbiAgU2Vzc2lvbk1hbmFnZVNlcnZpY2UsXG59IGZyb20gJy4vc2Vzc2lvbi1tYW5hZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zdGF0ZS5zZXJ2aWNlJztcblxuLy8gSW50ZXJjZXB0b3IgbXVzdCBwcm92aWRlIHdpdGggY29ycmVjdCBvcmRlciwgbm90IHByb3ZpZGUgaW4gcm9vdCBoZXJlXG4vLyBodHRwczovL2FuZ3VsYXIuY24vZ3VpZGUvaHR0cCNpbnRlcmNlcHRvci1vcmRlclxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhvcml6YXRpb25JbnRlcmNlcHRvclNlcnZpY2UgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwcml2YXRlIGF1dGg6IEF1dGhvcml6YXRpb25TdGF0ZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBTk9OWU1PVVNfQVBJUylcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFub255bW91c0FwaXM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGlHYXRld2F5OiBBcGlHYXRld2F5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25NYW5hZ2U6IFNlc3Npb25NYW5hZ2VTZXJ2aWNlLFxuICApIHt9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgaWYgKHRoaXMuaXNDb25zb2xlUmVsYXRpdmUocmVxLnVybCkpIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cblxuICAgIGNvbnN0IGF1dGggPSB0aGlzLmdldEF1dGgoKTtcblxuICAgIHJldHVybiBhdXRoLmdldFRva2VuUGF5bG9hZCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hcGlHYXRld2F5LmdldEFwaUFkZHJlc3MoKSksXG4gICAgICB0YWtlKDEpLFxuICAgICAgY29uY2F0TWFwKGFwaUFkZHJlc3MgPT4ge1xuICAgICAgICBpZiAoIXRoaXMubmVlZEF1dGhvcml6YXRpb24oYXBpQWRkcmVzcywgcmVxKSkge1xuICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2Vzc2lvbkludmFsaWQoZXJyb3IpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2Vzc2lvbkludmFsaWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDlvZPnlKjmiLfooqvnpoHnlKjoh6rliqjnmbvlh7pcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW52YWxpZFVzZXIoZXJyb3IpKSB7XG4gICAgICAgICAgICAgIGF1dGgubG9nb3V0KHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VuYXV0aG9yaXplZChlcnJvcikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1dhdGNoUmVxKGFwaUFkZHJlc3MsIHJlcSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXV0aC5jaGVja1Rva2VuKCkucGlwZShcbiAgICAgICAgICAgICAgbWFwKCgpID0+IGZhbHNlKSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih0cnVlKSksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChleHBpcmVkID0+XG4gICAgICAgICAgICAgICAgZXhwaXJlZCA/IHRoaXMucmV0cnlBdXRoKG5leHQsIHJlcSkgOiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gY29uc29sZSByZWxhdGl2ZSBtZWFucyB1cmwgcHJvdG9jb2wraG9zdG5hbWUrcG9ydCBzYW1lIHdpdGggY29uc29sZSwgZm9yIHRoaXMgY2FzZSwganVzdCBjaGVjayB1cmwgc3RhcnQgd2l0aCBgYGBodHRwKHMpOi8vYGBgIG9yIGBgYC8vYGBgXG4gIGlzQ29uc29sZVJlbGF0aXZlKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlVXJsID0gKHVybCB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAhbG93ZXJDYXNlVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJlxuICAgICAgIWxvd2VyQ2FzZVVybC5zdGFydHNXaXRoKCdodHRwczovLycpICYmXG4gICAgICAhbG93ZXJDYXNlVXJsLnN0YXJ0c1dpdGgoJy8vJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyeUF1dGgobmV4dDogSHR0cEhhbmRsZXIsIHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4pIHtcbiAgICBjb25zdCBhdXRoID0gdGhpcy5nZXRBdXRoKCk7XG4gICAgcmV0dXJuIGF1dGgucmVmcmVzaFRva2VuKCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoKSA9PlxuICAgICAgICBuZXh0LmhhbmRsZShyZXEpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1VuYXV0aG9yaXplZChlcnJvcikpIHtcbiAgICAgICAgICAgICAgYXV0aC5sb2dvdXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0aCgpIHtcbiAgICBpZiAoIXRoaXMuYXV0aCkge1xuICAgICAgdGhpcy5hdXRoID0gdGhpcy5pbmplY3Rvci5nZXQoQXV0aG9yaXphdGlvblN0YXRlU2VydmljZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmF1dGg7XG4gIH1cblxuICBwcml2YXRlIG5lZWRBdXRob3JpemF0aW9uKFxuICAgIGFwaUFkZHJlc3M6IHN0cmluZyxcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXJlcS51cmwuc3RhcnRzV2l0aChhcGlBZGRyZXNzKSB8fCByZXEuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5hbm9ueW1vdXNBcGlzLnNvbWUoYXBpID0+XG4gICAgICBhcGkgaW5zdGFuY2VvZiBSZWdFeHAgPyBhcGkudGVzdChyZXEudXJsKSA6IHJlcS51cmwuaW5jbHVkZXMoYXBpKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpczQwMSh7IGVycm9yIH06IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdGF0dXMoZXJyb3IpICYmIGVycm9yLmNvZGUgPT09IDQwMTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXNzaW9uSW52YWxpZChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBlcnJvclJlcztcbiAgICByZXR1cm4gdGhpcy5pczQwMShlcnJvclJlcykgJiYgZXJyb3IucmVhc29uID09PSAnU2Vzc2lvbkludmFsaWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZXNzaW9uSW52YWxpZCgpIHtcbiAgICB0aGlzLnNlc3Npb25NYW5hZ2UuY29tcGxldGUoKTtcbiAgICBpZiAoXG4gICAgICBEYXRlLm5vdygpIC0gcGFyc2VJbnQoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShTRVNTSU9OX01BTkFHRV9LRVkpKSA8XG4gICAgICA1MDAwXG4gICAgKSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFNFU1NJT05fTUFOQUdFX0tFWSk7XG4gICAgICB0aGlzLmF1dGgubG9nb3V0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBmaXggY2lyY2xlIGRlcGVuZGVuY3kgZXJyb3JcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBjYXRjaFByb21pc2UoXG4gICAgICB0aGlzLmRpYWxvZy5jb25maXJtKHtcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZS5nZXQoJ3Nlc3Npb25faW52YWxpZF9oaW50JyksXG4gICAgICAgIGNvbmZpcm1UZXh0OiB0cmFuc2xhdGUuZ2V0KCdpX2tub3cnKSxcbiAgICAgICAgY2FuY2VsQnV0dG9uOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuYXV0aC5sb2dvdXQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzVW5hdXRob3JpemVkKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLmlzNDAxKGVycm9yUmVzKSAmJiBlcnJvclJlcy5lcnJvci5yZWFzb24gPT09ICdVbmF1dGhvcml6ZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludmFsaWRVc2VyKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLmlzNDAxKGVycm9yUmVzKSAmJiBlcnJvclJlcy5lcnJvci5yZWFzb24gPT09ICdJbnZhbGlkVXNlcic7XG4gIH1cblxuICBwcml2YXRlIGlzU3RhdHVzKGVycm9yOiBzdHJpbmcgfCBTdGF0dXMpOiBlcnJvciBpcyBTdGF0dXMge1xuICAgIHJldHVybiBlcnJvciAmJiB0eXBlb2YgZXJyb3IgIT09ICdzdHJpbmcnICYmICdjb2RlJyBpbiBlcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNXYXRjaFJlcShcbiAgICBhcGlBZGRyZXNzOiBzdHJpbmcsXG4gICAgeyB1cmwsIHBhcmFtcyB9OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgKSB7XG4gICAgY29uc3QgaXNTdGFuZGFyZEFwaSA9XG4gICAgICB1cmwuc3RhcnRzV2l0aChhcGlBZGRyZXNzICsgJy9hcGkvJykgfHxcbiAgICAgIHVybC5zdGFydHNXaXRoKGFwaUFkZHJlc3MgKyAnL2FwaXMvJykgfHxcbiAgICAgIHVybC5zdGFydHNXaXRoKGFwaUFkZHJlc3MgKyAnL2t1YmVybmV0ZXMvJyk7XG4gICAgY29uc3QgaXNXYXRjaE9uID0gcGFyYW1zLmdldCgnd2F0Y2gnKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIHJldHVybiBpc1N0YW5kYXJkQXBpICYmIGlzV2F0Y2hPbjtcbiAgfVxufVxuIl19