@yelon/bis 14.2.0 → 15.0.0-beta.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 (119) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +23 -1
  3. package/esm2020/bis.mjs +2 -2
  4. package/esm2020/index.mjs +2 -0
  5. package/esm2020/public_api.mjs +2 -2
  6. package/esm2020/src/bis.config.mjs +11 -0
  7. package/esm2020/src/icon/style-icons.mjs +796 -0
  8. package/esm2020/src/index.mjs +12 -0
  9. package/esm2020/src/layout-basic/index.mjs +4 -0
  10. package/esm2020/src/layout-basic/interface.mjs +7 -0
  11. package/esm2020/src/layout-basic/layout-basic.component.mjs +312 -0
  12. package/esm2020/src/layout-basic/layout-display.service.mjs +87 -0
  13. package/esm2020/src/layout-nav/index.mjs +5 -0
  14. package/esm2020/src/layout-nav/layout-nav-application.component.mjs +262 -0
  15. package/esm2020/{layout/widgets/yz.application.group.component.mjs → src/layout-nav/layout-nav-group.component.mjs} +23 -21
  16. package/esm2020/src/layout-nav/layout-nav-tile.component.mjs +15 -0
  17. package/esm2020/src/layout-nav/types.mjs +7 -0
  18. package/esm2020/src/widgets/index.mjs +7 -0
  19. package/esm2020/src/widgets/yunzai-clear-storage.component.mjs +45 -0
  20. package/esm2020/src/widgets/yunzai-fullscreen.component.mjs +45 -0
  21. package/esm2020/src/widgets/yunzai-i18n.component.mjs +115 -0
  22. package/esm2020/src/widgets/yunzai-notify.component.mjs +183 -0
  23. package/esm2020/src/widgets/yunzai-theme-btn.component.mjs +195 -0
  24. package/esm2020/{layout/widgets/yz.user.component.mjs → src/widgets/yunzai-user.component.mjs} +6 -6
  25. package/esm2020/src/yunzai-act.guard.mjs +107 -0
  26. package/esm2020/src/yunzai-auth.service.mjs +153 -0
  27. package/esm2020/src/yunzai-default.interceptor.mjs +207 -0
  28. package/esm2020/src/yunzai-i18n.service.mjs +94 -0
  29. package/esm2020/src/yunzai-layout.module.mjs +76 -0
  30. package/esm2020/src/yunzai-startup.service.mjs +157 -0
  31. package/fesm2015/bis.mjs +2960 -1
  32. package/fesm2015/bis.mjs.map +1 -1
  33. package/fesm2020/bis.mjs +2968 -1
  34. package/fesm2020/bis.mjs.map +1 -1
  35. package/index.d.ts +0 -4
  36. package/index.less +1 -1
  37. package/package.json +12 -27
  38. package/public_api.d.ts +1 -2
  39. package/{layout → src}/bis.config.d.ts +0 -0
  40. package/{shared → src/icon}/style-icons.d.ts +0 -0
  41. package/src/index.d.ts +11 -0
  42. package/src/layout-basic/index.d.ts +3 -0
  43. package/src/layout-basic/interface.d.ts +24 -0
  44. package/src/layout-basic/layout-basic.component.d.ts +33 -0
  45. package/src/layout-basic/layout-display.service.d.ts +15 -0
  46. package/src/layout-nav/index.d.ts +4 -0
  47. package/src/layout-nav/layout-nav-application.component.d.ts +26 -0
  48. package/src/layout-nav/layout-nav-group.component.d.ts +17 -0
  49. package/src/layout-nav/layout-nav-tile.component.d.ts +6 -0
  50. package/src/layout-nav/types.d.ts +20 -0
  51. package/src/widgets/index.d.ts +6 -0
  52. package/{layout/widgets/yz.clear-storage.component.d.ts → src/widgets/yunzai-clear-storage.component.d.ts} +3 -3
  53. package/src/widgets/yunzai-fullscreen.component.d.ts +8 -0
  54. package/{layout/widgets/yz.i18n.component.d.ts → src/widgets/yunzai-i18n.component.d.ts} +5 -5
  55. package/{layout/widgets/yz.notify.component.d.ts → src/widgets/yunzai-notify.component.d.ts} +5 -5
  56. package/{layout/widgets/yz.them-btn.component.d.ts → src/widgets/yunzai-theme-btn.component.d.ts} +5 -5
  57. package/{layout/widgets/yz.user.component.d.ts → src/widgets/yunzai-user.component.d.ts} +3 -3
  58. package/{layout/act.guard.d.ts → src/yunzai-act.guard.d.ts} +1 -2
  59. package/{layout/yz.auth.service.d.ts → src/yunzai-auth.service.d.ts} +6 -7
  60. package/{layout/yz.default.interceptor.d.ts → src/yunzai-default.interceptor.d.ts} +4 -6
  61. package/{layout/yz.i18n.service.d.ts → src/yunzai-i18n.service.d.ts} +4 -3
  62. package/src/yunzai-layout.module.d.ts +21 -0
  63. package/src/yunzai-startup.service.d.ts +37 -0
  64. package/esm2020/layout/act.guard.mjs +0 -108
  65. package/esm2020/layout/bis.config.mjs +0 -11
  66. package/esm2020/layout/contact/contact.component.mjs +0 -492
  67. package/esm2020/layout/contact/contact.service.mjs +0 -146
  68. package/esm2020/layout/layout.mjs +0 -5
  69. package/esm2020/layout/layout.module.mjs +0 -76
  70. package/esm2020/layout/path-to-regexp.service.mjs +0 -238
  71. package/esm2020/layout/public_api.mjs +0 -15
  72. package/esm2020/layout/stomp.config.mjs +0 -18
  73. package/esm2020/layout/widgets/index.mjs +0 -9
  74. package/esm2020/layout/widgets/yz.application.component.mjs +0 -271
  75. package/esm2020/layout/widgets/yz.clear-storage.component.mjs +0 -45
  76. package/esm2020/layout/widgets/yz.fullscreen.component.mjs +0 -45
  77. package/esm2020/layout/widgets/yz.i18n.component.mjs +0 -115
  78. package/esm2020/layout/widgets/yz.notify.component.mjs +0 -183
  79. package/esm2020/layout/widgets/yz.them-btn.component.mjs +0 -195
  80. package/esm2020/layout/yz.auth.service.mjs +0 -155
  81. package/esm2020/layout/yz.basic.component.mjs +0 -269
  82. package/esm2020/layout/yz.default.interceptor.mjs +0 -207
  83. package/esm2020/layout/yz.i18n.service.mjs +0 -93
  84. package/esm2020/layout/yz.startup.service.mjs +0 -139
  85. package/esm2020/layout/yz.stomp.service.mjs +0 -88
  86. package/esm2020/shared/public_api.mjs +0 -5
  87. package/esm2020/shared/shared-yelon.module.mjs +0 -106
  88. package/esm2020/shared/shared-zorro.module.mjs +0 -81
  89. package/esm2020/shared/shared.mjs +0 -5
  90. package/esm2020/shared/shared.module.mjs +0 -115
  91. package/esm2020/shared/style-icons.mjs +0 -796
  92. package/fesm2015/layout.mjs +0 -2968
  93. package/fesm2015/layout.mjs.map +0 -1
  94. package/fesm2015/shared.mjs +0 -1103
  95. package/fesm2015/shared.mjs.map +0 -1
  96. package/fesm2020/layout.mjs +0 -2977
  97. package/fesm2020/layout.mjs.map +0 -1
  98. package/fesm2020/shared.mjs +0 -1103
  99. package/fesm2020/shared.mjs.map +0 -1
  100. package/layout/contact/contact.component.d.ts +0 -169
  101. package/layout/contact/contact.service.d.ts +0 -118
  102. package/layout/index.d.ts +0 -5
  103. package/layout/layout.module.d.ts +0 -21
  104. package/layout/path-to-regexp.service.d.ts +0 -26
  105. package/layout/public_api.d.ts +0 -14
  106. package/layout/stomp.config.d.ts +0 -3
  107. package/layout/style/index.less +0 -155
  108. package/layout/widgets/index.d.ts +0 -8
  109. package/layout/widgets/yz.application.component.d.ts +0 -49
  110. package/layout/widgets/yz.application.group.component.d.ts +0 -19
  111. package/layout/widgets/yz.fullscreen.component.d.ts +0 -8
  112. package/layout/yz.basic.component.d.ts +0 -27
  113. package/layout/yz.startup.service.d.ts +0 -36
  114. package/layout/yz.stomp.service.d.ts +0 -42
  115. package/shared/index.d.ts +0 -5
  116. package/shared/public_api.d.ts +0 -4
  117. package/shared/shared-yelon.module.d.ts +0 -3
  118. package/shared/shared-zorro.module.d.ts +0 -2
  119. package/shared/shared.module.d.ts +0 -94
@@ -1,269 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { WINDOW } from '@yelon/util';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@yelon/cache";
5
- import * as i2 from "./yz.stomp.service";
6
- import * as i3 from "@yelon/theme/layout-default";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "@angular/router";
9
- import * as i6 from "@yelon/abc/reuse-tab";
10
- import * as i7 from "ng-zorro-antd/core/transition-patch";
11
- import * as i8 from "ng-zorro-antd/menu";
12
- import * as i9 from "ng-zorro-antd/dropdown";
13
- import * as i10 from "ng-zorro-antd/icon";
14
- import * as i11 from "ng-zorro-antd/avatar";
15
- import * as i12 from "./widgets/yz.application.component";
16
- import * as i13 from "./widgets/yz.notify.component";
17
- import * as i14 from "./widgets/yz.them-btn.component";
18
- import * as i15 from "./widgets/yz.user.component";
19
- import * as i16 from "./widgets/yz.fullscreen.component";
20
- import * as i17 from "./widgets/yz.clear-storage.component";
21
- import * as i18 from "./widgets/yz.i18n.component";
22
- import * as i19 from "./widgets/yz.application.group.component";
23
- import * as i20 from "@yelon/theme";
24
- export class YzLayoutBasicComponent {
25
- constructor(cacheService, yzStompService, layoutService, injector) {
26
- this.cacheService = cacheService;
27
- this.yzStompService = yzStompService;
28
- this.layoutService = layoutService;
29
- this.injector = injector;
30
- this.options = {
31
- logoExpanded: `./assets/logo-full.svg`,
32
- logoCollapsed: `./assets/logo.svg`
33
- };
34
- this.intro = '';
35
- this.text = '';
36
- this.icon = '';
37
- this.showReuseTab = true;
38
- this.showHeader = true;
39
- this.showSider = true;
40
- this.headerType = 'application';
41
- }
42
- get reuseStyleSheet() {
43
- let cascadingStyleSheet = {};
44
- if (!this.showHeader) {
45
- cascadingStyleSheet = {
46
- ...cascadingStyleSheet,
47
- top: 0
48
- };
49
- }
50
- if (!this.showSider) {
51
- cascadingStyleSheet = {
52
- ...cascadingStyleSheet,
53
- left: '24px'
54
- };
55
- }
56
- return cascadingStyleSheet;
57
- }
58
- ngOnInit() {
59
- const current = this.cacheService.get('_yz_current', { mode: 'none' });
60
- const project = this.cacheService.get('_yz_project_info', { mode: 'none' });
61
- const headerType = this.cacheService.get('_yz_header_type', { mode: 'none' });
62
- if (headerType)
63
- this.headerType = headerType;
64
- this.text = current.text ? current.text : '应用名称';
65
- this.intro = current.intro ? current.intro : '应用描述';
66
- this.icon = current.icon ? current.icon : `./assets/tmp/img/avatar.jpg`;
67
- this.options.logoExpanded = project.maxLogoUrl ? project.maxLogoUrl : `./assets/logo-full.svg`;
68
- this.options.logoCollapsed = project.miniLogoUrl ? project.miniLogoUrl : `./assets/logo.svg`;
69
- this.yzStompService.listen();
70
- this.layoutService.reuseTab.asObservable().subscribe(show => (this.showReuseTab = show));
71
- this.layoutService.header.asObservable().subscribe(show => (this.showHeader = show));
72
- this.layoutService.sidebar.asObservable().subscribe(show => (this.showSider = show));
73
- }
74
- onHeaderTypeChange(type) {
75
- this.cacheService.set('_yz_header_type', type);
76
- this.injector.get(WINDOW).location.reload();
77
- }
78
- ngOnDestroy() {
79
- this.yzStompService.unListen();
80
- }
81
- }
82
- YzLayoutBasicComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: YzLayoutBasicComponent, deps: [{ token: i1.CacheService }, { token: i2.YzStompService }, { token: i3.LayoutService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
83
- YzLayoutBasicComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.11", type: YzLayoutBasicComponent, selector: "yz-layout-basic", ngImport: i0, template: `
84
- <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="showReuseTab ? contentTpl : noneTpl">
85
- <layout-default-header-item direction="left">
86
- <ng-container [ngSwitch]="headerType">
87
- <ng-container *ngSwitchCase="'application'">
88
- <yz-header-application></yz-header-application>
89
- </ng-container>
90
-
91
- <ng-container *ngSwitchCase="'group'">
92
- <yz-header-application-group></yz-header-application-group>
93
- </ng-container>
94
-
95
- <ng-container *ngSwitchDefault>
96
- <yz-header-application></yz-header-application>
97
- </ng-container>
98
- </ng-container>
99
- </layout-default-header-item>
100
-
101
- <layout-default-header-item direction="right" hidden="mobile">
102
- <yz-header-notify></yz-header-notify>
103
- </layout-default-header-item>
104
-
105
- <layout-default-header-item direction="right" hidden="mobile">
106
- <yz-header-theme-btn></yz-header-theme-btn>
107
- </layout-default-header-item>
108
-
109
- <layout-default-header-item direction="right" hidden="mobile">
110
- <div
111
- layout-default-header-item-trigger
112
- nz-dropdown
113
- [nzDropdownMenu]="settingsMenu"
114
- nzTrigger="click"
115
- nzPlacement="bottomRight"
116
- >
117
- <i nz-icon nzType="setting"></i>
118
- </div>
119
- <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
120
- <div nz-menu style="width: 200px;">
121
- <div nz-menu-item>
122
- {{ 'menu.application.mode' | i18n }}
123
- </div>
124
-
125
- <div nz-menu-item (click)="onHeaderTypeChange('application')">
126
- <i nz-icon nzType="appstore" class="mr-sm"></i>
127
- {{ 'menu.application.application' | i18n }}
128
- </div>
129
-
130
- <div nz-menu-item (click)="onHeaderTypeChange('group')">
131
- <i nz-icon nzType="group" class="mr-sm"></i>
132
- {{ 'menu.application.group' | i18n }}
133
- </div>
134
-
135
- <div nz-menu-item>
136
- <yz-header-fullscreen></yz-header-fullscreen>
137
- </div>
138
- <div nz-menu-item>
139
- <yz-header-clear-storage></yz-header-clear-storage>
140
- </div>
141
- <div nz-menu-item>
142
- <yz-header-i18n></yz-header-i18n>
143
- </div>
144
- </div>
145
- </nz-dropdown-menu>
146
- </layout-default-header-item>
147
- <layout-default-header-item direction="right">
148
- <yz-header-user></yz-header-user>
149
- </layout-default-header-item>
150
- <ng-template #asideUserTpl>
151
- <div nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu" class="yunzai-default__aside-user">
152
- <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="icon"></nz-avatar>
153
- <div class="yunzai-default__aside-user-info">
154
- <strong>{{ text }}</strong>
155
- <p class="mb0">{{ intro }}</p>
156
- </div>
157
- </div>
158
- <nz-dropdown-menu #userMenu="nzDropdownMenu">
159
- <ul nz-menu>
160
- <li nz-menu-item routerLink="/">{{ 'menu.backtohome' | i18n }}</li>
161
- </ul>
162
- </nz-dropdown-menu>
163
- </ng-template>
164
- <ng-template #contentTpl>
165
- <reuse-tab #reuseTab [ngStyle]="reuseStyleSheet"></reuse-tab>
166
- <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
167
- </ng-template>
168
- <ng-template #noneTpl>
169
- <router-outlet></router-outlet>
170
- </ng-template>
171
- </layout-default>
172
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i5.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.ReuseTabComponent, selector: "reuse-tab, [reuse-tab]", inputs: ["mode", "i18n", "debug", "max", "tabMaxWidth", "excludes", "allowClose", "keepingScroll", "storageState", "keepingScrollContainer", "customContextMenu", "tabBarExtraContent", "tabBarGutter", "tabBarStyle", "tabType", "routeParamMatchMode", "disabled", "titleRender", "canClose"], outputs: ["change", "close"], exportAs: ["reuseTab"] }, { kind: "component", type: i3.LayoutDefaultComponent, selector: "layout-default", inputs: ["options", "asideUser", "nav", "content", "customError"], exportAs: ["layoutDefault"] }, { kind: "component", type: i3.LayoutDefaultHeaderItemComponent, selector: "layout-default-header-item", inputs: ["hidden", "direction"] }, { kind: "directive", type: i3.LayoutDefaultHeaderItemTriggerDirective, selector: "[layout-default-header-item-trigger]" }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "directive", type: i8.NzMenuItemDirective, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i9.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i9.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i10.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i11.NzAvatarComponent, selector: "nz-avatar", inputs: ["nzShape", "nzSize", "nzGap", "nzText", "nzSrc", "nzSrcSet", "nzAlt", "nzIcon"], outputs: ["nzError"], exportAs: ["nzAvatar"] }, { kind: "component", type: i12.YzHeaderApplicationComponent, selector: "yz-header-application" }, { kind: "component", type: i13.YzHeaderNotifyComponent, selector: "yz-header-notify" }, { kind: "component", type: i14.YzHeaderThemBtnComponent, selector: "yz-header-theme-btn", inputs: ["types", "devTips", "deployUrl"] }, { kind: "component", type: i15.YzHeaderUserComponent, selector: "yz-header-user" }, { kind: "component", type: i16.YzHeaderFullScreenComponent, selector: "yz-header-fullscreen" }, { kind: "component", type: i17.YzHeaderClearStorageComponent, selector: "yz-header-clear-storage" }, { kind: "component", type: i18.YzHeaderI18NComponent, selector: "yz-header-i18n", inputs: ["showLangText"] }, { kind: "component", type: i19.YzHeaderApplicationGroupComponent, selector: "yz-header-application-group" }, { kind: "pipe", type: i20.I18nPipe, name: "i18n" }] });
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: YzLayoutBasicComponent, decorators: [{
174
- type: Component,
175
- args: [{
176
- selector: 'yz-layout-basic',
177
- template: `
178
- <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="showReuseTab ? contentTpl : noneTpl">
179
- <layout-default-header-item direction="left">
180
- <ng-container [ngSwitch]="headerType">
181
- <ng-container *ngSwitchCase="'application'">
182
- <yz-header-application></yz-header-application>
183
- </ng-container>
184
-
185
- <ng-container *ngSwitchCase="'group'">
186
- <yz-header-application-group></yz-header-application-group>
187
- </ng-container>
188
-
189
- <ng-container *ngSwitchDefault>
190
- <yz-header-application></yz-header-application>
191
- </ng-container>
192
- </ng-container>
193
- </layout-default-header-item>
194
-
195
- <layout-default-header-item direction="right" hidden="mobile">
196
- <yz-header-notify></yz-header-notify>
197
- </layout-default-header-item>
198
-
199
- <layout-default-header-item direction="right" hidden="mobile">
200
- <yz-header-theme-btn></yz-header-theme-btn>
201
- </layout-default-header-item>
202
-
203
- <layout-default-header-item direction="right" hidden="mobile">
204
- <div
205
- layout-default-header-item-trigger
206
- nz-dropdown
207
- [nzDropdownMenu]="settingsMenu"
208
- nzTrigger="click"
209
- nzPlacement="bottomRight"
210
- >
211
- <i nz-icon nzType="setting"></i>
212
- </div>
213
- <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
214
- <div nz-menu style="width: 200px;">
215
- <div nz-menu-item>
216
- {{ 'menu.application.mode' | i18n }}
217
- </div>
218
-
219
- <div nz-menu-item (click)="onHeaderTypeChange('application')">
220
- <i nz-icon nzType="appstore" class="mr-sm"></i>
221
- {{ 'menu.application.application' | i18n }}
222
- </div>
223
-
224
- <div nz-menu-item (click)="onHeaderTypeChange('group')">
225
- <i nz-icon nzType="group" class="mr-sm"></i>
226
- {{ 'menu.application.group' | i18n }}
227
- </div>
228
-
229
- <div nz-menu-item>
230
- <yz-header-fullscreen></yz-header-fullscreen>
231
- </div>
232
- <div nz-menu-item>
233
- <yz-header-clear-storage></yz-header-clear-storage>
234
- </div>
235
- <div nz-menu-item>
236
- <yz-header-i18n></yz-header-i18n>
237
- </div>
238
- </div>
239
- </nz-dropdown-menu>
240
- </layout-default-header-item>
241
- <layout-default-header-item direction="right">
242
- <yz-header-user></yz-header-user>
243
- </layout-default-header-item>
244
- <ng-template #asideUserTpl>
245
- <div nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu" class="yunzai-default__aside-user">
246
- <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="icon"></nz-avatar>
247
- <div class="yunzai-default__aside-user-info">
248
- <strong>{{ text }}</strong>
249
- <p class="mb0">{{ intro }}</p>
250
- </div>
251
- </div>
252
- <nz-dropdown-menu #userMenu="nzDropdownMenu">
253
- <ul nz-menu>
254
- <li nz-menu-item routerLink="/">{{ 'menu.backtohome' | i18n }}</li>
255
- </ul>
256
- </nz-dropdown-menu>
257
- </ng-template>
258
- <ng-template #contentTpl>
259
- <reuse-tab #reuseTab [ngStyle]="reuseStyleSheet"></reuse-tab>
260
- <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)"></router-outlet>
261
- </ng-template>
262
- <ng-template #noneTpl>
263
- <router-outlet></router-outlet>
264
- </ng-template>
265
- </layout-default>
266
- `
267
- }]
268
- }], ctorParameters: function () { return [{ type: i1.CacheService }, { type: i2.YzStompService }, { type: i3.LayoutService }, { type: i0.Injector }]; } });
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouYmFzaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC95ei5iYXNpYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFJdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtHckMsTUFBTSxPQUFPLHNCQUFzQjtJQWdDakMsWUFDVSxZQUEwQixFQUMxQixjQUE4QixFQUM5QixhQUE0QixFQUM1QixRQUFrQjtRQUhsQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQW5DNUIsWUFBTyxHQUF5QjtZQUM5QixZQUFZLEVBQUUsd0JBQXdCO1lBQ3RDLGFBQWEsRUFBRSxtQkFBbUI7U0FDbkMsQ0FBQztRQUVGLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixlQUFVLEdBQVcsYUFBYSxDQUFDO0lBd0IvQixDQUFDO0lBdEJMLElBQUksZUFBZTtRQUNqQixJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixtQkFBbUIsR0FBRztnQkFDcEIsR0FBRyxtQkFBbUI7Z0JBQ3RCLEdBQUcsRUFBRSxDQUFDO2FBQ1AsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFT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Q1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlGVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ0B5ZWxvbi9jYWNoZSc7XG5pbXBvcnQgeyBMYXlvdXREZWZhdWx0T3B0aW9ucywgTGF5b3V0U2VydmljZSB9IGZyb20gJ0B5ZWxvbi90aGVtZS9sYXlvdXQtZGVmYXVsdCc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICdAeWVsb24vdXRpbCc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBZelN0b21wU2VydmljZSB9IGZyb20gJy4veXouc3RvbXAuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l6LWxheW91dC1iYXNpYycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGxheW91dC1kZWZhdWx0IFtvcHRpb25zXT1cIm9wdGlvbnNcIiBbYXNpZGVVc2VyXT1cImFzaWRlVXNlclRwbFwiIFtjb250ZW50XT1cInNob3dSZXVzZVRhYiA/IGNvbnRlbnRUcGwgOiBub25lVHBsXCI+XG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwibGVmdFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoZWFkZXJUeXBlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FwcGxpY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPHl6LWhlYWRlci1hcHBsaWNhdGlvbj48L3l6LWhlYWRlci1hcHBsaWNhdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIj5cbiAgICAgICAgICAgIDx5ei1oZWFkZXItYXBwbGljYXRpb24tZ3JvdXA+PC95ei1oZWFkZXItYXBwbGljYXRpb24tZ3JvdXA+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8eXotaGVhZGVyLWFwcGxpY2F0aW9uPjwveXotaGVhZGVyLWFwcGxpY2F0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0+XG5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJyaWdodFwiIGhpZGRlbj1cIm1vYmlsZVwiPlxuICAgICAgICA8eXotaGVhZGVyLW5vdGlmeT48L3l6LWhlYWRlci1ub3RpZnk+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuXG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwicmlnaHRcIiBoaWRkZW49XCJtb2JpbGVcIj5cbiAgICAgICAgPHl6LWhlYWRlci10aGVtZS1idG4+PC95ei1oZWFkZXItdGhlbWUtYnRuPlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cblxuICAgICAgPGxheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtIGRpcmVjdGlvbj1cInJpZ2h0XCIgaGlkZGVuPVwibW9iaWxlXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbS10cmlnZ2VyXG4gICAgICAgICAgbnotZHJvcGRvd25cbiAgICAgICAgICBbbnpEcm9wZG93bk1lbnVdPVwic2V0dGluZ3NNZW51XCJcbiAgICAgICAgICBuelRyaWdnZXI9XCJjbGlja1wiXG4gICAgICAgICAgbnpQbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cInNldHRpbmdcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bnotZHJvcGRvd24tbWVudSAjc2V0dGluZ3NNZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgICAgICA8ZGl2IG56LW1lbnUgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IG56LW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAge3sgJ21lbnUuYXBwbGljYXRpb24ubW9kZScgfCBpMThuIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBuei1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uSGVhZGVyVHlwZUNoYW5nZSgnYXBwbGljYXRpb24nKVwiPlxuICAgICAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImFwcHN0b3JlXCIgY2xhc3M9XCJtci1zbVwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ21lbnUuYXBwbGljYXRpb24uYXBwbGljYXRpb24nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgbnotbWVudS1pdGVtIChjbGljayk9XCJvbkhlYWRlclR5cGVDaGFuZ2UoJ2dyb3VwJylcIj5cbiAgICAgICAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJncm91cFwiIGNsYXNzPVwibXItc21cIj48L2k+XG4gICAgICAgICAgICAgIHt7ICdtZW51LmFwcGxpY2F0aW9uLmdyb3VwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IG56LW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAgPHl6LWhlYWRlci1mdWxsc2NyZWVuPjwveXotaGVhZGVyLWZ1bGxzY3JlZW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbnotbWVudS1pdGVtPlxuICAgICAgICAgICAgICA8eXotaGVhZGVyLWNsZWFyLXN0b3JhZ2U+PC95ei1oZWFkZXItY2xlYXItc3RvcmFnZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBuei1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgIDx5ei1oZWFkZXItaTE4bj48L3l6LWhlYWRlci1pMThuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbnotZHJvcGRvd24tbWVudT5cbiAgICAgIDwvbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0+XG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwicmlnaHRcIj5cbiAgICAgICAgPHl6LWhlYWRlci11c2VyPjwveXotaGVhZGVyLXVzZXI+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuICAgICAgPG5nLXRlbXBsYXRlICNhc2lkZVVzZXJUcGw+XG4gICAgICAgIDxkaXYgbnotZHJvcGRvd24gbnpUcmlnZ2VyPVwiY2xpY2tcIiBbbnpEcm9wZG93bk1lbnVdPVwidXNlck1lbnVcIiBjbGFzcz1cInl1bnphaS1kZWZhdWx0X19hc2lkZS11c2VyXCI+XG4gICAgICAgICAgPG56LWF2YXRhciBjbGFzcz1cInl1bnphaS1kZWZhdWx0X19hc2lkZS11c2VyLWF2YXRhclwiIFtuelNyY109XCJpY29uXCI+PC9uei1hdmF0YXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInl1bnphaS1kZWZhdWx0X19hc2lkZS11c2VyLWluZm9cIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYjBcIj57eyBpbnRybyB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuei1kcm9wZG93bi1tZW51ICN1c2VyTWVudT1cIm56RHJvcGRvd25NZW51XCI+XG4gICAgICAgICAgPHVsIG56LW1lbnU+XG4gICAgICAgICAgICA8bGkgbnotbWVudS1pdGVtIHJvdXRlckxpbms9XCIvXCI+e3sgJ21lbnUuYmFja3RvaG9tZScgfCBpMThuIH19PC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50VHBsPlxuICAgICAgICA8cmV1c2UtdGFiICNyZXVzZVRhYiBbbmdTdHlsZV09XCJyZXVzZVN0eWxlU2hlZXRcIj48L3JldXNlLXRhYj5cbiAgICAgICAgPHJvdXRlci1vdXRsZXQgKGFjdGl2YXRlKT1cInJldXNlVGFiLmFjdGl2YXRlKCRldmVudClcIiAoYXR0YWNoKT1cInJldXNlVGFiLmFjdGl2YXRlKCRldmVudClcIj48L3JvdXRlci1vdXRsZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNub25lVHBsPlxuICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGF5b3V0LWRlZmF1bHQ+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgWXpMYXlvdXRCYXNpY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9uczogTGF5b3V0RGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgbG9nb0V4cGFuZGVkOiBgLi9hc3NldHMvbG9nby1mdWxsLnN2Z2AsXG4gICAgbG9nb0NvbGxhcHNlZDogYC4vYXNzZXRzL2xvZ28uc3ZnYFxuICB9O1xuXG4gIGludHJvOiBzdHJpbmcgPSAnJztcbiAgdGV4dDogc3RyaW5nID0gJyc7XG4gIGljb246IHN0cmluZyA9ICcnO1xuXG4gIHNob3dSZXVzZVRhYjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93U2lkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBoZWFkZXJUeXBlOiBzdHJpbmcgPSAnYXBwbGljYXRpb24nO1xuXG4gIGdldCByZXVzZVN0eWxlU2hlZXQoKTogTnpTYWZlQW55IHtcbiAgICBsZXQgY2FzY2FkaW5nU3R5bGVTaGVldCA9IHt9O1xuICAgIGlmICghdGhpcy5zaG93SGVhZGVyKSB7XG4gICAgICBjYXNjYWRpbmdTdHlsZVNoZWV0ID0ge1xuICAgICAgICAuLi5jYXNjYWRpbmdTdHlsZVNoZWV0LFxuICAgICAgICB0b3A6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5zaG93U2lkZXIpIHtcbiAgICAgIGNhc2NhZGluZ1N0eWxlU2hlZXQgPSB7XG4gICAgICAgIC4uLmNhc2NhZGluZ1N0eWxlU2hlZXQsXG4gICAgICAgIGxlZnQ6ICcyNHB4J1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNhc2NhZGluZ1N0eWxlU2hlZXQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgeXpTdG9tcFNlcnZpY2U6IFl6U3RvbXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQ6IE56U2FmZUFueSA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X2N1cnJlbnQnLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBjb25zdCBwcm9qZWN0OiBOelNhZmVBbnkgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9wcm9qZWN0X2luZm8nLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBjb25zdCBoZWFkZXJUeXBlID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfaGVhZGVyX3R5cGUnLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBpZiAoaGVhZGVyVHlwZSkgdGhpcy5oZWFkZXJUeXBlID0gaGVhZGVyVHlwZTtcbiAgICB0aGlzLnRleHQgPSBjdXJyZW50LnRleHQgPyBjdXJyZW50LnRleHQgOiAn5bqU55So5ZCN56ewJztcbiAgICB0aGlzLmludHJvID0gY3VycmVudC5pbnRybyA/IGN1cnJlbnQuaW50cm8gOiAn5bqU55So5o+P6L+wJztcbiAgICB0aGlzLmljb24gPSBjdXJyZW50Lmljb24gPyBjdXJyZW50Lmljb24gOiBgLi9hc3NldHMvdG1wL2ltZy9hdmF0YXIuanBnYDtcbiAgICB0aGlzLm9wdGlvbnMubG9nb0V4cGFuZGVkID0gcHJvamVjdC5tYXhMb2dvVXJsID8gcHJvamVjdC5tYXhMb2dvVXJsIDogYC4vYXNzZXRzL2xvZ28tZnVsbC5zdmdgO1xuICAgIHRoaXMub3B0aW9ucy5sb2dvQ29sbGFwc2VkID0gcHJvamVjdC5taW5pTG9nb1VybCA/IHByb2plY3QubWluaUxvZ29VcmwgOiBgLi9hc3NldHMvbG9nby5zdmdgO1xuICAgIHRoaXMueXpTdG9tcFNlcnZpY2UubGlzdGVuKCk7XG4gICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnJldXNlVGFiLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShzaG93ID0+ICh0aGlzLnNob3dSZXVzZVRhYiA9IHNob3cpKTtcbiAgICB0aGlzLmxheW91dFNlcnZpY2UuaGVhZGVyLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShzaG93ID0+ICh0aGlzLnNob3dIZWFkZXIgPSBzaG93KSk7XG4gICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnNpZGViYXIuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHNob3cgPT4gKHRoaXMuc2hvd1NpZGVyID0gc2hvdykpO1xuICB9XG5cbiAgb25IZWFkZXJUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X2hlYWRlcl90eXBlJywgdHlwZSk7XG4gICAgdGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMueXpTdG9tcFNlcnZpY2UudW5MaXN0ZW4oKTtcbiAgfVxufVxuIl19
@@ -1,207 +0,0 @@
1
- import { HttpErrorResponse, HttpResponse, HttpResponseBase } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { BehaviorSubject, of, throwError, catchError, filter, mergeMap, switchMap, take } from 'rxjs';
5
- import { YA_SERVICE_TOKEN, ALLOW_ANONYMOUS } from '@yelon/auth';
6
- import { YUNZAI_I18N_TOKEN, _HttpClient } from '@yelon/theme';
7
- import { WINDOW } from '@yelon/util';
8
- import { YunzaiConfigService } from '@yelon/util/config';
9
- import { log } from '@yelon/util/other';
10
- import { NzNotificationService } from 'ng-zorro-antd/notification';
11
- import { mergeBisConfig } from './bis.config';
12
- import * as i0 from "@angular/core";
13
- const CODEMESSAGE = {
14
- 200: '服务器成功返回请求的数据。',
15
- 201: '新建或修改数据成功。',
16
- 202: '一个请求已经进入后台排队(异步任务)。',
17
- 204: '删除数据成功。',
18
- 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
19
- 401: '用户没有权限(令牌、用户名、密码错误)。',
20
- 403: '用户得到授权,但是访问是被禁止的。',
21
- 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
22
- 406: '请求的格式不可得。',
23
- 410: '请求的资源被永久删除,且不会再得到的。',
24
- 422: '当创建一个对象时,发生一个验证错误。',
25
- 500: '服务器发生错误,请检查服务器。',
26
- 502: '网关错误。',
27
- 503: '服务不可用,服务器暂时过载或维护。',
28
- 504: '网关超时。'
29
- };
30
- /**
31
- * 默认HTTP拦截器,其注册细节见 `app.module.ts`
32
- */
33
- export class YzDefaultInterceptor {
34
- constructor(injector) {
35
- this.injector = injector;
36
- this.jump = false;
37
- this.refreshToking = false;
38
- this.refreshToken$ = new BehaviorSubject(null);
39
- if (this.config.refreshTokenType === 'auth-refresh') {
40
- console.error("can't use auth-refresh, please change yz.default.interceptor to default.interceptor!");
41
- }
42
- }
43
- get notification() {
44
- return this.injector.get(NzNotificationService);
45
- }
46
- get tokenSrv() {
47
- return this.injector.get(YA_SERVICE_TOKEN);
48
- }
49
- get http() {
50
- return this.injector.get(_HttpClient);
51
- }
52
- get config() {
53
- return mergeBisConfig(this.injector.get(YunzaiConfigService));
54
- }
55
- goTo(url) {
56
- setTimeout(() => this.injector.get(Router).navigateByUrl(url));
57
- }
58
- checkStatus(ev) {
59
- if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
60
- return;
61
- }
62
- if (ev instanceof HttpErrorResponse && (ev.error.message || ev.error.errorMessage)) {
63
- if (ev.error.errorMessage) {
64
- this.notification.error(`发生了一些错误 `, ev.error.errorMessage);
65
- }
66
- else {
67
- this.notification.error(`发生了一些错误 `, ev.error.message);
68
- }
69
- return;
70
- }
71
- if (ev instanceof HttpResponse && ev.body.errorMessage) {
72
- this.notification.error(`发生了一些错误 `, ev.body.errorMessage);
73
- return;
74
- }
75
- const errortext = CODEMESSAGE[ev.status] || ev.statusText;
76
- this.notification.error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
77
- }
78
- ToLogin() {
79
- this.notification.error(`未登录或登录状态已过期,5秒后将跳转到登录页面。`, ``);
80
- setTimeout(() => {
81
- localStorage.clear();
82
- this.injector.get(WINDOW).location.href = `${this.config.baseUrl}/cas-proxy/app/logout`;
83
- }, 5000);
84
- }
85
- reAttachToken(req) {
86
- const token = this.tokenSrv.get()?.token;
87
- return req.clone({
88
- setHeaders: {
89
- Authorization: `Bearer ${token}`
90
- }
91
- });
92
- }
93
- refreshTokenRequest() {
94
- const model = this.tokenSrv.get();
95
- const form = new FormData();
96
- form.set('refresh_token', model?.refreshToken);
97
- form.set('grant_type', 'refresh_token');
98
- form.set('scope', 'webapp');
99
- log('yz.default.interceptor: use the refresh token to request a new token', model?.refreshToken);
100
- // return this.http.post(`/auth/user/token/refresh?_allow_anonymous=true`, form);
101
- return this.http.post(`/auth/oauth/getOrCreateToken/webapp`, form);
102
- }
103
- tryRefreshToken(ev, req, next) {
104
- // 连刷新Token的请求都错了,那就是真错了
105
- if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
106
- this.ToLogin();
107
- return throwError(() => ev);
108
- }
109
- // 正在刷新token,所有其他请求排队
110
- if (this.refreshToking) {
111
- return this.refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next.handle(this.reAttachToken(req))));
112
- }
113
- //尝试调用刷新 Token
114
- this.refreshToking = true;
115
- this.refreshToken$.next(null);
116
- // 处理Token
117
- return this.refreshTokenRequest().pipe(switchMap(res => {
118
- log('yz.default.interceptor: refresh token accessed -> ', res);
119
- // 重新保存新 token
120
- const { access_token, expires_in, refresh_token, scope, token_type } = res;
121
- this.tokenSrv.set({
122
- token: access_token,
123
- expired: expires_in,
124
- refreshToken: refresh_token,
125
- tokenType: token_type,
126
- scope
127
- });
128
- // 通知后续请求继续执行
129
- this.refreshToking = false;
130
- this.refreshToken$.next(res);
131
- // 重新发起请求
132
- return next.handle(this.reAttachToken(req));
133
- }), catchError(err => {
134
- this.refreshToking = false;
135
- this.ToLogin();
136
- return throwError(() => err);
137
- }));
138
- }
139
- getAdditionalHeaders(headers) {
140
- const res = {};
141
- const lang = this.injector.get(YUNZAI_I18N_TOKEN).currentLang;
142
- if (!headers?.has('Accept-Language') && lang) {
143
- res['Accept-Language'] = lang;
144
- }
145
- return res;
146
- }
147
- handleData(ev, req, next) {
148
- this.checkStatus(ev);
149
- switch (ev.status) {
150
- case 200:
151
- return of(ev);
152
- case 401:
153
- if (this.config.refreshTokenEnabled && this.config.refreshTokenType === 're-request') {
154
- return this.tryRefreshToken(ev, req, next);
155
- }
156
- this.ToLogin();
157
- break;
158
- case 403:
159
- case 404:
160
- case 500:
161
- if (this.jump) {
162
- this.goTo(`/exception/${ev.status}`);
163
- }
164
- break;
165
- default:
166
- if (ev instanceof HttpErrorResponse) {
167
- console.warn('未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起,请参考 https://ng.yunzainfo.com/docs/server 解决跨域问题', ev);
168
- }
169
- break;
170
- }
171
- if (ev instanceof HttpErrorResponse) {
172
- return throwError(() => ev);
173
- }
174
- else {
175
- return of(ev);
176
- }
177
- }
178
- intercept(req, next) {
179
- if (req.context.get(ALLOW_ANONYMOUS))
180
- return next.handle(req);
181
- log('yz.default.interceptor.ts: ', 'request ', req);
182
- // 统一加前缀
183
- let url = req.url;
184
- if (!url.startsWith('https://') && !url.startsWith('http://')) {
185
- url = this.config.baseUrl + url;
186
- }
187
- if (url.includes('.json') && url.includes('assets')) {
188
- url = req.url;
189
- }
190
- // 加入语言头
191
- const newReq = req.clone({ url, setHeaders: this.getAdditionalHeaders(req.headers) });
192
- return next.handle(newReq).pipe(mergeMap(ev => {
193
- // 允许统一对请求错误处理
194
- if (ev instanceof HttpResponseBase) {
195
- return this.handleData(ev, newReq, next);
196
- }
197
- // 若一切都正常,则后续操作
198
- return of(ev);
199
- }), catchError((err) => this.handleData(err, newReq, next)));
200
- }
201
- }
202
- YzDefaultInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: YzDefaultInterceptor, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
203
- YzDefaultInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: YzDefaultInterceptor });
204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: YzDefaultInterceptor, decorators: [{
205
- type: Injectable
206
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouZGVmYXVsdC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXouZGVmYXVsdC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBTWpCLFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxNQUFNLFdBQVcsR0FBOEI7SUFDN0MsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLFlBQVk7SUFDakIsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQixHQUFHLEVBQUUsU0FBUztJQUNkLEdBQUcsRUFBRSw2QkFBNkI7SUFDbEMsR0FBRyxFQUFFLHNCQUFz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QUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3RCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDZjtRQUNELFFBQVE7UUFDUixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUM3QixRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDWixjQUFjO1lBQ2QsSUFBSSxFQUFFLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsZUFBZTtZQUNmLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUMzRSxDQUFDO0lBQ0osQ0FBQzs7a0hBbk1VLG9CQUFvQjtzSEFBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEV2ZW50LFxuICBIdHRwSGFuZGxlcixcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBSZXNwb25zZSxcbiAgSHR0cFJlc3BvbnNlQmFzZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBZQV9TRVJWSUNFX1RPS0VOLCBJVG9rZW5TZXJ2aWNlLCBBTExPV19BTk9OWU1PVVMgfSBmcm9tICdAeWVsb24vYXV0aCc7XG5pbXBvcnQgeyBZVU5aQUlfSTE4Tl9UT0tFTiwgX0h0dHBDbGllbnQgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnQHllbG9uL3V0aWwnO1xuaW1wb3J0IHsgWXVuemFpQnVzaW5lc3NDb25maWcsIFl1bnphaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAeWVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnQHllbG9uL3V0aWwvb3RoZXInO1xuaW1wb3J0IHsgTnpOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9ub3RpZmljYXRpb24nO1xuXG5pbXBvcnQgeyBtZXJnZUJpc0NvbmZpZyB9IGZyb20gJy4vYmlzLmNvbmZpZyc7XG5cbmNvbnN0IENPREVNRVNTQUdFOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAyMDA6ICfmnI3liqHlmajmiJDlip/ov5Tlm57or7fmsYLnmoTmlbDmja7jgIInLFxuICAyMDE6ICfmlrDlu7rmiJbkv67mlLnmlbDmja7miJDlip/jgIInLFxuICAyMDI6ICfkuIDkuKror7fmsYLlt7Lnu4/ov5vlhaXlkI7lj7DmjpLpmJ/vvIjlvILmraXku7vliqHvvInjgIInLFxuICAyMDQ6ICfliKDpmaTmlbDmja7miJDlip/jgIInLFxuICA0MDA6ICflj5Hlh7rnmoTor7fmsYLmnInplJnor6/vvIzmnI3liqHlmajmsqHmnInov5vooYzmlrDlu7rmiJbkv67mlLnmlbDmja7nmoTmk43kvZzjgIInLFxuICA0MDE6ICfnlKjmiLfmsqHmnInmnYPpmZDvvIjku6TniYzjgIHnlKjmiLflkI3jgIHlr4bnoIHplJnor6/vvInjgIInLFxuICA0MDM6ICfnlKjmiLflvpfliLDmjojmnYPvvIzkvYbmmK/orr/pl67mmK/ooqvnpoHmraLnmoTjgIInLFxuICA0MDQ6ICflj5Hlh7rnmoTor7fmsYLpkojlr7nnmoTmmK/kuI3lrZjlnKjnmoTorrDlvZXvvIzmnI3liqHlmajmsqHmnInov5vooYzmk43kvZzjgIInLFxuICA0MDY6ICfor7fmsYLnmoTmoLzlvI/kuI3lj6/lvpfjgIInLFxuICA0MTA6ICfor7fmsYLnmoTotYTmupDooqvmsLjkuYXliKDpmaTvvIzkuJTkuI3kvJrlho3lvpfliLDnmoTjgIInLFxuICA0MjI6ICflvZPliJvlu7rkuIDkuKrlr7nosaHml7bvvIzlj5HnlJ/kuIDkuKrpqozor4HplJnor6/jgIInLFxuICA1MDA6ICfmnI3liqHlmajlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XmnI3liqHlmajjgIInLFxuICA1MDI6ICfnvZHlhbPplJnor6/jgIInLFxuICA1MDM6ICfmnI3liqHkuI3lj6/nlKjvvIzmnI3liqHlmajmmoLml7bov4fovb3miJbnu7TmiqTjgIInLFxuICA1MDQ6ICfnvZHlhbPotoXml7bjgIInXG59O1xuXG4vKipcbiAqIOm7mOiupEhUVFDmi6bmiKrlmajvvIzlhbbms6jlhoznu4boioLop4EgYGFwcC5tb2R1bGUudHNgXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBZekRlZmF1bHRJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHByaXZhdGUganVtcCA9IGZhbHNlO1xuICBwcml2YXRlIHJlZnJlc2hUb2tpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW4kOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBwcml2YXRlIGdldCBub3RpZmljYXRpb24oKTogTnpOb3RpZmljYXRpb25TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoTnpOb3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRva2VuU3J2KCk6IElUb2tlblNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChZQV9TRVJWSUNFX1RPS0VOKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGh0dHAoKTogX0h0dHBDbGllbnQge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChfSHR0cENsaWVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25maWcoKTogWXVuemFpQnVzaW5lc3NDb25maWcge1xuICAgIHJldHVybiBtZXJnZUJpc0NvbmZpZyh0aGlzLmluamVjdG9yLmdldChZdW56YWlDb25maWdTZXJ2aWNlKSk7XG4gIH1cblxuICBwcml2YXRlIGdvVG8odXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcikubmF2aWdhdGVCeVVybCh1cmwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlblR5cGUgPT09ICdhdXRoLXJlZnJlc2gnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiY2FuJ3QgdXNlIGF1dGgtcmVmcmVzaCwgcGxlYXNlIGNoYW5nZSB5ei5kZWZhdWx0LmludGVyY2VwdG9yIHRvIGRlZmF1bHQuaW50ZXJjZXB0b3IhXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tTdGF0dXMoZXY6IEh0dHBSZXNwb25zZUJhc2UpOiB2b2lkIHtcbiAgICBpZiAoKGV2LnN0YXR1cyA+PSAyMDAgJiYgZXYuc3RhdHVzIDwgMzAwKSB8fCBldi5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldiBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIChldi5lcnJvci5tZXNzYWdlIHx8IGV2LmVycm9yLmVycm9yTWVzc2FnZSkpIHtcbiAgICAgIGlmIChldi5lcnJvci5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOWPkeeUn+S6huS4gOS6m+mUmeivryBgLCBldi5lcnJvci5lcnJvck1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOWPkeeUn+S6huS4gOS6m+mUmeivryBgLCBldi5lcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgJiYgZXYuYm9keS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKGDlj5HnlJ/kuobkuIDkupvplJnor68gYCwgZXYuYm9keS5lcnJvck1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcnRleHQgPSBDT0RFTUVTU0FHRVtldi5zdGF0dXNdIHx8IGV2LnN0YXR1c1RleHQ7XG4gICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOivt+axgumUmeivryAke2V2LnN0YXR1c306ICR7ZXYudXJsfWAsIGVycm9ydGV4dCk7XG4gIH1cblxuICBwcml2YXRlIFRvTG9naW4oKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOacqueZu+W9leaIlueZu+W9leeKtuaAgeW3sui/h+acn++8jDXnp5LlkI7lsIbot7PovazliLDnmbvlvZXpobXpnaLjgIJgLCBgYCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZiA9IGAke3RoaXMuY29uZmlnLmJhc2VVcmx9L2Nhcy1wcm94eS9hcHAvbG9nb3V0YDtcbiAgICB9LCA1MDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVBdHRhY2hUb2tlbihyZXE6IEh0dHBSZXF1ZXN0PGFueT4pOiBIdHRwUmVxdWVzdDxhbnk+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5TcnYuZ2V0KCk/LnRva2VuO1xuICAgIHJldHVybiByZXEuY2xvbmUoe1xuICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5SZXF1ZXN0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnRva2VuU3J2LmdldCgpO1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtLnNldCgncmVmcmVzaF90b2tlbicsIG1vZGVsPy5yZWZyZXNoVG9rZW4pO1xuICAgIGZvcm0uc2V0KCdncmFudF90eXBlJywgJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBmb3JtLnNldCgnc2NvcGUnLCAnd2ViYXBwJyk7XG4gICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yOiB1c2UgdGhlIHJlZnJlc2ggdG9rZW4gdG8gcmVxdWVzdCBhIG5ldyB0b2tlbicsIG1vZGVsPy5yZWZyZXNoVG9rZW4pO1xuICAgIC8vIHJldHVybiB0aGlzLmh0dHAucG9zdChgL2F1dGgvdXNlci90b2tlbi9yZWZyZXNoP19hbGxvd19hbm9ueW1vdXM9dHJ1ZWAsIGZvcm0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHBgLCBmb3JtKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJ5UmVmcmVzaFRva2VuKGV2OiBIdHRwUmVzcG9uc2VCYXNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyDov57liLfmlrBUb2tlbueahOivt+axgumDvemUmeS6hu+8jOmCo+WwseaYr+ecn+mUmeS6hlxuICAgIGlmIChbJy9hdXRoL29hdXRoL2dldE9yQ3JlYXRlVG9rZW4vd2ViYXBwJ10uc29tZSh1cmwgPT4gcmVxLnVybC5pbmNsdWRlcyh1cmwpKSkge1xuICAgICAgdGhpcy5Ub0xvZ2luKCk7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBldik7XG4gICAgfVxuXG4gICAgLy8g5q2j5Zyo5Yi35pawdG9rZW7vvIzmiYDmnInlhbbku5bor7fmsYLmjpLpmJ9cbiAgICBpZiAodGhpcy5yZWZyZXNoVG9raW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW4kLnBpcGUoXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0LmhhbmRsZSh0aGlzLnJlQXR0YWNoVG9rZW4ocmVxKSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8v5bCd6K+V6LCD55So5Yi35pawIFRva2VuXG4gICAgdGhpcy5yZWZyZXNoVG9raW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiQubmV4dChudWxsKTtcblxuICAgIC8vIOWkhOeQhlRva2VuXG4gICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuUmVxdWVzdCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocmVzID0+IHtcbiAgICAgICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yOiByZWZyZXNoIHRva2VuIGFjY2Vzc2VkIC0+ICcsIHJlcyk7XG4gICAgICAgIC8vIOmHjeaWsOS/neWtmOaWsCB0b2tlblxuICAgICAgICBjb25zdCB7IGFjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgc2NvcGUsIHRva2VuX3R5cGUgfSA9IHJlcztcbiAgICAgICAgdGhpcy50b2tlblNydi5zZXQoe1xuICAgICAgICAgIHRva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgZXhwaXJlZDogZXhwaXJlc19pbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgdG9rZW5UeXBlOiB0b2tlbl90eXBlLFxuICAgICAgICAgIHNjb3BlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyDpgJrnn6XlkI7nu63or7fmsYLnu6fnu63miafooYxcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuJC5uZXh0KHJlcyk7XG4gICAgICAgIC8vIOmHjeaWsOWPkei1t+ivt+axglxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5yZUF0dGFjaFRva2VuKHJlcSkpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLlRvTG9naW4oKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWRkaXRpb25hbEhlYWRlcnMoaGVhZGVycz86IEh0dHBIZWFkZXJzKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5pbmplY3Rvci5nZXQoWVVOWkFJX0kxOE5fVE9LRU4pLmN1cnJlbnRMYW5nO1xuICAgIGlmICghaGVhZGVycz8uaGFzKCdBY2NlcHQtTGFuZ3VhZ2UnKSAmJiBsYW5nKSB7XG4gICAgICByZXNbJ0FjY2VwdC1MYW5ndWFnZSddID0gbGFuZztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0YShldjogSHR0cFJlc3BvbnNlQmFzZSwgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5jaGVja1N0YXR1cyhldik7XG4gICAgc3dpdGNoIChldi5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gb2YoZXYpO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5FbmFibGVkICYmIHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlblR5cGUgPT09ICdyZS1yZXF1ZXN0Jykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyeVJlZnJlc2hUb2tlbihldiwgcmVxLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLlRvTG9naW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgY2FzZSA1MDA6XG4gICAgICAgIGlmICh0aGlzLmp1bXApIHtcbiAgICAgICAgICB0aGlzLmdvVG8oYC9leGNlcHRpb24vJHtldi5zdGF0dXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICfmnKrlj6/nn6XplJnor6/vvIzlpKfpg6jliIbmmK/nlLHkuo7lkI7nq6/kuI3mlK/mjIHot6jln59DT1JT5oiW5peg5pWI6YWN572u5byV6LW377yM6K+35Y+C6ICDIGh0dHBzOi8vbmcueXVuemFpbmZvLmNvbS9kb2NzL3NlcnZlciDop6PlhrPot6jln5/pl67popgnLFxuICAgICAgICAgICAgZXZcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXYpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoZXYpO1xuICAgIH1cbiAgfVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIGlmIChyZXEuY29udGV4dC5nZXQoQUxMT1dfQU5PTllNT1VTKSkgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yLnRzOiAnLCAncmVxdWVzdCAnLCByZXEpO1xuICAgIC8vIOe7n+S4gOWKoOWJjee8gFxuICAgIGxldCB1cmwgPSByZXEudXJsO1xuICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxuICAgIGlmICh1cmwuaW5jbHVkZXMoJy5qc29uJykgJiYgdXJsLmluY2x1ZGVzKCdhc3NldHMnKSkge1xuICAgICAgdXJsID0gcmVxLnVybDtcbiAgICB9XG4gICAgLy8g5Yqg5YWl6K+t6KiA5aS0XG4gICAgY29uc3QgbmV3UmVxID0gcmVxLmNsb25lKHsgdXJsLCBzZXRIZWFkZXJzOiB0aGlzLmdldEFkZGl0aW9uYWxIZWFkZXJzKHJlcS5oZWFkZXJzKSB9KTtcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUobmV3UmVxKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZXYgPT4ge1xuICAgICAgICAvLyDlhYHorrjnu5/kuIDlr7nor7fmsYLplJnor6/lpITnkIZcbiAgICAgICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZURhdGEoZXYsIG5ld1JlcSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g6Iul5LiA5YiH6YO95q2j5bi477yM5YiZ5ZCO57ut5pON5L2cXG4gICAgICAgIHJldHVybiBvZihldik7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRGF0YShlcnIsIG5ld1JlcSwgbmV4dCkpXG4gICAgKTtcbiAgfVxufVxuIl19