@yelon/bis 12.0.19 → 13.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/bis.d.ts +1 -0
  2. package/{esm2015/bis.js → esm2020/bis.mjs} +0 -0
  3. package/esm2020/layout/act.guard.mjs +108 -0
  4. package/{esm2015/layout/bis.config.js → esm2020/layout/bis.config.mjs} +0 -0
  5. package/esm2020/layout/contact/contact.component.mjs +492 -0
  6. package/esm2020/layout/contact/contact.service.mjs +146 -0
  7. package/esm2020/layout/layout.mjs +5 -0
  8. package/esm2020/layout/layout.module.mjs +73 -0
  9. package/{esm2015/layout/path-to-regexp.service.js → esm2020/layout/path-to-regexp.service.mjs} +9 -8
  10. package/{esm2015/layout/public_api.js → esm2020/layout/public_api.mjs} +3 -3
  11. package/esm2020/layout/stomp.config.mjs +18 -0
  12. package/{esm2015/layout/widgets/index.js → esm2020/layout/widgets/index.mjs} +0 -0
  13. package/esm2020/layout/widgets/yz.application.component.mjs +271 -0
  14. package/esm2020/layout/widgets/yz.clear-storage.component.mjs +45 -0
  15. package/esm2020/layout/widgets/yz.fullscreen.component.mjs +45 -0
  16. package/esm2020/layout/widgets/yz.i18n.component.mjs +115 -0
  17. package/esm2020/layout/widgets/yz.notify.component.mjs +184 -0
  18. package/esm2020/layout/widgets/yz.them-btn.component.mjs +196 -0
  19. package/esm2020/layout/widgets/yz.user.component.mjs +112 -0
  20. package/esm2020/layout/yz.auth.service.mjs +156 -0
  21. package/esm2020/layout/yz.basic.component.mjs +207 -0
  22. package/esm2020/layout/yz.default.interceptor.mjs +203 -0
  23. package/esm2020/layout/yz.i18n.service.mjs +93 -0
  24. package/esm2020/layout/yz.startup.service.mjs +137 -0
  25. package/esm2020/layout/yz.stomp.service.mjs +88 -0
  26. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  27. package/{esm2015/shared/public_api.js → esm2020/shared/public_api.mjs} +0 -0
  28. package/{esm2015/shared/shared-yelon.module.js → esm2020/shared/shared-yelon.module.mjs} +0 -0
  29. package/{esm2015/shared/shared-zorro.module.js → esm2020/shared/shared-zorro.module.mjs} +0 -0
  30. package/{esm2015/shared/shared.js → esm2020/shared/shared.mjs} +0 -0
  31. package/esm2020/shared/shared.module.mjs +116 -0
  32. package/{esm2015/shared/style-icons.js → esm2020/shared/style-icons.mjs} +0 -0
  33. package/fesm2015/{bis.js → bis.mjs} +1 -1
  34. package/fesm2015/bis.mjs.map +1 -0
  35. package/fesm2015/{layout.js → layout.mjs} +587 -278
  36. package/fesm2015/layout.mjs.map +1 -0
  37. package/fesm2015/{shared.js → shared.mjs} +101 -7
  38. package/fesm2015/shared.mjs.map +1 -0
  39. package/fesm2020/bis.mjs +6 -0
  40. package/fesm2020/bis.mjs.map +1 -0
  41. package/fesm2020/layout.mjs +2796 -0
  42. package/fesm2020/layout.mjs.map +1 -0
  43. package/fesm2020/shared.mjs +1106 -0
  44. package/fesm2020/shared.mjs.map +1 -0
  45. package/layout/act.guard.d.ts +3 -0
  46. package/layout/contact/contact.component.d.ts +4 -1
  47. package/layout/contact/contact.service.d.ts +4 -1
  48. package/layout/layout.d.ts +1 -3
  49. package/layout/layout.module.d.ts +18 -0
  50. package/layout/package.json +5 -6
  51. package/layout/path-to-regexp.service.d.ts +3 -0
  52. package/layout/public_api.d.ts +2 -0
  53. package/layout/widgets/yz.application.component.d.ts +3 -0
  54. package/layout/widgets/yz.clear-storage.component.d.ts +3 -0
  55. package/layout/widgets/yz.fullscreen.component.d.ts +3 -1
  56. package/layout/widgets/yz.i18n.component.d.ts +3 -0
  57. package/layout/widgets/yz.notify.component.d.ts +3 -0
  58. package/layout/widgets/yz.them-btn.component.d.ts +3 -0
  59. package/layout/widgets/yz.user.component.d.ts +3 -0
  60. package/layout/yz.auth.service.d.ts +3 -0
  61. package/layout/yz.basic.component.d.ts +3 -0
  62. package/layout/yz.default.interceptor.d.ts +3 -0
  63. package/layout/yz.i18n.service.d.ts +3 -0
  64. package/layout/yz.startup.service.d.ts +3 -0
  65. package/layout/yz.stomp.service.d.ts +6 -3
  66. package/package.json +46 -18
  67. package/shared/package.json +5 -6
  68. package/shared/shared-zorro.module.d.ts +2 -2
  69. package/shared/shared.d.ts +1 -0
  70. package/shared/shared.module.d.ts +93 -0
  71. package/bis.metadata.json +0 -1
  72. package/bundles/bis.umd.js +0 -18
  73. package/bundles/bis.umd.js.map +0 -1
  74. package/bundles/layout.umd.js +0 -2694
  75. package/bundles/layout.umd.js.map +0 -1
  76. package/bundles/shared.umd.js +0 -1249
  77. package/bundles/shared.umd.js.map +0 -1
  78. package/esm2015/layout/act.guard.js +0 -115
  79. package/esm2015/layout/contact/contact.component.js +0 -434
  80. package/esm2015/layout/contact/contact.service.js +0 -150
  81. package/esm2015/layout/layout.js +0 -8
  82. package/esm2015/layout/layout.module.js +0 -47
  83. package/esm2015/layout/stomp.config.js +0 -20
  84. package/esm2015/layout/widgets/yz.application.component.js +0 -200
  85. package/esm2015/layout/widgets/yz.clear-storage.component.js +0 -39
  86. package/esm2015/layout/widgets/yz.fullscreen.component.js +0 -36
  87. package/esm2015/layout/widgets/yz.i18n.component.js +0 -78
  88. package/esm2015/layout/widgets/yz.notify.component.js +0 -157
  89. package/esm2015/layout/widgets/yz.them-btn.component.js +0 -146
  90. package/esm2015/layout/widgets/yz.user.component.js +0 -81
  91. package/esm2015/layout/yz.auth.service.js +0 -158
  92. package/esm2015/layout/yz.basic.component.js +0 -123
  93. package/esm2015/layout/yz.default.interceptor.js +0 -204
  94. package/esm2015/layout/yz.i18n.service.js +0 -102
  95. package/esm2015/layout/yz.startup.service.js +0 -138
  96. package/esm2015/layout/yz.stomp.service.js +0 -91
  97. package/esm2015/shared/shared.module.js +0 -22
  98. package/fesm2015/bis.js.map +0 -1
  99. package/fesm2015/layout.js.map +0 -1
  100. package/fesm2015/shared.js.map +0 -1
  101. package/layout/layout.metadata.json +0 -1
  102. package/shared/shared.metadata.json +0 -1
@@ -1,123 +0,0 @@
1
- import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { CacheService } from '@yelon/cache';
3
- import { LayoutService } from '@yelon/theme/layout-default';
4
- import { YzStompService } from './yz.stomp.service';
5
- export class YzLayoutBasicComponent {
6
- constructor(cacheService, yzStompService, layoutService) {
7
- this.cacheService = cacheService;
8
- this.yzStompService = yzStompService;
9
- this.layoutService = layoutService;
10
- this.options = {
11
- logoExpanded: `./assets/logo-full.svg`,
12
- logoCollapsed: `./assets/logo.svg`
13
- };
14
- this.intro = '';
15
- this.text = '';
16
- this.icon = '';
17
- this.showReuseTab = true;
18
- this.showHeader = true;
19
- this.showSider = true;
20
- }
21
- get reuseStyleSheet() {
22
- let cascadingStyleSheet = {};
23
- if (!this.showHeader) {
24
- cascadingStyleSheet = Object.assign(Object.assign({}, cascadingStyleSheet), { top: 0 });
25
- }
26
- if (!this.showSider) {
27
- cascadingStyleSheet = Object.assign(Object.assign({}, cascadingStyleSheet), { left: '24px' });
28
- }
29
- return cascadingStyleSheet;
30
- }
31
- ngOnInit() {
32
- const current = this.cacheService.get('_yz_current', { mode: 'none' });
33
- const project = this.cacheService.get('_yz_project_info', { mode: 'none' });
34
- this.text = current.text ? current.text : '应用名称';
35
- this.intro = current.intro ? current.intro : '应用描述';
36
- this.icon = current.icon ? current.icon : `./assets/tmp/img/avatar.jpg`;
37
- this.options.logoExpanded = project.maxLogoUrl ? project.maxLogoUrl : `./assets/logo-full.svg`;
38
- this.options.logoCollapsed = project.miniLogoUrl ? project.miniLogoUrl : `./assets/logo.svg`;
39
- this.yzStompService.listen();
40
- this.layoutService.reuseTab.asObservable().subscribe(show => (this.showReuseTab = show));
41
- this.layoutService.header.asObservable().subscribe(show => (this.showHeader = show));
42
- this.layoutService.sidebar.asObservable().subscribe(show => (this.showSider = show));
43
- }
44
- ngOnDestroy() {
45
- this.yzStompService.unListen();
46
- }
47
- }
48
- YzLayoutBasicComponent.decorators = [
49
- { type: Component, args: [{
50
- selector: 'yz-layout-basic',
51
- template: `
52
- <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="showReuseTab ? contentTpl : noneTpl">
53
- <layout-default-header-item direction="left">
54
- <yz-header-application></yz-header-application>
55
- </layout-default-header-item>
56
-
57
- <layout-default-header-item direction="right" hidden="mobile">
58
- <yz-header-notify></yz-header-notify>
59
- </layout-default-header-item>
60
-
61
- <layout-default-header-item direction="right" hidden="mobile">
62
- <yz-header-theme-btn></yz-header-theme-btn>
63
- </layout-default-header-item>
64
-
65
- <layout-default-header-item direction="right" hidden="mobile">
66
- <div
67
- layout-default-header-item-trigger
68
- nz-dropdown
69
- [nzDropdownMenu]="settingsMenu"
70
- nzTrigger="click"
71
- nzPlacement="bottomRight"
72
- >
73
- <i nz-icon nzType="setting"></i>
74
- </div>
75
- <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
76
- <div nz-menu style="width: 200px;">
77
- <div nz-menu-item>
78
- <yz-header-fullscreen></yz-header-fullscreen>
79
- </div>
80
- <div nz-menu-item>
81
- <yz-header-clear-storage></yz-header-clear-storage>
82
- </div>
83
- <div nz-menu-item>
84
- <yz-header-i18n></yz-header-i18n>
85
- </div>
86
- </div>
87
- </nz-dropdown-menu>
88
- </layout-default-header-item>
89
- <layout-default-header-item direction="right">
90
- <yz-header-user></yz-header-user>
91
- </layout-default-header-item>
92
- <ng-template #asideUserTpl>
93
- <div nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu" class="yunzai-default__aside-user">
94
- <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="icon"></nz-avatar>
95
- <div class="yunzai-default__aside-user-info">
96
- <strong>{{ text }}</strong>
97
- <p class="mb0">{{ intro }}</p>
98
- </div>
99
- </div>
100
- <nz-dropdown-menu #userMenu="nzDropdownMenu">
101
- <ul nz-menu>
102
- <li nz-menu-item routerLink="/">{{ 'menu.backtohome' | i18n }}</li>
103
- </ul>
104
- </nz-dropdown-menu>
105
- </ng-template>
106
- <ng-template #contentTpl>
107
- <reuse-tab #reuseTab [ngStyle]="reuseStyleSheet"></reuse-tab>
108
- <router-outlet (activate)="reuseTab.activate($event)"></router-outlet>
109
- </ng-template>
110
- <ng-template #noneTpl>
111
- <router-outlet></router-outlet>
112
- </ng-template>
113
- </layout-default>
114
- `,
115
- changeDetection: ChangeDetectionStrategy.OnPush
116
- },] }
117
- ];
118
- YzLayoutBasicComponent.ctorParameters = () => [
119
- { type: CacheService },
120
- { type: YzStompService },
121
- { type: LayoutService }
122
- ];
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouYmFzaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC95ei5iYXNpYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQXdCLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQXNFcEQsTUFBTSxPQUFPLHNCQUFzQjtJQStCakMsWUFDVSxZQUEwQixFQUMxQixjQUE4QixFQUM5QixhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFqQ3RDLFlBQU8sR0FBeUI7WUFDOUIsWUFBWSxFQUFFLHdCQUF3QjtZQUN0QyxhQUFhLEVBQUUsbUJBQW1CO1NBQ25DLENBQUM7UUFFRixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLGNBQVMsR0FBWSxJQUFJLENBQUM7SUF1QnZCLENBQUM7SUFyQkosSUFBSSxlQUFlO1FBQ2pCLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLG1CQUFtQixtQ0FDZCxtQkFBbUIsS0FDdEIsR0FBRyxFQUFFLENBQUMsR0FDUCxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixtQkFBbUIsbUNBQ2QsbUJBQW1CLEtBQ3RCLElBQUksRUFBRSxNQUFNLEdBQ2IsQ0FBQztTQUNIO1FBQ0QsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBUUQsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFjLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sT0FBTyxHQUFjLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQztRQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztRQUMvRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs7WUF6SEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0RUO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7WUF6RVEsWUFBWTtZQUlaLGNBQWM7WUFIUSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL2NhY2hlJztcbmltcG9ydCB7IExheW91dERlZmF1bHRPcHRpb25zLCBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL3RoZW1lL2xheW91dC1kZWZhdWx0JztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IFl6U3RvbXBTZXJ2aWNlIH0gZnJvbSAnLi95ei5zdG9tcC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXotbGF5b3V0LWJhc2ljJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bGF5b3V0LWRlZmF1bHQgW29wdGlvbnNdPVwib3B0aW9uc1wiIFthc2lkZVVzZXJdPVwiYXNpZGVVc2VyVHBsXCIgW2NvbnRlbnRdPVwic2hvd1JldXNlVGFiID8gY29udGVudFRwbCA6IG5vbmVUcGxcIj5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJsZWZ0XCI+XG4gICAgICAgIDx5ei1oZWFkZXItYXBwbGljYXRpb24+PC95ei1oZWFkZXItYXBwbGljYXRpb24+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuXG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwicmlnaHRcIiBoaWRkZW49XCJtb2JpbGVcIj5cbiAgICAgICAgPHl6LWhlYWRlci1ub3RpZnk+PC95ei1oZWFkZXItbm90aWZ5PlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cblxuICAgICAgPGxheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtIGRpcmVjdGlvbj1cInJpZ2h0XCIgaGlkZGVuPVwibW9iaWxlXCI+XG4gICAgICAgIDx5ei1oZWFkZXItdGhlbWUtYnRuPjwveXotaGVhZGVyLXRoZW1lLWJ0bj5cbiAgICAgIDwvbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0+XG5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJyaWdodFwiIGhpZGRlbj1cIm1vYmlsZVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0tdHJpZ2dlclxuICAgICAgICAgIG56LWRyb3Bkb3duXG4gICAgICAgICAgW256RHJvcGRvd25NZW51XT1cInNldHRpbmdzTWVudVwiXG4gICAgICAgICAgbnpUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgIG56UGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJzZXR0aW5nXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG56LWRyb3Bkb3duLW1lbnUgI3NldHRpbmdzTWVudT1cIm56RHJvcGRvd25NZW51XCI+XG4gICAgICAgICAgPGRpdiBuei1tZW51IHN0eWxlPVwid2lkdGg6IDIwMHB4O1wiPlxuICAgICAgICAgICAgPGRpdiBuei1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgIDx5ei1oZWFkZXItZnVsbHNjcmVlbj48L3l6LWhlYWRlci1mdWxsc2NyZWVuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IG56LW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAgPHl6LWhlYWRlci1jbGVhci1zdG9yYWdlPjwveXotaGVhZGVyLWNsZWFyLXN0b3JhZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbnotbWVudS1pdGVtPlxuICAgICAgICAgICAgICA8eXotaGVhZGVyLWkxOG4+PC95ei1oZWFkZXItaTE4bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuICAgICAgPGxheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtIGRpcmVjdGlvbj1cInJpZ2h0XCI+XG4gICAgICAgIDx5ei1oZWFkZXItdXNlcj48L3l6LWhlYWRlci11c2VyPlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYXNpZGVVc2VyVHBsPlxuICAgICAgICA8ZGl2IG56LWRyb3Bkb3duIG56VHJpZ2dlcj1cImNsaWNrXCIgW256RHJvcGRvd25NZW51XT1cInVzZXJNZW51XCIgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fYXNpZGUtdXNlclwiPlxuICAgICAgICAgIDxuei1hdmF0YXIgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fYXNpZGUtdXNlci1hdmF0YXJcIiBbbnpTcmNdPVwiaWNvblwiPjwvbnotYXZhdGFyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fYXNpZGUtdXNlci1pbmZvXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHRleHQgfX08L3N0cm9uZz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWIwXCI+e3sgaW50cm8gfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bnotZHJvcGRvd24tbWVudSAjdXNlck1lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxuICAgICAgICAgIDx1bCBuei1tZW51PlxuICAgICAgICAgICAgPGxpIG56LW1lbnUtaXRlbSByb3V0ZXJMaW5rPVwiL1wiPnt7ICdtZW51LmJhY2t0b2hvbWUnIHwgaTE4biB9fTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9uei1kcm9wZG93bi1tZW51PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRwbD5cbiAgICAgICAgPHJldXNlLXRhYiAjcmV1c2VUYWIgW25nU3R5bGVdPVwicmV1c2VTdHlsZVNoZWV0XCI+PC9yZXVzZS10YWI+XG4gICAgICAgIDxyb3V0ZXItb3V0bGV0IChhY3RpdmF0ZSk9XCJyZXVzZVRhYi5hY3RpdmF0ZSgkZXZlbnQpXCI+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uZVRwbD5cbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xheW91dC1kZWZhdWx0PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBZekxheW91dEJhc2ljQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBvcHRpb25zOiBMYXlvdXREZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBsb2dvRXhwYW5kZWQ6IGAuL2Fzc2V0cy9sb2dvLWZ1bGwuc3ZnYCxcbiAgICBsb2dvQ29sbGFwc2VkOiBgLi9hc3NldHMvbG9nby5zdmdgXG4gIH07XG5cbiAgaW50cm86IHN0cmluZyA9ICcnO1xuICB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgaWNvbjogc3RyaW5nID0gJyc7XG5cbiAgc2hvd1JldXNlVGFiOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dTaWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgZ2V0IHJldXNlU3R5bGVTaGVldCgpOiBOelNhZmVBbnkge1xuICAgIGxldCBjYXNjYWRpbmdTdHlsZVNoZWV0ID0ge307XG4gICAgaWYgKCF0aGlzLnNob3dIZWFkZXIpIHtcbiAgICAgIGNhc2NhZGluZ1N0eWxlU2hlZXQgPSB7XG4gICAgICAgIC4uLmNhc2NhZGluZ1N0eWxlU2hlZXQsXG4gICAgICAgIHRvcDogMFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dTaWRlcikge1xuICAgICAgY2FzY2FkaW5nU3R5bGVTaGVldCA9IHtcbiAgICAgICAgLi4uY2FzY2FkaW5nU3R5bGVTaGVldCxcbiAgICAgICAgbGVmdDogJzI0cHgnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gY2FzY2FkaW5nU3R5bGVTaGVldDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB5elN0b21wU2VydmljZTogWXpTdG9tcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50OiBOelNhZmVBbnkgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9jdXJyZW50JywgeyBtb2RlOiAnbm9uZScgfSk7XG4gICAgY29uc3QgcHJvamVjdDogTnpTYWZlQW55ID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfcHJvamVjdF9pbmZvJywgeyBtb2RlOiAnbm9uZScgfSk7XG4gICAgdGhpcy50ZXh0ID0gY3VycmVudC50ZXh0ID8gY3VycmVudC50ZXh0IDogJ+W6lOeUqOWQjeensCc7XG4gICAgdGhpcy5pbnRybyA9IGN1cnJlbnQuaW50cm8gPyBjdXJyZW50LmludHJvIDogJ+W6lOeUqOaPj+i/sCc7XG4gICAgdGhpcy5pY29uID0gY3VycmVudC5pY29uID8gY3VycmVudC5pY29uIDogYC4vYXNzZXRzL3RtcC9pbWcvYXZhdGFyLmpwZ2A7XG4gICAgdGhpcy5vcHRpb25zLmxvZ29FeHBhbmRlZCA9IHByb2plY3QubWF4TG9nb1VybCA/IHByb2plY3QubWF4TG9nb1VybCA6IGAuL2Fzc2V0cy9sb2dvLWZ1bGwuc3ZnYDtcbiAgICB0aGlzLm9wdGlvbnMubG9nb0NvbGxhcHNlZCA9IHByb2plY3QubWluaUxvZ29VcmwgPyBwcm9qZWN0Lm1pbmlMb2dvVXJsIDogYC4vYXNzZXRzL2xvZ28uc3ZnYDtcbiAgICB0aGlzLnl6U3RvbXBTZXJ2aWNlLmxpc3RlbigpO1xuICAgIHRoaXMubGF5b3V0U2VydmljZS5yZXVzZVRhYi5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoc2hvdyA9PiAodGhpcy5zaG93UmV1c2VUYWIgPSBzaG93KSk7XG4gICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmhlYWRlci5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoc2hvdyA9PiAodGhpcy5zaG93SGVhZGVyID0gc2hvdykpO1xuICAgIHRoaXMubGF5b3V0U2VydmljZS5zaWRlYmFyLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShzaG93ID0+ICh0aGlzLnNob3dTaWRlciA9IHNob3cpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMueXpTdG9tcFNlcnZpY2UudW5MaXN0ZW4oKTtcbiAgfVxufVxuIl19
@@ -1,204 +0,0 @@
1
- import { HttpErrorResponse, HttpResponse, HttpResponseBase } from '@angular/common/http';
2
- import { Injectable, Injector } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { BehaviorSubject, of, throwError } from 'rxjs';
5
- import { catchError, filter, mergeMap, switchMap, take } from 'rxjs/operators';
6
- import { NzNotificationService } from 'ng-zorro-antd/notification';
7
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
8
- import { YUNZAI_I18N_TOKEN, _HttpClient } from '@yelon/theme';
9
- import { WINDOW } from '@yelon/util';
10
- import { YunzaiConfigService } from '@yelon/util/config';
11
- import { log } from '@yelon/util/other';
12
- import { mergeBisConfig } from './bis.config';
13
- const CODEMESSAGE = {
14
- 200: '服务器成功返回请求的数据。',
15
- 201: '新建或修改数据成功。',
16
- 202: '一个请求已经进入后台排队(异步任务)。',
17
- 204: '删除数据成功。',
18
- 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
19
- 401: '用户没有权限(令牌、用户名、密码错误)。',
20
- 403: '用户得到授权,但是访问是被禁止的。',
21
- 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
22
- 406: '请求的格式不可得。',
23
- 410: '请求的资源被永久删除,且不会再得到的。',
24
- 422: '当创建一个对象时,发生一个验证错误。',
25
- 500: '服务器发生错误,请检查服务器。',
26
- 502: '网关错误。',
27
- 503: '服务不可用,服务器暂时过载或维护。',
28
- 504: '网关超时。'
29
- };
30
- /**
31
- * 默认HTTP拦截器,其注册细节见 `app.module.ts`
32
- */
33
- export class YzDefaultInterceptor {
34
- constructor(injector) {
35
- this.injector = injector;
36
- this.jump = false;
37
- this.refreshToking = false;
38
- this.refreshToken$ = new BehaviorSubject(null);
39
- if (this.config.refreshTokenType === 'auth-refresh') {
40
- console.error("can't use auth-refresh, please change yz.default.interceptor to default.interceptor!");
41
- }
42
- }
43
- get notification() {
44
- return this.injector.get(NzNotificationService);
45
- }
46
- get tokenSrv() {
47
- return this.injector.get(YA_SERVICE_TOKEN);
48
- }
49
- get http() {
50
- return this.injector.get(_HttpClient);
51
- }
52
- get config() {
53
- return mergeBisConfig(this.injector.get(YunzaiConfigService));
54
- }
55
- goTo(url) {
56
- setTimeout(() => this.injector.get(Router).navigateByUrl(url));
57
- }
58
- checkStatus(ev) {
59
- if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
60
- return;
61
- }
62
- if (ev instanceof HttpErrorResponse && (ev.error.message || ev.error.errorMessage)) {
63
- if (ev.error.errorMessage) {
64
- this.notification.error(`发生了一些错误 `, ev.error.errorMessage);
65
- }
66
- else {
67
- this.notification.error(`发生了一些错误 `, ev.error.message);
68
- }
69
- return;
70
- }
71
- if (ev instanceof HttpResponse && ev.body.errorMessage) {
72
- this.notification.error(`发生了一些错误 `, ev.body.errorMessage);
73
- return;
74
- }
75
- const errortext = CODEMESSAGE[ev.status] || ev.statusText;
76
- this.notification.error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
77
- }
78
- ToLogin() {
79
- this.notification.error(`未登录或登录状态已过期,5秒后将跳转到登录页面。`, ``);
80
- setTimeout(() => {
81
- localStorage.clear();
82
- this.injector.get(WINDOW).location.href = `${this.config.baseUrl}/cas-proxy/app/logout`;
83
- }, 5000);
84
- }
85
- reAttachToken(req) {
86
- var _a;
87
- const token = (_a = this.tokenSrv.get()) === null || _a === void 0 ? void 0 : _a.token;
88
- return req.clone({
89
- setHeaders: {
90
- Authorization: `Bearer ${token}`
91
- }
92
- });
93
- }
94
- refreshTokenRequest() {
95
- const model = this.tokenSrv.get();
96
- const form = new FormData();
97
- form.set('refresh_token', model === null || model === void 0 ? void 0 : model.refreshToken);
98
- log('yz.default.interceptor: use the refresh token to request a new token', model === null || model === void 0 ? void 0 : model.refreshToken);
99
- return this.http.post(`/auth/user/token/refresh?_allow_anonymous=true`, form);
100
- }
101
- tryRefreshToken(ev, req, next) {
102
- // 连刷新Token的请求都错了,那就是真错了
103
- if (['/auth/oauth/token'].some(url => req.url.includes(url))) {
104
- this.ToLogin();
105
- return throwError(ev);
106
- }
107
- // 正在刷新token,所有其他请求排队
108
- if (this.refreshToking) {
109
- return this.refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next.handle(this.reAttachToken(req))));
110
- }
111
- //尝试调用刷新 Token
112
- this.refreshToking = true;
113
- this.refreshToken$.next(null);
114
- // 处理Token
115
- return this.refreshTokenRequest().pipe(switchMap(res => {
116
- log('yz.default.interceptor: refresh token accessed -> ', res);
117
- // 重新保存新 token
118
- const { access_token, expires_in, refresh_token, scope, token_type } = res;
119
- this.tokenSrv.set({
120
- token: access_token,
121
- expired: expires_in,
122
- refreshToken: refresh_token,
123
- tokenType: token_type,
124
- scope
125
- });
126
- // 通知后续请求继续执行
127
- this.refreshToking = false;
128
- this.refreshToken$.next(res);
129
- // 重新发起请求
130
- return next.handle(this.reAttachToken(req));
131
- }), catchError(err => {
132
- this.refreshToking = false;
133
- this.ToLogin();
134
- return throwError(err);
135
- }));
136
- }
137
- getAdditionalHeaders(headers) {
138
- const res = {};
139
- const lang = this.injector.get(YUNZAI_I18N_TOKEN).currentLang;
140
- if (!(headers === null || headers === void 0 ? void 0 : headers.has('Accept-Language')) && lang) {
141
- res['Accept-Language'] = lang;
142
- }
143
- return res;
144
- }
145
- handleData(ev, req, next) {
146
- this.checkStatus(ev);
147
- switch (ev.status) {
148
- case 200:
149
- return of(ev);
150
- case 401:
151
- if (this.config.refreshTokenEnabled && this.config.refreshTokenType === 're-request') {
152
- return this.tryRefreshToken(ev, req, next);
153
- }
154
- this.ToLogin();
155
- break;
156
- case 403:
157
- case 404:
158
- case 500:
159
- if (this.jump) {
160
- this.goTo(`/exception/${ev.status}`);
161
- }
162
- break;
163
- default:
164
- if (ev instanceof HttpErrorResponse) {
165
- console.warn('未可知错误,大部分是由于后端不支持跨域CORS或无效配置引起,请参考 https://ng.yunzainfo.com/docs/server 解决跨域问题', ev);
166
- }
167
- break;
168
- }
169
- if (ev instanceof HttpErrorResponse) {
170
- return throwError(ev);
171
- }
172
- else {
173
- return of(ev);
174
- }
175
- }
176
- intercept(req, next) {
177
- log('yz.default.interceptor.ts: ', 'request ', req);
178
- // 统一加前缀
179
- let url = req.url;
180
- if (!url.startsWith('https://') && !url.startsWith('http://')) {
181
- url = this.config.baseUrl + url;
182
- }
183
- if (url.includes('.json') && url.includes('assets')) {
184
- url = req.url;
185
- }
186
- // 加入语言头
187
- const newReq = req.clone({ url, setHeaders: this.getAdditionalHeaders(req.headers) });
188
- return next.handle(newReq).pipe(mergeMap(ev => {
189
- // 允许统一对请求错误处理
190
- if (ev instanceof HttpResponseBase) {
191
- return this.handleData(ev, newReq, next);
192
- }
193
- // 若一切都正常,则后续操作
194
- return of(ev);
195
- }), catchError((err) => this.handleData(err, newReq, next)));
196
- }
197
- }
198
- YzDefaultInterceptor.decorators = [
199
- { type: Injectable }
200
- ];
201
- YzDefaultInterceptor.ctorParameters = () => [
202
- { type: Injector }
203
- ];
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXouZGVmYXVsdC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQveXouZGVmYXVsdC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBTWpCLFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE1BQU0sV0FBVyxHQUE4QjtJQUM3QyxHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsWUFBWTtJQUNqQixHQUFHLEVBQUUscUJBQXFCO0lBQzFCLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxF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O1FBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDZjtRQUNELFFBQVE7UUFDUixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUM3QixRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDWixjQUFjO1lBQ2QsSUFBSSxFQUFFLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsZUFBZTtZQUNmLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUMzRSxDQUFDO0lBQ0osQ0FBQzs7O1lBaE1GLFVBQVU7OztZQXBDVSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBSZXNwb25zZUJhc2Vcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE56Tm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbm90aWZpY2F0aW9uJztcblxuaW1wb3J0IHsgWUFfU0VSVklDRV9UT0tFTiwgSVRva2VuU2VydmljZSB9IGZyb20gJ0B5ZWxvbi9hdXRoJztcbmltcG9ydCB7IFlVTlpBSV9JMThOX1RPS0VOLCBfSHR0cENsaWVudCB9IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICdAeWVsb24vdXRpbCc7XG5pbXBvcnQgeyBZdW56YWlCdXNpbmVzc0NvbmZpZywgWXVuemFpQ29uZmlnU2VydmljZSB9IGZyb20gJ0B5ZWxvbi91dGlsL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICdAeWVsb24vdXRpbC9vdGhlcic7XG5cbmltcG9ydCB7IG1lcmdlQmlzQ29uZmlnIH0gZnJvbSAnLi9iaXMuY29uZmlnJztcblxuY29uc3QgQ09ERU1FU1NBR0U6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7XG4gIDIwMDogJ+acjeWKoeWZqOaIkOWKn+i/lOWbnuivt+axgueahOaVsOaNruOAgicsXG4gIDIwMTogJ+aWsOW7uuaIluS/ruaUueaVsOaNruaIkOWKn+OAgicsXG4gIDIwMjogJ+S4gOS4quivt+axguW3sue7j+i/m+WFpeWQjuWPsOaOkumYn++8iOW8guatpeS7u+WKoe+8ieOAgicsXG4gIDIwNDogJ+WIoOmZpOaVsOaNruaIkOWKn+OAgicsXG4gIDQwMDogJ+WPkeWHuueahOivt+axguaciemUmeivr++8jOacjeWKoeWZqOayoeaciei/m+ihjOaWsOW7uuaIluS/ruaUueaVsOaNrueahOaTjeS9nOOAgicsXG4gIDQwMTogJ+eUqOaIt+ayoeacieadg+mZkO+8iOS7pOeJjOOAgeeUqOaIt+WQjeOAgeWvhueggemUmeivr++8ieOAgicsXG4gIDQwMzogJ+eUqOaIt+W+l+WIsOaOiOadg++8jOS9huaYr+iuv+mXruaYr+iiq+emgeatoueahOOAgicsXG4gIDQwNDogJ+WPkeWHuueahOivt+axgumSiOWvueeahOaYr+S4jeWtmOWcqOeahOiusOW9le+8jOacjeWKoeWZqOayoeaciei/m+ihjOaTjeS9nOOAgicsXG4gIDQwNjogJ+ivt+axgueahOagvOW8j+S4jeWPr+W+l+OAgicsXG4gIDQxMDogJ+ivt+axgueahOi1hOa6kOiiq+awuOS5heWIoOmZpO+8jOS4lOS4jeS8muWGjeW+l+WIsOeahOOAgicsXG4gIDQyMjogJ+W9k+WIm+W7uuS4gOS4quWvueixoeaXtu+8jOWPkeeUn+S4gOS4qumqjOivgemUmeivr+OAgicsXG4gIDUwMDogJ+acjeWKoeWZqOWPkeeUn+mUmeivr++8jOivt+ajgOafpeacjeWKoeWZqOOAgicsXG4gIDUwMjogJ+e9keWFs+mUmeivr+OAgicsXG4gIDUwMzogJ+acjeWKoeS4jeWPr+eUqO+8jOacjeWKoeWZqOaaguaXtui/h+i9veaIlue7tOaKpOOAgicsXG4gIDUwNDogJ+e9keWFs+i2heaXtuOAgidcbn07XG5cbi8qKlxuICog6buY6K6kSFRUUOaLpuaIquWZqO+8jOWFtuazqOWGjOe7huiKguingSBgYXBwLm1vZHVsZS50c2BcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFl6RGVmYXVsdEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHJpdmF0ZSBqdW1wID0gZmFsc2U7XG4gIHByaXZhdGUgcmVmcmVzaFRva2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHJlZnJlc2hUb2tlbiQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gIHByaXZhdGUgZ2V0IG5vdGlmaWNhdGlvbigpOiBOek5vdGlmaWNhdGlvblNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChOek5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgdG9rZW5TcnYoKTogSVRva2VuU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaHR0cCgpOiBfSHR0cENsaWVudCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KF9IdHRwQ2xpZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpOiBZdW56YWlCdXNpbmVzc0NvbmZpZyB7XG4gICAgcmV0dXJuIG1lcmdlQmlzQ29uZmlnKHRoaXMuaW5qZWN0b3IuZ2V0KFl1bnphaUNvbmZpZ1NlcnZpY2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ29Ubyh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKS5uYXZpZ2F0ZUJ5VXJsKHVybCkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAodGhpcy5jb25maWcucmVmcmVzaFRva2VuVHlwZSA9PT0gJ2F1dGgtcmVmcmVzaCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjYW4ndCB1c2UgYXV0aC1yZWZyZXNoLCBwbGVhc2UgY2hhbmdlIHl6LmRlZmF1bHQuaW50ZXJjZXB0b3IgdG8gZGVmYXVsdC5pbnRlcmNlcHRvciFcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1N0YXR1cyhldjogSHR0cFJlc3BvbnNlQmFzZSk6IHZvaWQge1xuICAgIGlmICgoZXYuc3RhdHVzID49IDIwMCAmJiBldi5zdGF0dXMgPCAzMDApIHx8IGV2LnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgKGV2LmVycm9yLm1lc3NhZ2UgfHwgZXYuZXJyb3IuZXJyb3JNZXNzYWdlKSkge1xuICAgICAgaWYgKGV2LmVycm9yLmVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihg5Y+R55Sf5LqG5LiA5Lqb6ZSZ6K+vIGAsIGV2LmVycm9yLmVycm9yTWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihg5Y+R55Sf5LqG5LiA5Lqb6ZSZ6K+vIGAsIGV2LmVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldiBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiBldi5ib2R5LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoYOWPkeeUn+S6huS4gOS6m+mUmeivryBgLCBldi5ib2R5LmVycm9yTWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVycm9ydGV4dCA9IENPREVNRVNTQUdFW2V2LnN0YXR1c10gfHwgZXYuc3RhdHVzVGV4dDtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihg6K+35rGC6ZSZ6K+vICR7ZXYuc3RhdHVzfTogJHtldi51cmx9YCwgZXJyb3J0ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgVG9Mb2dpbigpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihg5pyq55m75b2V5oiW55m75b2V54q25oCB5bey6L+H5pyf77yMNeenkuWQjuWwhui3s+i9rOWIsOeZu+W9lemhtemdouOAgmAsIGBgKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5jb25maWcuYmFzZVVybH0vY2FzLXByb3h5L2FwcC9sb2dvdXRgO1xuICAgIH0sIDUwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSByZUF0dGFjaFRva2VuKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IEh0dHBSZXF1ZXN0PGFueT4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlblNydi5nZXQoKT8udG9rZW47XG4gICAgcmV0dXJuIHJlcS5jbG9uZSh7XG4gICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hUb2tlblJlcXVlc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMudG9rZW5TcnYuZ2V0KCk7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm0uc2V0KCdyZWZyZXNoX3Rva2VuJywgbW9kZWw/LnJlZnJlc2hUb2tlbik7XG4gICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yOiB1c2UgdGhlIHJlZnJlc2ggdG9rZW4gdG8gcmVxdWVzdCBhIG5ldyB0b2tlbicsIG1vZGVsPy5yZWZyZXNoVG9rZW4pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgL2F1dGgvdXNlci90b2tlbi9yZWZyZXNoP19hbGxvd19hbm9ueW1vdXM9dHJ1ZWAsIGZvcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlSZWZyZXNoVG9rZW4oZXY6IEh0dHBSZXNwb25zZUJhc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIOi/nuWIt+aWsFRva2Vu55qE6K+35rGC6YO96ZSZ5LqG77yM6YKj5bCx5piv55yf6ZSZ5LqGXG4gICAgaWYgKFsnL2F1dGgvb2F1dGgvdG9rZW4nXS5zb21lKHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkpKSB7XG4gICAgICB0aGlzLlRvTG9naW4oKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV2KTtcbiAgICB9XG5cbiAgICAvLyDmraPlnKjliLfmlrB0b2tlbu+8jOaJgOacieWFtuS7luivt+axguaOkumYn1xuICAgIGlmICh0aGlzLnJlZnJlc2hUb2tpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlbiQucGlwZShcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG5leHQuaGFuZGxlKHRoaXMucmVBdHRhY2hUb2tlbihyZXEpKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy/lsJ3or5XosIPnlKjliLfmlrAgVG9rZW5cbiAgICB0aGlzLnJlZnJlc2hUb2tpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVmcmVzaFRva2VuJC5uZXh0KG51bGwpO1xuXG4gICAgLy8g5aSE55CGVG9rZW5cbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5SZXF1ZXN0KCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChyZXMgPT4ge1xuICAgICAgICBsb2coJ3l6LmRlZmF1bHQuaW50ZXJjZXB0b3I6IHJlZnJlc2ggdG9rZW4gYWNjZXNzZWQgLT4gJywgcmVzKTtcbiAgICAgICAgLy8g6YeN5paw5L+d5a2Y5pawIHRva2VuXG4gICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBzY29wZSwgdG9rZW5fdHlwZSB9ID0gcmVzO1xuICAgICAgICB0aGlzLnRva2VuU3J2LnNldCh7XG4gICAgICAgICAgdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICBleHBpcmVkOiBleHBpcmVzX2luLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaF90b2tlbixcbiAgICAgICAgICB0b2tlblR5cGU6IHRva2VuX3R5cGUsXG4gICAgICAgICAgc2NvcGVcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOmAmuefpeWQjue7reivt+axgue7p+e7reaJp+ihjFxuICAgICAgICB0aGlzLnJlZnJlc2hUb2tpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4kLm5leHQocmVzKTtcbiAgICAgICAgLy8g6YeN5paw5Y+R6LW36K+35rGCXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLnJlQXR0YWNoVG9rZW4ocmVxKSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuVG9Mb2dpbigpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZGRpdGlvbmFsSGVhZGVycyhoZWFkZXJzPzogSHR0cEhlYWRlcnMpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgcmVzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmluamVjdG9yLmdldChZVU5aQUlfSTE4Tl9UT0tFTikuY3VycmVudExhbmc7XG4gICAgaWYgKCFoZWFkZXJzPy5oYXMoJ0FjY2VwdC1MYW5ndWFnZScpICYmIGxhbmcpIHtcbiAgICAgIHJlc1snQWNjZXB0LUxhbmd1YWdlJ10gPSBsYW5nO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRhKGV2OiBIdHRwUmVzcG9uc2VCYXNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLmNoZWNrU3RhdHVzKGV2KTtcbiAgICBzd2l0Y2ggKGV2LnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiBvZihldik7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbkVuYWJsZWQgJiYgdGhpcy5jb25maWcucmVmcmVzaFRva2VuVHlwZSA9PT0gJ3JlLXJlcXVlc3QnKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJ5UmVmcmVzaFRva2VuKGV2LCByZXEsIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuVG9Mb2dpbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgY2FzZSA0MDQ6XG4gICAgICBjYXNlIDUwMDpcbiAgICAgICAgaWYgKHRoaXMuanVtcCkge1xuICAgICAgICAgIHRoaXMuZ29UbyhgL2V4Y2VwdGlvbi8ke2V2LnN0YXR1c31gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChldiBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ+acquWPr+efpemUmeivr++8jOWkp+mDqOWIhuaYr+eUseS6juWQjuerr+S4jeaUr+aMgei3qOWfn0NPUlPmiJbml6DmlYjphY3nva7lvJXotbfvvIzor7flj4LogIMgaHR0cHM6Ly9uZy55dW56YWluZm8uY29tL2RvY3Mvc2VydmVyIOino+WGs+i3qOWfn+mXrumimCcsXG4gICAgICAgICAgICBldlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChldiBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihldik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihldik7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgbG9nKCd5ei5kZWZhdWx0LmludGVyY2VwdG9yLnRzOiAnLCAncmVxdWVzdCAnLCByZXEpO1xuICAgIC8vIOe7n+S4gOWKoOWJjee8gFxuICAgIGxldCB1cmwgPSByZXEudXJsO1xuICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxuICAgIGlmICh1cmwuaW5jbHVkZXMoJy5qc29uJykgJiYgdXJsLmluY2x1ZGVzKCdhc3NldHMnKSkge1xuICAgICAgdXJsID0gcmVxLnVybDtcbiAgICB9XG4gICAgLy8g5Yqg5YWl6K+t6KiA5aS0XG4gICAgY29uc3QgbmV3UmVxID0gcmVxLmNsb25lKHsgdXJsLCBzZXRIZWFkZXJzOiB0aGlzLmdldEFkZGl0aW9uYWxIZWFkZXJzKHJlcS5oZWFkZXJzKSB9KTtcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUobmV3UmVxKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZXYgPT4ge1xuICAgICAgICAvLyDlhYHorrjnu5/kuIDlr7nor7fmsYLplJnor6/lpITnkIZcbiAgICAgICAgaWYgKGV2IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZURhdGEoZXYsIG5ld1JlcSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g6Iul5LiA5YiH6YO95q2j5bi477yM5YiZ5ZCO57ut5pON5L2cXG4gICAgICAgIHJldHVybiBvZihldik7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRGF0YShlcnIsIG5ld1JlcSwgbmV4dCkpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,102 +0,0 @@
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