@ts-core/angular 15.0.60 → 17.0.10

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 (239) hide show
  1. package/asset/AssetBackgroundDirective.d.ts +1 -1
  2. package/cookie/CookieService.d.ts +1 -3
  3. package/directive/AspectRatioResizeDirective.d.ts +1 -1
  4. package/directive/AutoScrollBottomDirective.d.ts +1 -1
  5. package/directive/ClickToCopyDirective.d.ts +1 -1
  6. package/directive/FocusDirective.d.ts +1 -1
  7. package/directive/HTMLContentTitleDirective.d.ts +1 -1
  8. package/directive/HTMLTitleDirective.d.ts +1 -1
  9. package/directive/InfiniteScrollDirective.d.ts +1 -1
  10. package/directive/ResizeDirective.d.ts +1 -1
  11. package/directive/ScrollCheckDirective.d.ts +1 -1
  12. package/directive/ScrollDirective.d.ts +1 -1
  13. package/esm2022/VIModule.mjs +190 -0
  14. package/esm2022/application/ApplicationBaseComponent.mjs +96 -0
  15. package/esm2022/application/ApplicationComponent.mjs +64 -0
  16. package/esm2022/application/MessageBaseComponent.mjs +60 -0
  17. package/esm2022/asset/AssetBackgroundDirective.mjs +152 -0
  18. package/{esm2020 → esm2022}/asset/AssetBackgroundPipe.mjs +4 -4
  19. package/{esm2020 → esm2022}/asset/AssetFilePipe.mjs +4 -4
  20. package/{esm2020 → esm2022}/asset/AssetIconPipe.mjs +4 -4
  21. package/{esm2020 → esm2022}/asset/AssetImagePipe.mjs +4 -4
  22. package/{esm2020 → esm2022}/asset/AssetModule.mjs +5 -5
  23. package/{esm2020 → esm2022}/asset/AssetSoundPipe.mjs +4 -4
  24. package/{esm2020 → esm2022}/asset/AssetVideoPipe.mjs +4 -4
  25. package/{esm2020 → esm2022}/cookie/CookieModule.mjs +5 -5
  26. package/{esm2020 → esm2022}/cookie/CookieOptions.mjs +7 -1
  27. package/esm2022/cookie/CookieService.mjs +71 -0
  28. package/esm2022/directive/AspectRatioResizeDirective.mjs +134 -0
  29. package/esm2022/directive/AutoScrollBottomDirective.mjs +122 -0
  30. package/esm2022/directive/ClickToCopyDirective.mjs +53 -0
  31. package/esm2022/directive/ClickToSelectDirective.mjs +55 -0
  32. package/esm2022/directive/FocusDirective.mjs +60 -0
  33. package/esm2022/directive/HTMLContentTitleDirective.mjs +74 -0
  34. package/esm2022/directive/HTMLTitleDirective.mjs +73 -0
  35. package/esm2022/directive/InfiniteScrollDirective.mjs +71 -0
  36. package/{esm2020 → esm2022}/directive/IsBrowserDirective.mjs +5 -5
  37. package/{esm2020 → esm2022}/directive/IsServerDirective.mjs +5 -5
  38. package/esm2022/directive/ResizeDirective.mjs +80 -0
  39. package/esm2022/directive/ScrollCheckDirective.mjs +104 -0
  40. package/esm2022/directive/ScrollDirective.mjs +120 -0
  41. package/esm2022/directive/SelectOnFocusDirective.mjs +48 -0
  42. package/esm2022/directive/StructureDirective.mjs +80 -0
  43. package/esm2022/language/LanguageDirective.mjs +102 -0
  44. package/esm2022/language/LanguageHasDirective.mjs +87 -0
  45. package/{esm2020 → esm2022}/language/LanguageModule.mjs +5 -5
  46. package/esm2022/language/LanguagePipe.mjs +88 -0
  47. package/esm2022/language/LanguagePipeHas.mjs +64 -0
  48. package/esm2022/language/LanguagePipeHasPure.mjs +41 -0
  49. package/esm2022/language/LanguagePipePure.mjs +40 -0
  50. package/esm2022/language/LanguageRequireResolver.mjs +37 -0
  51. package/{esm2020 → esm2022}/language/LanguageResolver.mjs +5 -5
  52. package/esm2022/list/ListItem.mjs +148 -0
  53. package/esm2022/list/ListItems.mjs +107 -0
  54. package/esm2022/list/select/RouterSelectListItems.mjs +60 -0
  55. package/esm2022/list/select/SelectListItem.mjs +67 -0
  56. package/esm2022/list/select/SelectListItems.mjs +130 -0
  57. package/esm2022/login/LoginBaseService.mjs +191 -0
  58. package/esm2022/login/LoginGuard.mjs +41 -0
  59. package/esm2022/login/LoginIfCanGuard.mjs +55 -0
  60. package/esm2022/login/LoginNotGuard.mjs +41 -0
  61. package/esm2022/login/LoginRequireResolver.mjs +40 -0
  62. package/{esm2020 → esm2022}/login/LoginResolver.mjs +6 -6
  63. package/esm2022/login/LoginTokenStorage.mjs +18 -0
  64. package/esm2022/manager/FocusManager.mjs +54 -0
  65. package/esm2022/manager/ResizeManager.mjs +90 -0
  66. package/esm2022/menu/MenuItem.mjs +20 -0
  67. package/esm2022/menu/MenuItemBase.mjs +56 -0
  68. package/esm2022/menu/MenuItems.mjs +111 -0
  69. package/esm2022/menu/NavigationMenuItem.mjs +20 -0
  70. package/esm2022/module/LazyModuleLoader.mjs +97 -0
  71. package/esm2022/notification/INotification.mjs +16 -0
  72. package/esm2022/notification/INotificationContent.mjs +141 -0
  73. package/esm2022/notification/NotificationConfig.mjs +27 -0
  74. package/{esm2020 → esm2022}/pipe/CamelCasePipe.mjs +4 -4
  75. package/esm2022/pipe/FinancePipe.mjs +53 -0
  76. package/esm2022/pipe/MomentDateAdaptivePipe.mjs +51 -0
  77. package/{esm2020 → esm2022}/pipe/MomentDateFromNowPipe.mjs +4 -4
  78. package/esm2022/pipe/MomentDatePipe.mjs +71 -0
  79. package/esm2022/pipe/MomentTimePipe.mjs +35 -0
  80. package/esm2022/pipe/NgModelErrorPipe.mjs +43 -0
  81. package/esm2022/pipe/PrettifyPipe.mjs +38 -0
  82. package/esm2022/pipe/SanitizePipe.mjs +48 -0
  83. package/{esm2020 → esm2022}/pipe/StartCasePipe.mjs +4 -4
  84. package/esm2022/pipe/TimePipe.mjs +38 -0
  85. package/{esm2020 → esm2022}/pipe/TruncatePipe.mjs +4 -4
  86. package/esm2022/public-api.mjs +138 -0
  87. package/esm2022/question/QuestionManager.mjs +107 -0
  88. package/esm2022/service/PipeBaseService.mjs +140 -0
  89. package/esm2022/service/PlatformService.mjs +45 -0
  90. package/esm2022/service/RouterBaseService.mjs +236 -0
  91. package/esm2022/storage/DateValueStorage.mjs +46 -0
  92. package/esm2022/storage/LocalStorageService.mjs +58 -0
  93. package/esm2022/storage/ValueStorage.mjs +75 -0
  94. package/{esm2020 → esm2022}/theme/ThemeAssetBackgroundDirective.mjs +5 -5
  95. package/esm2022/theme/ThemeAssetDirective.mjs +251 -0
  96. package/{esm2020 → esm2022}/theme/ThemeAssetIconDirective.mjs +5 -5
  97. package/{esm2020 → esm2022}/theme/ThemeAssetImageDirective.mjs +5 -5
  98. package/{esm2020 → esm2022}/theme/ThemeModule.mjs +15 -15
  99. package/esm2022/theme/ThemeStyleDirective.mjs +125 -0
  100. package/esm2022/theme/ThemeStyleHoverDirective.mjs +107 -0
  101. package/esm2022/theme/ThemeToggleDirective.mjs +63 -0
  102. package/esm2022/transport/TransportLazy.mjs +93 -0
  103. package/esm2022/transport/TransportLazyModule.mjs +30 -0
  104. package/esm2022/transport/TransportLazyModuleLoadedEvent.mjs +18 -0
  105. package/esm2022/user/IUser.mjs +9 -0
  106. package/esm2022/user/UserBaseService.mjs +124 -0
  107. package/esm2022/util/ViewUtil.mjs +589 -0
  108. package/esm2022/window/IWindow.mjs +31 -0
  109. package/esm2022/window/IWindowContent.mjs +142 -0
  110. package/esm2022/window/WindowBase.mjs +177 -0
  111. package/esm2022/window/WindowClosedError.mjs +19 -0
  112. package/esm2022/window/WindowConfig.mjs +218 -0
  113. package/{fesm2020 → fesm2022}/ts-core-angular.mjs +1118 -958
  114. package/fesm2022/ts-core-angular.mjs.map +1 -0
  115. package/language/LanguageDirective.d.ts +1 -1
  116. package/language/LanguageHasDirective.d.ts +1 -1
  117. package/module/LazyModuleLoader.d.ts +1 -1
  118. package/notification/INotificationContent.d.ts +1 -1
  119. package/notification/NotificationConfig.d.ts +1 -1
  120. package/notification/NotificationService.d.ts +1 -1
  121. package/package.json +19 -26
  122. package/pipe/MomentDatePipe.d.ts +1 -1
  123. package/public-api.d.ts +0 -2
  124. package/theme/ThemeAssetBackgroundDirective.d.ts +1 -1
  125. package/theme/ThemeAssetDirective.d.ts +1 -1
  126. package/theme/ThemeAssetIconDirective.d.ts +1 -1
  127. package/theme/ThemeAssetImageDirective.d.ts +1 -1
  128. package/theme/ThemeStyleDirective.d.ts +1 -1
  129. package/theme/ThemeStyleHoverDirective.d.ts +1 -1
  130. package/user/IUser.d.ts +1 -1
  131. package/util/ViewUtil.d.ts +1 -1
  132. package/window/IWindowContent.d.ts +2 -2
  133. package/window/WindowConfig.d.ts +1 -1
  134. package/window/WindowService.d.ts +1 -1
  135. package/esm2020/VIModule.mjs +0 -187
  136. package/esm2020/application/ApplicationBaseComponent.mjs +0 -88
  137. package/esm2020/application/ApplicationComponent.mjs +0 -58
  138. package/esm2020/application/MessageBaseComponent.mjs +0 -52
  139. package/esm2020/asset/AssetBackgroundDirective.mjs +0 -150
  140. package/esm2020/cookie/CookieService.mjs +0 -79
  141. package/esm2020/directive/AspectRatioResizeDirective.mjs +0 -131
  142. package/esm2020/directive/AutoScrollBottomDirective.mjs +0 -122
  143. package/esm2020/directive/ClickToCopyDirective.mjs +0 -49
  144. package/esm2020/directive/ClickToSelectDirective.mjs +0 -49
  145. package/esm2020/directive/FocusDirective.mjs +0 -54
  146. package/esm2020/directive/HTMLContentTitleDirective.mjs +0 -67
  147. package/esm2020/directive/HTMLTitleDirective.mjs +0 -66
  148. package/esm2020/directive/InfiniteScrollDirective.mjs +0 -74
  149. package/esm2020/directive/ResizeDirective.mjs +0 -79
  150. package/esm2020/directive/ScrollCheckDirective.mjs +0 -102
  151. package/esm2020/directive/ScrollDirective.mjs +0 -118
  152. package/esm2020/directive/SelectOnFocusDirective.mjs +0 -47
  153. package/esm2020/directive/StructureDirective.mjs +0 -71
  154. package/esm2020/form/FormElementAsync.mjs +0 -27
  155. package/esm2020/form/FormElementSync.mjs +0 -69
  156. package/esm2020/form/ValueAccessor.mjs +0 -62
  157. package/esm2020/form/validate.mjs +0 -59
  158. package/esm2020/language/LanguageDirective.mjs +0 -92
  159. package/esm2020/language/LanguageHasDirective.mjs +0 -80
  160. package/esm2020/language/LanguagePipe.mjs +0 -78
  161. package/esm2020/language/LanguagePipeHas.mjs +0 -56
  162. package/esm2020/language/LanguagePipeHasPure.mjs +0 -40
  163. package/esm2020/language/LanguagePipePure.mjs +0 -39
  164. package/esm2020/language/LanguageRequireResolver.mjs +0 -36
  165. package/esm2020/list/ListItem.mjs +0 -134
  166. package/esm2020/list/ListItems.mjs +0 -97
  167. package/esm2020/list/select/RouterSelectListItems.mjs +0 -53
  168. package/esm2020/list/select/SelectListItem.mjs +0 -59
  169. package/esm2020/list/select/SelectListItems.mjs +0 -121
  170. package/esm2020/login/LoginBaseService.mjs +0 -184
  171. package/esm2020/login/LoginGuard.mjs +0 -40
  172. package/esm2020/login/LoginIfCanGuard.mjs +0 -54
  173. package/esm2020/login/LoginNotGuard.mjs +0 -40
  174. package/esm2020/login/LoginRequireResolver.mjs +0 -39
  175. package/esm2020/login/LoginTokenStorage.mjs +0 -18
  176. package/esm2020/manager/FocusManager.mjs +0 -46
  177. package/esm2020/manager/ResizeManager.mjs +0 -81
  178. package/esm2020/menu/MenuItem.mjs +0 -13
  179. package/esm2020/menu/MenuItemBase.mjs +0 -46
  180. package/esm2020/menu/MenuItems.mjs +0 -102
  181. package/esm2020/menu/NavigationMenuItem.mjs +0 -14
  182. package/esm2020/module/LazyModuleLoader.mjs +0 -89
  183. package/esm2020/notification/INotification.mjs +0 -7
  184. package/esm2020/notification/INotificationContent.mjs +0 -132
  185. package/esm2020/notification/NotificationConfig.mjs +0 -16
  186. package/esm2020/pipe/FinancePipe.mjs +0 -53
  187. package/esm2020/pipe/MomentDateAdaptivePipe.mjs +0 -51
  188. package/esm2020/pipe/MomentDatePipe.mjs +0 -71
  189. package/esm2020/pipe/MomentTimePipe.mjs +0 -35
  190. package/esm2020/pipe/NgModelErrorPipe.mjs +0 -42
  191. package/esm2020/pipe/PrettifyPipe.mjs +0 -38
  192. package/esm2020/pipe/SanitizePipe.mjs +0 -47
  193. package/esm2020/pipe/TimePipe.mjs +0 -38
  194. package/esm2020/public-api.mjs +0 -141
  195. package/esm2020/question/QuestionManager.mjs +0 -93
  196. package/esm2020/service/PipeBaseService.mjs +0 -132
  197. package/esm2020/service/PlatformService.mjs +0 -38
  198. package/esm2020/service/RouterBaseService.mjs +0 -224
  199. package/esm2020/storage/DateValueStorage.mjs +0 -49
  200. package/esm2020/storage/LocalStorageService.mjs +0 -57
  201. package/esm2020/storage/ValueStorage.mjs +0 -67
  202. package/esm2020/theme/ThemeAssetDirective.mjs +0 -240
  203. package/esm2020/theme/ThemeStyleDirective.mjs +0 -115
  204. package/esm2020/theme/ThemeStyleHoverDirective.mjs +0 -107
  205. package/esm2020/theme/ThemeToggleDirective.mjs +0 -62
  206. package/esm2020/transport/TransportLazy.mjs +0 -92
  207. package/esm2020/transport/TransportLazyModule.mjs +0 -28
  208. package/esm2020/transport/TransportLazyModuleLoadedEvent.mjs +0 -18
  209. package/esm2020/user/IUser.mjs +0 -3
  210. package/esm2020/user/UserBaseService.mjs +0 -116
  211. package/esm2020/util/ViewUtil.mjs +0 -589
  212. package/esm2020/window/IWindow.mjs +0 -33
  213. package/esm2020/window/IWindowContent.mjs +0 -135
  214. package/esm2020/window/WindowBase.mjs +0 -177
  215. package/esm2020/window/WindowClosedError.mjs +0 -19
  216. package/esm2020/window/WindowConfig.mjs +0 -197
  217. package/fesm2015/ts-core-angular.mjs +0 -7015
  218. package/fesm2015/ts-core-angular.mjs.map +0 -1
  219. package/fesm2020/ts-core-angular.mjs.map +0 -1
  220. package/form/FormElementAsync.d.ts +0 -13
  221. package/form/FormElementSync.d.ts +0 -22
  222. package/form/ValueAccessor.d.ts +0 -16
  223. package/form/validate.d.ts +0 -9
  224. /package/{esm2020 → esm2022}/ApplicationInjector.mjs +0 -0
  225. /package/{esm2020 → esm2022}/bottomSheet/BottomSheetService.mjs +0 -0
  226. /package/{esm2020 → esm2022}/list/IListItem.mjs +0 -0
  227. /package/{esm2020 → esm2022}/list/select/ISelectListItem.mjs +0 -0
  228. /package/{esm2020 → esm2022}/notification/INotificationConfig.mjs +0 -0
  229. /package/{esm2020 → esm2022}/notification/NotificationService.mjs +0 -0
  230. /package/{esm2020 → esm2022}/notification/NotificationServiceEvent.mjs +0 -0
  231. /package/{esm2020 → esm2022}/question/IQuestion.mjs +0 -0
  232. /package/{esm2020 → esm2022}/service/route/CanDeactivateGuard.mjs +0 -0
  233. /package/{esm2020 → esm2022}/service/route/IRouterDeactivatable.mjs +0 -0
  234. /package/{esm2020 → esm2022}/storage/BooleanValueStorage.mjs +0 -0
  235. /package/{esm2020 → esm2022}/storage/IValueStorage.mjs +0 -0
  236. /package/{esm2020 → esm2022}/ts-core-angular.mjs +0 -0
  237. /package/{esm2020 → esm2022}/window/IWindowConfig.mjs +0 -0
  238. /package/{esm2020 → esm2022}/window/WindowService.mjs +0 -0
  239. /package/{esm2020 → esm2022}/window/WindowServiceEvent.mjs +0 -0
@@ -0,0 +1,107 @@
1
+ import { Directive, Input, RendererStyleFlags2 } from '@angular/core';
2
+ import { ThemeStyleDirective } from './ThemeStyleDirective';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ts-core/frontend";
5
+ export class ThemeStyleHoverDirective extends ThemeStyleDirective {
6
+ // --------------------------------------------------------------------------
7
+ //
8
+ // Properties
9
+ //
10
+ // --------------------------------------------------------------------------
11
+ _isHover = false;
12
+ // --------------------------------------------------------------------------
13
+ //
14
+ // Constructor
15
+ //
16
+ // --------------------------------------------------------------------------
17
+ constructor(element, theme) {
18
+ super(element, theme);
19
+ this.flags = RendererStyleFlags2.Important;
20
+ this.element.addEventListener('mouseenter', this.mouseEnter, false);
21
+ this.element.addEventListener('mouseleave', this.mouseLeave, false);
22
+ }
23
+ // --------------------------------------------------------------------------
24
+ //
25
+ // Protected Methods
26
+ //
27
+ // --------------------------------------------------------------------------
28
+ isNeedStyleAdd() {
29
+ return this.isHover && super.isNeedStyleAdd();
30
+ }
31
+ isNeedStyleRemove() {
32
+ return !this.isHover || super.isNeedStyleRemove();
33
+ }
34
+ // --------------------------------------------------------------------------
35
+ //
36
+ // Event Handlers
37
+ //
38
+ // --------------------------------------------------------------------------
39
+ mouseEnter = (event) => {
40
+ this.isHover = true;
41
+ };
42
+ mouseLeave = (event) => {
43
+ this.isHover = false;
44
+ };
45
+ // --------------------------------------------------------------------------
46
+ //
47
+ // Public Methods
48
+ //
49
+ // --------------------------------------------------------------------------
50
+ destroy() {
51
+ if (this.isDestroyed) {
52
+ return;
53
+ }
54
+ this.element.removeEventListener('mouseenter', this.mouseEnter, false);
55
+ this.element.removeEventListener('mouseleave', this.mouseLeave, false);
56
+ super.destroy();
57
+ }
58
+ // --------------------------------------------------------------------------
59
+ //
60
+ // Public Properties
61
+ //
62
+ // --------------------------------------------------------------------------
63
+ get isHover() {
64
+ return this._isHover;
65
+ }
66
+ set isHover(value) {
67
+ if (value === this._isHover) {
68
+ return;
69
+ }
70
+ this._isHover = value;
71
+ this.stylePropertiesCheck();
72
+ }
73
+ get key() {
74
+ return super.key;
75
+ }
76
+ set key(value) {
77
+ super.key = value;
78
+ }
79
+ get styleName() {
80
+ return super.styleName;
81
+ }
82
+ set styleName(value) {
83
+ super.styleName = value;
84
+ }
85
+ get flags() {
86
+ return super.flags;
87
+ }
88
+ set flags(value) {
89
+ super.flags = value;
90
+ }
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ThemeStyleHoverDirective, deps: [{ token: i0.ElementRef }, { token: i1.ThemeService }], target: i0.ɵɵFactoryTarget.Directive });
92
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: ThemeStyleHoverDirective, selector: "[vi-theme-style-hover]", inputs: { key: ["vi-theme-style-hover", "key"], styleName: "styleName", flags: "flags" }, usesInheritance: true, ngImport: i0 });
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ThemeStyleHoverDirective, decorators: [{
95
+ type: Directive,
96
+ args: [{
97
+ selector: '[vi-theme-style-hover]'
98
+ }]
99
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ThemeService }], propDecorators: { key: [{
100
+ type: Input,
101
+ args: ['vi-theme-style-hover']
102
+ }], styleName: [{
103
+ type: Input
104
+ }], flags: [{
105
+ type: Input
106
+ }] } });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhlbWVTdHlsZUhvdmVyRGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RoZW1lL1RoZW1lU3R5bGVIb3ZlckRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBTTVELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxtQkFBbUI7SUFDN0QsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixhQUFhO0lBQ2IsRUFBRTtJQUNGLDZFQUE2RTtJQUVuRSxRQUFRLEdBQVksS0FBSyxDQUFDO0lBRXBDLDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0YsY0FBYztJQUNkLEVBQUU7SUFDRiw2RUFBNkU7SUFFN0UsWUFBWSxPQUFtQixFQUFFLEtBQW1CO1FBQ2hELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsNkVBQTZFO0lBRW5FLGNBQWM7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRVMsaUJBQWlCO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLGlCQUFpQjtJQUNqQixFQUFFO0lBQ0YsNkVBQTZFO0lBRW5FLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQVEsRUFBRTtRQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFUSxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFRLEVBQUU7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixpQkFBaUI7SUFDakIsRUFBRTtJQUNGLDZFQUE2RTtJQUV0RSxPQUFPO1FBQ1YsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0Ysb0JBQW9CO0lBQ3BCLEVBQUU7SUFDRiw2RUFBNkU7SUFFN0UsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLE9BQU8sQ0FBQyxLQUFjO1FBQzdCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsR0FBRztRQUNWLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFDVyxHQUFHLENBQUMsS0FBYTtRQUN4QixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFDVyxTQUFTLENBQUMsS0FBYTtRQUM5QixLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUNXLEtBQUssQ0FBQyxLQUEwQjtRQUN2QyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO3VHQXpHUSx3QkFBd0I7MkZBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO2lCQUNyQzswR0F3RmMsR0FBRztzQkFEYixLQUFLO3VCQUFDLHNCQUFzQjtnQkFTbEIsU0FBUztzQkFEbkIsS0FBSztnQkFTSyxLQUFLO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlclN0eWxlRmxhZ3MyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICdAdHMtY29yZS9mcm9udGVuZCc7XG5pbXBvcnQgeyBUaGVtZVN0eWxlRGlyZWN0aXZlIH0gZnJvbSAnLi9UaGVtZVN0eWxlRGlyZWN0aXZlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdmktdGhlbWUtc3R5bGUtaG92ZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVN0eWxlSG92ZXJEaXJlY3RpdmUgZXh0ZW5kcyBUaGVtZVN0eWxlRGlyZWN0aXZlIHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcm90ZWN0ZWQgX2lzSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q29uc3RydWN0b3JcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmLCB0aGVtZTogVGhlbWVTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHRoZW1lKTtcblxuICAgICAgICB0aGlzLmZsYWdzID0gUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQ7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5tb3VzZUVudGVyLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5tb3VzZUxlYXZlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQcm90ZWN0ZWQgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3RlY3RlZCBpc05lZWRTdHlsZUFkZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNIb3ZlciAmJiBzdXBlci5pc05lZWRTdHlsZUFkZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc05lZWRTdHlsZVJlbW92ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzSG92ZXIgfHwgc3VwZXIuaXNOZWVkU3R5bGVSZW1vdmUoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdEV2ZW50IEhhbmRsZXJzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIG1vdXNlRW50ZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5pc0hvdmVyID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIG1vdXNlTGVhdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5pc0hvdmVyID0gZmFsc2U7XG4gICAgfTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHVibGljIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMubW91c2VFbnRlciwgZmFsc2UpO1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMubW91c2VMZWF2ZSwgZmFsc2UpO1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQdWJsaWMgUHJvcGVydGllc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBnZXQgaXNIb3ZlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSG92ZXI7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgaXNIb3Zlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2lzSG92ZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0hvdmVyID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc3R5bGVQcm9wZXJ0aWVzQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3VwZXIua2V5O1xuICAgIH1cbiAgICBASW5wdXQoJ3ZpLXRoZW1lLXN0eWxlLWhvdmVyJylcbiAgICBwdWJsaWMgc2V0IGtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyLmtleSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3R5bGVOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdXBlci5zdHlsZU5hbWU7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBzdHlsZU5hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBzdXBlci5zdHlsZU5hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZsYWdzKCk6IFJlbmRlcmVyU3R5bGVGbGFnczIge1xuICAgICAgICByZXR1cm4gc3VwZXIuZmxhZ3M7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBmbGFncyh2YWx1ZTogUmVuZGVyZXJTdHlsZUZsYWdzMikge1xuICAgICAgICBzdXBlci5mbGFncyA9IHZhbHVlO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,63 @@
1
+ import { Directive, HostListener } from '@angular/core';
2
+ import { Destroyable } from '@ts-core/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ts-core/frontend";
5
+ export class ThemeToggleDirective extends Destroyable {
6
+ theme;
7
+ // --------------------------------------------------------------------------
8
+ //
9
+ // Constructor
10
+ //
11
+ // --------------------------------------------------------------------------
12
+ constructor(theme) {
13
+ super();
14
+ this.theme = theme;
15
+ }
16
+ // --------------------------------------------------------------------------
17
+ //
18
+ // Event Handlers
19
+ //
20
+ // --------------------------------------------------------------------------
21
+ clickHandler(event) {
22
+ let themes = this.theme.themes.collection;
23
+ let length = themes.length;
24
+ if (length < 2) {
25
+ return;
26
+ }
27
+ let index = 0;
28
+ if (this.theme.theme) {
29
+ index = themes.indexOf(this.theme.theme);
30
+ if (index < length - 1) {
31
+ index++;
32
+ }
33
+ else {
34
+ index = 0;
35
+ }
36
+ }
37
+ this.theme.theme = themes[index];
38
+ }
39
+ // --------------------------------------------------------------------------
40
+ //
41
+ // Public Methods
42
+ //
43
+ // --------------------------------------------------------------------------
44
+ destroy() {
45
+ if (this.isDestroyed) {
46
+ return;
47
+ }
48
+ super.destroy();
49
+ this.theme = null;
50
+ }
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ThemeToggleDirective, deps: [{ token: i1.ThemeService }], target: i0.ɵɵFactoryTarget.Directive });
52
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: ThemeToggleDirective, selector: "[vi-theme-toggle]", host: { listeners: { "click": "clickHandler($event)" } }, usesInheritance: true, ngImport: i0 });
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ThemeToggleDirective, decorators: [{
55
+ type: Directive,
56
+ args: [{
57
+ selector: '[vi-theme-toggle]'
58
+ }]
59
+ }], ctorParameters: () => [{ type: i1.ThemeService }], propDecorators: { clickHandler: [{
60
+ type: HostListener,
61
+ args: ['click', ['$event']]
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhlbWVUb2dnbGVEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGhlbWUvVGhlbWVUb2dnbGVEaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFNOUMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFdBQVc7SUFPN0I7SUFOcEIsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixjQUFjO0lBQ2QsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxZQUFvQixLQUFtQjtRQUNuQyxLQUFLLEVBQUUsQ0FBQztRQURRLFVBQUssR0FBTCxLQUFLLENBQWM7SUFFdkMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0YsaUJBQWlCO0lBQ2pCLEVBQUU7SUFDRiw2RUFBNkU7SUFHckUsWUFBWSxDQUFDLEtBQWlCO1FBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNaLE9BQU87U0FDVjtRQUVELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixLQUFLLEVBQUUsQ0FBQzthQUNYO2lCQUFNO2dCQUNILEtBQUssR0FBRyxDQUFDLENBQUM7YUFDYjtTQUNKO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLGlCQUFpQjtJQUNqQixFQUFFO0lBQ0YsNkVBQTZFO0lBRXRFLE9BQU87UUFDVixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7dUdBbERRLG9CQUFvQjsyRkFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDO2lGQW1CVyxZQUFZO3NCQURuQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXN0cm95YWJsZSB9IGZyb20gJ0B0cy1jb3JlL2NvbW1vbic7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICdAdHMtY29yZS9mcm9udGVuZCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3ZpLXRoZW1lLXRvZ2dsZV0nXG59KVxuZXhwb3J0IGNsYXNzIFRoZW1lVG9nZ2xlRGlyZWN0aXZlIGV4dGVuZHMgRGVzdHJveWFibGUge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q29uc3RydWN0b3JcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRoZW1lOiBUaGVtZVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdEV2ZW50IEhhbmRsZXJzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgY2xpY2tIYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGxldCB0aGVtZXMgPSB0aGlzLnRoZW1lLnRoZW1lcy5jb2xsZWN0aW9uO1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGhlbWVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGlmICh0aGlzLnRoZW1lLnRoZW1lKSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoZW1lcy5pbmRleE9mKHRoaXMudGhlbWUudGhlbWUpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGhlbWUudGhlbWUgPSB0aGVtZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHVibGljIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGhlbWUgPSBudWxsO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,93 @@
1
+ import { TransportLocal } from '@ts-core/common';
2
+ import * as _ from 'lodash';
3
+ import { TransportLazyModuleLoadedEvent } from './TransportLazyModuleLoadedEvent';
4
+ export class TransportLazy extends TransportLocal {
5
+ loader;
6
+ // --------------------------------------------------------------------------
7
+ //
8
+ // Constructor
9
+ //
10
+ // --------------------------------------------------------------------------
11
+ constructor(logger, loader, settings) {
12
+ super(logger, settings, null);
13
+ this.loader = loader;
14
+ this.getDispatcher(TransportLazyModuleLoadedEvent.NAME).subscribe(event => this.moduleLoadedHandler(event.data));
15
+ this.logEventFilters.push(item => item.name !== TransportLazyModuleLoadedEvent.NAME);
16
+ }
17
+ // --------------------------------------------------------------------------
18
+ //
19
+ // Event Handlers
20
+ //
21
+ // --------------------------------------------------------------------------
22
+ moduleLoadedHandler(module) {
23
+ let item = this.loader.modules.get(module.id);
24
+ if (_.isNil(item)) {
25
+ item = this.loader.modules.add(module);
26
+ }
27
+ if (_.isNil(item.reference)) {
28
+ item.reference = module.reference;
29
+ }
30
+ }
31
+ // --------------------------------------------------------------------------
32
+ //
33
+ // Protected Methods
34
+ //
35
+ // --------------------------------------------------------------------------
36
+ async commandResponseRequestDispatch(command, options, isNeedReply) {
37
+ let item = this.getModuleByCommand(command.name);
38
+ if (!_.isNil(item)) {
39
+ await this.loader.loadIfNeed(item.id);
40
+ }
41
+ return super.commandResponseRequestDispatch(command, options, isNeedReply);
42
+ }
43
+ async eventRequestExecute(event) {
44
+ let item = this.getModuleByEvent(event.name);
45
+ if (!_.isNil(this.loader) && !_.isNil(item)) {
46
+ this.loader.loadIfNeed(item.id).then(() => super.eventRequestExecute(event));
47
+ }
48
+ else {
49
+ super.eventRequestExecute(event);
50
+ }
51
+ }
52
+ getModuleByCommand(name) {
53
+ if (this.loader.modules.length === 0) {
54
+ return null;
55
+ }
56
+ for (let item of this.loader.modules.collection) {
57
+ if (_.isEmpty(item.commands)) {
58
+ continue;
59
+ }
60
+ if (_.includes(item.commands, name)) {
61
+ return item;
62
+ }
63
+ }
64
+ return null;
65
+ }
66
+ getModuleByEvent(name) {
67
+ if (_.isNil(this.loader) || this.loader.modules.length === 0) {
68
+ return null;
69
+ }
70
+ for (let item of this.loader.modules.collection) {
71
+ if (_.isEmpty(item.events)) {
72
+ continue;
73
+ }
74
+ if (_.includes(item.events, name)) {
75
+ return item;
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+ // --------------------------------------------------------------------------
81
+ //
82
+ // Public Methods
83
+ //
84
+ // --------------------------------------------------------------------------
85
+ destroy() {
86
+ if (this.isDestroyed) {
87
+ return;
88
+ }
89
+ super.destroy();
90
+ this.loader = null;
91
+ }
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3J0TGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BvcnQvVHJhbnNwb3J0TGF6eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFJNUIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEYsTUFBTSxPQUFPLGFBQWMsU0FBUSxjQUFjO0lBT047SUFOdkMsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixlQUFlO0lBQ2YsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxZQUFZLE1BQWUsRUFBWSxNQUFrRCxFQUFFLFFBQTZCO1FBQ3BILEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBREssV0FBTSxHQUFOLE1BQU0sQ0FBNEM7UUFFckYsSUFBSSxDQUFDLGFBQWEsQ0FBMkQsOEJBQThCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2hJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ3ZDLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssOEJBQThCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLEVBQUU7SUFDRiw2RUFBNkU7SUFFbkUsbUJBQW1CLENBQUMsTUFBZ0M7UUFDMUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsQ0FB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RCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLGtCQUFrQjtJQUNsQixFQUFFO0lBQ0YsNkVBQTZFO0lBRXRFLE9BQU87UUFDVixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUcmFuc3BvcnRDb21tYW5kLCBJVHJhbnNwb3J0Q29tbWFuZE9wdGlvbnMsIElUcmFuc3BvcnRFdmVudCwgSVRyYW5zcG9ydFNldHRpbmdzIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zcG9ydExvY2FsIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IExhenlNb2R1bGVMb2FkZXIgfSBmcm9tICcuLi9tb2R1bGUvTGF6eU1vZHVsZUxvYWRlcic7XG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCB7IElUcmFuc3BvcnRMYXp5TW9kdWxlRGF0YSB9IGZyb20gJy4vVHJhbnNwb3J0TGF6eU1vZHVsZSc7XG5pbXBvcnQgeyBUcmFuc3BvcnRMYXp5TW9kdWxlTG9hZGVkRXZlbnQgfSBmcm9tICcuL1RyYW5zcG9ydExhenlNb2R1bGVMb2FkZWRFdmVudCc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc3BvcnRMYXp5IGV4dGVuZHMgVHJhbnNwb3J0TG9jYWwge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgQ29uc3RydWN0b3JcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3Rvcihsb2dnZXI6IElMb2dnZXIsIHByb3RlY3RlZCBsb2FkZXI6IExhenlNb2R1bGVMb2FkZXI8SVRyYW5zcG9ydExhenlNb2R1bGVEYXRhPiwgc2V0dGluZ3M/OiBJVHJhbnNwb3J0U2V0dGluZ3MpIHtcbiAgICAgICAgc3VwZXIobG9nZ2VyLCBzZXR0aW5ncywgbnVsbCk7XG4gICAgICAgIHRoaXMuZ2V0RGlzcGF0Y2hlcjxUcmFuc3BvcnRMYXp5TW9kdWxlTG9hZGVkRXZlbnQ8SVRyYW5zcG9ydExhenlNb2R1bGVEYXRhPj4oVHJhbnNwb3J0TGF6eU1vZHVsZUxvYWRlZEV2ZW50Lk5BTUUpLnN1YnNjcmliZShldmVudCA9PlxuICAgICAgICAgICAgdGhpcy5tb2R1bGVMb2FkZWRIYW5kbGVyKGV2ZW50LmRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubG9nRXZlbnRGaWx0ZXJzLnB1c2goaXRlbSA9PiBpdGVtLm5hbWUgIT09IFRyYW5zcG9ydExhenlNb2R1bGVMb2FkZWRFdmVudC5OQU1FKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIEV2ZW50IEhhbmRsZXJzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIG1vZHVsZUxvYWRlZEhhbmRsZXIobW9kdWxlOiBJVHJhbnNwb3J0TGF6eU1vZHVsZURhdGEpOiB2b2lkIHtcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmxvYWRlci5tb2R1bGVzLmdldChtb2R1bGUuaWQpO1xuICAgICAgICBpZiAoXy5pc05pbChpdGVtKSkge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMubG9hZGVyLm1vZHVsZXMuYWRkKG1vZHVsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOaWwoaXRlbS5yZWZlcmVuY2UpKSB7XG4gICAgICAgICAgICBpdGVtLnJlZmVyZW5jZSA9IG1vZHVsZS5yZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIFByb3RlY3RlZCBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNvbW1hbmRSZXNwb25zZVJlcXVlc3REaXNwYXRjaDxVPihjb21tYW5kOiBJVHJhbnNwb3J0Q29tbWFuZDxVPiwgb3B0aW9uczogSVRyYW5zcG9ydENvbW1hbmRPcHRpb25zLCBpc05lZWRSZXBseTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TW9kdWxlQnlDb21tYW5kKGNvbW1hbmQubmFtZSk7XG4gICAgICAgIGlmICghXy5pc05pbChpdGVtKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZElmTmVlZChpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuY29tbWFuZFJlc3BvbnNlUmVxdWVzdERpc3BhdGNoKGNvbW1hbmQsIG9wdGlvbnMsIGlzTmVlZFJlcGx5KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZXZlbnRSZXF1ZXN0RXhlY3V0ZTxVPihldmVudDogSVRyYW5zcG9ydEV2ZW50PFU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5nZXRNb2R1bGVCeUV2ZW50KGV2ZW50Lm5hbWUpO1xuICAgICAgICBpZiAoIV8uaXNOaWwodGhpcy5sb2FkZXIpICYmICFfLmlzTmlsKGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlci5sb2FkSWZOZWVkKGl0ZW0uaWQpLnRoZW4oKCkgPT4gc3VwZXIuZXZlbnRSZXF1ZXN0RXhlY3V0ZShldmVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIuZXZlbnRSZXF1ZXN0RXhlY3V0ZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TW9kdWxlQnlDb21tYW5kKG5hbWU6IHN0cmluZyk6IElUcmFuc3BvcnRMYXp5TW9kdWxlRGF0YSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlci5tb2R1bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmxvYWRlci5tb2R1bGVzLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChfLmlzRW1wdHkoaXRlbS5jb21tYW5kcykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGl0ZW0uY29tbWFuZHMsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1vZHVsZUJ5RXZlbnQobmFtZTogc3RyaW5nKTogSVRyYW5zcG9ydExhenlNb2R1bGVEYXRhIHtcbiAgICAgICAgaWYgKF8uaXNOaWwodGhpcy5sb2FkZXIpIHx8IHRoaXMubG9hZGVyLm1vZHVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubG9hZGVyLm1vZHVsZXMuY29sbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eShpdGVtLmV2ZW50cykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGl0ZW0uZXZlbnRzLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgUHVibGljIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubG9hZGVyID0gbnVsbDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { TransportLazyModuleLoadedEvent } from './TransportLazyModuleLoadedEvent';
2
+ export class TransportLazyModule {
3
+ reference;
4
+ transport;
5
+ //--------------------------------------------------------------------------
6
+ //
7
+ // Constructor
8
+ //
9
+ //--------------------------------------------------------------------------
10
+ constructor(reference, transport) {
11
+ this.reference = reference;
12
+ this.transport = transport;
13
+ this.moduleLoadedDispatch();
14
+ }
15
+ //--------------------------------------------------------------------------
16
+ //
17
+ // Protected Methods
18
+ //
19
+ //--------------------------------------------------------------------------
20
+ moduleLoadedDispatch() {
21
+ this.transport.dispatch(new TransportLazyModuleLoadedEvent(this));
22
+ }
23
+ get events() {
24
+ return new Array();
25
+ }
26
+ get commands() {
27
+ return new Array();
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3J0TGF6eU1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BvcnQvVHJhbnNwb3J0TGF6eU1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsRixNQUFNLE9BQWdCLG1CQUFtQjtJQU9sQjtJQUFxQztJQU54RCw0RUFBNEU7SUFDNUUsRUFBRTtJQUNGLGVBQWU7SUFDZixFQUFFO0lBQ0YsNEVBQTRFO0lBRTVFLFlBQW1CLFNBQXlCLEVBQVksU0FBb0I7UUFBekQsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBWSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3hFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsRUFBRTtJQUNGLHFCQUFxQjtJQUNyQixFQUFFO0lBQ0YsNEVBQTRFO0lBRWxFLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLDhCQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQVVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICdAdHMtY29yZS9jb21tb24nO1xuaW1wb3J0IHsgSUxhenlNb2R1bGVEYXRhIH0gZnJvbSAnLi4vbW9kdWxlL0xhenlNb2R1bGVMb2FkZXInO1xuaW1wb3J0IHsgVHJhbnNwb3J0TGF6eU1vZHVsZUxvYWRlZEV2ZW50IH0gZnJvbSAnLi9UcmFuc3BvcnRMYXp5TW9kdWxlTG9hZGVkRXZlbnQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNwb3J0TGF6eU1vZHVsZTxUPiBpbXBsZW1lbnRzIElUcmFuc3BvcnRMYXp5TW9kdWxlRGF0YTxUPiB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIENvbnN0cnVjdG9yXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVmZXJlbmNlOiBOZ01vZHVsZVJlZjxUPiwgcHJvdGVjdGVkIHRyYW5zcG9ydDogVHJhbnNwb3J0KSB7XG4gICAgICAgIHRoaXMubW9kdWxlTG9hZGVkRGlzcGF0Y2goKTtcbiAgICB9XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgUHJvdGVjdGVkIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3RlY3RlZCBtb2R1bGVMb2FkZWREaXNwYXRjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnQuZGlzcGF0Y2gobmV3IFRyYW5zcG9ydExhenlNb2R1bGVMb2FkZWRFdmVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIFB1YmxpYyBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGlkKCk6IHN0cmluZztcblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb21tYW5kcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNwb3J0TGF6eU1vZHVsZURhdGE8VCA9IGFueT4gZXh0ZW5kcyBJTGF6eU1vZHVsZURhdGE8VD4ge1xuICAgIGV2ZW50cz86IEFycmF5PHN0cmluZz47XG4gICAgY29tbWFuZHM/OiBBcnJheTxzdHJpbmc+O1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ import { TransportEvent } from '@ts-core/common';
2
+ export class TransportLazyModuleLoadedEvent extends TransportEvent {
3
+ // --------------------------------------------------------------------------
4
+ //
5
+ // Public Static Properties
6
+ //
7
+ // --------------------------------------------------------------------------
8
+ static NAME = 'TransportLazyModuleLoadedEvent';
9
+ // --------------------------------------------------------------------------
10
+ //
11
+ // Constructor
12
+ //
13
+ // --------------------------------------------------------------------------
14
+ constructor(request) {
15
+ super(TransportLazyModuleLoadedEvent.NAME, request);
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3J0TGF6eU1vZHVsZUxvYWRlZEV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC9UcmFuc3BvcnRMYXp5TW9kdWxlTG9hZGVkRXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2pELE1BQU0sT0FBTyw4QkFBOEYsU0FBUSxjQUFpQjtJQUNoSSw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLDRCQUE0QjtJQUM1QixFQUFFO0lBQ0YsNkVBQTZFO0lBRXRFLE1BQU0sQ0FBVSxJQUFJLEdBQUcsZ0NBQWdDLENBQUM7SUFFL0QsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixlQUFlO0lBQ2YsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxZQUFZLE9BQVU7UUFDbEIsS0FBSyxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNwb3J0RXZlbnQgfSBmcm9tICdAdHMtY29yZS9jb21tb24nO1xuaW1wb3J0IHsgSVRyYW5zcG9ydExhenlNb2R1bGVEYXRhIH0gZnJvbSAnLi9UcmFuc3BvcnRMYXp5TW9kdWxlJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zcG9ydExhenlNb2R1bGVMb2FkZWRFdmVudDxUIGV4dGVuZHMgSVRyYW5zcG9ydExhenlNb2R1bGVEYXRhID0gSVRyYW5zcG9ydExhenlNb2R1bGVEYXRhPiBleHRlbmRzIFRyYW5zcG9ydEV2ZW50PFQ+IHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIFB1YmxpYyBTdGF0aWMgUHJvcGVydGllc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkFNRSA9ICdUcmFuc3BvcnRMYXp5TW9kdWxlTG9hZGVkRXZlbnQnO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vICBDb25zdHJ1Y3RvclxuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFQpIHtcbiAgICAgICAgc3VwZXIoVHJhbnNwb3J0TGF6eU1vZHVsZUxvYWRlZEV2ZW50Lk5BTUUsIHJlcXVlc3QpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export class IUser {
2
+ // --------------------------------------------------------------------------
3
+ //
4
+ // Constants
5
+ //
6
+ // --------------------------------------------------------------------------
7
+ id;
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVVzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXNlci9JVXNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQWdCLEtBQUs7SUFDdkIsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixhQUFhO0lBQ2IsRUFBRTtJQUNGLDZFQUE2RTtJQUV0RSxFQUFFLENBQVU7Q0FVdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRGVzdHJveWFibGUgfSBmcm9tICdAdHMtY29yZS9jb21tb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSVVzZXI8VCA9IGFueT4gaW1wbGVtZW50cyBJRGVzdHJveWFibGUge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyBcdENvbnN0YW50c1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBpZDogVXNlclVpZDtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyBcdFB1YmxpYyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIGFic3RyYWN0IHVwZGF0ZShkYXRhOiBUKTogdm9pZDtcbiAgICBwdWJsaWMgYWJzdHJhY3QgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyVWlkID0gc3RyaW5nIHwgbnVtYmVyO1xuIl19
@@ -0,0 +1,124 @@
1
+ import { DestroyableContainer } from '@ts-core/common';
2
+ import { ObservableData } from '@ts-core/common';
3
+ import * as _ from 'lodash';
4
+ import { takeUntil, Subject, filter, map } from 'rxjs';
5
+ import { LoginBaseServiceEvent } from '../login/LoginBaseService';
6
+ export class UserBaseService extends DestroyableContainer {
7
+ login;
8
+ // --------------------------------------------------------------------------
9
+ //
10
+ // Properties
11
+ //
12
+ // --------------------------------------------------------------------------
13
+ _user;
14
+ observer;
15
+ // --------------------------------------------------------------------------
16
+ //
17
+ // Constructor
18
+ //
19
+ // --------------------------------------------------------------------------
20
+ constructor(login) {
21
+ super();
22
+ this.login = login;
23
+ this.observer = new Subject();
24
+ }
25
+ // --------------------------------------------------------------------------
26
+ //
27
+ // Protected Methods
28
+ //
29
+ // --------------------------------------------------------------------------
30
+ initialize() {
31
+ if (this.login.isLoggedIn) {
32
+ this.loginedHandler();
33
+ }
34
+ this.login.events.pipe(takeUntil(this.destroyed)).subscribe(data => {
35
+ if (data.type === LoginBaseServiceEvent.LOGIN_COMPLETE) {
36
+ this.loginedHandler();
37
+ }
38
+ else if (data.type === LoginBaseServiceEvent.LOGOUT_FINISHED) {
39
+ this.logoutedHandler();
40
+ }
41
+ });
42
+ }
43
+ initializeUser(data) {
44
+ this._user = this.createUser(data);
45
+ }
46
+ deinitializeUser() {
47
+ this._user = null;
48
+ }
49
+ loginedHandler() {
50
+ this.initializeUser(this.login.loginData);
51
+ this.observer.next(new ObservableData(UserBaseServiceEvent.LOGINED, this.user));
52
+ }
53
+ logoutedHandler() {
54
+ this.deinitializeUser();
55
+ this.observer.next(new ObservableData(UserBaseServiceEvent.LOGOUTED));
56
+ }
57
+ // --------------------------------------------------------------------------
58
+ //
59
+ // Public Methods
60
+ //
61
+ // --------------------------------------------------------------------------
62
+ isUser(value) {
63
+ if (_.isNil(value) || _.isNil(this.user)) {
64
+ return false;
65
+ }
66
+ if (_.isString(value) || _.isNumber(value)) {
67
+ return value === this.user.id;
68
+ }
69
+ return value.id === this.user.id;
70
+ }
71
+ userUpdate(data) {
72
+ if (!this.hasUser) {
73
+ return;
74
+ }
75
+ this.user.update(data);
76
+ this.observer.next(new ObservableData(UserBaseServiceEvent.CHANGED, data));
77
+ }
78
+ destroy() {
79
+ if (this.isDestroyed) {
80
+ return;
81
+ }
82
+ super.destroy();
83
+ if (!_.isNil(this.observer)) {
84
+ this.observer.complete();
85
+ this.observer = null;
86
+ }
87
+ }
88
+ // --------------------------------------------------------------------------
89
+ //
90
+ // Public Properties
91
+ //
92
+ // --------------------------------------------------------------------------
93
+ get events() {
94
+ return this.observer.asObservable();
95
+ }
96
+ get logined() {
97
+ return this.events.pipe(filter(item => item.type === UserBaseServiceEvent.LOGINED), map(item => item.data));
98
+ }
99
+ get changed() {
100
+ return this.events.pipe(filter(item => item.type === UserBaseServiceEvent.CHANGED), map(item => item.data));
101
+ }
102
+ get logouted() {
103
+ return this.events.pipe(filter(item => item.type === UserBaseServiceEvent.LOGOUTED), map(() => null));
104
+ }
105
+ get hasUser() {
106
+ return !_.isNil(this._user);
107
+ }
108
+ get isLogined() {
109
+ return this.hasUser;
110
+ }
111
+ get user() {
112
+ return this._user;
113
+ }
114
+ get id() {
115
+ return this.hasUser ? this.user.id : null;
116
+ }
117
+ }
118
+ export var UserBaseServiceEvent;
119
+ (function (UserBaseServiceEvent) {
120
+ UserBaseServiceEvent["LOGINED"] = "LOGINED";
121
+ UserBaseServiceEvent["CHANGED"] = "CHANGED";
122
+ UserBaseServiceEvent["LOGOUTED"] = "LOGOUTED";
123
+ })(UserBaseServiceEvent || (UserBaseServiceEvent = {}));
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckJhc2VTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VzZXIvVXNlckJhc2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQWMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBb0IscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdwRixNQUFNLE9BQWdCLGVBQWlELFNBQVEsb0JBQW9CO0lBZ0J6RTtJQWZ0Qiw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLGNBQWM7SUFDZCxFQUFFO0lBQ0YsNkVBQTZFO0lBRW5FLEtBQUssQ0FBSTtJQUNULFFBQVEsQ0FBb0U7SUFFdEYsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixlQUFlO0lBQ2YsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxZQUFzQixLQUF1QjtRQUN6QyxLQUFLLEVBQUUsQ0FBQztRQURVLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBRXpDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixxQkFBcUI7SUFDckIsRUFBRTtJQUNGLDZFQUE2RTtJQUVuRSxVQUFVO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFD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QUE7SUFDbkIsMkNBQW1CLENBQUE7SUFDbkIsNkNBQXFCLENBQUE7QUFDekIsQ0FBQyxFQUpXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFJL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95YWJsZUNvbnRhaW5lciB9IGZyb20gJ0B0cy1jb3JlL2NvbW1vbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlRGF0YSB9IGZyb20gJ0B0cy1jb3JlL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YWtlVW50aWwsIFN1YmplY3QsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2dpbkJhc2VTZXJ2aWNlLCBMb2dpbkJhc2VTZXJ2aWNlRXZlbnQgfSBmcm9tICcuLi9sb2dpbi9Mb2dpbkJhc2VTZXJ2aWNlJztcbmltcG9ydCB7IElVc2VyLCBVc2VyVWlkIH0gZnJvbSAnLi9JVXNlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVc2VyQmFzZVNlcnZpY2U8VSBleHRlbmRzIElVc2VyID0gYW55LCBWID0gdm9pZD4gZXh0ZW5kcyBEZXN0cm95YWJsZUNvbnRhaW5lciB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vIFx0UHJvcGVydGllc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3RlY3RlZCBfdXNlcjogVTtcbiAgICBwcm90ZWN0ZWQgb2JzZXJ2ZXI6IFN1YmplY3Q8T2JzZXJ2YWJsZURhdGE8ViB8IFVzZXJCYXNlU2VydmljZUV2ZW50LCBVIHwgUGFydGlhbDxVPj4+O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vIFx0Q29uc3RydWN0b3JcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbG9naW46IExvZ2luQmFzZVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vIFx0UHJvdGVjdGVkIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9naW4uaXNMb2dnZWRJbikge1xuICAgICAgICAgICAgdGhpcy5sb2dpbmVkSGFuZGxlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dpbi5ldmVudHMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBMb2dpbkJhc2VTZXJ2aWNlRXZlbnQuTE9HSU5fQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2luZWRIYW5kbGVyKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gTG9naW5CYXNlU2VydmljZUV2ZW50LkxPR09VVF9GSU5JU0hFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nb3V0ZWRIYW5kbGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplVXNlcihkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IHRoaXMuY3JlYXRlVXNlcihkYXRhKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZGVpbml0aWFsaXplVXNlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvZ2luZWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVVc2VyKHRoaXMubG9naW4ubG9naW5EYXRhKTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5uZXh0KG5ldyBPYnNlcnZhYmxlRGF0YShVc2VyQmFzZVNlcnZpY2VFdmVudC5MT0dJTkVELCB0aGlzLnVzZXIpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9nb3V0ZWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlaW5pdGlhbGl6ZVVzZXIoKTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5uZXh0KG5ldyBPYnNlcnZhYmxlRGF0YShVc2VyQmFzZVNlcnZpY2VFdmVudC5MT0dPVVRFRCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVVc2VyKGRhdGE6IGFueSk6IFU7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gXHRQdWJsaWMgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBpc1VzZXIodmFsdWU6IFBhcnRpYWw8VT4gfCBVc2VyVWlkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZhbHVlKSB8fCBfLmlzTmlsKHRoaXMudXNlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkgfHwgXy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy51c2VyLmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS5pZCA9PT0gdGhpcy51c2VyLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VyVXBkYXRlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVXNlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIubmV4dChuZXcgT2JzZXJ2YWJsZURhdGEoVXNlckJhc2VTZXJ2aWNlRXZlbnQuQ0hBTkdFRCwgZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoIV8uaXNOaWwodGhpcy5vYnNlcnZlcikpIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vIFx0UHVibGljIFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZ2V0IGV2ZW50cygpOiBPYnNlcnZhYmxlPE9ic2VydmFibGVEYXRhPFYgfCBVc2VyQmFzZVNlcnZpY2VFdmVudCwgVSB8IFBhcnRpYWw8VT4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ic2VydmVyLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9naW5lZCgpOiBPYnNlcnZhYmxlPFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09IFVzZXJCYXNlU2VydmljZUV2ZW50LkxPR0lORUQpLFxuICAgICAgICAgICAgbWFwKGl0ZW0gPT4gaXRlbS5kYXRhIGFzIFUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjaGFuZ2VkKCk6IE9ic2VydmFibGU8UGFydGlhbDxVPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gVXNlckJhc2VTZXJ2aWNlRXZlbnQuQ0hBTkdFRCksXG4gICAgICAgICAgICBtYXAoaXRlbSA9PiBpdGVtLmRhdGEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2dvdXRlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09IFVzZXJCYXNlU2VydmljZUV2ZW50LkxPR09VVEVEKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzVXNlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKHRoaXMuX3VzZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2dpbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNVc2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlcigpOiBVIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpZCgpOiBVc2VyVWlkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVXNlciA/IHRoaXMudXNlci5pZCA6IG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBVc2VyQmFzZVNlcnZpY2VFdmVudCB7XG4gICAgTE9HSU5FRCA9ICdMT0dJTkVEJyxcbiAgICBDSEFOR0VEID0gJ0NIQU5HRUQnLFxuICAgIExPR09VVEVEID0gJ0xPR09VVEVEJ1xufVxuIl19