@yelon/bis 15.0.0-beta.3 → 15.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/layout/bis.config.mjs +11 -0
- package/esm2020/layout/icon/style-icons.mjs +796 -0
- package/esm2020/layout/layout-basic/index.mjs +4 -0
- package/esm2020/layout/layout-basic/interface.mjs +7 -0
- package/esm2020/{src → layout}/layout-basic/layout-basic.component.mjs +1 -1
- package/esm2020/layout/layout-basic/layout-display.service.mjs +87 -0
- package/esm2020/layout/layout-nav/index.mjs +5 -0
- package/esm2020/layout/layout-nav/layout-nav-application.component.mjs +262 -0
- package/esm2020/{src → layout}/layout-nav/layout-nav-group.component.mjs +1 -1
- package/esm2020/{src → layout}/layout-nav/layout-nav-tile.component.mjs +1 -1
- package/esm2020/layout/layout-nav/types.mjs +7 -0
- package/esm2020/layout/layout.mjs +5 -0
- package/esm2020/layout/public_api.mjs +11 -0
- package/esm2020/layout/widgets/index.mjs +7 -0
- package/esm2020/{src → layout}/widgets/yunzai-clear-storage.component.mjs +1 -1
- package/esm2020/{src → layout}/widgets/yunzai-fullscreen.component.mjs +1 -1
- package/esm2020/{src → layout}/widgets/yunzai-i18n.component.mjs +1 -1
- package/esm2020/layout/widgets/yunzai-notify.component.mjs +183 -0
- package/esm2020/layout/widgets/yunzai-theme-btn.component.mjs +195 -0
- package/esm2020/{src → layout}/widgets/yunzai-user.component.mjs +1 -1
- package/esm2020/layout/yunzai-act.guard.mjs +107 -0
- package/esm2020/layout/yunzai-auth.service.mjs +153 -0
- package/esm2020/layout/yunzai-default.interceptor.mjs +207 -0
- package/esm2020/layout/yunzai-i18n.service.mjs +94 -0
- package/esm2020/layout/yunzai-layout.module.mjs +76 -0
- package/esm2020/layout/yunzai-startup.service.mjs +157 -0
- package/esm2020/public_api.mjs +2 -2
- package/fesm2015/bis.mjs +1 -2966
- package/fesm2015/bis.mjs.map +1 -1
- package/fesm2015/layout.mjs +2971 -0
- package/fesm2015/layout.mjs.map +1 -0
- package/fesm2020/bis.mjs +1 -2974
- package/fesm2020/bis.mjs.map +1 -1
- package/fesm2020/layout.mjs +2979 -0
- package/fesm2020/layout.mjs.map +1 -0
- package/{src → layout}/bis.config.d.ts +0 -0
- package/{src → layout}/icon/style-icons.d.ts +0 -0
- package/layout/index.d.ts +5 -0
- package/{src → layout}/layout-basic/index.d.ts +0 -0
- package/{src → layout}/layout-basic/interface.d.ts +0 -0
- package/{src → layout}/layout-basic/layout-basic.component.d.ts +0 -0
- package/{src → layout}/layout-basic/layout-display.service.d.ts +0 -0
- package/{src → layout}/layout-nav/index.d.ts +0 -0
- package/{src → layout}/layout-nav/layout-nav-application.component.d.ts +0 -0
- package/{src → layout}/layout-nav/layout-nav-group.component.d.ts +0 -0
- package/{src → layout}/layout-nav/layout-nav-tile.component.d.ts +0 -0
- package/{src → layout}/layout-nav/types.d.ts +0 -0
- package/{src/index.d.ts → layout/public_api.d.ts} +0 -1
- package/layout/style/index.less +154 -0
- package/{src → layout}/widgets/index.d.ts +0 -0
- package/{src → layout}/widgets/yunzai-clear-storage.component.d.ts +0 -0
- package/{src → layout}/widgets/yunzai-fullscreen.component.d.ts +0 -0
- package/{src → layout}/widgets/yunzai-i18n.component.d.ts +0 -0
- package/{src → layout}/widgets/yunzai-notify.component.d.ts +0 -0
- package/{src → layout}/widgets/yunzai-theme-btn.component.d.ts +0 -0
- package/{src → layout}/widgets/yunzai-user.component.d.ts +0 -0
- package/{src → layout}/yunzai-act.guard.d.ts +0 -0
- package/{src → layout}/yunzai-auth.service.d.ts +0 -0
- package/{src → layout}/yunzai-default.interceptor.d.ts +0 -0
- package/{src → layout}/yunzai-i18n.service.d.ts +0 -0
- package/{src → layout}/yunzai-layout.module.d.ts +0 -0
- package/{src → layout}/yunzai-startup.service.d.ts +0 -0
- package/package.json +19 -11
- package/public_api.d.ts +2 -1
- package/esm2020/src/bis.config.mjs +0 -11
- package/esm2020/src/icon/style-icons.mjs +0 -796
- package/esm2020/src/index.mjs +0 -12
- package/esm2020/src/layout-basic/index.mjs +0 -4
- package/esm2020/src/layout-basic/interface.mjs +0 -7
- package/esm2020/src/layout-basic/layout-display.service.mjs +0 -87
- package/esm2020/src/layout-nav/index.mjs +0 -5
- package/esm2020/src/layout-nav/layout-nav-application.component.mjs +0 -262
- package/esm2020/src/layout-nav/types.mjs +0 -7
- package/esm2020/src/widgets/index.mjs +0 -7
- package/esm2020/src/widgets/yunzai-notify.component.mjs +0 -183
- package/esm2020/src/widgets/yunzai-theme-btn.component.mjs +0 -195
- package/esm2020/src/yunzai-act.guard.mjs +0 -107
- package/esm2020/src/yunzai-auth.service.mjs +0 -153
- package/esm2020/src/yunzai-default.interceptor.mjs +0 -207
- package/esm2020/src/yunzai-i18n.service.mjs +0 -94
- package/esm2020/src/yunzai-layout.module.mjs +0 -76
- package/esm2020/src/yunzai-startup.service.mjs +0 -157
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { forkJoin, map, mergeAll, mergeMap, of } from 'rxjs';
|
|
3
|
+
import { YA_SERVICE_TOKEN } from '@yelon/auth';
|
|
4
|
+
import { CacheService } from '@yelon/cache';
|
|
5
|
+
import { _HttpClient } from '@yelon/theme';
|
|
6
|
+
import { log, WINDOW, YunzaiConfigService } from '@yelon/util';
|
|
7
|
+
import { mergeBisConfig } from './bis.config';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
class YunzaiAuthService {
|
|
10
|
+
constructor(injector) {
|
|
11
|
+
this.injector = injector;
|
|
12
|
+
this.config = mergeBisConfig(this.configService);
|
|
13
|
+
}
|
|
14
|
+
get configService() {
|
|
15
|
+
return this.injector.get(YunzaiConfigService);
|
|
16
|
+
}
|
|
17
|
+
get tokenService() {
|
|
18
|
+
return this.injector.get(YA_SERVICE_TOKEN);
|
|
19
|
+
}
|
|
20
|
+
get httpClient() {
|
|
21
|
+
return this.injector.get(_HttpClient);
|
|
22
|
+
}
|
|
23
|
+
get cacheService() {
|
|
24
|
+
return this.injector.get(CacheService);
|
|
25
|
+
}
|
|
26
|
+
askToken() {
|
|
27
|
+
log('yz.auth.service: ', 'askToken');
|
|
28
|
+
if (this.tokenService.get()?.token) {
|
|
29
|
+
return of(this.tokenService.get());
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
if (this.config.loginForm) {
|
|
33
|
+
return this.fetchTokenByUP();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return this.fetchTokenByCas();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
fetchTokenByUP() {
|
|
41
|
+
log('yz.auth.service: ', 'fetchTokenByUP');
|
|
42
|
+
return this.httpClient.post(`/auth/oauth/token?_allow_anonymous=true`, this.config.loginForm).pipe(map((response) => {
|
|
43
|
+
const { access_token, expires_in, refresh_token, scope, token_type } = response;
|
|
44
|
+
return {
|
|
45
|
+
token: access_token,
|
|
46
|
+
expired: expires_in,
|
|
47
|
+
refreshToken: refresh_token,
|
|
48
|
+
tokenType: token_type,
|
|
49
|
+
scope
|
|
50
|
+
};
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
fetchTokenByCas() {
|
|
54
|
+
log('yz.auth.service: ', 'fetchTokenByCas');
|
|
55
|
+
const uri = encodeURIComponent(this.injector.get(WINDOW).location.href);
|
|
56
|
+
return this.httpClient
|
|
57
|
+
.get(`/cas-proxy/app/validate_full?callback=${uri}&_allow_anonymous=true×tamp=${new Date().getTime()}`)
|
|
58
|
+
.pipe(map((response) => {
|
|
59
|
+
switch (response.errcode) {
|
|
60
|
+
case 2000:
|
|
61
|
+
const { access_token, expires_in, refresh_token, scope, token_type } = response.data;
|
|
62
|
+
return {
|
|
63
|
+
token: access_token,
|
|
64
|
+
expired: expires_in,
|
|
65
|
+
refreshToken: refresh_token,
|
|
66
|
+
tokenType: token_type,
|
|
67
|
+
scope
|
|
68
|
+
};
|
|
69
|
+
case 2001:
|
|
70
|
+
this.injector.get(WINDOW).location.href = response.msg;
|
|
71
|
+
throw Error("Cookie Error: Can't find Cas Cookie,So jump to login!");
|
|
72
|
+
default:
|
|
73
|
+
if (response.data) {
|
|
74
|
+
console.error(response.data);
|
|
75
|
+
throw Error(response.data);
|
|
76
|
+
}
|
|
77
|
+
else if (response.msg) {
|
|
78
|
+
console.error(response.msg);
|
|
79
|
+
throw Error(response.msg);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.error('cas unknown error');
|
|
83
|
+
throw Error('Unknown Error: Cas auth exception!');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
login() {
|
|
89
|
+
log('yz.auth.service: ', 'login white login form->', this.config.loginForm);
|
|
90
|
+
return this.askToken().pipe(mergeMap(token => {
|
|
91
|
+
log('yz.auth.service: get token->', token);
|
|
92
|
+
this.configService.set('auth', {
|
|
93
|
+
token_send_key: 'Authorization',
|
|
94
|
+
token_send_template: `${token.tokenType} \${token}`,
|
|
95
|
+
token_send_place: 'header'
|
|
96
|
+
});
|
|
97
|
+
log('yz.auth.service: ', 'set token');
|
|
98
|
+
this.tokenService.set(token);
|
|
99
|
+
return this.cacheInit();
|
|
100
|
+
}), mergeAll());
|
|
101
|
+
}
|
|
102
|
+
cacheInit() {
|
|
103
|
+
log('yz.auth.service: ', 'cacheInit');
|
|
104
|
+
const user = this.cacheService.get('_yz_user', { mode: 'none' });
|
|
105
|
+
const header = this.cacheService.get('_yz_header', { mode: 'none' });
|
|
106
|
+
const project = this.cacheService.get('_yz_project_info', { mode: 'none' });
|
|
107
|
+
return forkJoin(of(user), of(header), of(project)).pipe(mergeMap(([u, h, p]) => {
|
|
108
|
+
let list = [];
|
|
109
|
+
// user cache
|
|
110
|
+
if (!u) {
|
|
111
|
+
log('yz.auth.service: ', 'fetch user cache');
|
|
112
|
+
list.push(this.httpClient.get(`/auth/user`).pipe(map((user) => {
|
|
113
|
+
this.cacheService.set('_yz_user', user.principal);
|
|
114
|
+
})));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
log('yz.auth.service: ', 'user recache');
|
|
118
|
+
list.push(of(() => { }));
|
|
119
|
+
}
|
|
120
|
+
// header cache
|
|
121
|
+
if (!h) {
|
|
122
|
+
log('yz.auth.service: ', 'fetch header cache');
|
|
123
|
+
list.push(this.httpClient.get(`/auth/allheader/v2`).pipe(map((header) => {
|
|
124
|
+
this.cacheService.set('_yz_header', header.data);
|
|
125
|
+
})));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
log('yz.auth.service: ', 'header recache');
|
|
129
|
+
list.push(of(() => { }));
|
|
130
|
+
}
|
|
131
|
+
// project cache
|
|
132
|
+
if (!p) {
|
|
133
|
+
log('yz.auth.service: ', 'fetch project cache');
|
|
134
|
+
list.push(this.httpClient.get(`/app-manager/project/info`).pipe(map((info) => {
|
|
135
|
+
this.cacheService.set('_yz_project_info', info.data);
|
|
136
|
+
})));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
log('yz.auth.service: ', 'project recache');
|
|
140
|
+
list.push(of(() => { }));
|
|
141
|
+
}
|
|
142
|
+
return forkJoin(list);
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
YunzaiAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
147
|
+
YunzaiAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiAuthService, providedIn: 'root' });
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiAuthService, decorators: [{
|
|
149
|
+
type: Injectable,
|
|
150
|
+
args: [{ providedIn: 'root' }]
|
|
151
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
152
|
+
export { YunzaiAuthService as YzAuthService, YunzaiAuthService };
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXVuemFpLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpFLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxNQUNNLGlCQUFpQjtJQUdyQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBWSxhQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElB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QU8sRUFBRSxpQkFBaUIsSUFBSSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgbWFwLCBtZXJnZUFsbCwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElUb2tlbk1vZGVsLCBJVG9rZW5TZXJ2aWNlLCBZQV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnQHllbG9uL2F1dGgnO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL2NhY2hlJztcbmltcG9ydCB7IF9IdHRwQ2xpZW50IH0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7IGxvZywgV0lORE9XLCBZdW56YWlCdXNpbmVzc0NvbmZpZywgWXVuemFpQ29uZmlnU2VydmljZSB9IGZyb20gJ0B5ZWxvbi91dGlsJztcblxuaW1wb3J0IHsgbWVyZ2VCaXNDb25maWcgfSBmcm9tICcuL2Jpcy5jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuY2xhc3MgWXVuemFpQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZzogWXVuemFpQnVzaW5lc3NDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmNvbmZpZyA9IG1lcmdlQmlzQ29uZmlnKHRoaXMuY29uZmlnU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25maWdTZXJ2aWNlKCk6IFl1bnphaUNvbmZpZ1NlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChZdW56YWlDb25maWdTZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRva2VuU2VydmljZSgpOiBJVG9rZW5TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTik7XG4gIH1cblxuICBwcml2YXRlIGdldCBodHRwQ2xpZW50KCk6IF9IdHRwQ2xpZW50IHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoX0h0dHBDbGllbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY2FjaGVTZXJ2aWNlKCk6IENhY2hlU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KENhY2hlU2VydmljZSk7XG4gIH1cblxuICBhc2tUb2tlbigpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdhc2tUb2tlbicpO1xuICAgIGlmICh0aGlzLnRva2VuU2VydmljZS5nZXQoKT8udG9rZW4pIHtcbiAgICAgIHJldHVybiBvZih0aGlzLnRva2VuU2VydmljZS5nZXQoKSEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWcubG9naW5Gb3JtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoVG9rZW5CeVVQKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFRva2VuQnlDYXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmZXRjaFRva2VuQnlVUCgpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaFRva2VuQnlVUCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChgL2F1dGgvb2F1dGgvdG9rZW4/X2FsbG93X2Fub255bW91cz10cnVlYCwgdGhpcy5jb25maWcubG9naW5Gb3JtKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBzY29wZSwgdG9rZW5fdHlwZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICBleHBpcmVkOiBleHBpcmVzX2luLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaF90b2tlbixcbiAgICAgICAgICB0b2tlblR5cGU6IHRva2VuX3R5cGUsXG4gICAgICAgICAgc2NvcGVcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoVG9rZW5CeUNhcygpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaFRva2VuQnlDYXMnKTtcbiAgICBjb25zdCB1cmkgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5sb2NhdGlvbi5ocmVmKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAvY2FzLXByb3h5L2FwcC92YWxpZGF0ZV9mdWxsP2NhbGxiYWNrPSR7dXJpfSZfYWxsb3dfYW5vbnltb3VzPXRydWUmdGltZXN0YW1wPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLmVycmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgMjAwMDpcbiAgICAgICAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIHNjb3BlLCB0b2tlbl90eXBlIH0gPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlZDogZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICAgICAgdG9rZW5UeXBlOiB0b2tlbl90eXBlLFxuICAgICAgICAgICAgICAgIHNjb3BlXG4gICAgICAgICAgICAgIH0gYXMgSVRva2VuTW9kZWw7XG4gICAgICAgICAgICBjYXNlIDIwMDE6XG4gICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlLm1zZztcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDb29raWUgRXJyb3I6IENhbid0IGZpbmQgQ2FzIENvb2tpZSxTbyBqdW1wIHRvIGxvZ2luIVwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5tc2cpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLm1zZyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2UubXNnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjYXMgdW5rbm93biBlcnJvcicpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdVbmtub3duIEVycm9yOiBDYXMgYXV0aCBleGNlcHRpb24hJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9naW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdsb2dpbiB3aGl0ZSBsb2dpbiBmb3JtLT4nLCB0aGlzLmNvbmZpZy5sb2dpbkZvcm0pO1xuICAgIHJldHVybiB0aGlzLmFza1Rva2VuKCkucGlwZShcbiAgICAgIG1lcmdlTWFwKHRva2VuID0+IHtcbiAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6IGdldCB0b2tlbi0+JywgdG9rZW4pO1xuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2Uuc2V0KCdhdXRoJywge1xuICAgICAgICAgIHRva2VuX3NlbmRfa2V5OiAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgdG9rZW5fc2VuZF90ZW1wbGF0ZTogYCR7dG9rZW4udG9rZW5UeXBlfSBcXCR7dG9rZW59YCxcbiAgICAgICAgICB0b2tlbl9zZW5kX3BsYWNlOiAnaGVhZGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdzZXQgdG9rZW4nKTtcbiAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVJbml0KCk7XG4gICAgICB9KSxcbiAgICAgIG1lcmdlQWxsKClcbiAgICApO1xuICB9XG5cbiAgY2FjaGVJbml0KCk6IE9ic2VydmFibGU8dm9pZFtdPiB7XG4gICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdjYWNoZUluaXQnKTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfdXNlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X2hlYWRlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IHByb2plY3QgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9wcm9qZWN0X2luZm8nLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICByZXR1cm4gZm9ya0pvaW4ob2YodXNlciksIG9mKGhlYWRlciksIG9mKHByb2plY3QpKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFt1LCBoLCBwXSkgPT4ge1xuICAgICAgICBsZXQgbGlzdCA9IFtdO1xuICAgICAgICAvLyB1c2VyIGNhY2hlXG4gICAgICAgIGlmICghdSkge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2ggdXNlciBjYWNoZScpO1xuICAgICAgICAgIGxpc3QucHVzaChcbiAgICAgICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoYC9hdXRoL3VzZXJgKS5waXBlKFxuICAgICAgICAgICAgICBtYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X3VzZXInLCB1c2VyLnByaW5jaXBhbCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coJ3l6LmF1dGguc2VydmljZTogJywgJ3VzZXIgcmVjYWNoZScpO1xuICAgICAgICAgIGxpc3QucHVzaChvZjxhbnk+KCgpID0+IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGVhZGVyIGNhY2hlXG4gICAgICAgIGlmICghaCkge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnZmV0Y2ggaGVhZGVyIGNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2F1dGgvYWxsaGVhZGVyL3YyYCkucGlwZShcbiAgICAgICAgICAgICAgbWFwKChoZWFkZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldCgnX3l6X2hlYWRlcicsIGhlYWRlci5kYXRhKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAnaGVhZGVyIHJlY2FjaGUnKTtcbiAgICAgICAgICBsaXN0LnB1c2gob2Y8YW55PigoKSA9PiB7fSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByb2plY3QgY2FjaGVcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgbG9nKCd5ei5hdXRoLnNlcnZpY2U6ICcsICdmZXRjaCBwcm9qZWN0IGNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChgL2FwcC1tYW5hZ2VyL3Byb2plY3QvaW5mb2ApLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoaW5mbzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0KCdfeXpfcHJvamVjdF9pbmZvJywgaW5mby5kYXRhKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZygneXouYXV0aC5zZXJ2aWNlOiAnLCAncHJvamVjdCByZWNhY2hlJyk7XG4gICAgICAgICAgbGlzdC5wdXNoKG9mPGFueT4oKCkgPT4ge30pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4obGlzdCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWXVuemFpQXV0aFNlcnZpY2UgYXMgWXpBdXRoU2VydmljZSwgWXVuemFpQXV0aFNlcnZpY2UgfTtcbiJdfQ==
|
|
@@ -0,0 +1,207 @@
|
|
|
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
|
+
class YunzaiDefaultInterceptor {
|
|
31
|
+
get notification() {
|
|
32
|
+
return this.injector.get(NzNotificationService);
|
|
33
|
+
}
|
|
34
|
+
get tokenSrv() {
|
|
35
|
+
return this.injector.get(YA_SERVICE_TOKEN);
|
|
36
|
+
}
|
|
37
|
+
get http() {
|
|
38
|
+
return this.injector.get(_HttpClient);
|
|
39
|
+
}
|
|
40
|
+
get config() {
|
|
41
|
+
return mergeBisConfig(this.injector.get(YunzaiConfigService));
|
|
42
|
+
}
|
|
43
|
+
goTo(url) {
|
|
44
|
+
setTimeout(() => this.injector.get(Router).navigateByUrl(url));
|
|
45
|
+
}
|
|
46
|
+
constructor(injector) {
|
|
47
|
+
this.injector = injector;
|
|
48
|
+
this.jump = false;
|
|
49
|
+
this.refreshToking = false;
|
|
50
|
+
this.refreshToken$ = new BehaviorSubject(null);
|
|
51
|
+
if (this.config.refreshTokenType === 'auth-refresh') {
|
|
52
|
+
console.error("can't use auth-refresh, please change yz.default.interceptor to default.interceptor!");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
checkStatus(ev) {
|
|
56
|
+
if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (ev instanceof HttpErrorResponse && (ev.error.message || ev.error.errorMessage)) {
|
|
60
|
+
if (ev.error.errorMessage) {
|
|
61
|
+
this.notification.error(`发生了一些错误 `, ev.error.errorMessage);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.notification.error(`发生了一些错误 `, ev.error.message);
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (ev instanceof HttpResponse && ev.body.errorMessage) {
|
|
69
|
+
this.notification.error(`发生了一些错误 `, ev.body.errorMessage);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const errortext = CODEMESSAGE[ev.status] || ev.statusText;
|
|
73
|
+
this.notification.error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
|
|
74
|
+
}
|
|
75
|
+
ToLogin() {
|
|
76
|
+
this.notification.error(`未登录或登录状态已过期,5秒后将跳转到登录页面。`, ``);
|
|
77
|
+
setTimeout(() => {
|
|
78
|
+
localStorage.clear();
|
|
79
|
+
this.injector.get(WINDOW).location.href = `${this.config.baseUrl}/cas-proxy/app/logout`;
|
|
80
|
+
}, 5000);
|
|
81
|
+
}
|
|
82
|
+
reAttachToken(req) {
|
|
83
|
+
const token = this.tokenSrv.get()?.token;
|
|
84
|
+
return req.clone({
|
|
85
|
+
setHeaders: {
|
|
86
|
+
Authorization: `Bearer ${token}`
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
refreshTokenRequest() {
|
|
91
|
+
const model = this.tokenSrv.get();
|
|
92
|
+
const form = new FormData();
|
|
93
|
+
form.set('refresh_token', model?.refreshToken);
|
|
94
|
+
form.set('grant_type', 'refresh_token');
|
|
95
|
+
form.set('scope', 'webapp');
|
|
96
|
+
log('yz.default.interceptor: use the refresh token to request a new token', model?.refreshToken);
|
|
97
|
+
// return this.http.post(`/auth/user/token/refresh?_allow_anonymous=true`, form);
|
|
98
|
+
return this.http.post(`/auth/oauth/getOrCreateToken/webapp`, form);
|
|
99
|
+
}
|
|
100
|
+
tryRefreshToken(ev, req, next) {
|
|
101
|
+
// 连刷新Token的请求都错了,那就是真错了
|
|
102
|
+
if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
|
|
103
|
+
this.ToLogin();
|
|
104
|
+
return throwError(() => ev);
|
|
105
|
+
}
|
|
106
|
+
// 正在刷新token,所有其他请求排队
|
|
107
|
+
if (this.refreshToking) {
|
|
108
|
+
return this.refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next.handle(this.reAttachToken(req))));
|
|
109
|
+
}
|
|
110
|
+
//尝试调用刷新 Token
|
|
111
|
+
this.refreshToking = true;
|
|
112
|
+
this.refreshToken$.next(null);
|
|
113
|
+
// 处理Token
|
|
114
|
+
return this.refreshTokenRequest().pipe(switchMap(res => {
|
|
115
|
+
log('yz.default.interceptor: refresh token accessed -> ', res);
|
|
116
|
+
// 重新保存新 token
|
|
117
|
+
const { access_token, expires_in, refresh_token, scope, token_type } = res;
|
|
118
|
+
this.tokenSrv.set({
|
|
119
|
+
token: access_token,
|
|
120
|
+
expired: expires_in,
|
|
121
|
+
refreshToken: refresh_token,
|
|
122
|
+
tokenType: token_type,
|
|
123
|
+
scope
|
|
124
|
+
});
|
|
125
|
+
// 通知后续请求继续执行
|
|
126
|
+
this.refreshToking = false;
|
|
127
|
+
this.refreshToken$.next(res);
|
|
128
|
+
// 重新发起请求
|
|
129
|
+
return next.handle(this.reAttachToken(req));
|
|
130
|
+
}), catchError(err => {
|
|
131
|
+
this.refreshToking = false;
|
|
132
|
+
this.ToLogin();
|
|
133
|
+
return throwError(() => err);
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
getAdditionalHeaders(headers) {
|
|
137
|
+
const res = {};
|
|
138
|
+
const lang = this.injector.get(YUNZAI_I18N_TOKEN).currentLang;
|
|
139
|
+
if (!headers?.has('Accept-Language') && lang) {
|
|
140
|
+
res['Accept-Language'] = lang;
|
|
141
|
+
}
|
|
142
|
+
return res;
|
|
143
|
+
}
|
|
144
|
+
handleData(ev, req, next) {
|
|
145
|
+
this.checkStatus(ev);
|
|
146
|
+
switch (ev.status) {
|
|
147
|
+
case 200:
|
|
148
|
+
return of(ev);
|
|
149
|
+
case 401:
|
|
150
|
+
if (this.config.refreshTokenEnabled && this.config.refreshTokenType === 're-request') {
|
|
151
|
+
const unAuthorizationReq = req.clone();
|
|
152
|
+
unAuthorizationReq.headers.delete('Authorization');
|
|
153
|
+
return this.tryRefreshToken(ev, unAuthorizationReq, next);
|
|
154
|
+
}
|
|
155
|
+
this.ToLogin();
|
|
156
|
+
break;
|
|
157
|
+
case 403:
|
|
158
|
+
case 404:
|
|
159
|
+
case 500:
|
|
160
|
+
if (this.jump) {
|
|
161
|
+
this.goTo(`/exception/${ev.status}`);
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
default:
|
|
165
|
+
if (ev instanceof HttpErrorResponse) {
|
|
166
|
+
console.warn('未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起,请参考 https://ng.yunzainfo.com/docs/server 解决跨域问题', ev);
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
if (ev instanceof HttpErrorResponse) {
|
|
171
|
+
return throwError(() => ev);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
return of(ev);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
intercept(req, next) {
|
|
178
|
+
if (req.context.get(ALLOW_ANONYMOUS))
|
|
179
|
+
return next.handle(req);
|
|
180
|
+
log('yz.default.interceptor.ts: ', 'request ', req);
|
|
181
|
+
// 统一加前缀
|
|
182
|
+
let url = req.url;
|
|
183
|
+
if (!url.startsWith('https://') && !url.startsWith('http://')) {
|
|
184
|
+
url = this.config.baseUrl + url;
|
|
185
|
+
}
|
|
186
|
+
if (url.includes('.json') && url.includes('assets')) {
|
|
187
|
+
url = req.url;
|
|
188
|
+
}
|
|
189
|
+
// 加入语言头
|
|
190
|
+
const newReq = req.clone({ url, setHeaders: this.getAdditionalHeaders(req.headers) });
|
|
191
|
+
return next.handle(newReq).pipe(mergeMap(ev => {
|
|
192
|
+
// 允许统一对请求错误处理
|
|
193
|
+
if (ev instanceof HttpResponseBase) {
|
|
194
|
+
return this.handleData(ev, newReq, next);
|
|
195
|
+
}
|
|
196
|
+
// 若一切都正常,则后续操作
|
|
197
|
+
return of(ev);
|
|
198
|
+
}), catchError((err) => this.handleData(err, newReq, next)));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
YunzaiDefaultInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiDefaultInterceptor, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
202
|
+
YunzaiDefaultInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiDefaultInterceptor });
|
|
203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiDefaultInterceptor, decorators: [{
|
|
204
|
+
type: Injectable
|
|
205
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
206
|
+
export { YunzaiDefaultInterceptor as YzDefaultInterceptor, YunzaiDefaultInterceptor };
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWRlZmF1bHQuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvbGF5b3V0L3l1bnphaS1kZWZhdWx0LmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxpQkFBaUIsRUFFakIsWUFBWSxFQUNaLGdCQUFnQixFQUNqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRWxILE9BQU8sRUFBRSxnQkFBZ0IsRUFBaUIsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRTlDLE1BQU0sV0FBVyxHQUE4QjtJQUM3QyxHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsWUFBWTtJQUNqQixHQUFHLEVBQUUscUJBQXFCO0lBQzFCLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFLDZCQUE2QjtJQUNsQyxHQUFHLEVB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QXhCLHdCQUF3QjtrQkFEN0IsVUFBVTs7QUF5TVgsT0FBTyxFQUFFLHdCQUF3QixJQUFJLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwRXZlbnQsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBSZXNwb25zZSxcbiAgSHR0cFJlc3BvbnNlQmFzZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBZQV9TRVJWSUNFX1RPS0VOLCBJVG9rZW5TZXJ2aWNlLCBBTExPV19BTk9OWU1PVVMgfSBmcm9tICdAeWVsb24vYXV0aCc7XG5pbXBvcnQgeyBZVU5aQUlfSTE4Tl9UT0tFTiwgX0h0dHBDbGllbnQgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnQHllbG9uL3V0aWwnO1xuaW1wb3J0IHsgWXVuemFpQnVzaW5lc3NDb25maWcsIFl1bnphaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAeWVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnQHllbG9uL3V0aWwvb3RoZXInO1xuaW1wb3J0IHsgTnpOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9ub3RpZmljYXRpb24nO1xuXG5pbXBvcnQgeyBtZXJnZUJpc0NvbmZpZyB9IGZyb20gJy4vYmlzLmNvbmZpZyc7XG5cbmNvbnN0IENPREVNRVNTQUdFOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAyMDA6ICfmnI3liqHlmajmiJDlip/ov5Tlm57or7fmsYLnmoTmlbDmja7jgIInLFxuICAyMDE6ICfmlrDlu7rmiJbkv67mlLnmlbDmja7miJDlip/jgIInLFxuICAyMDI6ICfkuIDkuKror7fmsYLlt7Lnu4/ov5vlhaXlkI7lj7DmjpLpmJ/vvIjlvILmraXku7vliqHvvInjgIInLFxuICAyMDQ6ICfliKDpmaTmlbDmja7miJDlip/jgIInLFxuICA0MDA6ICflj5Hlh7rnmoTor7fmsYLmnInplJnor6/vvIzmnI3liqHlmajmsqHmnInov5vooYzmlrDlu7rmiJbkv67mlLnmlbDmja7nmoTmk43kvZzjgIInLFxuICA0MDE6ICfnlKjmiLfmsqHmnInmnYPpmZDvvIjku6TniYzjgIHnlKjmiLflkI3jgIHlr4bnoIHplJnor6/vvInjgIInLFxuICA0MDM6ICfnlKjmiLflvpfliLDmjojmnYPvvIzkvYbmmK/orr/pl67mmK/ooqvnpoHmraLnmoTjgIInLFxuICA0MDQ6ICflj5Hlh7rnmoTor7fmsYLpkojlr7nnmoTmmK/kuI3lrZjlnKjnmoTorrDlvZXvvIzmnI3liqHlmajmsqHmnInov5vooYzmk43kvZzjgIInLFxuICA0MDY6ICfor7fmsYLnmoTmoLzlvI/kuI3lj6/lvpfjgIInLFxuICA0MTA6ICfor7fmsYLnmoTotYTmupDooqvmsLjkuYXliKDpmaTvvIzkuJTkuI3kvJrlho3lvpfliLDnmoTjgIInLFxuICA0MjI6ICflvZPliJvlu7rkuIDkuKrlr7nosaHml7bvvIzlj5HnlJ/kuIDkuKrpqozor4HplJnor6/jgIInLFxuICA1MDA6ICfmnI3liqHlmajlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XmnI3liqHlmajjgIInLFxuICA1MDI6ICfnvZHlhbPplJnor6/jgIInLFxuICA1MDM6ICfmnI3liqHkuI3lj6/nlKjvvIzmnI3liqHlmajmmoLml7bov4fovb3miJbnu7TmiqTjgIInLFxuICA1MDQ6ICfnvZHlhbPotoXml7bjgIInXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5jbGFzcyBZdW56YWlEZWZhdWx0SW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwcml2YXRlIGp1bXAgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmVmcmVzaFRva2VuJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgcHJpdmF0ZSBnZXQgbm90aWZpY2F0aW9uKCk6IE56Tm90aWZpY2F0aW9uU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KE56Tm90aWZpY2F0aW9uU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCB0b2tlblNydigpOiBJVG9rZW5TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTik7XG4gIH1cblxuICBwcml2YXRlIGdldCBodHRwKCk6IF9IdHRwQ2xpZW50IHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoX0h0dHBDbGllbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZmlnKCk6IFl1bnphaUJ1c2luZXNzQ29uZmlnIHtcbiAgICByZXR1cm4gbWVyZ2VCaXNDb25maWcodGhpcy5pbmplY3Rvci5nZXQoWXVuemFpQ29uZmlnU2VydmljZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnb1RvKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpLm5hdmlnYXRlQnlVcmwodXJsKSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5UeXBlID09PSAnYXV0aC1yZWZyZXNoJykge1xuICAgICAgY29uc29sZS5lcnJvcihcImNhbid0IHVzZSBhdXRoLXJlZnJlc2gsIHBsZWFzZSBjaGFuZ2UgeXouZGVmYXVsdC5pbnRlcmNlcHRvciB0byBkZWZhdWx0LmludGVyY2VwdG9yIVwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrU3RhdHVzKGV2OiBIdHRwUmVzcG9uc2VCYXNlKTogdm9pZCB7XG4gICAgaWYgKChldi5zdGF0dXMgPj0gMjAwICYmIGV2LnN0YXR1cyA8IDMwMCkgfHwgZXYuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXYgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiAoZXYuZXJyb3IubWVzc2FnZSB8fCBldi5lcnJvci5lcnJvck1lc3NhZ2UpKSB7XG4gICAgICBpZiAoZXYuZXJyb3IuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKGDlj5HnlJ/kuobkuIDkupvplJnor68gYCwgZXYuZXJyb3IuZXJyb3JNZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKGDlj5HnlJ/kuobkuIDkupvplJnor68gYCwgZXYuZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlICYmIGV2LmJvZHkuZXJyb3JNZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihg5Y+R55Sf5LqG5LiA5Lqb6ZSZ6K+vIGAsIGV2LmJvZHkuZXJyb3JNZXNzYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXJyb3J0ZXh0ID0gQ09ERU1FU1NBR0VbZXYuc3RhdHVzXSB8fCBldi5zdGF0dXNUZXh0O1xuICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKGDor7fmsYLplJnor68gJHtldi5zdGF0dXN9OiAke2V2LnVybH1gLCBlcnJvcnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBUb0xvZ2luKCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKGDmnKrnmbvlvZXmiJbnmbvlvZXnirbmgIHlt7Lov4fmnJ/vvIw156eS5ZCO5bCG6Lez6L2s5Yiw55m75b2V6aG16Z2i44CCYCwgYGApO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgICB0aGlzLmluamVjdG9yLmdldChXSU5ET1cpLmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmNvbmZpZy5iYXNlVXJsfS9jYXMtcHJveHkvYXBwL2xvZ291dGA7XG4gICAgfSwgNTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHJlQXR0YWNoVG9rZW4ocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuU3J2LmdldCgpPy50b2tlbjtcbiAgICByZXR1cm4gcmVxLmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuUmVxdWVzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy50b2tlblNydi5nZXQoKTtcbiAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybS5zZXQoJ3JlZnJlc2hfdG9rZW4nLCBtb2RlbD8ucmVmcmVzaFRva2VuKTtcbiAgICBmb3JtLnNldCgnZ3JhbnRfdHlwZScsICdyZWZyZXNoX3Rva2VuJyk7XG4gICAgZm9ybS5zZXQoJ3Njb3BlJywgJ3dlYmFwcCcpO1xuICAgIGxvZygneXouZGVmYXVsdC5pbnRlcmNlcHRvcjogdXNlIHRoZSByZWZyZXNoIHRva2VuIHRvIHJlcXVlc3QgYSBuZXcgdG9rZW4nLCBtb2RlbD8ucmVmcmVzaFRva2VuKTtcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC9hdXRoL3VzZXIvdG9rZW4vcmVmcmVzaD9fYWxsb3dfYW5vbnltb3VzPXRydWVgLCBmb3JtKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC9hdXRoL29hdXRoL2dldE9yQ3JlYXRlVG9rZW4vd2ViYXBwYCwgZm9ybSk7XG4gIH1cblxuICBwcml2YXRlIHRyeVJlZnJlc2hUb2tlbihldjogSHR0cFJlc3BvbnNlQmFzZSwgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgLy8g6L+e5Yi35pawVG9rZW7nmoTor7fmsYLpg73plJnkuobvvIzpgqPlsLHmmK/nnJ/plJnkuoZcbiAgICBpZiAoWycvYXV0aC9vYXV0aC9nZXRPckNyZWF0ZVRva2VuL3dlYmFwcCddLnNvbWUodXJsID0+IHJlcS51cmwuaW5jbHVkZXModXJsKSkpIHtcbiAgICAgIHRoaXMuVG9Mb2dpbigpO1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXYpO1xuICAgIH1cblxuICAgIC8vIOato+WcqOWIt+aWsHRva2Vu77yM5omA5pyJ5YW25LuW6K+35rGC5o6S6ZifXG4gICAgaWYgKHRoaXMucmVmcmVzaFRva2luZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuJC5waXBlKFxuICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gbmV4dC5oYW5kbGUodGhpcy5yZUF0dGFjaFRva2VuKHJlcSkpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvL+Wwneivleiwg+eUqOWIt+aWsCBUb2tlblxuICAgIHRoaXMucmVmcmVzaFRva2luZyA9IHRydWU7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4kLm5leHQobnVsbCk7XG5cbiAgICAvLyDlpITnkIZUb2tlblxuICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKHJlcyA9PiB7XG4gICAgICAgIGxvZygneXouZGVmYXVsdC5pbnRlcmNlcHRvcjogcmVmcmVzaCB0b2tlbiBhY2Nlc3NlZCAtPiAnLCByZXMpO1xuICAgICAgICAvLyDph43mlrDkv53lrZjmlrAgdG9rZW5cbiAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIHNjb3BlLCB0b2tlbl90eXBlIH0gPSByZXM7XG4gICAgICAgIHRoaXMudG9rZW5TcnYuc2V0KHtcbiAgICAgICAgICB0b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgIGV4cGlyZWQ6IGV4cGlyZXNfaW4sXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiByZWZyZXNoX3Rva2VuLFxuICAgICAgICAgIHRva2VuVHlwZTogdG9rZW5fdHlwZSxcbiAgICAgICAgICBzY29wZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8g6YCa55+l5ZCO57ut6K+35rGC57un57ut5omn6KGMXG4gICAgICAgIHRoaXMucmVmcmVzaFRva2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiQubmV4dChyZXMpO1xuICAgICAgICAvLyDph43mlrDlj5Hotbfor7fmsYJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMucmVBdHRhY2hUb2tlbihyZXEpKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hUb2tpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5Ub0xvZ2luKCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFkZGl0aW9uYWxIZWFkZXJzKGhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCByZXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgY29uc3QgbGFuZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KFlVTlpBSV9JMThOX1RPS0VOKS5jdXJyZW50TGFuZztcbiAgICBpZiAoIWhlYWRlcnM/LmhhcygnQWNjZXB0LUxhbmd1YWdlJykgJiYgbGFuZykge1xuICAgICAgcmVzWydBY2NlcHQtTGFuZ3VhZ2UnXSA9IGxhbmc7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGEoZXY6IEh0dHBSZXNwb25zZUJhc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuY2hlY2tTdGF0dXMoZXYpO1xuICAgIHN3aXRjaCAoZXYuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuIG9mKGV2KTtcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICBpZiAodGhpcy5jb25maWcucmVmcmVzaFRva2VuRW5hYmxlZCAmJiB0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5UeXBlID09PSAncmUtcmVxdWVzdCcpIHtcbiAgICAgICAgICBjb25zdCB1bkF1dGhvcml6YXRpb25SZXEgPSByZXEuY2xvbmUoKTtcbiAgICAgICAgICB1bkF1dGhvcml6YXRpb25SZXEuaGVhZGVycy5kZWxldGUoJ0F1dGhvcml6YXRpb24nKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cnlSZWZyZXNoVG9rZW4oZXYsIHVuQXV0aG9yaXphdGlvblJlcSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5Ub0xvZ2luKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICBjYXNlIDQwNDpcbiAgICAgIGNhc2UgNTAwOlxuICAgICAgICBpZiAodGhpcy5qdW1wKSB7XG4gICAgICAgICAgdGhpcy5nb1RvKGAvZXhjZXB0aW9uLyR7ZXYuc3RhdHVzfWApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAn5pyq5Y+v55+l6ZSZ6K+v77yM5aSn6YOo5YiG5piv55Sx5LqO5ZCO56uv5LiN5pSv5oyB6Leo5Z+fQ09SU+aIluaXoOaViOmFjee9ruW8lei1t++8jOivt+WPguiAgyBodHRwczovL25nLnl1bnphaW5mby5jb20vZG9jcy9zZXJ2ZXIg6Kej5Yaz6Leo5Z+f6Zeu6aKYJyxcbiAgICAgICAgICAgIGV2XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGV2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKGV2KTtcbiAgICB9XG4gIH1cblxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBpZiAocmVxLmNvbnRleHQuZ2V0KEFMTE9XX0FOT05ZTU9VUykpIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIGxvZygneXouZGVmYXVsdC5pbnRlcmNlcHRvci50czogJywgJ3JlcXVlc3QgJywgcmVxKTtcbiAgICAvLyDnu5/kuIDliqDliY3nvIBcbiAgICBsZXQgdXJsID0gcmVxLnVybDtcbiAgICBpZiAoIXVybC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICF1cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICB1cmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbiAgICBpZiAodXJsLmluY2x1ZGVzKCcuanNvbicpICYmIHVybC5pbmNsdWRlcygnYXNzZXRzJykpIHtcbiAgICAgIHVybCA9IHJlcS51cmw7XG4gICAgfVxuICAgIC8vIOWKoOWFpeivreiogOWktFxuICAgIGNvbnN0IG5ld1JlcSA9IHJlcS5jbG9uZSh7IHVybCwgc2V0SGVhZGVyczogdGhpcy5nZXRBZGRpdGlvbmFsSGVhZGVycyhyZXEuaGVhZGVycykgfSk7XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKG5ld1JlcSkucGlwZShcbiAgICAgIG1lcmdlTWFwKGV2ID0+IHtcbiAgICAgICAgLy8g5YWB6K6457uf5LiA5a+56K+35rGC6ZSZ6K+v5aSE55CGXG4gICAgICAgIGlmIChldiBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVEYXRhKGV2LCBuZXdSZXEsIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOiLpeS4gOWIh+mDveato+W4uO+8jOWImeWQjue7reaTjeS9nFxuICAgICAgICByZXR1cm4gb2YoZXYpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZURhdGEoZXJyLCBuZXdSZXEsIG5leHQpKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWXVuemFpRGVmYXVsdEludGVyY2VwdG9yIGFzIFl6RGVmYXVsdEludGVyY2VwdG9yLCBZdW56YWlEZWZhdWx0SW50ZXJjZXB0b3IgfTtcbiJdfQ==
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { registerLocaleData } from '@angular/common';
|
|
2
|
+
import ngEn from '@angular/common/locales/en';
|
|
3
|
+
import ngZh from '@angular/common/locales/zh';
|
|
4
|
+
import ngZhTw from '@angular/common/locales/zh-Hant';
|
|
5
|
+
import { Injectable } from '@angular/core';
|
|
6
|
+
import { enUS as dfEn, zhCN as dfZhCn, zhTW as dfZhTw } from 'date-fns/locale';
|
|
7
|
+
import { en_US as yelonEnUS, zh_CN as yelonZhCn, zh_TW as yelonZhTw, YunzaiI18nBaseService } from '@yelon/theme';
|
|
8
|
+
import { en_US as zorroEnUS, zh_CN as zorroZhCN, zh_TW as zorroZhTW } from 'ng-zorro-antd/i18n';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@yelon/theme";
|
|
11
|
+
import * as i2 from "ng-zorro-antd/i18n";
|
|
12
|
+
import * as i3 from "@angular/cdk/platform";
|
|
13
|
+
import * as i4 from "@yelon/util/config";
|
|
14
|
+
const DEFAULT = 'zh-CN';
|
|
15
|
+
const LANGS = {
|
|
16
|
+
'zh-CN': {
|
|
17
|
+
text: '简体中文',
|
|
18
|
+
ng: ngZh,
|
|
19
|
+
zorro: zorroZhCN,
|
|
20
|
+
date: dfZhCn,
|
|
21
|
+
yelon: yelonZhCn,
|
|
22
|
+
abbr: '🇨🇳'
|
|
23
|
+
},
|
|
24
|
+
'zh-TW': {
|
|
25
|
+
text: '繁体中文',
|
|
26
|
+
ng: ngZhTw,
|
|
27
|
+
zorro: zorroZhTW,
|
|
28
|
+
date: dfZhTw,
|
|
29
|
+
yelon: yelonZhTw,
|
|
30
|
+
abbr: '🇭🇰'
|
|
31
|
+
},
|
|
32
|
+
'en-US': {
|
|
33
|
+
text: 'English',
|
|
34
|
+
ng: ngEn,
|
|
35
|
+
zorro: zorroEnUS,
|
|
36
|
+
date: dfEn,
|
|
37
|
+
yelon: yelonEnUS,
|
|
38
|
+
abbr: '🇬🇧'
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
class YunzaiI18NService extends YunzaiI18nBaseService {
|
|
42
|
+
constructor(http, settings, nzI18nService, yelonLocaleService, platform, cogSrv) {
|
|
43
|
+
super(cogSrv);
|
|
44
|
+
this.http = http;
|
|
45
|
+
this.settings = settings;
|
|
46
|
+
this.nzI18nService = nzI18nService;
|
|
47
|
+
this.yelonLocaleService = yelonLocaleService;
|
|
48
|
+
this.platform = platform;
|
|
49
|
+
this._defaultLang = DEFAULT;
|
|
50
|
+
this._langs = Object.keys(LANGS).map(code => {
|
|
51
|
+
const item = LANGS[code];
|
|
52
|
+
return { code, text: item.text, abbr: item.abbr };
|
|
53
|
+
});
|
|
54
|
+
const defaultLang = this.getDefaultLang();
|
|
55
|
+
this._defaultLang = this._langs.findIndex(w => w.code === defaultLang) === -1 ? DEFAULT : defaultLang;
|
|
56
|
+
}
|
|
57
|
+
getDefaultLang() {
|
|
58
|
+
if (!this.platform.isBrowser) {
|
|
59
|
+
return DEFAULT;
|
|
60
|
+
}
|
|
61
|
+
if (this.settings.layout.lang) {
|
|
62
|
+
return this.settings.layout.lang;
|
|
63
|
+
}
|
|
64
|
+
let res = (navigator.languages ? navigator.languages[0] : null) || navigator.language;
|
|
65
|
+
const arr = res.split('-');
|
|
66
|
+
return arr.length <= 1 ? res : `${arr[0]}-${arr[1].toUpperCase()}`;
|
|
67
|
+
}
|
|
68
|
+
loadLangData(lang) {
|
|
69
|
+
return this.http.get(`assets/tmp/i18n/${lang}.json`);
|
|
70
|
+
}
|
|
71
|
+
use(lang, data) {
|
|
72
|
+
if (this._currentLang === lang)
|
|
73
|
+
return;
|
|
74
|
+
this._data = this.flatData(data, []);
|
|
75
|
+
const item = LANGS[lang];
|
|
76
|
+
registerLocaleData(item.ng);
|
|
77
|
+
this.nzI18nService.setLocale(item.zorro);
|
|
78
|
+
this.nzI18nService.setDateLocale(item.date);
|
|
79
|
+
this.yelonLocaleService.setLocale(item.yelon);
|
|
80
|
+
this._currentLang = lang;
|
|
81
|
+
this._change$.next(lang);
|
|
82
|
+
}
|
|
83
|
+
getLangs() {
|
|
84
|
+
return this._langs;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
YunzaiI18NService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiI18NService, deps: [{ token: i1._HttpClient }, { token: i1.SettingsService }, { token: i2.NzI18nService }, { token: i1.YelonLocaleService }, { token: i3.Platform }, { token: i4.YunzaiConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
88
|
+
YunzaiI18NService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiI18NService, providedIn: 'root' });
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiI18NService, decorators: [{
|
|
90
|
+
type: Injectable,
|
|
91
|
+
args: [{ providedIn: 'root' }]
|
|
92
|
+
}], ctorParameters: function () { return [{ type: i1._HttpClient }, { type: i1.SettingsService }, { type: i2.NzI18nService }, { type: i1.YelonLocaleService }, { type: i3.Platform }, { type: i4.YunzaiConfigService }]; } });
|
|
93
|
+
export { YunzaiI18NService as YzI18NService, YunzaiI18NService };
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWkxOG4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXVuemFpLWkxOG4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQztBQUM5QyxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQztBQUM5QyxPQUFPLE1BQU0sTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9FLE9BQU8sRUFFTCxLQUFLLElBQUksU0FBUyxFQUVsQixLQUFLLElBQUksU0FBUyxFQUNsQixLQUFLLElBQUksU0FBUyxFQUVsQixxQkFBcUIsRUFDdEIsTUFBTSxjQUFjLENBQUM7QUFHdEIsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQWlCLEtBQUssSUFBSSxTQUFTLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFXL0csTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3hCLE1BQU0sS0FBSyxHQUFzQztJQUMvQyxPQUFPLEVBQUU7UUFDUCxJQUFJLEVBQUUsTUFBTTtRQUNaLEVBQUUsRUFBRSxJQUFJO1FBQ1IsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsTUFBTTtLQUNiO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07UUFDWixFQUFFLEVBQUUsTUFBTTtRQUNWLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLE1BQU07S0FDYjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsRUFBRSxFQUFFLElBQUk7UUFDUixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxNQUFNO0tBQ2I7Q0FDRixDQUFDO0FBRUYsTUFDTSxpQkFBa0IsU0FBUSxxQkFBcUI7SUFPbkQsWUFDVSxJQUFpQixFQUNqQixRQUF5QixFQUN6QixhQUE0QixFQUM1QixrQkFBc0MsRUFDdEMsUUFBa0IsRUFDMUIsTUFBMkI7UUFFM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBUE4sU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFYVCxpQkFBWSxHQUFHLE9BQU8sQ0FBQztRQUNsQyxXQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQVlELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDeEcsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQzVCLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDbEM7UUFDRCxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDdEYsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWSxFQUFFLElBQTZCO1FBQzdDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQUUsT0FBTztRQUV2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDOzs4R0F0REcsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FERyxNQUFNOzJGQUMxQixpQkFBaUI7a0JBRHRCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQTBEbEMsT0FBTyxFQUFFLGlCQUFpQixJQUFJLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBuZ0VuIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2VuJztcbmltcG9ydCBuZ1poIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL3poJztcbmltcG9ydCBuZ1poVHcgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvemgtSGFudCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGVuVVMgYXMgZGZFbiwgemhDTiBhcyBkZlpoQ24sIHpoVFcgYXMgZGZaaFR3IH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlJztcblxuaW1wb3J0IHtcbiAgWWVsb25Mb2NhbGVTZXJ2aWNlLFxuICBlbl9VUyBhcyB5ZWxvbkVuVVMsXG4gIFNldHRpbmdzU2VydmljZSxcbiAgemhfQ04gYXMgeWVsb25aaENuLFxuICB6aF9UVyBhcyB5ZWxvblpoVHcsXG4gIF9IdHRwQ2xpZW50LFxuICBZdW56YWlJMThuQmFzZVNlcnZpY2Vcbn0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7IFl1bnphaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAeWVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGVuX1VTIGFzIHpvcnJvRW5VUywgTnpJMThuU2VydmljZSwgemhfQ04gYXMgem9ycm9aaENOLCB6aF9UVyBhcyB6b3Jyb1poVFcgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuXG5pbnRlcmZhY2UgTGFuZ0NvbmZpZ0RhdGEge1xuICBhYmJyOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgbmc6IE56U2FmZUFueTtcbiAgem9ycm86IE56U2FmZUFueTtcbiAgZGF0ZTogTnpTYWZlQW55O1xuICB5ZWxvbjogTnpTYWZlQW55O1xufVxuXG5jb25zdCBERUZBVUxUID0gJ3poLUNOJztcbmNvbnN0IExBTkdTOiB7IFtrZXk6IHN0cmluZ106IExhbmdDb25maWdEYXRhIH0gPSB7XG4gICd6aC1DTic6IHtcbiAgICB0ZXh0OiAn566A5L2T5Lit5paHJyxcbiAgICBuZzogbmdaaCxcbiAgICB6b3Jybzogem9ycm9aaENOLFxuICAgIGRhdGU6IGRmWmhDbixcbiAgICB5ZWxvbjogeWVsb25aaENuLFxuICAgIGFiYnI6ICfwn4eo8J+HsydcbiAgfSxcbiAgJ3poLVRXJzoge1xuICAgIHRleHQ6ICfnuYHkvZPkuK3mlocnLFxuICAgIG5nOiBuZ1poVHcsXG4gICAgem9ycm86IHpvcnJvWmhUVyxcbiAgICBkYXRlOiBkZlpoVHcsXG4gICAgeWVsb246IHllbG9uWmhUdyxcbiAgICBhYmJyOiAn8J+HrfCfh7AnXG4gIH0sXG4gICdlbi1VUyc6IHtcbiAgICB0ZXh0OiAnRW5nbGlzaCcsXG4gICAgbmc6IG5nRW4sXG4gICAgem9ycm86IHpvcnJvRW5VUyxcbiAgICBkYXRlOiBkZkVuLFxuICAgIHllbG9uOiB5ZWxvbkVuVVMsXG4gICAgYWJicjogJ/Cfh6zwn4enJ1xuICB9XG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuY2xhc3MgWXVuemFpSTE4TlNlcnZpY2UgZXh0ZW5kcyBZdW56YWlJMThuQmFzZVNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RlZmF1bHRMYW5nID0gREVGQVVMVDtcbiAgcHJpdmF0ZSBfbGFuZ3MgPSBPYmplY3Qua2V5cyhMQU5HUykubWFwKGNvZGUgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBMQU5HU1tjb2RlXTtcbiAgICByZXR1cm4geyBjb2RlLCB0ZXh0OiBpdGVtLnRleHQsIGFiYnI6IGl0ZW0uYWJiciB9O1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IF9IdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG56STE4blNlcnZpY2U6IE56STE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSB5ZWxvbkxvY2FsZVNlcnZpY2U6IFllbG9uTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBjb2dTcnY6IFl1bnphaUNvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoY29nU3J2KTtcblxuICAgIGNvbnN0IGRlZmF1bHRMYW5nID0gdGhpcy5nZXREZWZhdWx0TGFuZygpO1xuICAgIHRoaXMuX2RlZmF1bHRMYW5nID0gdGhpcy5fbGFuZ3MuZmluZEluZGV4KHcgPT4gdy5jb2RlID09PSBkZWZhdWx0TGFuZykgPT09IC0xID8gREVGQVVMVCA6IGRlZmF1bHRMYW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0TGFuZygpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybiBERUZBVUxUO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5sYXlvdXQubGFuZykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubGF5b3V0Lmxhbmc7XG4gICAgfVxuICAgIGxldCByZXMgPSAobmF2aWdhdG9yLmxhbmd1YWdlcyA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBudWxsKSB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gICAgY29uc3QgYXJyID0gcmVzLnNwbGl0KCctJyk7XG4gICAgcmV0dXJuIGFyci5sZW5ndGggPD0gMSA/IHJlcyA6IGAke2FyclswXX0tJHthcnJbMV0udG9VcHBlckNhc2UoKX1gO1xuICB9XG5cbiAgbG9hZExhbmdEYXRhKGxhbmc6IHN0cmluZyk6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGFzc2V0cy90bXAvaTE4bi8ke2xhbmd9Lmpzb25gKTtcbiAgfVxuXG4gIHVzZShsYW5nOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRMYW5nID09PSBsYW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9kYXRhID0gdGhpcy5mbGF0RGF0YShkYXRhLCBbXSk7XG5cbiAgICBjb25zdCBpdGVtID0gTEFOR1NbbGFuZ107XG4gICAgcmVnaXN0ZXJMb2NhbGVEYXRhKGl0ZW0ubmcpO1xuICAgIHRoaXMubnpJMThuU2VydmljZS5zZXRMb2NhbGUoaXRlbS56b3Jybyk7XG4gICAgdGhpcy5uekkxOG5TZXJ2aWNlLnNldERhdGVMb2NhbGUoaXRlbS5kYXRlKTtcbiAgICB0aGlzLnllbG9uTG9jYWxlU2VydmljZS5zZXRMb2NhbGUoaXRlbS55ZWxvbik7XG4gICAgdGhpcy5fY3VycmVudExhbmcgPSBsYW5nO1xuXG4gICAgdGhpcy5fY2hhbmdlJC5uZXh0KGxhbmcpO1xuICB9XG5cbiAgZ2V0TGFuZ3MoKTogQXJyYXk8eyBjb2RlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgYWJicjogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3M7XG4gIH1cbn1cblxuZXhwb3J0IHsgWXVuemFpSTE4TlNlcnZpY2UgYXMgWXpJMThOU2VydmljZSwgWXVuemFpSTE4TlNlcnZpY2UgfTtcbiJdfQ==
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { HttpClientModule } from '@angular/common/http';
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { RouterModule } from '@angular/router';
|
|
6
|
+
import { YunzaiSharedYelonModule, YunzaiSharedZorroModule } from '@yelon/bcs';
|
|
7
|
+
import { YUNZAI_THEME_BTN_KEYS } from '@yelon/theme/theme-btn';
|
|
8
|
+
import { YzLayoutBasicComponent } from './layout-basic/layout-basic.component';
|
|
9
|
+
import { LayoutNavApplicationComponent, LayoutNavGroupComponent, LayoutNavTileComponent } from './layout-nav';
|
|
10
|
+
import { YunzaiClearStorageComponent, YunzaiFullScreenComponent, YunzaiI18NComponent, YunzaiNotifyComponent, YunzaiThemBtnComponent, YunzaiUserComponent } from './widgets';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
const WIDGETS = [
|
|
13
|
+
YunzaiClearStorageComponent,
|
|
14
|
+
YunzaiFullScreenComponent,
|
|
15
|
+
YunzaiI18NComponent,
|
|
16
|
+
YunzaiNotifyComponent,
|
|
17
|
+
YunzaiThemBtnComponent,
|
|
18
|
+
YunzaiUserComponent
|
|
19
|
+
];
|
|
20
|
+
const LAYOUT_NAV_COMPONENTS = [LayoutNavApplicationComponent, LayoutNavGroupComponent, LayoutNavTileComponent];
|
|
21
|
+
const COMPONENTS = [YzLayoutBasicComponent];
|
|
22
|
+
export class YunzaiLayoutModule {
|
|
23
|
+
}
|
|
24
|
+
YunzaiLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
25
|
+
YunzaiLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: YunzaiLayoutModule, declarations: [YzLayoutBasicComponent, YunzaiClearStorageComponent,
|
|
26
|
+
YunzaiFullScreenComponent,
|
|
27
|
+
YunzaiI18NComponent,
|
|
28
|
+
YunzaiNotifyComponent,
|
|
29
|
+
YunzaiThemBtnComponent,
|
|
30
|
+
YunzaiUserComponent, LayoutNavApplicationComponent, LayoutNavGroupComponent, LayoutNavTileComponent], imports: [HttpClientModule,
|
|
31
|
+
CommonModule,
|
|
32
|
+
FormsModule,
|
|
33
|
+
RouterModule,
|
|
34
|
+
ReactiveFormsModule,
|
|
35
|
+
YunzaiSharedYelonModule,
|
|
36
|
+
YunzaiSharedZorroModule], exports: [YzLayoutBasicComponent, YunzaiClearStorageComponent,
|
|
37
|
+
YunzaiFullScreenComponent,
|
|
38
|
+
YunzaiI18NComponent,
|
|
39
|
+
YunzaiNotifyComponent,
|
|
40
|
+
YunzaiThemBtnComponent,
|
|
41
|
+
YunzaiUserComponent, LayoutNavApplicationComponent, LayoutNavGroupComponent, LayoutNavTileComponent] });
|
|
42
|
+
YunzaiLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiLayoutModule, providers: [
|
|
43
|
+
{
|
|
44
|
+
provide: YUNZAI_THEME_BTN_KEYS,
|
|
45
|
+
useValue: 'site-theme'
|
|
46
|
+
}
|
|
47
|
+
], imports: [HttpClientModule,
|
|
48
|
+
CommonModule,
|
|
49
|
+
FormsModule,
|
|
50
|
+
RouterModule,
|
|
51
|
+
ReactiveFormsModule,
|
|
52
|
+
YunzaiSharedYelonModule,
|
|
53
|
+
YunzaiSharedZorroModule] });
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiLayoutModule, decorators: [{
|
|
55
|
+
type: NgModule,
|
|
56
|
+
args: [{
|
|
57
|
+
imports: [
|
|
58
|
+
HttpClientModule,
|
|
59
|
+
CommonModule,
|
|
60
|
+
FormsModule,
|
|
61
|
+
RouterModule,
|
|
62
|
+
ReactiveFormsModule,
|
|
63
|
+
YunzaiSharedYelonModule,
|
|
64
|
+
YunzaiSharedZorroModule
|
|
65
|
+
],
|
|
66
|
+
providers: [
|
|
67
|
+
{
|
|
68
|
+
provide: YUNZAI_THEME_BTN_KEYS,
|
|
69
|
+
useValue: 'site-theme'
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
declarations: [...COMPONENTS, ...WIDGETS, ...LAYOUT_NAV_COMPONENTS],
|
|
73
|
+
exports: [...COMPONENTS, ...WIDGETS, ...LAYOUT_NAV_COMPONENTS]
|
|
74
|
+
}]
|
|
75
|
+
}] });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWxheW91dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvbGF5b3V0L3l1bnphaS1sYXlvdXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RyxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDcEIsTUFBTSxXQUFXLENBQUM7O0FBRW5CLE1BQU0sT0FBTyxHQUFHO0lBQ2QsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6QixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0QixtQkFBbUI7Q0FDcEIsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSx1QkFBdUIsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBRS9HLE1BQU0sVUFBVSxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQXFCNUMsTUFBTSxPQUFPLGtCQUFrQjs7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLGlCQXJCWCxzQkFBc0IsRUFWeEMsMkJBQTJCO1FBQzNCLHlCQUF5QjtRQUN6QixtQkFBbUI7UUFDbkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QixtQkFBbUIsRUFHVSw2QkFBNkIsRUFBRSx1QkFBdUIsRUFBRSxzQkFBc0IsYUFNekcsZ0JBQWdCO1FBQ2hCLFlBQVk7UUFDWixXQUFXO1FBQ1gsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsdUJBQXVCLGFBVlAsc0JBQXNCLEVBVnhDLDJCQUEyQjtRQUMzQix5QkFBeUI7UUFDekIsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIsbUJBQW1CLEVBR1UsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCO2dIQXVCaEcsa0JBQWtCLGFBVGxCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLFFBQVEsRUFBRSxZQUFZO1NBQ3ZCO0tBQ0YsWUFiQyxnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLFdBQVc7UUFDWCxZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLHVCQUF1QjtRQUN2Qix1QkFBdUI7MkZBV2Qsa0JBQWtCO2tCQW5COUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3FCQUN4QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLFlBQVk7eUJBQ3ZCO3FCQUNGO29CQUNELFlBQVksRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcscUJBQXFCLENBQUM7b0JBQ25FLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcscUJBQXFCLENBQUM7aUJBQy9EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBZdW56YWlTaGFyZWRZZWxvbk1vZHVsZSwgWXVuemFpU2hhcmVkWm9ycm9Nb2R1bGUgfSBmcm9tICdAeWVsb24vYmNzJztcbmltcG9ydCB7IFlVTlpBSV9USEVNRV9CVE5fS0VZUyB9IGZyb20gJ0B5ZWxvbi90aGVtZS90aGVtZS1idG4nO1xuXG5pbXBvcnQgeyBZekxheW91dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtYmFzaWMvbGF5b3V0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXlvdXROYXZBcHBsaWNhdGlvbkNvbXBvbmVudCwgTGF5b3V0TmF2R3JvdXBDb21wb25lbnQsIExheW91dE5hdlRpbGVDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1uYXYnO1xuaW1wb3J0IHtcbiAgWXVuemFpQ2xlYXJTdG9yYWdlQ29tcG9uZW50LFxuICBZdW56YWlGdWxsU2NyZWVuQ29tcG9uZW50LFxuICBZdW56YWlJMThOQ29tcG9uZW50LFxuICBZdW56YWlOb3RpZnlDb21wb25lbnQsXG4gIFl1bnphaVRoZW1CdG5Db21wb25lbnQsXG4gIFl1bnphaVVzZXJDb21wb25lbnRcbn0gZnJvbSAnLi93aWRnZXRzJztcblxuY29uc3QgV0lER0VUUyA9IFtcbiAgWXVuemFpQ2xlYXJTdG9yYWdlQ29tcG9uZW50LFxuICBZdW56YWlGdWxsU2NyZWVuQ29tcG9uZW50LFxuICBZdW56YWlJMThOQ29tcG9uZW50LFxuICBZdW56YWlOb3RpZnlDb21wb25lbnQsXG4gIFl1bnphaVRoZW1CdG5Db21wb25lbnQsXG4gIFl1bnphaVVzZXJDb21wb25lbnRcbl07XG5cbmNvbnN0IExBWU9VVF9OQVZfQ09NUE9ORU5UUyA9IFtMYXlvdXROYXZBcHBsaWNhdGlvbkNvbXBvbmVudCwgTGF5b3V0TmF2R3JvdXBDb21wb25lbnQsIExheW91dE5hdlRpbGVDb21wb25lbnRdO1xuXG5jb25zdCBDT01QT05FTlRTID0gW1l6TGF5b3V0QmFzaWNDb21wb25lbnRdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgWXVuemFpU2hhcmVkWWVsb25Nb2R1bGUsXG4gICAgWXVuemFpU2hhcmVkWm9ycm9Nb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogWVVOWkFJX1RIRU1FX0JUTl9LRVlTLFxuICAgICAgdXNlVmFsdWU6ICdzaXRlLXRoZW1lJ1xuICAgIH1cbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uQ09NUE9ORU5UUywgLi4uV0lER0VUUywgLi4uTEFZT1VUX05BVl9DT01QT05FTlRTXSxcbiAgZXhwb3J0czogWy4uLkNPTVBPTkVOVFMsIC4uLldJREdFVFMsIC4uLkxBWU9VVF9OQVZfQ09NUE9ORU5UU11cbn0pXG5leHBvcnQgY2xhc3MgWXVuemFpTGF5b3V0TW9kdWxlIHt9XG4iXX0=
|