@yelon/bis 12.0.13 → 12.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/bis.d.ts +4 -4
- package/bundles/bis.umd.js +7 -7
- package/bundles/layout.umd.js +2570 -1631
- package/bundles/layout.umd.js.map +1 -1
- package/bundles/shared.umd.js +1226 -1229
- package/bundles/shared.umd.js.map +1 -1
- package/esm2015/bis.js +4 -4
- package/esm2015/layout/act.guard.js +115 -0
- package/esm2015/layout/bis.config.js +10 -10
- package/esm2015/layout/contact/contact.component.js +434 -0
- package/esm2015/layout/contact/contact.service.js +150 -0
- package/esm2015/layout/layout.js +8 -6
- package/esm2015/layout/layout.module.js +47 -35
- package/esm2015/layout/path-to-regexp.service.js +237 -0
- package/esm2015/layout/public_api.js +15 -11
- package/esm2015/layout/stomp.config.js +19 -19
- package/esm2015/layout/widgets/index.js +7 -7
- package/esm2015/layout/widgets/yz.application.component.js +132 -132
- package/esm2015/layout/widgets/yz.clear-storage.component.js +35 -35
- package/esm2015/layout/widgets/yz.fullscreen.component.js +32 -32
- package/esm2015/layout/widgets/yz.i18n.component.js +50 -50
- package/esm2015/layout/widgets/yz.notify.component.js +143 -143
- package/esm2015/layout/widgets/yz.them-btn.component.js +106 -106
- package/esm2015/layout/widgets/yz.user.component.js +57 -57
- package/esm2015/layout/yz.auth.service.js +157 -157
- package/esm2015/layout/yz.basic.component.js +40 -40
- package/esm2015/layout/yz.default.interceptor.js +203 -203
- package/esm2015/layout/yz.i18n.service.js +102 -104
- package/esm2015/layout/yz.startup.service.js +137 -137
- package/esm2015/layout/yz.stomp.service.js +90 -90
- package/esm2015/public_api.js +1 -1
- package/esm2015/shared/public_api.js +4 -4
- package/esm2015/shared/shared-yelon.module.js +107 -107
- package/esm2015/shared/shared-zorro.module.js +81 -79
- package/esm2015/shared/shared.js +4 -4
- package/esm2015/shared/shared.module.js +22 -16
- package/esm2015/shared/style-icons.js +795 -795
- package/fesm2015/bis.js +2 -2
- package/fesm2015/layout.js +2148 -1221
- package/fesm2015/layout.js.map +1 -1
- package/fesm2015/shared.js +909 -901
- package/fesm2015/shared.js.map +1 -1
- package/layout/act.guard.d.ts +20 -0
- package/layout/bis.config.d.ts +3 -3
- package/layout/contact/contact.component.d.ts +166 -0
- package/layout/contact/contact.service.d.ts +115 -0
- package/layout/layout.d.ts +7 -5
- package/layout/layout.metadata.json +1 -1
- package/layout/layout.module.d.ts +2 -2
- package/layout/path-to-regexp.service.d.ts +23 -0
- package/layout/public_api.d.ts +12 -10
- package/layout/stomp.config.d.ts +3 -3
- package/layout/widgets/index.d.ts +7 -7
- package/layout/widgets/yz.application.component.d.ts +45 -45
- package/layout/widgets/yz.clear-storage.component.d.ts +8 -8
- package/layout/widgets/yz.fullscreen.component.d.ts +6 -6
- package/layout/widgets/yz.i18n.component.d.ts +19 -19
- package/layout/widgets/yz.notify.component.d.ts +25 -25
- package/layout/widgets/yz.them-btn.component.d.ts +29 -29
- package/layout/widgets/yz.user.component.d.ts +25 -25
- package/layout/yz.auth.service.d.ts +19 -19
- package/layout/yz.basic.component.d.ts +15 -15
- package/layout/yz.default.interceptor.d.ts +26 -26
- package/layout/yz.i18n.service.d.ts +24 -24
- package/layout/yz.startup.service.d.ts +31 -31
- package/layout/yz.stomp.service.d.ts +39 -39
- package/package.json +10 -10
- package/public_api.d.ts +2 -2
- package/shared/public_api.d.ts +4 -4
- package/shared/shared-yelon.module.d.ts +3 -3
- package/shared/shared-zorro.module.d.ts +2 -2
- package/shared/shared.d.ts +4 -4
- package/shared/shared.metadata.json +1 -1
- package/shared/shared.module.d.ts +2 -2
- package/shared/style-icons.d.ts +1 -1
|
@@ -1,104 +1,102 @@
|
|
|
1
|
-
// 请参考:https://ng.yunzainfo.com/docs/i18n
|
|
2
|
-
import { Platform } from '@angular/cdk/platform';
|
|
3
|
-
import { registerLocaleData } from '@angular/common';
|
|
4
|
-
import ngEn from '@angular/common/locales/en';
|
|
5
|
-
import ngZh from '@angular/common/locales/zh';
|
|
6
|
-
import ngZhTw from '@angular/common/locales/zh-Hant';
|
|
7
|
-
import { Injectable } from '@angular/core';
|
|
8
|
-
import { enUS as dfEn, zhCN as dfZhCn, zhTW as dfZhTw } from 'date-fns/locale';
|
|
9
|
-
import { en_US as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@yelon/theme";
|
|
14
|
-
import * as i2 from "ng-zorro-antd/i18n";
|
|
15
|
-
import * as i3 from "@angular/cdk/platform";
|
|
16
|
-
import * as i4 from "@yelon/util/config";
|
|
17
|
-
const DEFAULT = 'zh-CN';
|
|
18
|
-
const LANGS = {
|
|
19
|
-
'zh-CN': {
|
|
20
|
-
text: '简体中文',
|
|
21
|
-
ng: ngZh,
|
|
22
|
-
zorro: zorroZhCN,
|
|
23
|
-
date: dfZhCn,
|
|
24
|
-
yelon: yelonZhCn,
|
|
25
|
-
abbr: '🇨🇳'
|
|
26
|
-
},
|
|
27
|
-
'zh-TW': {
|
|
28
|
-
text: '繁体中文',
|
|
29
|
-
ng: ngZhTw,
|
|
30
|
-
zorro: zorroZhTW,
|
|
31
|
-
date: dfZhTw,
|
|
32
|
-
yelon: yelonZhTw,
|
|
33
|
-
abbr: '🇭🇰'
|
|
34
|
-
},
|
|
35
|
-
'en-US': {
|
|
36
|
-
text: 'English',
|
|
37
|
-
ng: ngEn,
|
|
38
|
-
zorro: zorroEnUS,
|
|
39
|
-
date: dfEn,
|
|
40
|
-
yelon: yelonEnUS,
|
|
41
|
-
abbr: '🇬🇧'
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
export class YzI18NService extends YunzaiI18nBaseService {
|
|
45
|
-
constructor(http, settings, nzI18nService, yelonLocaleService, platform, cogSrv) {
|
|
46
|
-
super(cogSrv);
|
|
47
|
-
this.http = http;
|
|
48
|
-
this.settings = settings;
|
|
49
|
-
this.nzI18nService = nzI18nService;
|
|
50
|
-
this.yelonLocaleService = yelonLocaleService;
|
|
51
|
-
this.platform = platform;
|
|
52
|
-
this._defaultLang = DEFAULT;
|
|
53
|
-
this._langs = Object.keys(LANGS).map(code => {
|
|
54
|
-
const item = LANGS[code];
|
|
55
|
-
return { code, text: item.text, abbr: item.abbr };
|
|
56
|
-
});
|
|
57
|
-
const defaultLang = this.getDefaultLang();
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
84
|
-
this.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
{ type:
|
|
98
|
-
{ type:
|
|
99
|
-
{ type:
|
|
100
|
-
{ type:
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
];
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC95ei5pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQztBQUM5QyxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQztBQUM5QyxPQUFPLE1BQU0sTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9FLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLEtBQUssSUFBSSxTQUFTLEVBQ2xCLGVBQWUsRUFDZixLQUFLLElBQUksU0FBUyxFQUNsQixLQUFLLElBQUksU0FBUyxFQUNsQixXQUFXLEVBQ1gscUJBQXFCLEVBQ3RCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFXekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3hCLE1BQU0sS0FBSyxHQUFzQztJQUMvQyxPQUFPLEVBQUU7UUFDUCxJQUFJLEVBQUUsTUFBTTtRQUNaLEVBQUUsRUFBRSxJQUFJO1FBQ1IsS0FBSyxFQUFFLFNB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WUFBRSxPQUFPO1FBRXZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWxCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDOzs7O1lBekRGLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQTFDaEMsV0FBVztZQUhYLGVBQWU7WUFMWSxhQUFhO1lBR3hDLGtCQUFrQjtZQWRYLFFBQVE7WUFzQlIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8g6K+35Y+C6ICD77yaaHR0cHM6Ly9uZy55dW56YWluZm8uY29tL2RvY3MvaTE4blxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBuZ0VuIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2VuJztcbmltcG9ydCBuZ1poIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL3poJztcbmltcG9ydCBuZ1poVHcgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvemgtSGFudCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGVuVVMgYXMgZGZFbiwgemhDTiBhcyBkZlpoQ24sIHpoVFcgYXMgZGZaaFR3IH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlJztcblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGVuX1VTIGFzIHpvcnJvRW5VUywgTnpJMThuU2VydmljZSwgemhfQ04gYXMgem9ycm9aaENOLCB6aF9UVyBhcyB6b3Jyb1poVFcgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuXG5pbXBvcnQge1xuICBZZWxvbkxvY2FsZVNlcnZpY2UsXG4gIGVuX1VTIGFzIHllbG9uRW5VUyxcbiAgU2V0dGluZ3NTZXJ2aWNlLFxuICB6aF9DTiBhcyB5ZWxvblpoQ24sXG4gIHpoX1RXIGFzIHllbG9uWmhUdyxcbiAgX0h0dHBDbGllbnQsXG4gIFl1bnphaUkxOG5CYXNlU2VydmljZVxufSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgWXVuemFpQ29uZmlnU2VydmljZSB9IGZyb20gJ0B5ZWxvbi91dGlsL2NvbmZpZyc7XG5cbmludGVyZmFjZSBMYW5nQ29uZmlnRGF0YSB7XG4gIGFiYnI6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBuZzogTnpTYWZlQW55O1xuICB6b3JybzogTnpTYWZlQW55O1xuICBkYXRlOiBOelNhZmVBbnk7XG4gIHllbG9uOiBOelNhZmVBbnk7XG59XG5cbmNvbnN0IERFRkFVTFQgPSAnemgtQ04nO1xuY29uc3QgTEFOR1M6IHsgW2tleTogc3RyaW5nXTogTGFuZ0NvbmZpZ0RhdGEgfSA9IHtcbiAgJ3poLUNOJzoge1xuICAgIHRleHQ6ICfnroDkvZPkuK3mlocnLFxuICAgIG5nOiBuZ1poLFxuICAgIHpvcnJvOiB6b3Jyb1poQ04sXG4gICAgZGF0ZTogZGZaaENuLFxuICAgIHllbG9uOiB5ZWxvblpoQ24sXG4gICAgYWJicjogJ/Cfh6jwn4ezJ1xuICB9LFxuICAnemgtVFcnOiB7XG4gICAgdGV4dDogJ+e5geS9k+S4reaWhycsXG4gICAgbmc6IG5nWmhUdyxcbiAgICB6b3Jybzogem9ycm9aaFRXLFxuICAgIGRhdGU6IGRmWmhUdyxcbiAgICB5ZWxvbjogeWVsb25aaFR3LFxuICAgIGFiYnI6ICfwn4et8J+HsCdcbiAgfSxcbiAgJ2VuLVVTJzoge1xuICAgIHRleHQ6ICdFbmdsaXNoJyxcbiAgICBuZzogbmdFbixcbiAgICB6b3Jybzogem9ycm9FblVTLFxuICAgIGRhdGU6IGRmRW4sXG4gICAgeWVsb246IHllbG9uRW5VUyxcbiAgICBhYmJyOiAn8J+HrPCfh6cnXG4gIH1cbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgWXpJMThOU2VydmljZSBleHRlbmRzIFl1bnphaUkxOG5CYXNlU2VydmljZSB7XG4gIHByb3RlY3RlZCBfZGVmYXVsdExhbmcgPSBERUZBVUxUO1xuICBwcml2YXRlIF9sYW5ncyA9IE9iamVjdC5rZXlzKExBTkdTKS5tYXAoY29kZSA9PiB7XG4gICAgY29uc3QgaXRlbSA9IExBTkdTW2NvZGVdO1xuICAgIHJldHVybiB7IGNvZGUsIHRleHQ6IGl0ZW0udGV4dCwgYWJicjogaXRlbS5hYmJyIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogX0h0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbnpJMThuU2VydmljZTogTnpJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHllbG9uTG9jYWxlU2VydmljZTogWWVsb25Mb2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIGNvZ1NydjogWXVuemFpQ29uZmlnU2VydmljZVxuICApIHtcbiAgICBzdXBlcihjb2dTcnYpO1xuXG4gICAgY29uc3QgZGVmYXVsdExhbmcgPSB0aGlzLmdldERlZmF1bHRMYW5nKCk7XG4gICAgaWYgKHRoaXMuX2xhbmdzLmZpbmRJbmRleCh3ID0+IHcuY29kZSA9PT0gZGVmYXVsdExhbmcpKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0TGFuZyA9IGRlZmF1bHRMYW5nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdExhbmcoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm4gREVGQVVMVDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MubGF5b3V0LmxhbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmxheW91dC5sYW5nO1xuICAgIH1cbiAgICBsZXQgcmVzID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbnVsbCkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlO1xuICAgIGNvbnN0IGFyciA9IHJlcy5zcGxpdCgnLScpO1xuICAgIHJldHVybiBhcnIubGVuZ3RoIDw9IDEgPyByZXMgOiBgJHthcnJbMF19LSR7YXJyWzFdLnRvVXBwZXJDYXNlKCl9YDtcbiAgfVxuXG4gIGxvYWRMYW5nRGF0YShsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE56U2FmZUFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGBhc3NldHMvdG1wL2kxOG4vJHtsYW5nfS5qc29uYCk7XG4gIH1cblxuICB1c2UobGFuZzogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRMYW5nID09PSBsYW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIGNvbnN0IGl0ZW0gPSBMQU5HU1tsYW5nXTtcbiAgICByZWdpc3RlckxvY2FsZURhdGEoaXRlbS5uZyk7XG4gICAgdGhpcy5uekkxOG5TZXJ2aWNlLnNldExvY2FsZShpdGVtLnpvcnJvKTtcbiAgICB0aGlzLm56STE4blNlcnZpY2Uuc2V0RGF0ZUxvY2FsZShpdGVtLmRhdGUpO1xuICAgIHRoaXMueWVsb25Mb2NhbGVTZXJ2aWNlLnNldExvY2FsZShpdGVtLnllbG9uKTtcbiAgICB0aGlzLl9jdXJyZW50TGFuZyA9IGxhbmc7XG5cbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQobGFuZyk7XG4gIH1cblxuICBnZXRMYW5ncygpOiBBcnJheTx7IGNvZGU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyBhYmJyOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiB0aGlzLl9sYW5ncztcbiAgfVxufVxuIl19
|
|
1
|
+
// 请参考:https://ng.yunzainfo.com/docs/i18n
|
|
2
|
+
import { Platform } from '@angular/cdk/platform';
|
|
3
|
+
import { registerLocaleData } from '@angular/common';
|
|
4
|
+
import ngEn from '@angular/common/locales/en';
|
|
5
|
+
import ngZh from '@angular/common/locales/zh';
|
|
6
|
+
import ngZhTw from '@angular/common/locales/zh-Hant';
|
|
7
|
+
import { Injectable } from '@angular/core';
|
|
8
|
+
import { enUS as dfEn, zhCN as dfZhCn, zhTW as dfZhTw } from 'date-fns/locale';
|
|
9
|
+
import { YelonLocaleService, en_US as yelonEnUS, SettingsService, zh_CN as yelonZhCn, zh_TW as yelonZhTw, _HttpClient, YunzaiI18nBaseService } from '@yelon/theme';
|
|
10
|
+
import { YunzaiConfigService } from '@yelon/util/config';
|
|
11
|
+
import { en_US as zorroEnUS, NzI18nService, zh_CN as zorroZhCN, zh_TW as zorroZhTW } from 'ng-zorro-antd/i18n';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@yelon/theme";
|
|
14
|
+
import * as i2 from "ng-zorro-antd/i18n";
|
|
15
|
+
import * as i3 from "@angular/cdk/platform";
|
|
16
|
+
import * as i4 from "@yelon/util/config";
|
|
17
|
+
const DEFAULT = 'zh-CN';
|
|
18
|
+
const LANGS = {
|
|
19
|
+
'zh-CN': {
|
|
20
|
+
text: '简体中文',
|
|
21
|
+
ng: ngZh,
|
|
22
|
+
zorro: zorroZhCN,
|
|
23
|
+
date: dfZhCn,
|
|
24
|
+
yelon: yelonZhCn,
|
|
25
|
+
abbr: '🇨🇳'
|
|
26
|
+
},
|
|
27
|
+
'zh-TW': {
|
|
28
|
+
text: '繁体中文',
|
|
29
|
+
ng: ngZhTw,
|
|
30
|
+
zorro: zorroZhTW,
|
|
31
|
+
date: dfZhTw,
|
|
32
|
+
yelon: yelonZhTw,
|
|
33
|
+
abbr: '🇭🇰'
|
|
34
|
+
},
|
|
35
|
+
'en-US': {
|
|
36
|
+
text: 'English',
|
|
37
|
+
ng: ngEn,
|
|
38
|
+
zorro: zorroEnUS,
|
|
39
|
+
date: dfEn,
|
|
40
|
+
yelon: yelonEnUS,
|
|
41
|
+
abbr: '🇬🇧'
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export class YzI18NService extends YunzaiI18nBaseService {
|
|
45
|
+
constructor(http, settings, nzI18nService, yelonLocaleService, platform, cogSrv) {
|
|
46
|
+
super(cogSrv);
|
|
47
|
+
this.http = http;
|
|
48
|
+
this.settings = settings;
|
|
49
|
+
this.nzI18nService = nzI18nService;
|
|
50
|
+
this.yelonLocaleService = yelonLocaleService;
|
|
51
|
+
this.platform = platform;
|
|
52
|
+
this._defaultLang = DEFAULT;
|
|
53
|
+
this._langs = Object.keys(LANGS).map(code => {
|
|
54
|
+
const item = LANGS[code];
|
|
55
|
+
return { code, text: item.text, abbr: item.abbr };
|
|
56
|
+
});
|
|
57
|
+
const defaultLang = this.getDefaultLang();
|
|
58
|
+
this._defaultLang = this._langs.findIndex(w => w.code === defaultLang) === -1 ? DEFAULT : defaultLang;
|
|
59
|
+
}
|
|
60
|
+
getDefaultLang() {
|
|
61
|
+
if (!this.platform.isBrowser) {
|
|
62
|
+
return DEFAULT;
|
|
63
|
+
}
|
|
64
|
+
if (this.settings.layout.lang) {
|
|
65
|
+
return this.settings.layout.lang;
|
|
66
|
+
}
|
|
67
|
+
let res = (navigator.languages ? navigator.languages[0] : null) || navigator.language;
|
|
68
|
+
const arr = res.split('-');
|
|
69
|
+
return arr.length <= 1 ? res : `${arr[0]}-${arr[1].toUpperCase()}`;
|
|
70
|
+
}
|
|
71
|
+
loadLangData(lang) {
|
|
72
|
+
return this.http.get(`assets/tmp/i18n/${lang}.json`);
|
|
73
|
+
}
|
|
74
|
+
use(lang, data) {
|
|
75
|
+
if (this._currentLang === lang)
|
|
76
|
+
return;
|
|
77
|
+
this._data = this.flatData(data, []);
|
|
78
|
+
const item = LANGS[lang];
|
|
79
|
+
registerLocaleData(item.ng);
|
|
80
|
+
this.nzI18nService.setLocale(item.zorro);
|
|
81
|
+
this.nzI18nService.setDateLocale(item.date);
|
|
82
|
+
this.yelonLocaleService.setLocale(item.yelon);
|
|
83
|
+
this._currentLang = lang;
|
|
84
|
+
this._change$.next(lang);
|
|
85
|
+
}
|
|
86
|
+
getLangs() {
|
|
87
|
+
return this._langs;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
YzI18NService.ɵprov = i0.ɵɵdefineInjectable({ factory: function YzI18NService_Factory() { return new YzI18NService(i0.ɵɵinject(i1._HttpClient), i0.ɵɵinject(i1.SettingsService), i0.ɵɵinject(i2.NzI18nService), i0.ɵɵinject(i1.YelonLocaleService), i0.ɵɵinject(i3.Platform), i0.ɵɵinject(i4.YunzaiConfigService)); }, token: YzI18NService, providedIn: "root" });
|
|
91
|
+
YzI18NService.decorators = [
|
|
92
|
+
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
93
|
+
];
|
|
94
|
+
YzI18NService.ctorParameters = () => [
|
|
95
|
+
{ type: _HttpClient },
|
|
96
|
+
{ type: SettingsService },
|
|
97
|
+
{ type: NzI18nService },
|
|
98
|
+
{ type: YelonLocaleService },
|
|
99
|
+
{ type: Platform },
|
|
100
|
+
{ type: YunzaiConfigService }
|
|
101
|
+
];
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC95ei5pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQztBQUM5QyxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQztBQUM5QyxPQUFPLE1BQU0sTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9FLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsS0FBSyxJQUFJLFNBQVMsRUFDbEIsZUFBZSxFQUNmLEtBQUssSUFBSSxTQUFTLEVBQ2xCLEtBQUssSUFBSSxTQUFTLEVBQ2xCLFdBQVcsRUFDWCxxQkFBcUIsRUFDdEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFXL0csTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3hCLE1BQU0sS0FBSyxHQUFzQztJQUMvQyxPQUFPLEVBQUU7UUFDUCxJQUFJLEVBQUUsTUFBTTtRQUNaLEVBQUUsRUFBRSxJQUFJO1FBQ1IsS0FBSyxFQUFFLFNB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QUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSTtZQUFFLE9BQU87UUFFdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7OztZQXRERixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7WUE1Q2hDLFdBQVc7WUFIWCxlQUFlO1lBUVksYUFBYTtZQVZ4QyxrQkFBa0I7WUFYWCxRQUFRO1lBbUJSLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIOivt+WPguiAg++8mmh0dHBzOi8vbmcueXVuemFpbmZvLmNvbS9kb2NzL2kxOG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IHJlZ2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgbmdFbiBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy9lbic7XG5pbXBvcnQgbmdaaCBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy96aCc7XG5pbXBvcnQgbmdaaFR3IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL3poLUhhbnQnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBlblVTIGFzIGRmRW4sIHpoQ04gYXMgZGZaaENuLCB6aFRXIGFzIGRmWmhUdyB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XG5cbmltcG9ydCB7XG4gIFllbG9uTG9jYWxlU2VydmljZSxcbiAgZW5fVVMgYXMgeWVsb25FblVTLFxuICBTZXR0aW5nc1NlcnZpY2UsXG4gIHpoX0NOIGFzIHllbG9uWmhDbixcbiAgemhfVFcgYXMgeWVsb25aaFR3LFxuICBfSHR0cENsaWVudCxcbiAgWXVuemFpSTE4bkJhc2VTZXJ2aWNlXG59IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBZdW56YWlDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL3V0aWwvY29uZmlnJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBlbl9VUyBhcyB6b3Jyb0VuVVMsIE56STE4blNlcnZpY2UsIHpoX0NOIGFzIHpvcnJvWmhDTiwgemhfVFcgYXMgem9ycm9aaFRXIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pMThuJztcblxuaW50ZXJmYWNlIExhbmdDb25maWdEYXRhIHtcbiAgYWJicjogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIG5nOiBOelNhZmVBbnk7XG4gIHpvcnJvOiBOelNhZmVBbnk7XG4gIGRhdGU6IE56U2FmZUFueTtcbiAgeWVsb246IE56U2FmZUFueTtcbn1cblxuY29uc3QgREVGQVVMVCA9ICd6aC1DTic7XG5jb25zdCBMQU5HUzogeyBba2V5OiBzdHJpbmddOiBMYW5nQ29uZmlnRGF0YSB9ID0ge1xuICAnemgtQ04nOiB7XG4gICAgdGV4dDogJ+eugOS9k+S4reaWhycsXG4gICAgbmc6IG5nWmgsXG4gICAgem9ycm86IHpvcnJvWmhDTixcbiAgICBkYXRlOiBkZlpoQ24sXG4gICAgeWVsb246IHllbG9uWmhDbixcbiAgICBhYmJyOiAn8J+HqPCfh7MnXG4gIH0sXG4gICd6aC1UVyc6IHtcbiAgICB0ZXh0OiAn57mB5L2T5Lit5paHJyxcbiAgICBuZzogbmdaaFR3LFxuICAgIHpvcnJvOiB6b3Jyb1poVFcsXG4gICAgZGF0ZTogZGZaaFR3LFxuICAgIHllbG9uOiB5ZWxvblpoVHcsXG4gICAgYWJicjogJ/Cfh63wn4ewJ1xuICB9LFxuICAnZW4tVVMnOiB7XG4gICAgdGV4dDogJ0VuZ2xpc2gnLFxuICAgIG5nOiBuZ0VuLFxuICAgIHpvcnJvOiB6b3Jyb0VuVVMsXG4gICAgZGF0ZTogZGZFbixcbiAgICB5ZWxvbjogeWVsb25FblVTLFxuICAgIGFiYnI6ICfwn4es8J+HpydcbiAgfVxufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBZekkxOE5TZXJ2aWNlIGV4dGVuZHMgWXVuemFpSTE4bkJhc2VTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIF9kZWZhdWx0TGFuZyA9IERFRkFVTFQ7XG4gIHByaXZhdGUgX2xhbmdzID0gT2JqZWN0LmtleXMoTEFOR1MpLm1hcChjb2RlID0+IHtcbiAgICBjb25zdCBpdGVtID0gTEFOR1NbY29kZV07XG4gICAgcmV0dXJuIHsgY29kZSwgdGV4dDogaXRlbS50ZXh0LCBhYmJyOiBpdGVtLmFiYnIgfTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBfSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBuekkxOG5TZXJ2aWNlOiBOekkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgeWVsb25Mb2NhbGVTZXJ2aWNlOiBZZWxvbkxvY2FsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgY29nU3J2OiBZdW56YWlDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGNvZ1Nydik7XG4gICAgY29uc3QgZGVmYXVsdExhbmcgPSB0aGlzLmdldERlZmF1bHRMYW5nKCk7XG4gICAgdGhpcy5fZGVmYXVsdExhbmcgPSB0aGlzLl9sYW5ncy5maW5kSW5kZXgodyA9PiB3LmNvZGUgPT09IGRlZmF1bHRMYW5nKSA9PT0gLTEgPyBERUZBVUxUIDogZGVmYXVsdExhbmc7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRMYW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnBsYXRmb3JtLmlzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuIERFRkFVTFQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnNldHRpbmdzLmxheW91dC5sYW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5sYXlvdXQubGFuZztcbiAgICB9XG4gICAgbGV0IHJlcyA9IChuYXZpZ2F0b3IubGFuZ3VhZ2VzID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG51bGwpIHx8IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgICBjb25zdCBhcnIgPSByZXMuc3BsaXQoJy0nKTtcbiAgICByZXR1cm4gYXJyLmxlbmd0aCA8PSAxID8gcmVzIDogYCR7YXJyWzBdfS0ke2FyclsxXS50b1VwcGVyQ2FzZSgpfWA7XG4gIH1cblxuICBsb2FkTGFuZ0RhdGEobGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxOelNhZmVBbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgYXNzZXRzL3RtcC9pMThuLyR7bGFuZ30uanNvbmApO1xuICB9XG5cbiAgdXNlKGxhbmc6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudExhbmcgPT09IGxhbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2RhdGEgPSB0aGlzLmZsYXREYXRhKGRhdGEsIFtdKTtcblxuICAgIGNvbnN0IGl0ZW0gPSBMQU5HU1tsYW5nXTtcbiAgICByZWdpc3RlckxvY2FsZURhdGEoaXRlbS5uZyk7XG4gICAgdGhpcy5uekkxOG5TZXJ2aWNlLnNldExvY2FsZShpdGVtLnpvcnJvKTtcbiAgICB0aGlzLm56STE4blNlcnZpY2Uuc2V0RGF0ZUxvY2FsZShpdGVtLmRhdGUpO1xuICAgIHRoaXMueWVsb25Mb2NhbGVTZXJ2aWNlLnNldExvY2FsZShpdGVtLnllbG9uKTtcbiAgICB0aGlzLl9jdXJyZW50TGFuZyA9IGxhbmc7XG5cbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQobGFuZyk7XG4gIH1cblxuICBnZXRMYW5ncygpOiBBcnJheTx7IGNvZGU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyBhYmJyOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiB0aGlzLl9sYW5ncztcbiAgfVxufVxuIl19
|
|
@@ -1,138 +1,138 @@
|
|
|
1
|
-
import { APP_INITIALIZER, Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { of } from 'rxjs';
|
|
3
|
-
import { mergeMap } from 'rxjs/operators';
|
|
4
|
-
import { NzIconService } from 'ng-zorro-antd/icon';
|
|
5
|
-
import { ACLService } from '@yelon/acl';
|
|
6
|
-
import { ICONS } from '@yelon/bis/shared';
|
|
7
|
-
import { CacheService } from '@yelon/cache';
|
|
8
|
-
import { MenuService, SettingsService, TitleService, YUNZAI_I18N_TOKEN } from '@yelon/theme';
|
|
9
|
-
import { deepCopy, log, YunzaiConfigService } from '@yelon/util';
|
|
10
|
-
import { BUSINESS_DEFAULT_CONFIG, mergeBisConfig } from './bis.config';
|
|
11
|
-
import { YzAuthService } from './yz.auth.service';
|
|
12
|
-
import { YzI18NService } from './yz.i18n.service';
|
|
13
|
-
export function mapYzSideToYelonMenu(menus) {
|
|
14
|
-
menus.forEach(menu => {
|
|
15
|
-
menu.badgeDot = menu.badge_dot || null;
|
|
16
|
-
menu.badgeStatus = menu.badge_status || null;
|
|
17
|
-
menu.shortcutRoot = menu.shortcut_root || null;
|
|
18
|
-
menu.reuse = true;
|
|
19
|
-
if (menu.children) {
|
|
20
|
-
mapYzSideToYelonMenu(menu.children);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
export function generateAbility(menus, abilities, prefix) {
|
|
25
|
-
menus.forEach(menu => {
|
|
26
|
-
if (menu.link) {
|
|
27
|
-
prefix += menu.link;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
prefix += '';
|
|
31
|
-
}
|
|
32
|
-
if (menu.menuAuths) {
|
|
33
|
-
menu.menuAuths.forEach((a) => {
|
|
34
|
-
abilities.push(`${prefix}:${a}`);
|
|
35
|
-
abilities.push(a);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
if (menu.children) {
|
|
39
|
-
generateAbility(menu.children, abilities, prefix);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
export class YzStartupService {
|
|
44
|
-
constructor(iconSrv, menuService, i18n, settingService, aclService, titleService, yzAuthService, cacheService, configService) {
|
|
45
|
-
this.menuService = menuService;
|
|
46
|
-
this.i18n = i18n;
|
|
47
|
-
this.settingService = settingService;
|
|
48
|
-
this.aclService = aclService;
|
|
49
|
-
this.titleService = titleService;
|
|
50
|
-
this.yzAuthService = yzAuthService;
|
|
51
|
-
this.cacheService = cacheService;
|
|
52
|
-
this.configService = configService;
|
|
53
|
-
this.bis = BUSINESS_DEFAULT_CONFIG;
|
|
54
|
-
this.bis = mergeBisConfig(this.configService);
|
|
55
|
-
iconSrv.addIcon(...ICONS);
|
|
56
|
-
}
|
|
57
|
-
load() {
|
|
58
|
-
log('startup.service: ', 'load');
|
|
59
|
-
const defaultLang = this.i18n.defaultLang;
|
|
60
|
-
return this.i18n.loadLangData(defaultLang).pipe(mergeMap(langData => {
|
|
61
|
-
log('startup.service: ', 'set i18n, defaultLang->', defaultLang, ' langData->', langData);
|
|
62
|
-
this.i18n.use(defaultLang, langData);
|
|
63
|
-
return of(null);
|
|
64
|
-
}), mergeMap(() => {
|
|
65
|
-
return this.yzAuthService.login();
|
|
66
|
-
}), mergeMap(v => {
|
|
67
|
-
// preloader finish
|
|
68
|
-
this.systemInit();
|
|
69
|
-
log('startup.service: preloader finish');
|
|
70
|
-
const win = window;
|
|
71
|
-
if (win && win.appBootstrap) {
|
|
72
|
-
win.appBootstrap();
|
|
73
|
-
}
|
|
74
|
-
return of(v);
|
|
75
|
-
}));
|
|
76
|
-
}
|
|
77
|
-
systemInit() {
|
|
78
|
-
log('startup.service: system init');
|
|
79
|
-
// user
|
|
80
|
-
const user = this.cacheService.get('_yz_user', { mode: 'none' });
|
|
81
|
-
// menu
|
|
82
|
-
const ms = deepCopy(user.menu).filter((m) => m.systemCode && m.systemCode === this.bis.systemCode);
|
|
83
|
-
mapYzSideToYelonMenu(ms);
|
|
84
|
-
const currentMenu = ms.pop();
|
|
85
|
-
this.menuService.add([currentMenu]);
|
|
86
|
-
// logo app
|
|
87
|
-
this.settingService.setApp({ name: currentMenu.text, description: currentMenu.intro });
|
|
88
|
-
this.settingService.setUser({
|
|
89
|
-
name: user.realname || 'no name',
|
|
90
|
-
avatar: `${this.bis.baseUrl}/filecenter/file/${user.avatarId}` || '',
|
|
91
|
-
email: user.email || 'no email'
|
|
92
|
-
});
|
|
93
|
-
// title
|
|
94
|
-
this.titleService.default = currentMenu.text || 'default application name';
|
|
95
|
-
this.titleService.setTitle(currentMenu.text || 'no title');
|
|
96
|
-
// acl
|
|
97
|
-
const abilities = [];
|
|
98
|
-
generateAbility([currentMenu], abilities, '');
|
|
99
|
-
this.aclService.attachRole((user === null || user === void 0 ? void 0 : user.roles.map((role) => {
|
|
100
|
-
return role.roleValue;
|
|
101
|
-
}).filter((a) => !!a)) || []);
|
|
102
|
-
this.aclService.attachAbility(abilities);
|
|
103
|
-
// cache current
|
|
104
|
-
this.cacheService.set('_yz_current', {
|
|
105
|
-
text: currentMenu.text,
|
|
106
|
-
intro: currentMenu.intro,
|
|
107
|
-
icon: currentMenu.appIconUrl
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
YzStartupService.decorators = [
|
|
112
|
-
{ type: Injectable }
|
|
113
|
-
];
|
|
114
|
-
YzStartupService.ctorParameters = () => [
|
|
115
|
-
{ type: NzIconService },
|
|
116
|
-
{ type: MenuService },
|
|
117
|
-
{ type: YzI18NService, decorators: [{ type: Inject, args: [YUNZAI_I18N_TOKEN,] }] },
|
|
118
|
-
{ type: SettingsService },
|
|
119
|
-
{ type: ACLService },
|
|
120
|
-
{ type: TitleService },
|
|
121
|
-
{ type: YzAuthService },
|
|
122
|
-
{ type: CacheService },
|
|
123
|
-
{ type: YunzaiConfigService }
|
|
124
|
-
];
|
|
125
|
-
export function YzStartupServiceFactory(startupService) {
|
|
126
|
-
return () => startupService.load();
|
|
127
|
-
}
|
|
128
|
-
//@ts-ignore
|
|
129
|
-
export const YZ_APPINIT_PROVIDES = [
|
|
130
|
-
YzStartupService,
|
|
131
|
-
{
|
|
132
|
-
provide: APP_INITIALIZER,
|
|
133
|
-
useFactory: YzStartupServiceFactory,
|
|
134
|
-
deps: [YzStartupService],
|
|
135
|
-
multi: true
|
|
136
|
-
}
|
|
137
|
-
];
|
|
1
|
+
import { APP_INITIALIZER, Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { of } from 'rxjs';
|
|
3
|
+
import { mergeMap } from 'rxjs/operators';
|
|
4
|
+
import { NzIconService } from 'ng-zorro-antd/icon';
|
|
5
|
+
import { ACLService } from '@yelon/acl';
|
|
6
|
+
import { ICONS } from '@yelon/bis/shared';
|
|
7
|
+
import { CacheService } from '@yelon/cache';
|
|
8
|
+
import { MenuService, SettingsService, TitleService, YUNZAI_I18N_TOKEN } from '@yelon/theme';
|
|
9
|
+
import { deepCopy, log, YunzaiConfigService } from '@yelon/util';
|
|
10
|
+
import { BUSINESS_DEFAULT_CONFIG, mergeBisConfig } from './bis.config';
|
|
11
|
+
import { YzAuthService } from './yz.auth.service';
|
|
12
|
+
import { YzI18NService } from './yz.i18n.service';
|
|
13
|
+
export function mapYzSideToYelonMenu(menus) {
|
|
14
|
+
menus.forEach(menu => {
|
|
15
|
+
menu.badgeDot = menu.badge_dot || null;
|
|
16
|
+
menu.badgeStatus = menu.badge_status || null;
|
|
17
|
+
menu.shortcutRoot = menu.shortcut_root || null;
|
|
18
|
+
menu.reuse = true;
|
|
19
|
+
if (menu.children) {
|
|
20
|
+
mapYzSideToYelonMenu(menu.children);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function generateAbility(menus, abilities, prefix) {
|
|
25
|
+
menus.forEach(menu => {
|
|
26
|
+
if (menu.link) {
|
|
27
|
+
prefix += menu.link;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
prefix += '';
|
|
31
|
+
}
|
|
32
|
+
if (menu.menuAuths) {
|
|
33
|
+
menu.menuAuths.forEach((a) => {
|
|
34
|
+
abilities.push(`${prefix}:${a}`);
|
|
35
|
+
abilities.push(a);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (menu.children) {
|
|
39
|
+
generateAbility(menu.children, abilities, prefix);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export class YzStartupService {
|
|
44
|
+
constructor(iconSrv, menuService, i18n, settingService, aclService, titleService, yzAuthService, cacheService, configService) {
|
|
45
|
+
this.menuService = menuService;
|
|
46
|
+
this.i18n = i18n;
|
|
47
|
+
this.settingService = settingService;
|
|
48
|
+
this.aclService = aclService;
|
|
49
|
+
this.titleService = titleService;
|
|
50
|
+
this.yzAuthService = yzAuthService;
|
|
51
|
+
this.cacheService = cacheService;
|
|
52
|
+
this.configService = configService;
|
|
53
|
+
this.bis = BUSINESS_DEFAULT_CONFIG;
|
|
54
|
+
this.bis = mergeBisConfig(this.configService);
|
|
55
|
+
iconSrv.addIcon(...ICONS);
|
|
56
|
+
}
|
|
57
|
+
load() {
|
|
58
|
+
log('startup.service: ', 'load');
|
|
59
|
+
const defaultLang = this.i18n.defaultLang;
|
|
60
|
+
return this.i18n.loadLangData(defaultLang).pipe(mergeMap(langData => {
|
|
61
|
+
log('startup.service: ', 'set i18n, defaultLang->', defaultLang, ' langData->', langData);
|
|
62
|
+
this.i18n.use(defaultLang, langData);
|
|
63
|
+
return of(null);
|
|
64
|
+
}), mergeMap(() => {
|
|
65
|
+
return this.yzAuthService.login();
|
|
66
|
+
}), mergeMap(v => {
|
|
67
|
+
// preloader finish
|
|
68
|
+
this.systemInit();
|
|
69
|
+
log('startup.service: preloader finish');
|
|
70
|
+
const win = window;
|
|
71
|
+
if (win && win.appBootstrap) {
|
|
72
|
+
win.appBootstrap();
|
|
73
|
+
}
|
|
74
|
+
return of(v);
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
systemInit() {
|
|
78
|
+
log('startup.service: system init');
|
|
79
|
+
// user
|
|
80
|
+
const user = this.cacheService.get('_yz_user', { mode: 'none' });
|
|
81
|
+
// menu
|
|
82
|
+
const ms = deepCopy(user.menu).filter((m) => m.systemCode && m.systemCode === this.bis.systemCode);
|
|
83
|
+
mapYzSideToYelonMenu(ms);
|
|
84
|
+
const currentMenu = ms.pop();
|
|
85
|
+
this.menuService.add([currentMenu]);
|
|
86
|
+
// logo app
|
|
87
|
+
this.settingService.setApp({ name: currentMenu.text, description: currentMenu.intro });
|
|
88
|
+
this.settingService.setUser({
|
|
89
|
+
name: user.realname || 'no name',
|
|
90
|
+
avatar: `${this.bis.baseUrl}/filecenter/file/${user.avatarId}` || '',
|
|
91
|
+
email: user.email || 'no email'
|
|
92
|
+
});
|
|
93
|
+
// title
|
|
94
|
+
this.titleService.default = currentMenu.text || 'default application name';
|
|
95
|
+
this.titleService.setTitle(currentMenu.text || 'no title');
|
|
96
|
+
// acl
|
|
97
|
+
const abilities = [];
|
|
98
|
+
generateAbility([currentMenu], abilities, '');
|
|
99
|
+
this.aclService.attachRole((user === null || user === void 0 ? void 0 : user.roles.map((role) => {
|
|
100
|
+
return role.roleValue;
|
|
101
|
+
}).filter((a) => !!a)) || []);
|
|
102
|
+
this.aclService.attachAbility(abilities);
|
|
103
|
+
// cache current
|
|
104
|
+
this.cacheService.set('_yz_current', {
|
|
105
|
+
text: currentMenu.text,
|
|
106
|
+
intro: currentMenu.intro,
|
|
107
|
+
icon: currentMenu.appIconUrl
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
YzStartupService.decorators = [
|
|
112
|
+
{ type: Injectable }
|
|
113
|
+
];
|
|
114
|
+
YzStartupService.ctorParameters = () => [
|
|
115
|
+
{ type: NzIconService },
|
|
116
|
+
{ type: MenuService },
|
|
117
|
+
{ type: YzI18NService, decorators: [{ type: Inject, args: [YUNZAI_I18N_TOKEN,] }] },
|
|
118
|
+
{ type: SettingsService },
|
|
119
|
+
{ type: ACLService },
|
|
120
|
+
{ type: TitleService },
|
|
121
|
+
{ type: YzAuthService },
|
|
122
|
+
{ type: CacheService },
|
|
123
|
+
{ type: YunzaiConfigService }
|
|
124
|
+
];
|
|
125
|
+
export function YzStartupServiceFactory(startupService) {
|
|
126
|
+
return () => startupService.load();
|
|
127
|
+
}
|
|
128
|
+
//@ts-ignore
|
|
129
|
+
export const YZ_APPINIT_PROVIDES = [
|
|
130
|
+
YzStartupService,
|
|
131
|
+
{
|
|
132
|
+
provide: APP_INITIALIZER,
|
|
133
|
+
useFactory: YzStartupServiceFactory,
|
|
134
|
+
deps: [YzStartupService],
|
|
135
|
+
multi: true
|
|
136
|
+
}
|
|
137
|
+
];
|
|
138
138
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouc3RhcnR1cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC95ei5zdGFydHVwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBUSxXQUFXLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBUSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBd0IsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUFhO0lBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYSxFQUFFLFNBQW1CLEVBQUUsTUFBYztJQUNoRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ25CLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxNQUFNLElBQUksRUFBRSxDQUFDO1NBQ2Q7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRTtnQkFDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBR0QsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUNFLE9BQXNCLEVBQ2QsV0FBd0IsRUFDRyxJQUFtQixFQUM5QyxjQUErQixFQUMvQixVQUFzQixFQUN0QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixZQUEwQixFQUMxQixhQUFrQztRQVBsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNHLFNBQUksR0FBSixJQUFJLENBQWU7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBWHBDLFFBQUcsR0FBeUIsdUJBQXVCLENBQUM7UUFhMUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSTtRQUNGLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDN0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBbUIsQ0FBQztZQUNoQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFO2dCQUMzQixHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDcEI7WUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87UUFDUCxNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RSxPQUFPO1FBQ1AsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBVyxDQUFDO1FBQ25ILG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFcEMsV0FBVztRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1lBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVM7WUFDaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLG9CQUFvQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNwRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxVQUFVO1NBQ2hDLENBQUMsQ0FBQztRQUVILFFBQVE7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxJQUFJLDBCQUEwQixDQUFDO1FBQzNFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUM7UUFFM0QsTUFBTTtRQUNOLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQztRQUMvQixlQUFlLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQ3hCLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEtBQUssQ0FDUixHQUFHLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxDQUFDLENBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLEVBQUUsQ0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO1lBQ3RCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztZQUN4QixJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBcEZGLFVBQVU7OztZQTVDRixhQUFhO1lBS1AsV0FBVztZQUtqQixhQUFhLHVCQXlDakIsTUFBTSxTQUFDLGlCQUFpQjtZQTlDRCxlQUFlO1lBSGxDLFVBQVU7WUFHMEIsWUFBWTtZQUloRCxhQUFhO1lBTGIsWUFBWTtZQUV5QixtQkFBbUI7O0FBNkhqRSxNQUFNLFVBQVUsdUJBQXVCLENBQUMsY0FBZ0M7SUFDdEUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELFlBQVk7QUFDWixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxnQkFBZ0I7SUFDaEI7UUFDRSxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsdUJBQXVCO1FBQ25DLElBQUksRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hCLEtBQUssRUFBRSxJQUFJO0tBQ1o7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56SWNvblNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuXG5pbXBvcnQgeyBBQ0xTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL2FjbCc7XG5pbXBvcnQgeyBJQ09OUyB9IGZyb20gJ0B5ZWxvbi9iaXMvc2hhcmVkJztcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ0B5ZWxvbi9jYWNoZSc7XG5pbXBvcnQgeyBNZW51LCBNZW51U2VydmljZSwgU2V0dGluZ3NTZXJ2aWNlLCBUaXRsZVNlcnZpY2UsIFVzZXIsIFlVTlpBSV9JMThOX1RPS0VOIH0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7IGRlZXBDb3B5LCBsb2csIFl1bnphaUJ1c2luZXNzQ29uZmlnLCBZdW56YWlDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL3V0aWwnO1xuXG5pbXBvcnQgeyBCVVNJTkVTU19ERUZBVUxUX0NPTkZJRywgbWVyZ2VCaXNDb25maWcgfSBmcm9tICcuL2Jpcy5jb25maWcnO1xuaW1wb3J0IHsgWXpBdXRoU2VydmljZSB9IGZyb20gJy4veXouYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFl6STE4TlNlcnZpY2UgfSBmcm9tICcuL3l6LmkxOG4uc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBZelNpZGVUb1llbG9uTWVudShtZW51czogTWVudVtdKSB7XG4gIG1lbnVzLmZvckVhY2gobWVudSA9PiB7XG4gICAgbWVudS5iYWRnZURvdCA9IG1lbnUuYmFkZ2VfZG90IHx8IG51bGw7XG4gICAgbWVudS5iYWRnZVN0YXR1cyA9IG1lbnUuYmFkZ2Vfc3RhdHVzIHx8IG51bGw7XG4gICAgbWVudS5zaG9ydGN1dFJvb3QgPSBtZW51LnNob3J0Y3V0X3Jvb3QgfHwgbnVsbDtcbiAgICBtZW51LnJldXNlID0gdHJ1ZTtcbiAgICBpZiAobWVudS5jaGlsZHJlbikge1xuICAgICAgbWFwWXpTaWRlVG9ZZWxvbk1lbnUobWVudS5jaGlsZHJlbik7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQWJpbGl0eShtZW51czogTWVudVtdLCBhYmlsaXRpZXM6IHN0cmluZ1tdLCBwcmVmaXg6IHN0cmluZyk6IHZvaWQge1xuICBtZW51cy5mb3JFYWNoKG1lbnUgPT4ge1xuICAgIGlmIChtZW51LmxpbmspIHtcbiAgICAgIHByZWZpeCArPSBtZW51Lmxpbms7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpeCArPSAnJztcbiAgICB9XG4gICAgaWYgKG1lbnUubWVudUF1dGhzKSB7XG4gICAgICBtZW51Lm1lbnVBdXRocy5mb3JFYWNoKChhOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYWJpbGl0aWVzLnB1c2goYCR7cHJlZml4fToke2F9YCk7XG4gICAgICAgIGFiaWxpdGllcy5wdXNoKGEpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnUuY2hpbGRyZW4pIHtcbiAgICAgIGdlbmVyYXRlQWJpbGl0eShtZW51LmNoaWxkcmVuLCBhYmlsaXRpZXMsIHByZWZpeCk7XG4gICAgfVxuICB9KTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFl6U3RhcnR1cFNlcnZpY2Uge1xuICBwcml2YXRlIGJpczogWXVuemFpQnVzaW5lc3NDb25maWcgPSBCVVNJTkVTU19ERUZBVUxUX0NPTkZJRztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpY29uU3J2OiBOekljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxuICAgIEBJbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pIHByaXZhdGUgaTE4bjogWXpJMThOU2VydmljZSxcbiAgICBwcml2YXRlIHNldHRpbmdTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2xTZXJ2aWNlOiBBQ0xTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGl0bGVTZXJ2aWNlOiBUaXRsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB5ekF1dGhTZXJ2aWNlOiBZekF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBZdW56YWlDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYmlzID0gbWVyZ2VCaXNDb25maWcodGhpcy5jb25maWdTZXJ2aWNlKTtcbiAgICBpY29uU3J2LmFkZEljb24oLi4uSUNPTlMpO1xuICB9XG5cbiAgbG9hZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBsb2coJ3N0YXJ0dXAuc2VydmljZTogJywgJ2xvYWQnKTtcbiAgICBjb25zdCBkZWZhdWx0TGFuZyA9IHRoaXMuaTE4bi5kZWZhdWx0TGFuZztcbiAgICByZXR1cm4gdGhpcy5pMThuLmxvYWRMYW5nRGF0YShkZWZhdWx0TGFuZykucGlwZShcbiAgICAgIG1lcmdlTWFwKGxhbmdEYXRhID0+IHtcbiAgICAgICAgbG9nKCdzdGFydHVwLnNlcnZpY2U6ICcsICdzZXQgaTE4biwgZGVmYXVsdExhbmctPicsIGRlZmF1bHRMYW5nLCAnIGxhbmdEYXRhLT4nLCBsYW5nRGF0YSk7XG4gICAgICAgIHRoaXMuaTE4bi51c2UoZGVmYXVsdExhbmcsIGxhbmdEYXRhKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnl6QXV0aFNlcnZpY2UubG9naW4oKTtcbiAgICAgIH0pLFxuICAgICAgbWVyZ2VNYXAodiA9PiB7XG4gICAgICAgIC8vIHByZWxvYWRlciBmaW5pc2hcbiAgICAgICAgdGhpcy5zeXN0ZW1Jbml0KCk7XG4gICAgICAgIGxvZygnc3RhcnR1cC5zZXJ2aWNlOiBwcmVsb2FkZXIgZmluaXNoJyk7XG4gICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyBOelNhZmVBbnk7XG4gICAgICAgIGlmICh3aW4gJiYgd2luLmFwcEJvb3RzdHJhcCkge1xuICAgICAgICAgIHdpbi5hcHBCb290c3RyYXAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2Yodik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzeXN0ZW1Jbml0KCk6IHZvaWQge1xuICAgIGxvZygnc3RhcnR1cC5zZXJ2aWNlOiBzeXN0ZW0gaW5pdCcpO1xuICAgIC8vIHVzZXJcbiAgICBjb25zdCB1c2VyOiBVc2VyID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfdXNlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIC8vIG1lbnVcbiAgICBjb25zdCBtcyA9IGRlZXBDb3B5KHVzZXIubWVudSkuZmlsdGVyKChtOiBNZW51KSA9PiBtLnN5c3RlbUNvZGUgJiYgbS5zeXN0ZW1Db2RlID09PSB0aGlzLmJpcy5zeXN0ZW1Db2RlKSBhcyBNZW51W107XG4gICAgbWFwWXpTaWRlVG9ZZWxvbk1lbnUobXMpO1xuICAgIGNvbnN0IGN1cnJlbnRNZW51ID0gbXMucG9wKCkhO1xuICAgIHRoaXMubWVudVNlcnZpY2UuYWRkKFtjdXJyZW50TWVudV0pO1xuXG4gICAgLy8gbG9nbyBhcHBcbiAgICB0aGlzLnNldHRpbmdTZXJ2aWNlLnNldEFwcCh7IG5hbWU6IGN1cnJlbnRNZW51LnRleHQsIGRlc2NyaXB0aW9uOiBjdXJyZW50TWVudS5pbnRybyB9KTtcbiAgICB0aGlzLnNldHRpbmdTZXJ2aWNlLnNldFVzZXIoe1xuICAgICAgbmFtZTogdXNlci5yZWFsbmFtZSB8fCAnbm8gbmFtZScsXG4gICAgICBhdmF0YXI6IGAke3RoaXMuYmlzLmJhc2VVcmx9L2ZpbGVjZW50ZXIvZmlsZS8ke3VzZXIuYXZhdGFySWR9YCB8fCAnJyxcbiAgICAgIGVtYWlsOiB1c2VyLmVtYWlsIHx8ICdubyBlbWFpbCdcbiAgICB9KTtcblxuICAgIC8vIHRpdGxlXG4gICAgdGhpcy50aXRsZVNlcnZpY2UuZGVmYXVsdCA9IGN1cnJlbnRNZW51LnRleHQgfHwgJ2RlZmF1bHQgYXBwbGljYXRpb24gbmFtZSc7XG4gICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUoY3VycmVudE1lbnUudGV4dCB8fCAnbm8gdGl0bGUnKTtcblxuICAgIC8vIGFjbFxuICAgIGNvbnN0IGFiaWxpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICBnZW5lcmF0ZUFiaWxpdHkoW2N1cnJlbnRNZW51XSwgYWJpbGl0aWVzLCAnJyk7XG4gICAgdGhpcy5hY2xTZXJ2aWNlLmF0dGFjaFJvbGUoXG4gICAgICB1c2VyPy5yb2xlc1xuICAgICAgICAubWFwKChyb2xlOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm9sZS5yb2xlVmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGE6IE56U2FmZUFueSkgPT4gISFhKSB8fCBbXVxuICAgICk7XG4gICAgdGhpcy5hY2xTZXJ2aWNlLmF0dGFjaEFiaWxpdHkoYWJpbGl0aWVzKTtcblxuICAgIC8vIGNhY2hlIGN1cnJlbnRcbiAgICB0aGlzLmNhY2hlU2VydmljZS5zZXQoJ195el9jdXJyZW50Jywge1xuICAgICAgdGV4dDogY3VycmVudE1lbnUudGV4dCxcbiAgICAgIGludHJvOiBjdXJyZW50TWVudS5pbnRybyxcbiAgICAgIGljb246IGN1cnJlbnRNZW51LmFwcEljb25VcmxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gWXpTdGFydHVwU2VydmljZUZhY3Rvcnkoc3RhcnR1cFNlcnZpY2U6IFl6U3RhcnR1cFNlcnZpY2UpOiAoKSA9PiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgcmV0dXJuICgpID0+IHN0YXJ0dXBTZXJ2aWNlLmxvYWQoKTtcbn1cblxuLy9AdHMtaWdub3JlXG5leHBvcnQgY29uc3QgWVpfQVBQSU5JVF9QUk9WSURFUyA9IFtcbiAgWXpTdGFydHVwU2VydmljZSxcbiAge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiBZelN0YXJ0dXBTZXJ2aWNlRmFjdG9yeSxcbiAgICBkZXBzOiBbWXpTdGFydHVwU2VydmljZV0sXG4gICAgbXVsdGk6IHRydWVcbiAgfVxuXTtcbiJdfQ==
|