@delon/theme 15.2.0 → 16.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/compact.css +5 -14
  2. package/compact.min.css +1 -1
  3. package/dark.css +5 -14
  4. package/dark.min.css +1 -1
  5. package/default.css +5 -14
  6. package/default.min.css +1 -1
  7. package/esm2022/layout-default/layout-header-item-trigger.directive.mjs +17 -0
  8. package/esm2022/layout-default/layout-header-item.component.mjs +34 -0
  9. package/esm2022/layout-default/layout-header.component.mjs +127 -0
  10. package/esm2022/layout-default/layout-nav.component.mjs +295 -0
  11. package/esm2022/layout-default/layout-top-menu-item.mjs +40 -0
  12. package/esm2022/layout-default/layout.component.mjs +163 -0
  13. package/esm2022/layout-default/layout.module.mjs +72 -0
  14. package/esm2022/layout-default/layout.service.mjs +66 -0
  15. package/esm2022/setting-drawer/setting-drawer-item.component.mjs +36 -0
  16. package/esm2022/setting-drawer/setting-drawer.component.mjs +195 -0
  17. package/esm2022/setting-drawer/setting-drawer.module.mjs +67 -0
  18. package/esm2022/src/locale/locale.module.mjs +18 -0
  19. package/esm2022/src/locale/locale.service.mjs +46 -0
  20. package/esm2022/src/pipes/date/date.pipe.mjs +25 -0
  21. package/esm2022/src/pipes/keys/keys.pipe.mjs +22 -0
  22. package/esm2022/src/pipes/safe/html.pipe.mjs +19 -0
  23. package/esm2022/src/pipes/safe/url.pipe.mjs +19 -0
  24. package/esm2022/src/pipes/yn/yn.pipe.mjs +39 -0
  25. package/esm2022/src/services/drawer/drawer.helper.mjs +92 -0
  26. package/esm2022/src/services/http/http.client.mjs +154 -0
  27. package/esm2022/src/services/http/http.decorator.mjs +216 -0
  28. package/esm2022/src/services/i18n/i18n-url.guard.mjs +37 -0
  29. package/esm2022/src/services/i18n/i18n.mjs +98 -0
  30. package/esm2022/src/services/i18n/i18n.pipe.mjs +22 -0
  31. package/esm2022/src/services/menu/menu.service.mjs +302 -0
  32. package/esm2022/src/services/modal/modal.helper.mjs +107 -0
  33. package/esm2022/src/services/responsive/responsive.mjs +47 -0
  34. package/esm2022/src/services/rtl/rtl.service.mjs +102 -0
  35. package/esm2022/src/services/settings/settings.service.mjs +101 -0
  36. package/esm2022/src/services/title/title.service.mjs +147 -0
  37. package/esm2022/src/theme.module.mjs +77 -0
  38. package/{esm2020 → esm2022}/src/version.mjs +1 -1
  39. package/esm2022/theme-btn/theme-btn.component.mjs +110 -0
  40. package/esm2022/theme-btn/theme-btn.module.mjs +33 -0
  41. package/{fesm2020 → fesm2022}/layout-default.mjs +55 -55
  42. package/{fesm2015 → fesm2022}/layout-default.mjs.map +1 -1
  43. package/{fesm2020 → fesm2022}/setting-drawer.mjs +32 -32
  44. package/{fesm2015 → fesm2022}/setting-drawer.mjs.map +1 -1
  45. package/{fesm2020 → fesm2022}/theme-btn.mjs +12 -12
  46. package/fesm2022/theme-btn.mjs.map +1 -0
  47. package/{fesm2020 → fesm2022}/theme.mjs +75 -75
  48. package/{fesm2020 → fesm2022}/theme.mjs.map +1 -1
  49. package/layout-default/layout-header-item.component.d.ts +1 -1
  50. package/layout-default/layout-header.component.d.ts +1 -1
  51. package/layout-default/layout-nav.component.d.ts +1 -1
  52. package/layout-default/layout-top-menu-item.d.ts +1 -1
  53. package/layout-default/layout.component.d.ts +1 -1
  54. package/package.json +20 -34
  55. package/setting-drawer/setting-drawer-item.component.d.ts +1 -1
  56. package/setting-drawer/setting-drawer.component.d.ts +1 -1
  57. package/system/utils/_other.less +1 -4
  58. package/system/widgets/_abs.less +1 -4
  59. package/theme-btn/theme-btn.component.d.ts +1 -1
  60. package/esm2020/layout-default/layout-header-item-trigger.directive.mjs +0 -16
  61. package/esm2020/layout-default/layout-header-item.component.mjs +0 -33
  62. package/esm2020/layout-default/layout-header.component.mjs +0 -126
  63. package/esm2020/layout-default/layout-nav.component.mjs +0 -294
  64. package/esm2020/layout-default/layout-top-menu-item.mjs +0 -39
  65. package/esm2020/layout-default/layout.component.mjs +0 -162
  66. package/esm2020/layout-default/layout.module.mjs +0 -71
  67. package/esm2020/layout-default/layout.service.mjs +0 -65
  68. package/esm2020/setting-drawer/setting-drawer-item.component.mjs +0 -35
  69. package/esm2020/setting-drawer/setting-drawer.component.mjs +0 -194
  70. package/esm2020/setting-drawer/setting-drawer.module.mjs +0 -66
  71. package/esm2020/src/locale/locale.module.mjs +0 -17
  72. package/esm2020/src/locale/locale.service.mjs +0 -45
  73. package/esm2020/src/pipes/date/date.pipe.mjs +0 -24
  74. package/esm2020/src/pipes/keys/keys.pipe.mjs +0 -21
  75. package/esm2020/src/pipes/safe/html.pipe.mjs +0 -18
  76. package/esm2020/src/pipes/safe/url.pipe.mjs +0 -18
  77. package/esm2020/src/pipes/yn/yn.pipe.mjs +0 -38
  78. package/esm2020/src/services/drawer/drawer.helper.mjs +0 -91
  79. package/esm2020/src/services/http/http.client.mjs +0 -153
  80. package/esm2020/src/services/http/http.decorator.mjs +0 -215
  81. package/esm2020/src/services/i18n/i18n-url.guard.mjs +0 -36
  82. package/esm2020/src/services/i18n/i18n.mjs +0 -96
  83. package/esm2020/src/services/i18n/i18n.pipe.mjs +0 -21
  84. package/esm2020/src/services/menu/menu.service.mjs +0 -301
  85. package/esm2020/src/services/modal/modal.helper.mjs +0 -106
  86. package/esm2020/src/services/responsive/responsive.mjs +0 -46
  87. package/esm2020/src/services/rtl/rtl.service.mjs +0 -101
  88. package/esm2020/src/services/settings/settings.service.mjs +0 -100
  89. package/esm2020/src/services/title/title.service.mjs +0 -146
  90. package/esm2020/src/theme.module.mjs +0 -76
  91. package/esm2020/theme-btn/theme-btn.component.mjs +0 -109
  92. package/esm2020/theme-btn/theme-btn.module.mjs +0 -32
  93. package/fesm2015/layout-default.mjs +0 -773
  94. package/fesm2015/setting-drawer.mjs +0 -487
  95. package/fesm2015/theme-btn.mjs +0 -147
  96. package/fesm2015/theme-btn.mjs.map +0 -1
  97. package/fesm2015/theme.mjs +0 -2696
  98. package/fesm2015/theme.mjs.map +0 -1
  99. package/fesm2020/layout-blank.mjs +0 -7
  100. package/fesm2020/layout-blank.mjs.map +0 -1
  101. package/fesm2020/layout-default.mjs.map +0 -1
  102. package/fesm2020/setting-drawer.mjs.map +0 -1
  103. package/fesm2020/theme-btn.mjs.map +0 -1
  104. /package/{esm2020 → esm2022}/layout-blank/layout-blank.mjs +0 -0
  105. /package/{esm2020 → esm2022}/layout-blank/public_api.mjs +0 -0
  106. /package/{esm2020 → esm2022}/layout-default/layout-default.mjs +0 -0
  107. /package/{esm2020 → esm2022}/layout-default/public_api.mjs +0 -0
  108. /package/{esm2020 → esm2022}/layout-default/types.mjs +0 -0
  109. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  110. /package/{esm2020 → esm2022}/setting-drawer/public_api.mjs +0 -0
  111. /package/{esm2020 → esm2022}/setting-drawer/setting-drawer.mjs +0 -0
  112. /package/{esm2020 → esm2022}/setting-drawer/setting-drawer.types.mjs +0 -0
  113. /package/{esm2020 → esm2022}/src/config.mjs +0 -0
  114. /package/{esm2020 → esm2022}/src/locale/index.mjs +0 -0
  115. /package/{esm2020 → esm2022}/src/locale/languages/el-GR.mjs +0 -0
  116. /package/{esm2020 → esm2022}/src/locale/languages/en-US.mjs +0 -0
  117. /package/{esm2020 → esm2022}/src/locale/languages/es-ES.mjs +0 -0
  118. /package/{esm2020 → esm2022}/src/locale/languages/fr-FR.mjs +0 -0
  119. /package/{esm2020 → esm2022}/src/locale/languages/hr-HR.mjs +0 -0
  120. /package/{esm2020 → esm2022}/src/locale/languages/it-IT.mjs +0 -0
  121. /package/{esm2020 → esm2022}/src/locale/languages/ja-JP.mjs +0 -0
  122. /package/{esm2020 → esm2022}/src/locale/languages/ko-KR.mjs +0 -0
  123. /package/{esm2020 → esm2022}/src/locale/languages/pl-PL.mjs +0 -0
  124. /package/{esm2020 → esm2022}/src/locale/languages/sl-SI.mjs +0 -0
  125. /package/{esm2020 → esm2022}/src/locale/languages/tr-TR.mjs +0 -0
  126. /package/{esm2020 → esm2022}/src/locale/languages/zh-CN.mjs +0 -0
  127. /package/{esm2020 → esm2022}/src/locale/languages/zh-TW.mjs +0 -0
  128. /package/{esm2020 → esm2022}/src/locale/locale.tokens.mjs +0 -0
  129. /package/{esm2020 → esm2022}/src/locale/locale.types.mjs +0 -0
  130. /package/{esm2020 → esm2022}/src/locale/public_api.mjs +0 -0
  131. /package/{esm2020 → esm2022}/src/router/optional-preloader.mjs +0 -0
  132. /package/{esm2020 → esm2022}/src/services/http/http.token.mjs +0 -0
  133. /package/{esm2020 → esm2022}/src/services/http/index.mjs +0 -0
  134. /package/{esm2020 → esm2022}/src/services/i18n/index.mjs +0 -0
  135. /package/{esm2020 → esm2022}/src/services/menu/interface.mjs +0 -0
  136. /package/{esm2020 → esm2022}/src/services/preloader/preloader.mjs +0 -0
  137. /package/{esm2020 → esm2022}/src/services/settings/types.mjs +0 -0
  138. /package/{esm2020 → esm2022}/theme-btn/public_api.mjs +0 -0
  139. /package/{esm2020 → esm2022}/theme-btn/theme-btn.mjs +0 -0
  140. /package/{esm2020 → esm2022}/theme.mjs +0 -0
  141. /package/{fesm2015 → fesm2022}/layout-blank.mjs +0 -0
  142. /package/{fesm2015 → fesm2022}/layout-blank.mjs.map +0 -0
@@ -0,0 +1,98 @@
1
+ import { inject, Injectable, InjectionToken } from '@angular/core';
2
+ import { BehaviorSubject, filter } from 'rxjs';
3
+ import { AlainConfigService } from '@delon/util/config';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@delon/util/config";
6
+ export const ALAIN_I18N_TOKEN = new InjectionToken('alainI18nToken', {
7
+ providedIn: 'root',
8
+ factory: () => new AlainI18NServiceFake(inject(AlainConfigService))
9
+ });
10
+ class AlainI18nBaseService {
11
+ get change() {
12
+ return this._change$.asObservable().pipe(filter(w => w != null));
13
+ }
14
+ get defaultLang() {
15
+ return this._defaultLang;
16
+ }
17
+ get currentLang() {
18
+ return this._currentLang;
19
+ }
20
+ get data() {
21
+ return this._data;
22
+ }
23
+ constructor(cogSrv) {
24
+ this._change$ = new BehaviorSubject(null);
25
+ this._currentLang = '';
26
+ this._defaultLang = '';
27
+ this._data = {};
28
+ this.cog = cogSrv.merge('themeI18n', {
29
+ interpolation: ['{{', '}}']
30
+ });
31
+ }
32
+ /**
33
+ * Flattened data source
34
+ *
35
+ * @example
36
+ * {
37
+ * "name": "Name",
38
+ * "sys": {
39
+ * "": "System",
40
+ * "title": "Title"
41
+ * }
42
+ * }
43
+ * =>
44
+ * {
45
+ * "name": "Name",
46
+ * "sys": "System",
47
+ * "sys.title": "Title"
48
+ * }
49
+ */
50
+ flatData(data, parentKey) {
51
+ const res = {};
52
+ for (const key of Object.keys(data)) {
53
+ const value = data[key];
54
+ if (typeof value === 'object') {
55
+ const child = this.flatData(value, parentKey.concat(key));
56
+ Object.keys(child).forEach(childKey => (res[childKey] = child[childKey]));
57
+ }
58
+ else {
59
+ res[(key ? parentKey.concat(key) : parentKey).join('.')] = `${value}`;
60
+ }
61
+ }
62
+ return res;
63
+ }
64
+ fanyi(path, params) {
65
+ let content = this._data[path] || '';
66
+ if (!content)
67
+ return path;
68
+ if (params) {
69
+ const interpolation = this.cog.interpolation;
70
+ Object.keys(params).forEach(key => (content = content.replace(new RegExp(`${interpolation[0]}\s?${key}\s?${interpolation[1]}`, 'g'), `${params[key]}`)));
71
+ }
72
+ return content;
73
+ }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: AlainI18nBaseService, deps: [{ token: i1.AlainConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
75
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: AlainI18nBaseService }); }
76
+ }
77
+ export { AlainI18nBaseService };
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: AlainI18nBaseService, decorators: [{
79
+ type: Injectable
80
+ }], ctorParameters: function () { return [{ type: i1.AlainConfigService }]; } });
81
+ class AlainI18NServiceFake extends AlainI18nBaseService {
82
+ use(lang, data) {
83
+ this._data = this.flatData(data ?? {}, []);
84
+ this._currentLang = lang;
85
+ this._change$.next(lang);
86
+ }
87
+ getLangs() {
88
+ return [];
89
+ }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: AlainI18NServiceFake, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
91
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: AlainI18NServiceFake, providedIn: 'root' }); }
92
+ }
93
+ export { AlainI18NServiceFake };
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: AlainI18NServiceFake, decorators: [{
95
+ type: Injectable,
96
+ args: [{ providedIn: 'root' }]
97
+ }] });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lL3NyYy9zZXJ2aWNlcy9pMThuL2kxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNELE9BQU8sRUFBRSxrQkFBa0IsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBc0Q5RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsZ0JBQWdCLEVBQUU7SUFDckYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Q0FDcEUsQ0FBQyxDQUFDO0FBRUgsTUFDc0Isb0JBQW9CO0lBTXhDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUF1QixDQUFDO0lBQ3pGLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFZLE1BQTBCO1FBakI1QixhQUFRLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3BELGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FB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TSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWxhaW5Db25maWdTZXJ2aWNlLCBBbGFpblRoZW1lSTE4bkNvbmZpZyB9IGZyb20gJ0BkZWxvbi91dGlsL2NvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IF9IdHRwQ2xpZW50IH0gZnJvbSAnLi4vaHR0cC9odHRwLmNsaWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxhaW5JMThOU2VydmljZSB7XG4gIFtrZXk6IHN0cmluZ106IE56U2FmZUFueTtcblxuICAvKipcbiAgICogQ2FsbCBgdXNlYCB0byB0cmlnZ2VyIGNoYW5nZSBub3RpZmljYXRpb25cbiAgICpcbiAgICog6LCD55SoIGB1c2VgIOinpuWPkeWPmOabtOmAmuefpVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBsYW5ndWFnZVxuICAgKlxuICAgKiDojrflj5bpu5jorqTor63oqIBcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRMYW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGxhbmd1YWdlXG4gICAqXG4gICAqIOiOt+WPluW9k+WJjeivreiogFxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudExhbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQ2hhbmdlIGxhbmd1YWdlXG4gICAqXG4gICAqIOWPmOabtOivreiogFxuICAgKlxuICAgKiBAcGFyYW0gZW1pdCDmmK/lkKbop6blj5EgYGNoYW5nZWDvvIzpu5jorqTvvJp0cnVlIDsgU2hvdWxkIGJlIHJlbW92ZWQsIHBsZWFzZSB1c2UgYGNoYW5nZWAgZXZlbnQgaW5zdGVhZC5cbiAgICovXG4gIHVzZShsYW5nOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0byB0aGUgY3VycmVudCBsYW5ndWFnZSBsaXN0XG4gICAqXG4gICAqIOi/lOWbnuW9k+WJjeivreiogOWIl+ihqFxuICAgKi9cbiAgZ2V0TGFuZ3MoKTogTnpTYWZlQW55W107XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZSDnv7vor5FcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyDmqKHmnb/miYDpnIDopoHnmoTlj4LmlbDlr7nosaFcbiAgICogQHBhcmFtIGlzU2FmZSDmmK/lkKbov5Tlm57lronlhajlrZfnrKbvvIzoh6rliqjosIPnlKggYGJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sYDsgU2hvdWxkIGJlIHJlbW92ZWQsIElmIHlvdSBuZWVkIFNhZmVIdG1sIHN1cHBvcnQsIHBsZWFzZSB1c2UgYHwgaHRtbGAgcGlwZSBpbnN0ZWFkLlxuICAgKi9cbiAgZmFueWkocGF0aDogc3RyaW5nLCBwYXJhbXM/OiB1bmtub3duKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQUxBSU5fSTE4Tl9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBbGFpbkkxOE5TZXJ2aWNlPignYWxhaW5JMThuVG9rZW4nLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gbmV3IEFsYWluSTE4TlNlcnZpY2VGYWtlKGluamVjdChBbGFpbkNvbmZpZ1NlcnZpY2UpKVxufSk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBbGFpbkkxOG5CYXNlU2VydmljZSBpbXBsZW1lbnRzIEFsYWluSTE4TlNlcnZpY2Uge1xuICBwcml2YXRlIGNvZzogQWxhaW5UaGVtZUkxOG5Db25maWc7XG4gIHByb3RlY3RlZCBfY2hhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCBfY3VycmVudExhbmc6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgX2RlZmF1bHRMYW5nOiBzdHJpbmcgPSAnJztcbiAgcHJvdGVjdGVkIF9kYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGdldCBjaGFuZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlJC5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcih3ID0+IHcgIT0gbnVsbCkpIGFzIE9ic2VydmFibGU8c3RyaW5nPjtcbiAgfVxuICBnZXQgZGVmYXVsdExhbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdExhbmc7XG4gIH1cbiAgZ2V0IGN1cnJlbnRMYW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRMYW5nO1xuICB9XG4gIGdldCBkYXRhKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY29nU3J2OiBBbGFpbkNvbmZpZ1NlcnZpY2UpIHtcbiAgICB0aGlzLmNvZyA9IGNvZ1Nydi5tZXJnZSgndGhlbWVJMThuJywge1xuICAgICAgaW50ZXJwb2xhdGlvbjogWyd7eycsICd9fSddXG4gICAgfSkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5lZCBkYXRhIHNvdXJjZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgXCJuYW1lXCI6IFwiTmFtZVwiLFxuICAgKiAgIFwic3lzXCI6IHtcbiAgICogICAgIFwiXCI6IFwiU3lzdGVtXCIsXG4gICAqICAgICBcInRpdGxlXCI6IFwiVGl0bGVcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKiA9PlxuICAgKiB7XG4gICAqICAgXCJuYW1lXCI6IFwiTmFtZVwiLFxuICAgKiAgIFwic3lzXCI6IFwiU3lzdGVtXCIsXG4gICAqICAgXCJzeXMudGl0bGVcIjogXCJUaXRsZVwiXG4gICAqIH1cbiAgICovXG4gIGZsYXREYXRhKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwYXJlbnRLZXk6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmZsYXREYXRhKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwYXJlbnRLZXkuY29uY2F0KGtleSkpO1xuICAgICAgICBPYmplY3Qua2V5cyhjaGlsZCkuZm9yRWFjaChjaGlsZEtleSA9PiAocmVzW2NoaWxkS2V5XSA9IGNoaWxkW2NoaWxkS2V5XSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzWyhrZXkgPyBwYXJlbnRLZXkuY29uY2F0KGtleSkgOiBwYXJlbnRLZXkpLmpvaW4oJy4nKV0gPSBgJHt2YWx1ZX1gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgYWJzdHJhY3QgdXNlKGxhbmc6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZDtcblxuICBhYnN0cmFjdCBnZXRMYW5ncygpOiBOelNhZmVBbnlbXTtcblxuICBmYW55aShwYXRoOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgICBsZXQgY29udGVudCA9IHRoaXMuX2RhdGFbcGF0aF0gfHwgJyc7XG4gICAgaWYgKCFjb250ZW50KSByZXR1cm4gcGF0aDtcblxuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbnN0IGludGVycG9sYXRpb24gPSB0aGlzLmNvZy5pbnRlcnBvbGF0aW9uISE7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goXG4gICAgICAgIGtleSA9PlxuICAgICAgICAgIChjb250ZW50ID0gY29udGVudC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtpbnRlcnBvbGF0aW9uWzBdfVxccz8ke2tleX1cXHM/JHtpbnRlcnBvbGF0aW9uWzFdfWAsICdnJyksXG4gICAgICAgICAgICBgJHtwYXJhbXNba2V5XX1gXG4gICAgICAgICAgKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWxhaW5JMThOU2VydmljZUZha2UgZXh0ZW5kcyBBbGFpbkkxOG5CYXNlU2VydmljZSB7XG4gIHVzZShsYW5nOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuZmxhdERhdGEoZGF0YSA/PyB7fSwgW10pO1xuICAgIHRoaXMuX2N1cnJlbnRMYW5nID0gbGFuZztcbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQobGFuZyk7XG4gIH1cblxuICBnZXRMYW5ncygpOiBOelNhZmVBbnlbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ import { Inject, Pipe } from '@angular/core';
2
+ import { ALAIN_I18N_TOKEN } from './i18n';
3
+ import * as i0 from "@angular/core";
4
+ class I18nPipe {
5
+ constructor(i18n) {
6
+ this.i18n = i18n;
7
+ }
8
+ transform(key, params) {
9
+ return this.i18n.fanyi(key, params);
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: I18nPipe, deps: [{ token: ALAIN_I18N_TOKEN }], target: i0.ɵɵFactoryTarget.Pipe }); }
12
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.4", ngImport: i0, type: I18nPipe, name: "i18n" }); }
13
+ }
14
+ export { I18nPipe };
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: I18nPipe, decorators: [{
16
+ type: Pipe,
17
+ args: [{ name: 'i18n' }]
18
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
19
+ type: Inject,
20
+ args: [ALAIN_I18N_TOKEN]
21
+ }] }]; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUvc3JjL3NlcnZpY2VzL2kxOG4vaTE4bi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQW9CLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUU1RCxNQUNhLFFBQVE7SUFDbkIsWUFBOEMsSUFBc0I7UUFBdEIsU0FBSSxHQUFKLElBQUksQ0FBa0I7SUFBRyxDQUFDO0lBRXhFLFNBQVMsQ0FBQyxHQUFXLEVBQUUsTUFBZ0M7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs4R0FMVSxRQUFRLGtCQUNDLGdCQUFnQjs0R0FEekIsUUFBUTs7U0FBUixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFOzswQkFFUCxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBbGFpbkkxOE5TZXJ2aWNlLCBBTEFJTl9JMThOX1RPS0VOIH0gZnJvbSAnLi9pMThuJztcblxuQFBpcGUoeyBuYW1lOiAnaTE4bicgfSlcbmV4cG9ydCBjbGFzcyBJMThuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KEFMQUlOX0kxOE5fVE9LRU4pIHByaXZhdGUgaTE4bjogQWxhaW5JMThOU2VydmljZSkge31cblxuICB0cmFuc2Zvcm0oa2V5OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLmZhbnlpKGtleSwgcGFyYW1zKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,302 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { BehaviorSubject, share } from 'rxjs';
3
+ import { ALAIN_I18N_TOKEN } from '../i18n/i18n';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@delon/acl";
6
+ /**
7
+ * 菜单服务,[在线文档](https://ng-alain.com/theme/menu)
8
+ */
9
+ class MenuService {
10
+ constructor(i18nSrv, aclService) {
11
+ this.i18nSrv = i18nSrv;
12
+ this.aclService = aclService;
13
+ this._change$ = new BehaviorSubject([]);
14
+ this.data = [];
15
+ /**
16
+ * 是否完全受控菜单打开状态,默认:`false`
17
+ */
18
+ this.openStrictly = false;
19
+ this.i18n$ = this.i18nSrv.change.subscribe(() => this.resume());
20
+ }
21
+ get change() {
22
+ return this._change$.pipe(share());
23
+ }
24
+ get menus() {
25
+ return this.data;
26
+ }
27
+ visit(data, callback) {
28
+ const inFn = (list, parentMenu, depth) => {
29
+ for (const item of list) {
30
+ callback(item, parentMenu, depth);
31
+ if (item.children && item.children.length > 0) {
32
+ inFn(item.children, item, depth + 1);
33
+ }
34
+ else {
35
+ item.children = [];
36
+ }
37
+ }
38
+ };
39
+ inFn(data, null, 0);
40
+ }
41
+ add(items) {
42
+ this.data = items;
43
+ this.resume();
44
+ }
45
+ fixItem(item) {
46
+ item._aclResult = true;
47
+ if (!item.link)
48
+ item.link = '';
49
+ if (!item.externalLink)
50
+ item.externalLink = '';
51
+ // badge
52
+ if (item.badge) {
53
+ if (item.badgeDot !== true) {
54
+ item.badgeDot = false;
55
+ }
56
+ if (!item.badgeStatus) {
57
+ item.badgeStatus = 'error';
58
+ }
59
+ }
60
+ if (!Array.isArray(item.children)) {
61
+ item.children = [];
62
+ }
63
+ // icon
64
+ if (typeof item.icon === 'string') {
65
+ let type = 'class';
66
+ let value = item.icon;
67
+ // compatible `anticon anticon-user`
68
+ if (~item.icon.indexOf(`anticon-`)) {
69
+ type = 'icon';
70
+ value = value.split('-').slice(1).join('-');
71
+ }
72
+ else if (/^https?:\/\//.test(item.icon)) {
73
+ type = 'img';
74
+ }
75
+ item.icon = { type, value };
76
+ }
77
+ if (item.icon != null) {
78
+ item.icon = { theme: 'outline', spin: false, ...item.icon };
79
+ }
80
+ item.text = item.i18n && this.i18nSrv ? this.i18nSrv.fanyi(item.i18n) : item.text;
81
+ // group
82
+ item.group = item.group !== false;
83
+ // hidden
84
+ item._hidden = typeof item.hide === 'undefined' ? false : item.hide;
85
+ // disabled
86
+ item.disabled = typeof item.disabled === 'undefined' ? false : item.disabled;
87
+ // acl
88
+ item._aclResult = item.acl && this.aclService ? this.aclService.can(item.acl) : true;
89
+ item.open = item.open != null ? item.open : false;
90
+ }
91
+ resume(callback) {
92
+ let i = 1;
93
+ const shortcuts = [];
94
+ this.visit(this.data, (item, parent, depth) => {
95
+ item._id = i++;
96
+ item._parent = parent;
97
+ item._depth = depth;
98
+ this.fixItem(item);
99
+ // shortcut
100
+ if (parent && item.shortcut === true && parent.shortcutRoot !== true) {
101
+ shortcuts.push(item);
102
+ }
103
+ if (callback)
104
+ callback(item, parent, depth);
105
+ });
106
+ this.loadShortcut(shortcuts);
107
+ this._change$.next(this.data);
108
+ }
109
+ /**
110
+ * 加载快捷菜单,加载位置规则如下:
111
+ * 1、统一在下标0的节点下(即【主导航】节点下方)
112
+ * 1、若 children 存在 【shortcutRoot: true】则最优先【推荐】这种方式
113
+ * 2、否则查找带有【dashboard】字样链接,若存在则在此菜单的下方创建快捷入口
114
+ * 3、否则放在0节点位置
115
+ */
116
+ loadShortcut(shortcuts) {
117
+ if (shortcuts.length === 0 || this.data.length === 0) {
118
+ return;
119
+ }
120
+ const ls = this.data[0].children;
121
+ let pos = ls.findIndex(w => w.shortcutRoot === true);
122
+ if (pos === -1) {
123
+ pos = ls.findIndex(w => w.link.includes('dashboard'));
124
+ pos = (pos !== -1 ? pos : -1) + 1;
125
+ const shortcutMenu = {
126
+ text: '快捷菜单',
127
+ i18n: 'shortcut',
128
+ icon: 'icon-rocket',
129
+ children: []
130
+ };
131
+ this.data[0].children.splice(pos, 0, shortcutMenu);
132
+ }
133
+ let _data = this.data[0].children[pos];
134
+ if (_data.i18n && this.i18nSrv)
135
+ _data.text = this.i18nSrv.fanyi(_data.i18n);
136
+ _data = Object.assign(_data, {
137
+ shortcutRoot: true,
138
+ _id: -1,
139
+ _parent: null,
140
+ _depth: 1
141
+ });
142
+ _data.children = shortcuts.map(i => {
143
+ i._depth = 2;
144
+ i._parent = _data;
145
+ return i;
146
+ });
147
+ }
148
+ /**
149
+ * 清空菜单
150
+ */
151
+ clear() {
152
+ this.data = [];
153
+ this._change$.next(this.data);
154
+ }
155
+ /**
156
+ * Use `url` or `key` to find menus
157
+ *
158
+ * 利用 `url` 或 `key` 查找菜单
159
+ */
160
+ find(options) {
161
+ const opt = { recursive: false, ignoreHide: false, ...options };
162
+ if (opt.key != null) {
163
+ return this.getItem(opt.key);
164
+ }
165
+ let url = opt.url;
166
+ let item = null;
167
+ while (!item && url) {
168
+ this.visit(opt.data ?? this.data, i => {
169
+ if (opt.ignoreHide && i.hide) {
170
+ return;
171
+ }
172
+ if (opt.cb) {
173
+ const res = opt.cb(i);
174
+ if (!item && typeof res === 'boolean' && res) {
175
+ item = i;
176
+ }
177
+ }
178
+ if (i.link != null && i.link === url) {
179
+ item = i;
180
+ }
181
+ });
182
+ if (!opt.recursive)
183
+ break;
184
+ if (/[?;]/g.test(url)) {
185
+ url = url.split(/[?;]/g)[0];
186
+ }
187
+ else {
188
+ url = url.split('/').slice(0, -1).join('/');
189
+ }
190
+ }
191
+ return item;
192
+ }
193
+ /**
194
+ * 根据url获取菜单列表
195
+ * - 若 `recursive: true` 则会自动向上递归查找
196
+ * - 菜单数据源包含 `/ware`,则 `/ware/1` 也视为 `/ware` 项
197
+ */
198
+ getPathByUrl(url, recursive = false) {
199
+ const ret = [];
200
+ let item = this.find({ url, recursive });
201
+ if (!item)
202
+ return ret;
203
+ do {
204
+ ret.splice(0, 0, item);
205
+ item = item._parent;
206
+ } while (item);
207
+ return ret;
208
+ }
209
+ /**
210
+ * Get menu based on `key`
211
+ */
212
+ getItem(key) {
213
+ let res = null;
214
+ this.visit(this.data, item => {
215
+ if (res == null && item.key === key) {
216
+ res = item;
217
+ }
218
+ });
219
+ return res;
220
+ }
221
+ /**
222
+ * Set menu based on `key`
223
+ */
224
+ setItem(key, value, options) {
225
+ const item = typeof key === 'string' ? this.getItem(key) : key;
226
+ if (item == null)
227
+ return;
228
+ Object.keys(value).forEach(k => {
229
+ item[k] = value[k];
230
+ });
231
+ this.fixItem(item);
232
+ if (options?.emit !== false)
233
+ this._change$.next(this.data);
234
+ }
235
+ /**
236
+ * Open menu based on `key` or menu object
237
+ */
238
+ open(keyOrItem, options) {
239
+ let item = typeof keyOrItem === 'string' ? this.find({ key: keyOrItem }) : keyOrItem;
240
+ if (item == null)
241
+ return;
242
+ this.visit(this.menus, (i) => {
243
+ i._selected = false;
244
+ if (!this.openStrictly)
245
+ i.open = false;
246
+ });
247
+ do {
248
+ item._selected = true;
249
+ item.open = true;
250
+ item = item._parent;
251
+ } while (item);
252
+ if (options?.emit !== false)
253
+ this._change$.next(this.data);
254
+ }
255
+ openAll(status) {
256
+ this.toggleOpen(null, { allStatus: status });
257
+ }
258
+ toggleOpen(keyOrItem, options) {
259
+ let item = typeof keyOrItem === 'string' ? this.find({ key: keyOrItem }) : keyOrItem;
260
+ if (item == null) {
261
+ this.visit(this.menus, (i) => {
262
+ i._selected = false;
263
+ i.open = options?.allStatus === true;
264
+ });
265
+ }
266
+ else {
267
+ if (!this.openStrictly) {
268
+ this.visit(this.menus, (i) => {
269
+ if (i !== item)
270
+ i.open = false;
271
+ });
272
+ let pItem = item._parent;
273
+ while (pItem) {
274
+ pItem.open = true;
275
+ pItem = pItem._parent;
276
+ }
277
+ }
278
+ item.open = !item.open;
279
+ }
280
+ if (options?.emit !== false)
281
+ this._change$.next(this.data);
282
+ }
283
+ ngOnDestroy() {
284
+ this._change$.unsubscribe();
285
+ this.i18n$.unsubscribe();
286
+ }
287
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: MenuService, deps: [{ token: ALAIN_I18N_TOKEN, optional: true }, { token: i1.ACLService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
288
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: MenuService, providedIn: 'root' }); }
289
+ }
290
+ export { MenuService };
291
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: MenuService, decorators: [{
292
+ type: Injectable,
293
+ args: [{ providedIn: 'root' }]
294
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
295
+ type: Optional
296
+ }, {
297
+ type: Inject,
298
+ args: [ALAIN_I18N_TOKEN]
299
+ }] }, { type: i1.ACLService, decorators: [{
300
+ type: Optional
301
+ }] }]; } });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUvc3JjL3NlcnZpY2VzL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLeEUsT0FBTyxFQUFvQixnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBR2xFOztHQUVHO0FBQ0gsTUFDYSxXQUFXO0lBU3RCLFlBR1UsT0FBeUIsRUFDYixVQUFzQjtRQURsQyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUNiLGVBQVUsR0FBVixVQUFVLENBQVk7UUFacEMsYUFBUSxHQUE0QixJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUVwRSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQzFCOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFRbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFJRCxLQUFLLENBQUMsSUFBWSxFQUFFLFFBQXdFO1FBQzFGLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFFLFVBQXVCLEVBQUUsS0FBYSxFQUFRLEVBQUU7WUFDMUUs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QztpQkFDdkI7YUFDRjtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxPQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUs7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0FsVlUsV0FBVyxrQkFXWixnQkFBZ0I7a0hBWGYsV0FBVyxjQURFLE1BQU07O1NBQ25CLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVc3QixRQUFROzswQkFDUixNQUFNOzJCQUFDLGdCQUFnQjs7MEJBRXZCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBzaGFyZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBQ0xTZXJ2aWNlIH0gZnJvbSAnQGRlbG9uL2FjbCc7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IEFsYWluSTE4TlNlcnZpY2UsIEFMQUlOX0kxOE5fVE9LRU4gfSBmcm9tICcuLi9pMThuL2kxOG4nO1xuaW1wb3J0IHsgTWVudSwgTWVudUljb24sIE1lbnVJbm5lciB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuLyoqXG4gKiDoj5zljZXmnI3liqHvvIxb5Zyo57q/5paH5qGjXShodHRwczovL25nLWFsYWluLmNvbS90aGVtZS9tZW51KVxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfY2hhbmdlJDogQmVoYXZpb3JTdWJqZWN0PE1lbnVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVbXT4oW10pO1xuICBwcml2YXRlIGkxOG4kOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGF0YTogTWVudVtdID0gW107XG4gIC8qKlxuICAgKiDmmK/lkKblrozlhajlj5fmjqfoj5zljZXmiZPlvIDnirbmgIHvvIzpu5jorqTvvJpgZmFsc2VgXG4gICAqL1xuICBvcGVuU3RyaWN0bHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoQUxBSU5fSTE4Tl9UT0tFTilcbiAgICBwcml2YXRlIGkxOG5TcnY6IEFsYWluSTE4TlNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBhY2xTZXJ2aWNlOiBBQ0xTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaTE4biQgPSB0aGlzLmkxOG5TcnYuY2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgfVxuXG4gIGdldCBjaGFuZ2UoKTogT2JzZXJ2YWJsZTxNZW51W10+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlJC5waXBlKHNoYXJlKCkpO1xuICB9XG5cbiAgZ2V0IG1lbnVzKCk6IE1lbnVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIHZpc2l0PFQgZXh0ZW5kcyBNZW51ID0gTWVudT4oZGF0YTogVFtdLCBjYWxsYmFjazogKGl0ZW06IFQsIHBhcmVudE1lbnVtOiBUIHwgbnVsbCwgZGVwdGg/OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkO1xuICB2aXNpdChkYXRhOiBNZW51W10sIGNhbGxiYWNrOiAoaXRlbTogTWVudSwgcGFyZW50TWVudW06IE1lbnUgfCBudWxsLCBkZXB0aD86IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7XG4gIHZpc2l0KGRhdGE6IE1lbnVbXSwgY2FsbGJhY2s6IChpdGVtOiBNZW51LCBwYXJlbnRNZW51bTogTWVudSB8IG51bGwsIGRlcHRoPzogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgaW5GbiA9IChsaXN0OiBNZW51W10sIHBhcmVudE1lbnU6IE1lbnUgfCBudWxsLCBkZXB0aDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgICBjYWxsYmFjayhpdGVtLCBwYXJlbnRNZW51LCBkZXB0aCk7XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGluRm4oaXRlbS5jaGlsZHJlbiwgaXRlbSwgZGVwdGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaW5GbihkYXRhLCBudWxsLCAwKTtcbiAgfVxuXG4gIGFkZChpdGVtczogTWVudVtdKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhID0gaXRlbXM7XG4gICAgdGhpcy5yZXN1bWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZml4SXRlbShpdGVtOiBNZW51SW5uZXIpOiB2b2lkIHtcbiAgICBpdGVtLl9hY2xSZXN1bHQgPSB0cnVlO1xuXG4gICAgaWYgKCFpdGVtLmxpbmspIGl0ZW0ubGluayA9ICcnO1xuICAgIGlmICghaXRlbS5leHRlcm5hbExpbmspIGl0ZW0uZXh0ZXJuYWxMaW5rID0gJyc7XG5cbiAgICAvLyBiYWRnZVxuICAgIGlmIChpdGVtLmJhZGdlKSB7XG4gICAgICBpZiAoaXRlbS5iYWRnZURvdCAhPT0gdHJ1ZSkge1xuICAgICAgICBpdGVtLmJhZGdlRG90ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWl0ZW0uYmFkZ2VTdGF0dXMpIHtcbiAgICAgICAgaXRlbS5iYWRnZVN0YXR1cyA9ICdlcnJvcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICBpdGVtLmNoaWxkcmVuID0gW107XG4gICAgfVxuXG4gICAgLy8gaWNvblxuICAgIGlmICh0eXBlb2YgaXRlbS5pY29uID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IHR5cGUgPSAnY2xhc3MnO1xuICAgICAgbGV0IHZhbHVlID0gaXRlbS5pY29uO1xuICAgICAgLy8gY29tcGF0aWJsZSBgYW50aWNvbiBhbnRpY29uLXVzZXJgXG4gICAgICBpZiAofml0ZW0uaWNvbi5pbmRleE9mKGBhbnRpY29uLWApKSB7XG4gICAgICAgIHR5cGUgPSAnaWNvbic7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJy0nKS5zbGljZSgxKS5qb2luKCctJyk7XG4gICAgICB9IGVsc2UgaWYgKC9eaHR0cHM/OlxcL1xcLy8udGVzdChpdGVtLmljb24pKSB7XG4gICAgICAgIHR5cGUgPSAnaW1nJztcbiAgICAgIH1cbiAgICAgIGl0ZW0uaWNvbiA9IHsgdHlwZSwgdmFsdWUgfSBhcyBOelNhZmVBbnk7XG4gICAgfVxuICAgIGlmIChpdGVtLmljb24gIT0gbnVsbCkge1xuICAgICAgaXRlbS5pY29uID0geyB0aGVtZTogJ291dGxpbmUnLCBzcGluOiBmYWxzZSwgLi4uKGl0ZW0uaWNvbiBhcyBNZW51SWNvbikgfTtcbiAgICB9XG5cbiAgICBpdGVtLnRleHQgPSBpdGVtLmkxOG4gJiYgdGhpcy5pMThuU3J2ID8gdGhpcy5pMThuU3J2LmZhbnlpKGl0ZW0uaTE4bikgOiBpdGVtLnRleHQ7XG5cbiAgICAvLyBncm91cFxuICAgIGl0ZW0uZ3JvdXAgPSBpdGVtLmdyb3VwICE9PSBmYWxzZTtcblxuICAgIC8vIGhpZGRlblxuICAgIGl0ZW0uX2hpZGRlbiA9IHR5cGVvZiBpdGVtLmhpZGUgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBpdGVtLmhpZGU7XG5cbiAgICAvLyBkaXNhYmxlZFxuICAgIGl0ZW0uZGlzYWJsZWQgPSB0eXBlb2YgaXRlbS5kaXNhYmxlZCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGl0ZW0uZGlzYWJsZWQ7XG5cbiAgICAvLyBhY2xcbiAgICBpdGVtLl9hY2xSZXN1bHQgPSBpdGVtLmFjbCAmJiB0aGlzLmFjbFNlcnZpY2UgPyB0aGlzLmFjbFNlcnZpY2UuY2FuKGl0ZW0uYWNsKSA6IHRydWU7XG5cbiAgICBpdGVtLm9wZW4gPSBpdGVtLm9wZW4gIT0gbnVsbCA/IGl0ZW0ub3BlbiA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIOmHjee9ruiPnOWNle+8jOWPr+iDvUkxOE7jgIHnlKjmiLfmnYPpmZDlj5jliqjml7bpnIDopoHosIPnlKjliLfmlrBcbiAgICovXG4gIHJlc3VtZTxUIGV4dGVuZHMgTWVudSA9IE1lbnU+KGNhbGxiYWNrPzogKGl0ZW06IFQsIHBhcmVudE1lbnVtOiBUIHwgbnVsbCwgZGVwdGg/OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkO1xuICByZXN1bWUoY2FsbGJhY2s/OiAoaXRlbTogTWVudSwgcGFyZW50TWVudW06IE1lbnUgfCBudWxsLCBkZXB0aD86IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7XG4gIHJlc3VtZShjYWxsYmFjaz86IChpdGVtOiBNZW51LCBwYXJlbnRNZW51bTogTWVudSB8IG51bGwsIGRlcHRoPzogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGkgPSAxO1xuICAgIGNvbnN0IHNob3J0Y3V0czogTWVudVtdID0gW107XG4gICAgdGhpcy52aXNpdCh0aGlzLmRhdGEsIChpdGVtOiBNZW51SW5uZXIsIHBhcmVudCwgZGVwdGgpID0+IHtcbiAgICAgIGl0ZW0uX2lkID0gaSsrO1xuICAgICAgaXRlbS5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgaXRlbS5fZGVwdGggPSBkZXB0aDtcbiAgICAgIHRoaXMuZml4SXRlbShpdGVtKTtcblxuICAgICAgLy8gc2hvcnRjdXRcbiAgICAgIGlmIChwYXJlbnQgJiYgaXRlbS5zaG9ydGN1dCA9PT0gdHJ1ZSAmJiBwYXJlbnQuc2hvcnRjdXRSb290ICE9PSB0cnVlKSB7XG4gICAgICAgIHNob3J0Y3V0cy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGl0ZW0sIHBhcmVudCwgZGVwdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sb2FkU2hvcnRjdXQoc2hvcnRjdXRzKTtcbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQodGhpcy5kYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDliqDovb3lv6vmjbfoj5zljZXvvIzliqDovb3kvY3nva7op4TliJnlpoLkuIvvvJpcbiAgICogMeOAgee7n+S4gOWcqOS4i+aghzDnmoToioLngrnkuIvvvIjljbPjgJDkuLvlr7zoiKrjgJHoioLngrnkuIvmlrnvvIlcbiAgICogICAgICAx44CB6IulIGNoaWxkcmVuIOWtmOWcqCDjgJBzaG9ydGN1dFJvb3Q6IHRydWXjgJHliJnmnIDkvJjlhYjjgJDmjqjojZDjgJHov5nnp43mlrnlvI9cbiAgICogICAgICAy44CB5ZCm5YiZ5p+l5om+5bim5pyJ44CQZGFzaGJvYXJk44CR5a2X5qC36ZO+5o6l77yM6Iul5a2Y5Zyo5YiZ5Zyo5q2k6I+c5Y2V55qE5LiL5pa55Yib5bu65b+r5o235YWl5Y+jXG4gICAqICAgICAgM+OAgeWQpuWImeaUvuWcqDDoioLngrnkvY3nva5cbiAgICovXG4gIHByaXZhdGUgbG9hZFNob3J0Y3V0KHNob3J0Y3V0czogTWVudUlubmVyW10pOiB2b2lkIHtcbiAgICBpZiAoc2hvcnRjdXRzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbHMgPSB0aGlzLmRhdGFbMF0uY2hpbGRyZW4gYXMgTWVudUlubmVyW107XG4gICAgbGV0IHBvcyA9IGxzLmZpbmRJbmRleCh3ID0+IHcuc2hvcnRjdXRSb290ID09PSB0cnVlKTtcbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgcG9zID0gbHMuZmluZEluZGV4KHcgPT4gdy5saW5rIS5pbmNsdWRlcygnZGFzaGJvYXJkJykpO1xuICAgICAgcG9zID0gKHBvcyAhPT0gLTEgPyBwb3MgOiAtMSkgKyAxO1xuICAgICAgY29uc3Qgc2hvcnRjdXRNZW51ID0ge1xuICAgICAgICB0ZXh0OiAn5b+r5o236I+c5Y2VJyxcbiAgICAgICAgaTE4bjogJ3Nob3J0Y3V0JyxcbiAgICAgICAgaWNvbjogJ2ljb24tcm9ja2V0JyxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICB9IGFzIE1lbnVJbm5lcjtcbiAgICAgIHRoaXMuZGF0YVswXS5jaGlsZHJlbiEuc3BsaWNlKHBvcywgMCwgc2hvcnRjdXRNZW51KTtcbiAgICB9XG4gICAgbGV0IF9kYXRhID0gdGhpcy5kYXRhWzBdLmNoaWxkcmVuIVtwb3NdO1xuICAgIGlmIChfZGF0YS5pMThuICYmIHRoaXMuaTE4blNydikgX2RhdGEudGV4dCA9IHRoaXMuaTE4blNydi5mYW55aShfZGF0YS5pMThuKTtcbiAgICBfZGF0YSA9IE9iamVjdC5hc3NpZ24oX2RhdGEsIHtcbiAgICAgIHNob3J0Y3V0Um9vdDogdHJ1ZSxcbiAgICAgIF9pZDogLTEsXG4gICAgICBfcGFyZW50OiBudWxsLFxuICAgICAgX2RlcHRoOiAxXG4gICAgfSBhcyBNZW51SW5uZXIpO1xuICAgIF9kYXRhLmNoaWxkcmVuID0gc2hvcnRjdXRzLm1hcChpID0+IHtcbiAgICAgIGkuX2RlcHRoID0gMjtcbiAgICAgIGkuX3BhcmVudCA9IF9kYXRhO1xuICAgICAgcmV0dXJuIGk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5riF56m66I+c5Y2VXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQodGhpcy5kYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgYHVybGAgb3IgYGtleWAgdG8gZmluZCBtZW51c1xuICAgKlxuICAgKiDliKnnlKggYHVybGAg5oiWIGBrZXlgIOafpeaJvuiPnOWNlVxuICAgKi9cbiAgZmluZChvcHRpb25zOiB7XG4gICAga2V5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICB1cmw/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlY3Vyc2l2ZT86IGJvb2xlYW4gfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMgYSBCb29sZWFuIHR5cGUsIGl0IG1lYW5zIHRoZSBjdXN0b20gdmFsaWRhdGlvbiByZXN1bHRcbiAgICAgKlxuICAgICAqIOW9k+Wbnuiwg+i/lOWbnuS4gOS4quW4g+WwlOexu+Wei+aXtu+8jOihqOekuuiHquWumuS5ieagoemqjOe7k+aenFxuICAgICAqL1xuICAgIGNiPzogKChpOiBNZW51KSA9PiBib29sZWFuIHwgbnVsbCkgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFVzZSB0aGUgY3VycmVudCBtZW51IGRhdGEgYnkgZGVmYXVsdFxuICAgICAqXG4gICAgICog6buY6K6k5L2/55So5b2T5YmN6I+c5Y2V5pWw5o2uXG4gICAgICovXG4gICAgZGF0YT86IE1lbnVbXSB8IG51bGw7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBpZ25vcmUgaGlkZSBpdGVtcywgZGVmYXVsdDogYGZhbHNlYFxuICAgICAqXG4gICAgICog5piv5ZCm5b+955Wl6ZqQ6JeP55qE6aG577yM6buY6K6k77yaYGZhbHNlYFxuICAgICAqL1xuICAgIGlnbm9yZUhpZGU/OiBib29sZWFuO1xuICB9KTogTWVudSB8IG51bGwge1xuICAgIGNvbnN0IG9wdCA9IHsgcmVjdXJzaXZlOiBmYWxzZSwgaWdub3JlSGlkZTogZmFsc2UsIC4uLm9wdGlvbnMgfTtcbiAgICBpZiAob3B0LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtKG9wdC5rZXkpO1xuICAgIH1cblxuICAgIGxldCB1cmwgPSBvcHQudXJsO1xuXG4gICAgbGV0IGl0ZW06IE1lbnUgfCBudWxsID0gbnVsbDtcblxuICAgIHdoaWxlICghaXRlbSAmJiB1cmwpIHtcbiAgICAgIHRoaXMudmlzaXQob3B0LmRhdGEgPz8gdGhpcy5kYXRhLCBpID0+IHtcbiAgICAgICAgaWYgKG9wdC5pZ25vcmVIaWRlICYmIGkuaGlkZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0LmNiKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gb3B0LmNiKGkpO1xuICAgICAgICAgIGlmICghaXRlbSAmJiB0eXBlb2YgcmVzID09PSAnYm9vbGVhbicgJiYgcmVzKSB7XG4gICAgICAgICAgICBpdGVtID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkubGluayAhPSBudWxsICYmIGkubGluayA9PT0gdXJsKSB7XG4gICAgICAgICAgaXRlbSA9IGk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW9wdC5yZWN1cnNpdmUpIGJyZWFrO1xuXG4gICAgICBpZiAoL1s/O10vZy50ZXN0KHVybCkpIHtcbiAgICAgICAgdXJsID0gdXJsLnNwbGl0KC9bPztdL2cpWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gdXJsLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja51cmzojrflj5boj5zljZXliJfooahcbiAgICogLSDoi6UgYHJlY3Vyc2l2ZTogdHJ1ZWAg5YiZ5Lya6Ieq5Yqo5ZCR5LiK6YCS5b2S5p+l5om+XG4gICAqICAtIOiPnOWNleaVsOaNrua6kOWMheWQqyBgL3dhcmVg77yM5YiZIGAvd2FyZS8xYCDkuZ/op4bkuLogYC93YXJlYCDpoblcbiAgICovXG4gIGdldFBhdGhCeVVybCh1cmw6IHN0cmluZywgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2UpOiBNZW51W10ge1xuICAgIGNvbnN0IHJldDogTWVudVtdID0gW107XG4gICAgbGV0IGl0ZW0gPSB0aGlzLmZpbmQoeyB1cmwsIHJlY3Vyc2l2ZSB9KSBhcyBNZW51SW5uZXI7XG5cbiAgICBpZiAoIWl0ZW0pIHJldHVybiByZXQ7XG5cbiAgICBkbyB7XG4gICAgICByZXQuc3BsaWNlKDAsIDAsIGl0ZW0pO1xuICAgICAgaXRlbSA9IGl0ZW0uX3BhcmVudCE7XG4gICAgfSB3aGlsZSAoaXRlbSk7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtZW51IGJhc2VkIG9uIGBrZXlgXG4gICAqL1xuICBnZXRJdGVtKGtleTogc3RyaW5nKTogTWVudSB8IG51bGwge1xuICAgIGxldCByZXM6IE1lbnUgfCBudWxsID0gbnVsbDtcbiAgICB0aGlzLnZpc2l0KHRoaXMuZGF0YSwgaXRlbSA9PiB7XG4gICAgICBpZiAocmVzID09IG51bGwgJiYgaXRlbS5rZXkgPT09IGtleSkge1xuICAgICAgICByZXMgPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1lbnUgYmFzZWQgb24gYGtleWBcbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcgfCBNZW51LCB2YWx1ZTogTWVudSwgb3B0aW9ucz86IHsgZW1pdD86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IHRoaXMuZ2V0SXRlbShrZXkpIDoga2V5O1xuICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcblxuICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgaXRlbVtrXSA9IHZhbHVlW2tdO1xuICAgIH0pO1xuICAgIHRoaXMuZml4SXRlbShpdGVtKTtcblxuICAgIGlmIChvcHRpb25zPy5lbWl0ICE9PSBmYWxzZSkgdGhpcy5fY2hhbmdlJC5uZXh0KHRoaXMuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBtZW51IGJhc2VkIG9uIGBrZXlgIG9yIG1lbnUgb2JqZWN0XG4gICAqL1xuICBvcGVuKGtleU9ySXRlbTogc3RyaW5nIHwgTWVudSB8IG51bGwsIG9wdGlvbnM/OiB7IGVtaXQ/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBsZXQgaXRlbSA9IHR5cGVvZiBrZXlPckl0ZW0gPT09ICdzdHJpbmcnID8gdGhpcy5maW5kKHsga2V5OiBrZXlPckl0ZW0gfSkgOiBrZXlPckl0ZW07XG4gICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgdGhpcy52aXNpdCh0aGlzLm1lbnVzLCAoaTogTWVudUlubmVyKSA9PiB7XG4gICAgICBpLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgaWYgKCF0aGlzLm9wZW5TdHJpY3RseSkgaS5vcGVuID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBkbyB7XG4gICAgICBpdGVtLl9zZWxlY3RlZCA9IHRydWU7XG4gICAgICBpdGVtLm9wZW4gPSB0cnVlO1xuICAgICAgaXRlbSA9IGl0ZW0uX3BhcmVudDtcbiAgICB9IHdoaWxlIChpdGVtKTtcbiAgICBpZiAob3B0aW9ucz8uZW1pdCAhPT0gZmFsc2UpIHRoaXMuX2NoYW5nZSQubmV4dCh0aGlzLmRhdGEpO1xuICB9XG5cbiAgb3BlbkFsbChzdGF0dXM/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVPcGVuKG51bGwsIHsgYWxsU3RhdHVzOiBzdGF0dXMgfSk7XG4gIH1cblxuICB0b2dnbGVPcGVuKGtleU9ySXRlbTogc3RyaW5nIHwgTWVudSB8IG51bGwsIG9wdGlvbnM/OiB7IGFsbFN0YXR1cz86IGJvb2xlYW47IGVtaXQ/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBsZXQgaXRlbSA9IHR5cGVvZiBrZXlPckl0ZW0gPT09ICdzdHJpbmcnID8gdGhpcy5maW5kKHsga2V5OiBrZXlPckl0ZW0gfSkgOiBrZXlPckl0ZW07XG4gICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xuICAgICAgdGhpcy52aXNpdCh0aGlzLm1lbnVzLCAoaTogTWVudUlubmVyKSA9PiB7XG4gICAgICAgIGkuX3NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGkub3BlbiA9IG9wdGlvbnM/LmFsbFN0YXR1cyA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMub3BlblN0cmljdGx5KSB7XG4gICAgICAgIHRoaXMudmlzaXQodGhpcy5tZW51cywgKGk6IE1lbnVJbm5lcikgPT4ge1xuICAgICAgICAgIGlmIChpICE9PSBpdGVtKSBpLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBwSXRlbSA9IGl0ZW0uX3BhcmVudDtcbiAgICAgICAgd2hpbGUgKHBJdGVtKSB7XG4gICAgICAgICAgcEl0ZW0ub3BlbiA9IHRydWU7XG4gICAgICAgICAgcEl0ZW0gPSBwSXRlbS5fcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpdGVtLm9wZW4gPSAhaXRlbS5vcGVuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uZW1pdCAhPT0gZmFsc2UpIHRoaXMuX2NoYW5nZSQubmV4dCh0aGlzLmRhdGEpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbmdlJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaTE4biQudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,107 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { deepMerge } from '@delon/util/other';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ng-zorro-antd/modal";
6
+ /**
7
+ * 对话框辅助类
8
+ */
9
+ class ModalHelper {
10
+ constructor(srv) {
11
+ this.srv = srv;
12
+ }
13
+ /**
14
+ * 构建一个对话框
15
+ *
16
+ * @param comp 组件
17
+ * @param params 组件参数
18
+ * @param options 额外参数
19
+ *
20
+ * @example
21
+ * this.modalHelper.create(FormEditComponent, { i }).subscribe(res => this.load());
22
+ * // 对于组件的成功&关闭的处理说明
23
+ * // 成功,其中 `nzModalRef` 指目标组件在构造函数 `NzModalRef` 变量名
24
+ * this.nzModalRef.close(data);
25
+ * this.nzModalRef.close();
26
+ * // 关闭
27
+ * this.nzModalRef.destroy();
28
+ */
29
+ create(comp, params, options) {
30
+ options = deepMerge({
31
+ size: 'lg',
32
+ exact: true,
33
+ includeTabs: false
34
+ }, options);
35
+ return new Observable((observer) => {
36
+ const { size, includeTabs, modalOptions } = options;
37
+ let cls = '';
38
+ let width = '';
39
+ if (size) {
40
+ if (typeof size === 'number') {
41
+ width = `${size}px`;
42
+ }
43
+ else {
44
+ cls = `modal-${size}`;
45
+ }
46
+ }
47
+ if (includeTabs) {
48
+ cls += ' modal-include-tabs';
49
+ }
50
+ if (modalOptions && modalOptions.nzWrapClassName) {
51
+ cls += ` ${modalOptions.nzWrapClassName}`;
52
+ delete modalOptions.nzWrapClassName;
53
+ }
54
+ const defaultOptions = {
55
+ nzWrapClassName: cls,
56
+ nzContent: comp,
57
+ nzWidth: width ? width : undefined,
58
+ nzFooter: null,
59
+ nzComponentParams: params
60
+ };
61
+ const subject = this.srv.create({ ...defaultOptions, ...modalOptions });
62
+ const afterClose$ = subject.afterClose.subscribe((res) => {
63
+ if (options.exact === true) {
64
+ if (res != null) {
65
+ observer.next(res);
66
+ }
67
+ }
68
+ else {
69
+ observer.next(res);
70
+ }
71
+ observer.complete();
72
+ afterClose$.unsubscribe();
73
+ });
74
+ });
75
+ }
76
+ /**
77
+ * 构建静态框,点击蒙层不允许关闭
78
+ *
79
+ * @param comp 组件
80
+ * @param params 组件参数
81
+ * @param options 额外参数
82
+ *
83
+ * @example
84
+ * this.modalHelper.open(FormEditComponent, { i }).subscribe(res => this.load());
85
+ * // 对于组件的成功&关闭的处理说明
86
+ * // 成功,其中 `nzModalRef` 指目标组件在构造函数 `NzModalRef` 变量名
87
+ * this.nzModalRef.close(data);
88
+ * this.nzModalRef.close();
89
+ * // 关闭
90
+ * this.nzModalRef.destroy();
91
+ */
92
+ createStatic(comp, params, options) {
93
+ const modalOptions = {
94
+ nzMaskClosable: false,
95
+ ...(options && options.modalOptions)
96
+ };
97
+ return this.create(comp, params, { ...options, modalOptions });
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ModalHelper, deps: [{ token: i1.NzModalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
100
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ModalHelper, providedIn: 'root' }); }
101
+ }
102
+ export { ModalHelper };
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ModalHelper, decorators: [{
104
+ type: Injectable,
105
+ args: [{ providedIn: 'root' }]
106
+ }], ctorParameters: function () { return [{ type: i1.NzModalService }]; } });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUvc3JjL3NlcnZpY2VzL21vZGFsL21vZGFsLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBZTlDOztHQUVHO0FBQ0gsTUFDYSxXQUFXO0lBQ3RCLFlBQW9CLEdBQW1CO1FBQW5CLFFBQUcsR0FBSCxHQUFHLENBQWdCO0lBQUcsQ0FBQztJQUUzQzs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxNQUFNLENBQ0osSUFBOEMsRUFDOUMsTUFBa0IsRUFDbEIsT0FBNEI7UUFFNUIsT0FBTyxHQUFHLFNBQVMsQ0FDakI7WUFDRSxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLEtBQUs7U0FDbkIsRUFDRCxPQUFPLENBQ1IsQ0FBQztRQUNGLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUE2QixFQUFFLEVBQUU7WUFDdEQsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBNkIsQ0FBQztZQUMxRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDNUIsS0FBSyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7aUJBQ3JCO3FCQUFNO29CQUNMLEdBQUcsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDO2lCQUN2QjthQUNGO1lBQ0QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsR0FBRyxJQUFJLHFCQUFxQixDQUFDO2FBQzlCO1lBQ0QsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLGVBQWUsRUFBRTtnQkFDaEQsR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLFlBQVksQ0FBQyxlQUFlLENBQUM7YUFDckM7WUFDRCxNQUFNLGNBQWMsR0FBaUI7Z0JBQ25DLGVBQWUsRUFBRSxHQUFHO2dCQUNwQixTQUFTLEVBQUUsSUFBSTtnQkFDZixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2xDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGlCQUFpQixFQUFFLE1BQU07YUFDMUIsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7Z0JBQ2xFLElBQUksT0FBUSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQzNCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTt3QkFDZixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNwQjtpQkFDRjtxQkFBTTtvQkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtnQkFDRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILFlBQVksQ0FDVixJQUE4QyxFQUM5QyxNQUFrQixFQUNsQixPQUE0QjtRQUU1QixNQUFNLFlBQVksR0FBRztZQUNuQixjQUFjLEVBQUUsS0FBSztZQUNyQixHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUM7U0FDckMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDOzhHQWxHVSxXQUFXO2tIQUFYLFdBQVcsY0FERSxNQUFNOztTQUNuQixXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJ0BkZWxvbi91dGlsL290aGVyJztcbmltcG9ydCB0eXBlIHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE1vZGFsT3B0aW9ucywgTnpNb2RhbFNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL21vZGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBNb2RhbEhlbHBlck9wdGlvbnMge1xuICAvKiog5aSn5bCP77yb5L6L5aaC77yabGfjgIE2MDDvvIzpu5jorqTvvJpgbGdgICovXG4gIHNpemU/OiAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJycgfCBudW1iZXI7XG4gIC8qKiDlr7nor53moYYgW01vZGFsT3B0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvY29tcG9uZW50cy9tb2RhbC9tb2RhbC10eXBlcy50cykg5Y+C5pWwICovXG4gIG1vZGFsT3B0aW9ucz86IE1vZGFsT3B0aW9ucztcbiAgLyoqIOaYr+WQpueyvuWHhu+8iOm7mOiupO+8mmB0cnVlYO+8ie+8jOiLpei/lOWbnuWAvOmdnuepuuWAvO+8iGBudWxsYOaIlmB1bmRlZmluZWRg77yJ6KeG5Li65oiQ5Yqf77yM5ZCm5YiZ6KeG5Li66ZSZ6K+vICovXG4gIGV4YWN0PzogYm9vbGVhbjtcbiAgLyoqIOaYr+WQpuWMheijueagh+etvumhte+8jOS/ruWkjeaooeaAgeWMheWQq+agh+etvumXtOi3nemXrumimCAqL1xuICBpbmNsdWRlVGFicz86IGJvb2xlYW47XG59XG5cbi8qKlxuICog5a+56K+d5qGG6L6F5Yqp57G7XG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTW9kYWxIZWxwZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNydjogTnpNb2RhbFNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIOaehOW7uuS4gOS4quWvueivneahhlxuICAgKlxuICAgKiBAcGFyYW0gY29tcCDnu4Tku7ZcbiAgICogQHBhcmFtIHBhcmFtcyDnu4Tku7blj4LmlbBcbiAgICogQHBhcmFtIG9wdGlvbnMg6aKd5aSW5Y+C5pWwXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMubW9kYWxIZWxwZXIuY3JlYXRlKEZvcm1FZGl0Q29tcG9uZW50LCB7IGkgfSkuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmxvYWQoKSk7XG4gICAqIC8vIOWvueS6jue7hOS7tueahOaIkOWKnyblhbPpl63nmoTlpITnkIbor7TmmI5cbiAgICogLy8g5oiQ5Yqf77yM5YW25LitIGBuek1vZGFsUmVmYCDmjIfnm67moIfnu4Tku7blnKjmnoTpgKDlh73mlbAgYE56TW9kYWxSZWZgIOWPmOmHj+WQjVxuICAgKiB0aGlzLm56TW9kYWxSZWYuY2xvc2UoZGF0YSk7XG4gICAqIHRoaXMubnpNb2RhbFJlZi5jbG9zZSgpO1xuICAgKiAvLyDlhbPpl61cbiAgICogdGhpcy5uek1vZGFsUmVmLmRlc3Ryb3koKTtcbiAgICovXG4gIGNyZWF0ZShcbiAgICBjb21wOiBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgVHlwZTxOelNhZmVBbnk+LFxuICAgIHBhcmFtcz86IE56U2FmZUFueSxcbiAgICBvcHRpb25zPzogTW9kYWxIZWxwZXJPcHRpb25zXG4gICk6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gICAgb3B0aW9ucyA9IGRlZXBNZXJnZShcbiAgICAgIHtcbiAgICAgICAgc2l6ZTogJ2xnJyxcbiAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgIGluY2x1ZGVUYWJzOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPE56U2FmZUFueT4pID0+IHtcbiAgICAgIGNvbnN0IHsgc2l6ZSwgaW5jbHVkZVRhYnMsIG1vZGFsT3B0aW9ucyB9ID0gb3B0aW9ucyBhcyBNb2RhbEhlbHBlck9wdGlvbnM7XG4gICAgICBsZXQgY2xzID0gJyc7XG4gICAgICBsZXQgd2lkdGggPSAnJztcbiAgICAgIGlmIChzaXplKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB3aWR0aCA9IGAke3NpemV9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNscyA9IGBtb2RhbC0ke3NpemV9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVUYWJzKSB7XG4gICAgICAgIGNscyArPSAnIG1vZGFsLWluY2x1ZGUtdGFicyc7XG4gICAgICB9XG4gICAgICBpZiAobW9kYWxPcHRpb25zICYmIG1vZGFsT3B0aW9ucy5ueldyYXBDbGFzc05hbWUpIHtcbiAgICAgICAgY2xzICs9IGAgJHttb2RhbE9wdGlvbnMubnpXcmFwQ2xhc3NOYW1lfWA7XG4gICAgICAgIGRlbGV0ZSBtb2RhbE9wdGlvbnMubnpXcmFwQ2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnM6IE1vZGFsT3B0aW9ucyA9IHtcbiAgICAgICAgbnpXcmFwQ2xhc3NOYW1lOiBjbHMsXG4gICAgICAgIG56Q29udGVudDogY29tcCxcbiAgICAgICAgbnpXaWR0aDogd2lkdGggPyB3aWR0aCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbnpGb290ZXI6IG51bGwsXG4gICAgICAgIG56Q29tcG9uZW50UGFyYW1zOiBwYXJhbXNcbiAgICAgIH07XG4gICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5zcnYuY3JlYXRlKHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm1vZGFsT3B0aW9ucyB9KTtcbiAgICAgIGNvbnN0IGFmdGVyQ2xvc2UkID0gc3ViamVjdC5hZnRlckNsb3NlLnN1YnNjcmliZSgocmVzOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMhLmV4YWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzKTtcbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICBhZnRlckNsb3NlJC51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5p6E5bu66Z2Z5oCB5qGG77yM54K55Ye76JKZ5bGC5LiN5YWB6K645YWz6ZetXG4gICAqXG4gICAqIEBwYXJhbSBjb21wIOe7hOS7tlxuICAgKiBAcGFyYW0gcGFyYW1zIOe7hOS7tuWPguaVsFxuICAgKiBAcGFyYW0gb3B0aW9ucyDpop3lpJblj4LmlbBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5tb2RhbEhlbHBlci5vcGVuKEZvcm1FZGl0Q29tcG9uZW50LCB7IGkgfSkuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmxvYWQoKSk7XG4gICAqIC8vIOWvueS6jue7hOS7tueahOaIkOWKnyblhbPpl63nmoTlpITnkIbor7TmmI5cbiAgICogLy8g5oiQ5Yqf77yM5YW25LitIGBuek1vZGFsUmVmYCDmjIfnm67moIfnu4Tku7blnKjmnoTpgKDlh73mlbAgYE56TW9kYWxSZWZgIOWPmOmHj+WQjVxuICAgKiB0aGlzLm56TW9kYWxSZWYuY2xvc2UoZGF0YSk7XG4gICAqIHRoaXMubnpNb2RhbFJlZi5jbG9zZSgpO1xuICAgKiAvLyDlhbPpl61cbiAgICogdGhpcy5uek1vZGFsUmVmLmRlc3Ryb3koKTtcbiAgICovXG4gIGNyZWF0ZVN0YXRpYyhcbiAgICBjb21wOiBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgVHlwZTxOelNhZmVBbnk+LFxuICAgIHBhcmFtcz86IE56U2FmZUFueSxcbiAgICBvcHRpb25zPzogTW9kYWxIZWxwZXJPcHRpb25zXG4gICk6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gICAgY29uc3QgbW9kYWxPcHRpb25zID0ge1xuICAgICAgbnpNYXNrQ2xvc2FibGU6IGZhbHNlLFxuICAgICAgLi4uKG9wdGlvbnMgJiYgb3B0aW9ucy5tb2RhbE9wdGlvbnMpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoY29tcCwgcGFyYW1zLCB7IC4uLm9wdGlvbnMsIG1vZGFsT3B0aW9ucyB9KTtcbiAgfVxufVxuIl19