@worktile/planet 10.0.0 → 12.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/.all-contributorsrc +84 -0
  2. package/.circleci/config.yml +17 -0
  3. package/.coveralls.yml +1 -0
  4. package/.docgeni/public/assets/favicon.ico +0 -0
  5. package/.docgeni/public/index.html +13 -0
  6. package/.docgenirc.js +35 -0
  7. package/.dockerignore +1 -0
  8. package/.editorconfig +22 -0
  9. package/.github/FUNDING.yml +12 -0
  10. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  11. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  12. package/.prettierignore +7 -0
  13. package/.prettierrc +28 -0
  14. package/.travis.yml +26 -0
  15. package/.wpmrc.js +11 -0
  16. package/CHANGELOG.md +391 -0
  17. package/CODE_OF_CONDUCT.md +76 -0
  18. package/Dockerfile +11 -0
  19. package/LICENSE +21 -0
  20. package/README.md +348 -0
  21. package/README.zh-CN.md +307 -0
  22. package/SECURITY.md +21 -0
  23. package/angular.json +373 -0
  24. package/commitlint.config.js +6 -0
  25. package/docs/api/defineApplication.md +46 -0
  26. package/docs/api/globalEventDispatcher.md +51 -0
  27. package/docs/api/index.md +5 -0
  28. package/docs/api/planet.md +117 -0
  29. package/docs/guides/getting-started.md +174 -0
  30. package/docs/guides/index.md +5 -0
  31. package/docs/guides/intro.md +216 -0
  32. package/examples/app1/browserslist +11 -0
  33. package/examples/app1/extra-webpack.config.js +33 -0
  34. package/examples/app1/karma.conf.js +31 -0
  35. package/examples/app1/postcss.config.js +1 -0
  36. package/examples/app1/src/app/app.module.ts +44 -0
  37. package/examples/app1/src/app/app.routing.ts +49 -0
  38. package/examples/app1/src/app/counter.service.ts +16 -0
  39. package/examples/app1/src/app/dashboard/dashboard.component.html +51 -0
  40. package/examples/app1/src/app/dashboard/dashboard.component.ts +70 -0
  41. package/examples/app1/src/app/detail/detail.component.html +8 -0
  42. package/examples/app1/src/app/detail/detail.component.ts +18 -0
  43. package/examples/app1/src/app/overlay.ts +26 -0
  44. package/examples/app1/src/app/projects/dialog/projects-dialog.component.html +10 -0
  45. package/examples/app1/src/app/projects/dialog/projects-dialog.component.ts +41 -0
  46. package/examples/app1/src/app/projects/projects.component.ts +33 -0
  47. package/examples/app1/src/app/root/root.component.css +3 -0
  48. package/examples/app1/src/app/root/root.component.html +16 -0
  49. package/examples/app1/src/app/root/root.component.ts +35 -0
  50. package/examples/app1/src/app/services/initialized-data.resolver.ts +15 -0
  51. package/examples/app1/src/app/shared.module.ts +57 -0
  52. package/examples/app1/src/app/user/detail/user-detail.component.html +5 -0
  53. package/examples/app1/src/app/user/detail/user-detail.component.ts +20 -0
  54. package/examples/app1/src/app/user/user-list.component.html +7 -0
  55. package/examples/app1/src/app/user/user-list.component.ts +20 -0
  56. package/examples/app1/src/app/user/user.module.ts +31 -0
  57. package/examples/app1/src/assets/.gitkeep +0 -0
  58. package/examples/app1/src/assets/github.png +0 -0
  59. package/examples/app1/src/assets/main.css +3 -0
  60. package/examples/app1/src/environments/environment.prod.ts +3 -0
  61. package/examples/app1/src/environments/environment.ts +16 -0
  62. package/examples/app1/src/favicon.ico +0 -0
  63. package/examples/app1/src/index.html +14 -0
  64. package/examples/app1/src/main.ts +35 -0
  65. package/examples/app1/src/polyfills.ts +84 -0
  66. package/examples/app1/src/styles.scss +35 -0
  67. package/examples/app1/src/test.ts +14 -0
  68. package/examples/app1/temp.js +221 -0
  69. package/examples/app1/tsconfig.app.json +10 -0
  70. package/examples/app1/tsconfig.spec.json +18 -0
  71. package/examples/app1/tslint.json +17 -0
  72. package/examples/app1/webpack.config.js +127 -0
  73. package/examples/app2/browserslist +11 -0
  74. package/examples/app2/extra-webpack.config.js +32 -0
  75. package/examples/app2/karma.conf.js +31 -0
  76. package/examples/app2/src/app/app.module.ts +90 -0
  77. package/examples/app2/src/app/dashboard/dashboard.component.html +21 -0
  78. package/examples/app2/src/app/dashboard/dashboard.component.ts +27 -0
  79. package/examples/app2/src/app/overlay.ts +26 -0
  80. package/examples/app2/src/app/projects/detail/detail.component.html +16 -0
  81. package/examples/app2/src/app/projects/detail/detail.component.ts +21 -0
  82. package/examples/app2/src/app/projects/project-list.component.html +29 -0
  83. package/examples/app2/src/app/projects/project-list.component.ts +58 -0
  84. package/examples/app2/src/app/projects/project.resolver.ts +15 -0
  85. package/examples/app2/src/app/projects/projects.service.ts +28 -0
  86. package/examples/app2/src/app/projects/tasks/tasks.component.html +10 -0
  87. package/examples/app2/src/app/projects/tasks/tasks.component.ts +16 -0
  88. package/examples/app2/src/app/projects/view/view.component.html +1 -0
  89. package/examples/app2/src/app/projects/view/view.component.ts +20 -0
  90. package/examples/app2/src/app/root/root.component.html +14 -0
  91. package/examples/app2/src/app/root/root.component.scss +12 -0
  92. package/examples/app2/src/app/root/root.component.ts +28 -0
  93. package/examples/app2/src/app/shared.module.ts +59 -0
  94. package/examples/app2/src/assets/.gitkeep +0 -0
  95. package/examples/app2/src/environments/environment.prod.ts +3 -0
  96. package/examples/app2/src/environments/environment.ts +16 -0
  97. package/examples/app2/src/favicon.ico +0 -0
  98. package/examples/app2/src/index.html +14 -0
  99. package/examples/app2/src/main.ts +36 -0
  100. package/examples/app2/src/polyfills.ts +84 -0
  101. package/examples/app2/src/styles.scss +28 -0
  102. package/examples/app2/src/test.ts +14 -0
  103. package/examples/app2/tsconfig.app.json +10 -0
  104. package/examples/app2/tsconfig.spec.json +18 -0
  105. package/examples/app2/tslint.json +7 -0
  106. package/examples/app2/webpack.config.js +92 -0
  107. package/examples/common/app-root-context.ts +10 -0
  108. package/examples/common/cache.ts +82 -0
  109. package/examples/common/index.ts +13 -0
  110. package/examples/common/module.ts +10 -0
  111. package/examples/common/overlay-container.service.ts +28 -0
  112. package/examples/common/section-card/section-card.component.html +5 -0
  113. package/examples/common/section-card/section-card.component.scss +15 -0
  114. package/examples/common/section-card/section-card.component.ts +11 -0
  115. package/examples/common/utils.ts +0 -0
  116. package/examples/portal/src/app/a-detail/a-detail.component.html +8 -0
  117. package/examples/portal/src/app/a-detail/a-detail.component.ts +18 -0
  118. package/examples/portal/src/app/about/about.component.html +27 -0
  119. package/examples/portal/src/app/about/about.component.scss +0 -0
  120. package/examples/portal/src/app/about/about.component.spec.ts +26 -0
  121. package/examples/portal/src/app/about/about.component.ts +26 -0
  122. package/examples/portal/src/app/app-routing.module.ts +57 -0
  123. package/examples/portal/src/app/app.component.html +73 -0
  124. package/examples/portal/src/app/app.component.scss +58 -0
  125. package/examples/portal/src/app/app.component.spec.ts +33 -0
  126. package/examples/portal/src/app/app.component.ts +111 -0
  127. package/examples/portal/src/app/app.module.ts +64 -0
  128. package/examples/portal/src/app/custom-settings.service.ts +44 -0
  129. package/examples/portal/src/app/overlay.ts +26 -0
  130. package/examples/portal/src/app/settings/settings.component.html +31 -0
  131. package/examples/portal/src/app/settings/settings.component.scss +3 -0
  132. package/examples/portal/src/app/settings/settings.component.ts +43 -0
  133. package/examples/portal/src/assets/.gitkeep +0 -0
  134. package/examples/portal/src/assets/apps.json +29 -0
  135. package/examples/portal/src/assets/icons/sprite.defs.svg +1 -0
  136. package/examples/portal/src/assets/images/logo.svg +16 -0
  137. package/examples/portal/src/assets/ngx-planet-micro-front-end.gif +0 -0
  138. package/examples/portal/src/browserslist +11 -0
  139. package/examples/portal/src/environments/environment.prod.ts +3 -0
  140. package/examples/portal/src/environments/environment.ts +16 -0
  141. package/examples/portal/src/extra-webpack.config.js +32 -0
  142. package/examples/portal/src/favicon.ico +0 -0
  143. package/examples/portal/src/index.html +14 -0
  144. package/examples/portal/src/karma.conf.js +31 -0
  145. package/examples/portal/src/main.ts +18 -0
  146. package/examples/portal/src/polyfills.ts +84 -0
  147. package/examples/portal/src/reboot.scss +14 -0
  148. package/examples/portal/src/styles.scss +14 -0
  149. package/examples/portal/src/test.ts +14 -0
  150. package/examples/portal/src/tsconfig.app.json +10 -0
  151. package/examples/portal/src/tsconfig.spec.json +9 -0
  152. package/examples/portal/src/tslint.json +7 -0
  153. package/extra-webpack.config.js +5 -0
  154. package/nginx.conf +17 -0
  155. package/package.json +120 -15
  156. package/packages/planet/karma.conf.js +37 -0
  157. package/packages/planet/ng-package.json +7 -0
  158. package/packages/planet/package.json +10 -0
  159. package/packages/planet/src/application/planet-application-loader.spec.ts +1102 -0
  160. package/packages/planet/src/application/planet-application-loader.ts +549 -0
  161. package/packages/planet/src/application/planet-application-ref.spec.ts +233 -0
  162. package/packages/planet/src/application/planet-application-ref.ts +131 -0
  163. package/packages/planet/src/application/planet-application.service.spec.ts +145 -0
  164. package/packages/planet/src/application/planet-application.service.ts +88 -0
  165. package/packages/planet/src/application/portal-application.spec.ts +53 -0
  166. package/packages/planet/src/application/portal-application.ts +28 -0
  167. package/packages/planet/src/assets-loader.spec.ts +689 -0
  168. package/packages/planet/src/assets-loader.ts +247 -0
  169. package/packages/planet/src/component/planet-component-loader.spec.ts +187 -0
  170. package/packages/planet/src/component/planet-component-loader.ts +173 -0
  171. package/{component/planet-component-ref.d.ts → packages/planet/src/component/planet-component-ref.ts} +3 -2
  172. package/{component/plant-component.config.d.ts → packages/planet/src/component/plant-component.config.ts} +4 -3
  173. package/packages/planet/src/debug.spec.ts +58 -0
  174. package/packages/planet/src/debug.ts +66 -0
  175. package/packages/planet/src/empty/empty.component.spec.ts +34 -0
  176. package/packages/planet/src/empty/empty.component.ts +7 -0
  177. package/packages/planet/src/global-event-dispatcher.spec.ts +81 -0
  178. package/packages/planet/src/global-event-dispatcher.ts +82 -0
  179. package/packages/planet/src/global-planet.spec.ts +39 -0
  180. package/packages/planet/src/global-planet.ts +73 -0
  181. package/packages/planet/src/helpers.spec.ts +242 -0
  182. package/packages/planet/src/helpers.ts +125 -0
  183. package/packages/planet/src/module.spec.ts +79 -0
  184. package/packages/planet/src/module.ts +25 -0
  185. package/packages/planet/src/planet.class.ts +59 -0
  186. package/packages/planet/src/planet.spec.ts +226 -0
  187. package/packages/planet/src/planet.ts +113 -0
  188. package/{public-api.d.ts → packages/planet/src/public-api.ts} +4 -0
  189. package/packages/planet/src/sandbox/constants.ts +6 -0
  190. package/packages/planet/src/sandbox/exec.ts +22 -0
  191. package/packages/planet/src/sandbox/index.ts +24 -0
  192. package/packages/planet/src/sandbox/proxy/patches/document.ts +13 -0
  193. package/packages/planet/src/sandbox/proxy/patches/eventListener.ts +49 -0
  194. package/packages/planet/src/sandbox/proxy/patches/index.ts +13 -0
  195. package/packages/planet/src/sandbox/proxy/patches/storage.ts +53 -0
  196. package/packages/planet/src/sandbox/proxy/patches/timer.ts +50 -0
  197. package/packages/planet/src/sandbox/proxy/proxies/common.ts +137 -0
  198. package/packages/planet/src/sandbox/proxy/proxies/document.ts +140 -0
  199. package/packages/planet/src/sandbox/proxy/proxies/window.ts +176 -0
  200. package/packages/planet/src/sandbox/proxy/proxy-sandbox.ts +59 -0
  201. package/packages/planet/src/sandbox/proxy/types.ts +20 -0
  202. package/packages/planet/src/sandbox/sandbox.ts +20 -0
  203. package/packages/planet/src/sandbox/snapshot/snapshot-sandbox.ts +12 -0
  204. package/packages/planet/src/sandbox/types.ts +1 -0
  205. package/packages/planet/src/test.ts +16 -0
  206. package/packages/planet/src/testing/app1.module.ts +34 -0
  207. package/packages/planet/src/testing/app2.module.ts +24 -0
  208. package/packages/planet/src/testing/applications.ts +58 -0
  209. package/packages/planet/src/testing/index.ts +2 -0
  210. package/packages/planet/src/testing/utils.ts +31 -0
  211. package/packages/planet/tsconfig.lib.json +27 -0
  212. package/packages/planet/tsconfig.lib.prod.json +9 -0
  213. package/packages/planet/tsconfig.spec.json +17 -0
  214. package/packages/planet/tslint.json +7 -0
  215. package/postcss.config.js +3 -0
  216. package/proxy.conf.js +15 -0
  217. package/tsconfig.json +23 -0
  218. package/tslint.json +80 -0
  219. package/application/planet-application-loader.d.ts +0 -68
  220. package/application/planet-application-ref.d.ts +0 -32
  221. package/application/planet-application.service.d.ts +0 -18
  222. package/application/portal-application.d.ts +0 -14
  223. package/assets-loader.d.ts +0 -23
  224. package/bundles/worktile-planet.umd.js +0 -1670
  225. package/bundles/worktile-planet.umd.js.map +0 -1
  226. package/bundles/worktile-planet.umd.min.js +0 -16
  227. package/bundles/worktile-planet.umd.min.js.map +0 -1
  228. package/component/planet-component-loader.d.ts +0 -27
  229. package/empty/empty.component.d.ts +0 -2
  230. package/esm2015/application/planet-application-loader.js +0 -417
  231. package/esm2015/application/planet-application-ref.js +0 -86
  232. package/esm2015/application/planet-application.service.js +0 -87
  233. package/esm2015/application/portal-application.js +0 -16
  234. package/esm2015/assets-loader.js +0 -165
  235. package/esm2015/component/planet-component-loader.js +0 -157
  236. package/esm2015/component/planet-component-ref.js +0 -3
  237. package/esm2015/component/plant-component.config.js +0 -7
  238. package/esm2015/empty/empty.component.js +0 -10
  239. package/esm2015/global-event-dispatcher.js +0 -71
  240. package/esm2015/global-planet.js +0 -51
  241. package/esm2015/helpers.js +0 -116
  242. package/esm2015/module.js +0 -27
  243. package/esm2015/planet.class.js +0 -9
  244. package/esm2015/planet.js +0 -86
  245. package/esm2015/public-api.js +0 -18
  246. package/esm2015/worktile-planet.js +0 -6
  247. package/fesm2015/worktile-planet.js +0 -1257
  248. package/fesm2015/worktile-planet.js.map +0 -1
  249. package/global-event-dispatcher.d.ts +0 -19
  250. package/global-planet.d.ts +0 -22
  251. package/helpers.d.ts +0 -37
  252. package/module.d.ts +0 -5
  253. package/planet.class.d.ts +0 -34
  254. package/planet.d.ts +0 -24
  255. package/worktile-planet.d.ts +0 -5
  256. package/worktile-planet.metadata.json +0 -1
@@ -1,87 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { shareReplay, map } from 'rxjs/operators';
4
- import { coerceArray } from '../helpers';
5
- import { AssetsLoader } from '../assets-loader';
6
- import { getApplicationService } from '../global-planet';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common/http";
9
- import * as i2 from "../assets-loader";
10
- export class PlanetApplicationService {
11
- constructor(http, assetsLoader) {
12
- this.http = http;
13
- this.assetsLoader = assetsLoader;
14
- this.apps = [];
15
- this.appsMap = {};
16
- if (getApplicationService()) {
17
- throw new Error('PlanetApplicationService has been injected in the portal, repeated injection is not allowed');
18
- }
19
- }
20
- register(appOrApps) {
21
- const apps = coerceArray(appOrApps);
22
- apps.forEach(app => {
23
- if (this.appsMap[app.name]) {
24
- throw new Error(`${app.name} has be registered.`);
25
- }
26
- this.apps.push(app);
27
- this.appsMap[app.name] = app;
28
- });
29
- }
30
- registerByUrl(url) {
31
- const result = this.http.get(`${url}`).pipe(map(apps => {
32
- if (apps && Array.isArray(apps)) {
33
- this.register(apps);
34
- }
35
- else {
36
- this.register(apps);
37
- }
38
- }), shareReplay());
39
- result.subscribe();
40
- return result;
41
- }
42
- unregister(name) {
43
- if (this.appsMap[name]) {
44
- delete this.appsMap[name];
45
- this.apps = this.apps.filter(app => {
46
- return app.name !== name;
47
- });
48
- }
49
- }
50
- getAppsByMatchedUrl(url) {
51
- return this.getApps().filter(app => {
52
- if (app.routerPathPrefix instanceof RegExp) {
53
- return app.routerPathPrefix.test(url);
54
- }
55
- else {
56
- return url.startsWith(app.routerPathPrefix);
57
- }
58
- });
59
- }
60
- getAppByName(name) {
61
- return this.appsMap[name];
62
- }
63
- getAppsToPreload(excludeAppNames) {
64
- return this.getApps().filter(app => {
65
- if (excludeAppNames) {
66
- return app.preload && !excludeAppNames.includes(app.name);
67
- }
68
- else {
69
- return app.preload;
70
- }
71
- });
72
- }
73
- getApps() {
74
- return this.apps;
75
- }
76
- }
77
- PlanetApplicationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlanetApplicationService_Factory() { return new PlanetApplicationService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.AssetsLoader)); }, token: PlanetApplicationService, providedIn: "root" });
78
- PlanetApplicationService.decorators = [
79
- { type: Injectable, args: [{
80
- providedIn: 'root'
81
- },] }
82
- ];
83
- PlanetApplicationService.ctorParameters = () => [
84
- { type: HttpClient },
85
- { type: AssetsLoader }
86
- ];
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhaWZlbmcvSVQvMTBfWUMvV29ya3RpbGUvbmd4LXBsYW5ldC9wYWNrYWdlcy9wbGFuZXQvc3JjLyIsInNvdXJjZXMiOlsiYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUt6RCxNQUFNLE9BQU8sd0JBQXdCO0lBS2pDLFlBQW9CLElBQWdCLEVBQVUsWUFBMEI7UUFBcEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBSmhFLFNBQUksR0FBd0IsRUFBRSxDQUFDO1FBRS9CLFlBQU8sR0FBeUMsRUFBRSxDQUFDO1FBR3ZELElBQUkscUJBQXFCLEVBQUUsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLDZGQUE2RixDQUNoRyxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFTLFNBQWtFO1FBQy9FLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLENBQUM7YUFDckQ7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVc7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1AsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQXlCLENBQUMsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxFQUNGLFdBQVcsRUFBRSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWTtRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9CLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBUyxHQUFXO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsWUFBWSxNQUFNLEVBQUU7Z0JBQ3hDLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN6QztpQkFBTTtnQkFDSCxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDL0M7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLGVBQTBCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLGVBQWUsRUFBRTtnQkFDakIsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0Q7aUJBQU07Z0JBQ0gsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDOzs7O1lBN0VKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBVFEsVUFBVTtZQUlWLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3NldHNMb2FkZXIgfSBmcm9tICcuLi9hc3NldHMtbG9hZGVyJztcbmltcG9ydCB7IGdldEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dsb2JhbC1wbGFuZXQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIGFwcHNNYXA6IHsgW2tleTogc3RyaW5nXTogUGxhbmV0QXBwbGljYXRpb24gfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGFzc2V0c0xvYWRlcjogQXNzZXRzTG9hZGVyKSB7XG4gICAgICAgIGlmIChnZXRBcHBsaWNhdGlvblNlcnZpY2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UgaGFzIGJlZW4gaW5qZWN0ZWQgaW4gdGhlIHBvcnRhbCwgcmVwZWF0ZWQgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyPFRFeHRyYT4oYXBwT3JBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbjxURXh0cmE+IHwgUGxhbmV0QXBwbGljYXRpb248VEV4dHJhPltdKSB7XG4gICAgICAgIGNvbnN0IGFwcHMgPSBjb2VyY2VBcnJheShhcHBPckFwcHMpO1xuICAgICAgICBhcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcHNNYXBbYXBwLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FwcC5uYW1lfSBoYXMgYmUgcmVnaXN0ZXJlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG4gICAgICAgICAgICB0aGlzLmFwcHNNYXBbYXBwLm5hbWVdID0gYXBwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWdpc3RlckJ5VXJsKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaHR0cC5nZXQoYCR7dXJsfWApLnBpcGUoXG4gICAgICAgICAgICBtYXAoYXBwcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcHMgJiYgQXJyYXkuaXNBcnJheShhcHBzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKGFwcHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoYXBwcyBhcyBQbGFuZXRBcHBsaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5hcHBzTWFwW25hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hcHBzTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5hcHBzID0gdGhpcy5hcHBzLmZpbHRlcihhcHAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAubmFtZSAhPT0gbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QXBwc0J5TWF0Y2hlZFVybDxURXh0cmE+KHVybDogc3RyaW5nKTogUGxhbmV0QXBwbGljYXRpb248VEV4dHJhPltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwcygpLmZpbHRlcihhcHAgPT4ge1xuICAgICAgICAgICAgaWYgKGFwcC5yb3V0ZXJQYXRoUHJlZml4IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcC5yb3V0ZXJQYXRoUHJlZml4LnRlc3QodXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKGFwcC5yb3V0ZXJQYXRoUHJlZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBzTWFwW25hbWVdO1xuICAgIH1cblxuICAgIGdldEFwcHNUb1ByZWxvYWQoZXhjbHVkZUFwcE5hbWVzPzogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwcygpLmZpbHRlcihhcHAgPT4ge1xuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVBcHBOYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAucHJlbG9hZCAmJiAhZXhjbHVkZUFwcE5hbWVzLmluY2x1ZGVzKGFwcC5uYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcC5wcmVsb2FkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBcHBzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBzO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,16 +0,0 @@
1
- export class PlanetPortalApplication {
2
- navigateByUrl(url, extras) {
3
- return this.ngZone.run(() => {
4
- return this.router.navigateByUrl(url, extras);
5
- });
6
- }
7
- run(fn) {
8
- return this.ngZone.run(() => {
9
- return fn();
10
- });
11
- }
12
- tick() {
13
- this.applicationRef.tick();
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLWFwcGxpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9oYWlmZW5nL0lULzEwX1lDL1dvcmt0aWxlL25neC1wbGFuZXQvcGFja2FnZXMvcGxhbmV0L3NyYy8iLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uL3BvcnRhbC1hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sdUJBQXVCO0lBUWhDLGFBQWEsQ0FBQyxHQUFxQixFQUFFLE1BQXlCO1FBQzFELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEdBQUcsQ0FBSSxFQUF5QjtRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFJLEdBQUcsRUFBRTtZQUMzQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciwgVXJsVHJlZSwgTmF2aWdhdGlvbkV4dHJhcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ1pvbmUsIEluamVjdG9yLCBBcHBsaWNhdGlvblJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2xvYmFsRXZlbnREaXNwYXRjaGVyIH0gZnJvbSAnLi4vZ2xvYmFsLWV2ZW50LWRpc3BhdGNoZXInO1xuXG5leHBvcnQgY2xhc3MgUGxhbmV0UG9ydGFsQXBwbGljYXRpb248VERhdGEgPSBhbnk+IHtcbiAgICBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWY7XG4gICAgaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIHJvdXRlcjogUm91dGVyO1xuICAgIG5nWm9uZTogTmdab25lO1xuICAgIGdsb2JhbEV2ZW50RGlzcGF0Y2hlcjogR2xvYmFsRXZlbnREaXNwYXRjaGVyO1xuICAgIGRhdGE6IFREYXRhO1xuXG4gICAgbmF2aWdhdGVCeVVybCh1cmw6IHN0cmluZyB8IFVybFRyZWUsIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwsIGV4dHJhcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJ1bjxUPihmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW48VD4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRpY2soKSB7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,165 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { hashCode, isEmpty, getScriptsAndStylesFullPaths } from './helpers';
3
- import { of, Observable, forkJoin, concat } from 'rxjs';
4
- import { map, switchMap, concatAll } from 'rxjs/operators';
5
- import { HttpClient } from '@angular/common/http';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- export class AssetsLoader {
9
- constructor(http) {
10
- this.http = http;
11
- this.loadedSources = [];
12
- }
13
- loadScript(src) {
14
- const id = hashCode(src);
15
- if (this.loadedSources.includes(id)) {
16
- return of({
17
- src: src,
18
- hashCode: id,
19
- loaded: true,
20
- status: 'Loaded'
21
- });
22
- }
23
- return new Observable((observer) => {
24
- const script = document.createElement('script');
25
- script.type = 'text/javascript';
26
- script.src = src;
27
- script.async = true;
28
- if (script['readyState']) {
29
- // IE
30
- script['onreadystatechange'] = () => {
31
- if (script['readyState'] === 'loaded' || script['readyState'] === 'complete') {
32
- script['onreadystatechange'] = null;
33
- observer.next({
34
- src: src,
35
- hashCode: id,
36
- loaded: true,
37
- status: 'Loaded'
38
- });
39
- observer.complete();
40
- this.loadedSources.push(id);
41
- }
42
- };
43
- }
44
- else {
45
- // Others
46
- script.onload = () => {
47
- observer.next({
48
- src: src,
49
- hashCode: id,
50
- loaded: true,
51
- status: 'Loaded'
52
- });
53
- observer.complete();
54
- this.loadedSources.push(id);
55
- };
56
- }
57
- script.onerror = error => {
58
- observer.error({
59
- src: src,
60
- hashCode: id,
61
- loaded: false,
62
- status: 'Error',
63
- error: error
64
- });
65
- observer.complete();
66
- };
67
- document.body.appendChild(script);
68
- });
69
- }
70
- loadStyle(src) {
71
- const id = hashCode(src);
72
- if (this.loadedSources.includes(id)) {
73
- return of({
74
- src: src,
75
- hashCode: id,
76
- loaded: true,
77
- status: 'Loaded'
78
- });
79
- }
80
- return new Observable((observer) => {
81
- const head = document.getElementsByTagName('head')[0];
82
- const link = document.createElement('link');
83
- link.rel = 'stylesheet';
84
- link.type = 'text/css';
85
- link.href = src;
86
- link.media = 'all';
87
- link.onload = () => {
88
- observer.next({
89
- src: src,
90
- hashCode: id,
91
- loaded: true,
92
- status: 'Loaded'
93
- });
94
- observer.complete();
95
- this.loadedSources.push(id);
96
- };
97
- link.onerror = error => {
98
- observer.error({
99
- src: src,
100
- hashCode: id,
101
- loaded: true,
102
- status: 'Loaded',
103
- error: error
104
- });
105
- observer.complete();
106
- };
107
- head.appendChild(link);
108
- });
109
- }
110
- loadScripts(sources, serial = false) {
111
- if (isEmpty(sources)) {
112
- return of(null);
113
- }
114
- const observables = sources.map(src => {
115
- return this.loadScript(src);
116
- });
117
- if (serial) {
118
- const a = concat(...observables).pipe(map(item => {
119
- return of([item]);
120
- }), concatAll());
121
- return a;
122
- }
123
- else {
124
- return forkJoin(observables).pipe();
125
- }
126
- }
127
- loadStyles(sources) {
128
- if (isEmpty(sources)) {
129
- return of(null);
130
- }
131
- return forkJoin(sources.map(src => {
132
- return this.loadStyle(src);
133
- }));
134
- }
135
- loadScriptsAndStyles(scripts = [], styles = [], serial = false) {
136
- return forkJoin([this.loadScripts(scripts, serial), this.loadStyles(styles)]);
137
- }
138
- loadAppAssets(app) {
139
- if (app.manifest) {
140
- return this.loadManifest(`${app.manifest}?t=${new Date().getTime()}`).pipe(switchMap(manifestResult => {
141
- const { scripts, styles } = getScriptsAndStylesFullPaths(app, manifestResult);
142
- return this.loadScriptsAndStyles(scripts, styles, app.loadSerial);
143
- }));
144
- }
145
- else {
146
- const { scripts, styles } = getScriptsAndStylesFullPaths(app);
147
- return this.loadScriptsAndStyles(scripts, styles, app.loadSerial);
148
- }
149
- }
150
- loadManifest(url) {
151
- return this.http.get(url).pipe(map((response) => {
152
- return response;
153
- }));
154
- }
155
- }
156
- AssetsLoader.ɵprov = i0.ɵɵdefineInjectable({ factory: function AssetsLoader_Factory() { return new AssetsLoader(i0.ɵɵinject(i1.HttpClient)); }, token: AssetsLoader, providedIn: "root" });
157
- AssetsLoader.decorators = [
158
- { type: Injectable, args: [{
159
- providedIn: 'root'
160
- },] }
161
- ];
162
- AssetsLoader.ctorParameters = () => [
163
- { type: HttpClient }
164
- ];
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFpZmVuZy9JVC8xMF9ZQy9Xb3JrdGlsZS9uZ3gtcGxhbmV0L3BhY2thZ2VzL3BsYW5ldC9zcmMvIiwic291cmNlcyI6WyJhc3NldHMtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBUyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQW9CLEdBQUcsRUFBRSxTQUFTLEVBQXdCLFNBQVMsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQWFsRCxNQUFNLE9BQU8sWUFBWTtJQUdyQixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBRjVCLGtCQUFhLEdBQWEsRUFBRSxDQUFDO0lBRUUsQ0FBQztJQUV4QyxVQUFVLENBQUMsR0FBVztRQUNsQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNqQyxPQUFPLEVBQUUsQ0FBQztnQkFDTixHQUFHLEVBQUUsR0FBRztnQkFDUixRQUFRLEVBQUUsRUFBRTtnQkFDWixNQUFNLEVBQUUsSUFBSTtnQkFDWixNQUFNLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFvQyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQXNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFB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QUMsVUFBVSxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO2FBQU07WUFDSCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUMxQixHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNsQixPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7OztZQWpLSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQVpRLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBoYXNoQ29kZSwgaXNFbXB0eSwgZ2V0U2NyaXB0c0FuZFN0eWxlc0Z1bGxQYXRocyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIGZvcmtKb2luLCBjb25jYXQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIHNoYXJlUmVwbGF5LCBtYXAsIHN3aXRjaE1hcCwgc3dpdGNoQWxsLCBjb25jYXRNYXAsIGNvbmNhdEFsbCwgc2NhbiwgcmVkdWNlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9wbGFuZXQuY2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0c0xvYWRSZXN1bHQge1xuICAgIHNyYzogc3RyaW5nO1xuICAgIGhhc2hDb2RlOiBudW1iZXI7XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHN0YXR1czogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0c0xvYWRlciB7XG4gICAgcHJpdmF0ZSBsb2FkZWRTb3VyY2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgbG9hZFNjcmlwdChzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBpZCA9IGhhc2hDb2RlKHNyYyk7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFNvdXJjZXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QXNzZXRzTG9hZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHRbJ3JlYWR5U3RhdGUnXSkge1xuICAgICAgICAgICAgICAgIC8vIElFXG4gICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdFsncmVhZHlTdGF0ZSddID09PSAnbG9hZGVkJyB8fCBzY3JpcHRbJ3JlYWR5U3RhdGUnXSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ0xvYWRlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFNvdXJjZXMucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFN0eWxlKHNyYzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGlkID0gaGFzaENvZGUoc3JjKTtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkU291cmNlcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBc3NldHNMb2FkUmVzdWx0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgICAgICAgbGluay5tZWRpYSA9ICdhbGwnO1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRTb3VyY2VzLnB1c2goaWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkU2NyaXB0cyhzb3VyY2VzOiBzdHJpbmdbXSwgc2VyaWFsID0gZmFsc2UpOiBPYnNlcnZhYmxlPEFzc2V0c0xvYWRSZXN1bHRbXT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShzb3VyY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gc291cmNlcy5tYXAoc3JjID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHQoc3JjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZXJpYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjb25jYXQoLi4ub2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2l0ZW1dKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjb25jYXRBbGwoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKS5waXBlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkU3R5bGVzKHNvdXJjZXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0W10+IHtcbiAgICAgICAgaWYgKGlzRW1wdHkoc291cmNlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oXG4gICAgICAgICAgICBzb3VyY2VzLm1hcChzcmMgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTdHlsZShzcmMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsb2FkU2NyaXB0c0FuZFN0eWxlcyhzY3JpcHRzOiBzdHJpbmdbXSA9IFtdLCBzdHlsZXM6IHN0cmluZ1tdID0gW10sIHNlcmlhbCA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihbdGhpcy5sb2FkU2NyaXB0cyhzY3JpcHRzLCBzZXJpYWwpLCB0aGlzLmxvYWRTdHlsZXMoc3R5bGVzKV0pO1xuICAgIH1cblxuICAgIGxvYWRBcHBBc3NldHMoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBpZiAoYXBwLm1hbmlmZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTWFuaWZlc3QoYCR7YXBwLm1hbmlmZXN0fT90PSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YCkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobWFuaWZlc3RSZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNjcmlwdHMsIHN0eWxlcyB9ID0gZ2V0U2NyaXB0c0FuZFN0eWxlc0Z1bGxQYXRocyhhcHAsIG1hbmlmZXN0UmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNjcmlwdHNBbmRTdHlsZXMoc2NyaXB0cywgc3R5bGVzLCBhcHAubG9hZFNlcmlhbCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjcmlwdHMsIHN0eWxlcyB9ID0gZ2V0U2NyaXB0c0FuZFN0eWxlc0Z1bGxQYXRocyhhcHApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNjcmlwdHNBbmRTdHlsZXMoc2NyaXB0cywgc3R5bGVzLCBhcHAubG9hZFNlcmlhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkTWFuaWZlc3QodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -1,157 +0,0 @@
1
- import { Injectable, ApplicationRef, NgModuleRef, NgZone, Inject } from '@angular/core';
2
- import { DomPortalOutlet, ComponentPortal, PortalInjector } from '@angular/cdk/portal';
3
- import { PlanetComponentRef } from './planet-component-ref';
4
- import { coerceArray } from '../helpers';
5
- import { map, shareReplay, finalize, delayWhen } from 'rxjs/operators';
6
- import { of, timer } from 'rxjs';
7
- import { DOCUMENT } from '@angular/common';
8
- import { globalPlanet, getApplicationLoader, getApplicationService } from '../global-planet';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- const componentWrapperClass = 'planet-component-wrapper';
12
- export class PlanetComponentLoader {
13
- constructor(applicationRef, ngModuleRef, ngZone, document) {
14
- this.applicationRef = applicationRef;
15
- this.ngModuleRef = ngModuleRef;
16
- this.ngZone = ngZone;
17
- this.document = document;
18
- this.domPortalOutletCache = new WeakMap();
19
- }
20
- get applicationLoader() {
21
- return getApplicationLoader();
22
- }
23
- get applicationService() {
24
- return getApplicationService();
25
- }
26
- getPlantAppRef(name) {
27
- if (globalPlanet.apps[name] && globalPlanet.apps[name].appModuleRef) {
28
- return of(globalPlanet.apps[name]);
29
- }
30
- else {
31
- const app = this.applicationService.getAppByName(name);
32
- return this.applicationLoader.preload(app, true).pipe(map(() => {
33
- return globalPlanet.apps[name];
34
- }));
35
- }
36
- }
37
- createInjector(appModuleRef, componentRef) {
38
- const injectionTokens = new WeakMap([[PlanetComponentRef, componentRef]]);
39
- const defaultInjector = appModuleRef.injector;
40
- return new PortalInjector(defaultInjector, injectionTokens);
41
- }
42
- getContainerElement(config) {
43
- if (!config.container) {
44
- throw new Error(`config 'container' cannot be null`);
45
- }
46
- else {
47
- if (config.container.nativeElement) {
48
- return config.container.nativeElement;
49
- }
50
- else {
51
- return config.container;
52
- }
53
- }
54
- }
55
- createWrapperElement(config) {
56
- const container = this.getContainerElement(config);
57
- const element = this.document.createElement('div');
58
- const subApp = this.applicationService.getAppByName(this.ngModuleRef.instance.appName);
59
- element.classList.add(componentWrapperClass);
60
- element.setAttribute('planet-inline', '');
61
- if (config.wrapperClass) {
62
- element.classList.add(config.wrapperClass);
63
- }
64
- if (subApp && subApp.stylePrefix) {
65
- element.classList.add(subApp.stylePrefix);
66
- }
67
- container.appendChild(element);
68
- return element;
69
- }
70
- attachComponent(plantComponent, appModuleRef, config) {
71
- const plantComponentRef = new PlanetComponentRef();
72
- const componentFactoryResolver = appModuleRef.componentFactoryResolver;
73
- const appRef = this.applicationRef;
74
- const injector = this.createInjector(appModuleRef, plantComponentRef);
75
- const wrapper = this.createWrapperElement(config);
76
- let portalOutlet = this.domPortalOutletCache.get(wrapper);
77
- if (portalOutlet) {
78
- portalOutlet.detach();
79
- }
80
- else {
81
- portalOutlet = new DomPortalOutlet(wrapper, componentFactoryResolver, appRef, injector);
82
- this.domPortalOutletCache.set(wrapper, portalOutlet);
83
- }
84
- const componentPortal = new ComponentPortal(plantComponent.component, null);
85
- const componentRef = portalOutlet.attachComponentPortal(componentPortal);
86
- if (config.initialState) {
87
- Object.assign(componentRef.instance, config.initialState);
88
- }
89
- plantComponentRef.componentInstance = componentRef.instance;
90
- plantComponentRef.componentRef = componentRef;
91
- plantComponentRef.wrapperElement = wrapper;
92
- plantComponentRef.dispose = () => {
93
- this.domPortalOutletCache.delete(wrapper);
94
- portalOutlet.dispose();
95
- };
96
- return plantComponentRef;
97
- }
98
- registerComponentFactory(componentOrComponents) {
99
- const app = this.ngModuleRef.instance.appName;
100
- this.getPlantAppRef(app).subscribe(appRef => {
101
- appRef.registerComponentFactory((componentName, config) => {
102
- const components = coerceArray(componentOrComponents);
103
- const component = components.find(item => item.name === componentName);
104
- if (component) {
105
- return this.ngZone.run(() => {
106
- const componentRef = this.attachComponent(component, appRef.appModuleRef, config);
107
- return componentRef;
108
- });
109
- }
110
- else {
111
- throw Error(`unregistered component ${componentName} in app ${app}`);
112
- }
113
- });
114
- });
115
- }
116
- register(components) {
117
- setTimeout(() => {
118
- this.registerComponentFactory(components);
119
- });
120
- }
121
- load(app, componentName, config) {
122
- const result = this.getPlantAppRef(app).pipe(delayWhen(appRef => {
123
- if (appRef.getComponentFactory()) {
124
- return of();
125
- }
126
- else {
127
- // Because register use 'setTimeout',so timer 20
128
- return timer(20);
129
- }
130
- }), map(appRef => {
131
- const componentFactory = appRef.getComponentFactory();
132
- if (componentFactory) {
133
- return componentFactory(componentName, config);
134
- }
135
- else {
136
- throw new Error(`${app}'s component(${componentName}) is not registered`);
137
- }
138
- }), finalize(() => {
139
- this.applicationRef.tick();
140
- }), shareReplay());
141
- result.subscribe();
142
- return result;
143
- }
144
- }
145
- PlanetComponentLoader.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlanetComponentLoader_Factory() { return new PlanetComponentLoader(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.NgModuleRef), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.DOCUMENT)); }, token: PlanetComponentLoader, providedIn: "root" });
146
- PlanetComponentLoader.decorators = [
147
- { type: Injectable, args: [{
148
- providedIn: 'root'
149
- },] }
150
- ];
151
- PlanetComponentLoader.ctorParameters = () => [
152
- { type: ApplicationRef },
153
- { type: NgModuleRef },
154
- { type: NgZone },
155
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
156
- ];
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWNvbXBvbmVudC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhaWZlbmcvSVQvMTBfWUMvV29ya3RpbGUvbmd4LXBsYW5ldC9wYWNrYWdlcy9wbGFuZXQvc3JjLyIsInNvdXJjZXMiOlsiY29tcG9uZW50L3BsYW5ldC1jb21wb25lbnQtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBaUIsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBaUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLEVBQUUsRUFBd0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQUU3RixNQUFNLHFCQUFxQixHQUFHLDBCQUEwQixDQUFDO0FBVXpELE1BQU0sT0FBTyxxQkFBcUI7SUFXOUIsWUFDWSxjQUE4QixFQUM5QixXQUE2QixFQUM3QixNQUFjLEVBQ0ksUUFBYTtRQUgvQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDSSxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBZG5DLHlCQUFvQixH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O0lBQ1AsQ0FBQztJQUVELElBQUksQ0FDQSxHQUFXLEVBQ1gsYUFBcUIsRUFDckIsTUFBbUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3hDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7Z0JBQzlCLE9BQU8sRUFBRSxFQUFFLENBQUM7YUFDZjtpQkFBTTtnQkFDSCxnREFBZ0Q7Z0JBQ2hELE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3BCO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1QsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxJQUFJLGdCQUFnQixFQUFFO2dCQUNsQixPQUFPLGdCQUFnQixDQUFlLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNoRTtpQkFBTTtnQkFDSCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxnQkFBZ0IsYUFBYSxxQkFBcUIsQ0FBQyxDQUFDO2FBQzdFO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxFQUFFLENBQ2hCLENBQUM7UUFDRixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7OztZQTVKSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQXBCb0IsY0FBYztZQUFFLFdBQVc7WUFBRSxNQUFNOzRDQW9DL0MsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBBcHBsaWNhdGlvblJlZiwgTmdNb2R1bGVSZWYsIE5nWm9uZSwgRWxlbWVudFJlZiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBEb21Qb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgUG9ydGFsSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnLi4vYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLXJlZic7XG5pbXBvcnQgeyBQbGFuZXRDb21wb25lbnRSZWYgfSBmcm9tICcuL3BsYW5ldC1jb21wb25lbnQtcmVmJztcbmltcG9ydCB7IFBsYW50Q29tcG9uZW50Q29uZmlnIH0gZnJvbSAnLi9wbGFudC1jb21wb25lbnQuY29uZmlnJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBmaW5hbGl6ZSwgZGVib3VuY2UsIGZpbHRlciwgdGFrZSwgZGVsYXksIGRlbGF5V2hlbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBpbnRlcnZhbCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdsb2JhbFBsYW5ldCwgZ2V0QXBwbGljYXRpb25Mb2FkZXIsIGdldEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dsb2JhbC1wbGFuZXQnO1xuXG5jb25zdCBjb21wb25lbnRXcmFwcGVyQ2xhc3MgPSAncGxhbmV0LWNvbXBvbmVudC13cmFwcGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBQbGFuZXRDb21wb25lbnQ8VCA9IGFueT4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhbmV0Q29tcG9uZW50TG9hZGVyIHtcbiAgICBwcml2YXRlIGRvbVBvcnRhbE91dGxldENhY2hlID0gbmV3IFdlYWtNYXA8YW55LCBEb21Qb3J0YWxPdXRsZXQ+KCk7XG5cbiAgICBwcml2YXRlIGdldCBhcHBsaWNhdGlvbkxvYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIGdldEFwcGxpY2F0aW9uTG9hZGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgYXBwbGljYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXBwbGljYXRpb25TZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIG5nTW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+LFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnlcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIGdldFBsYW50QXBwUmVmKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWY+IHtcbiAgICAgICAgaWYgKGdsb2JhbFBsYW5ldC5hcHBzW25hbWVdICYmIGdsb2JhbFBsYW5ldC5hcHBzW25hbWVdLmFwcE1vZHVsZVJlZikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGdsb2JhbFBsYW5ldC5hcHBzW25hbWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcEJ5TmFtZShuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTG9hZGVyLnByZWxvYWQoYXBwLCB0cnVlKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxQbGFuZXQuYXBwc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSW5qZWN0b3I8VERhdGE+KFxuICAgICAgICBhcHBNb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4sXG4gICAgICAgIGNvbXBvbmVudFJlZjogUGxhbmV0Q29tcG9uZW50UmVmPFREYXRhPlxuICAgICk6IFBvcnRhbEluamVjdG9yIHtcbiAgICAgICAgY29uc3QgaW5qZWN0aW9uVG9rZW5zID0gbmV3IFdlYWtNYXA8YW55LCBhbnk+KFtbUGxhbmV0Q29tcG9uZW50UmVmLCBjb21wb25lbnRSZWZdXSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbmplY3RvciA9IGFwcE1vZHVsZVJlZi5pbmplY3RvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBQb3J0YWxJbmplY3RvcihkZWZhdWx0SW5qZWN0b3IsIGluamVjdGlvblRva2Vucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250YWluZXJFbGVtZW50KGNvbmZpZzogUGxhbnRDb21wb25lbnRDb25maWcpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGlmICghY29uZmlnLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25maWcgJ2NvbnRhaW5lcicgY2Fubm90IGJlIG51bGxgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoY29uZmlnLmNvbnRhaW5lciBhcyBFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjb25maWcuY29udGFpbmVyIGFzIEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuY29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVXcmFwcGVyRWxlbWVudChjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudChjb25maWcpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29uc3Qgc3ViQXBwID0gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwQnlOYW1lKHRoaXMubmdNb2R1bGVSZWYuaW5zdGFuY2UuYXBwTmFtZSk7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjb21wb25lbnRXcmFwcGVyQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgncGxhbmV0LWlubGluZScsICcnKTtcbiAgICAgICAgaWYgKGNvbmZpZy53cmFwcGVyQ2xhc3MpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjb25maWcud3JhcHBlckNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ViQXBwICYmIHN1YkFwcC5zdHlsZVByZWZpeCkge1xuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKHN1YkFwcC5zdHlsZVByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dGFjaENvbXBvbmVudDxURGF0YT4oXG4gICAgICAgIHBsYW50Q29tcG9uZW50OiBQbGFuZXRDb21wb25lbnQsXG4gICAgICAgIGFwcE1vZHVsZVJlZjogTmdNb2R1bGVSZWY8YW55PixcbiAgICAgICAgY29uZmlnOiBQbGFudENvbXBvbmVudENvbmZpZ1xuICAgICk6IFBsYW5ldENvbXBvbmVudFJlZjxURGF0YT4ge1xuICAgICAgICBjb25zdCBwbGFudENvbXBvbmVudFJlZiA9IG5ldyBQbGFuZXRDb21wb25lbnRSZWYoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyID0gYXBwTW9kdWxlUmVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjtcbiAgICAgICAgY29uc3QgYXBwUmVmID0gdGhpcy5hcHBsaWNhdGlvblJlZjtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yPFREYXRhPihhcHBNb2R1bGVSZWYsIHBsYW50Q29tcG9uZW50UmVmKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuY3JlYXRlV3JhcHBlckVsZW1lbnQoY29uZmlnKTtcbiAgICAgICAgbGV0IHBvcnRhbE91dGxldCA9IHRoaXMuZG9tUG9ydGFsT3V0bGV0Q2FjaGUuZ2V0KHdyYXBwZXIpO1xuICAgICAgICBpZiAocG9ydGFsT3V0bGV0KSB7XG4gICAgICAgICAgICBwb3J0YWxPdXRsZXQuZGV0YWNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3J0YWxPdXRsZXQgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KHdyYXBwZXIsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgYXBwUmVmLCBpbmplY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmRvbVBvcnRhbE91dGxldENhY2hlLnNldCh3cmFwcGVyLCBwb3J0YWxPdXRsZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwocGxhbnRDb21wb25lbnQuY29tcG9uZW50LCBudWxsKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbDxURGF0YT4oY29tcG9uZW50UG9ydGFsKTtcbiAgICAgICAgaWYgKGNvbmZpZy5pbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlLCBjb25maWcuaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBwbGFudENvbXBvbmVudFJlZi5jb21wb25lbnRJbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgICAgcGxhbnRDb21wb25lbnRSZWYuY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuICAgICAgICBwbGFudENvbXBvbmVudFJlZi53cmFwcGVyRWxlbWVudCA9IHdyYXBwZXI7XG4gICAgICAgIHBsYW50Q29tcG9uZW50UmVmLmRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvbVBvcnRhbE91dGxldENhY2hlLmRlbGV0ZSh3cmFwcGVyKTtcbiAgICAgICAgICAgIHBvcnRhbE91dGxldC5kaXNwb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBwbGFudENvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRPckNvbXBvbmVudHM6IFBsYW5ldENvbXBvbmVudCB8IFBsYW5ldENvbXBvbmVudFtdKSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IHRoaXMubmdNb2R1bGVSZWYuaW5zdGFuY2UuYXBwTmFtZTtcbiAgICAgICAgdGhpcy5nZXRQbGFudEFwcFJlZihhcHApLnN1YnNjcmliZShhcHBSZWYgPT4ge1xuICAgICAgICAgICAgYXBwUmVmLnJlZ2lzdGVyQ29tcG9uZW50RmFjdG9yeSgoY29tcG9uZW50TmFtZTogc3RyaW5nLCBjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnPGFueT4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29lcmNlQXJyYXkoY29tcG9uZW50T3JDb21wb25lbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmF0dGFjaENvbXBvbmVudDxhbnk+KGNvbXBvbmVudCwgYXBwUmVmLmFwcE1vZHVsZVJlZiwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGB1bnJlZ2lzdGVyZWQgY29tcG9uZW50ICR7Y29tcG9uZW50TmFtZX0gaW4gYXBwICR7YXBwfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWdpc3Rlcihjb21wb25lbnRzOiBQbGFuZXRDb21wb25lbnQgfCBQbGFuZXRDb21wb25lbnRbXSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkPFRDb21wID0gdW5rbm93biwgVERhdGEgPSB1bmtub3duPihcbiAgICAgICAgYXBwOiBzdHJpbmcsXG4gICAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgY29uZmlnOiBQbGFudENvbXBvbmVudENvbmZpZzxURGF0YT5cbiAgICApOiBPYnNlcnZhYmxlPFBsYW5ldENvbXBvbmVudFJlZjxUQ29tcD4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRQbGFudEFwcFJlZihhcHApLnBpcGUoXG4gICAgICAgICAgICBkZWxheVdoZW4oYXBwUmVmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXBwUmVmLmdldENvbXBvbmVudEZhY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHJlZ2lzdGVyIHVzZSAnc2V0VGltZW91dCcsc28gdGltZXIgMjBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVyKDIwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChhcHBSZWYgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSBhcHBSZWYuZ2V0Q29tcG9uZW50RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRGYWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5PFREYXRhLCBUQ29tcD4oY29tcG9uZW50TmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBwfSdzIGNvbXBvbmVudCgke2NvbXBvbmVudE5hbWV9KSBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=
@@ -1,3 +0,0 @@
1
- export class PlanetComponentRef {
2
- }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWNvbXBvbmVudC1yZWYuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhaWZlbmcvSVQvMTBfWUMvV29ya3RpbGUvbmd4LXBsYW5ldC9wYWNrYWdlcy9wbGFuZXQvc3JjLyIsInNvdXJjZXMiOlsiY29tcG9uZW50L3BsYW5ldC1jb21wb25lbnQtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxrQkFBa0I7Q0FLOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIFBsYW5ldENvbXBvbmVudFJlZjxUQ29tcCA9IGFueT4ge1xuICAgIHdyYXBwZXJFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBjb21wb25lbnRJbnN0YW5jZTogVENvbXA7XG4gICAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VENvbXA+O1xuICAgIGRpc3Bvc2U6ICgpID0+IHZvaWQ7XG59XG4iXX0=
@@ -1,7 +0,0 @@
1
- export class PlantComponentConfig {
2
- constructor() {
3
- /** Data being injected into the child component. */
4
- this.initialState = null;
5
- }
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbnQtY29tcG9uZW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFpZmVuZy9JVC8xMF9ZQy9Xb3JrdGlsZS9uZ3gtcGxhbmV0L3BhY2thZ2VzL3BsYW5ldC9zcmMvIiwic291cmNlcyI6WyJjb21wb25lbnQvcGxhbnQtY29tcG9uZW50LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sb0JBQW9CO0lBQWpDO1FBS0ksb0RBQW9EO1FBQ3BELGlCQUFZLEdBQWtCLElBQUksQ0FBQztJQUN2QyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3Q29udGFpbmVyUmVmLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBQbGFudENvbXBvbmVudENvbmZpZzxURGF0YSA9IGFueT4ge1xuICAgIC8qKiBMb2FkIHRhcmdldCBjb250YWluZXIgKi9cbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudCB8IGFueT47XG4gICAgLyoqIENvbXBvbmVudCB3cmFwcGVyIGNsYXNzLiAqL1xuICAgIHdyYXBwZXJDbGFzcz86IHN0cmluZztcbiAgICAvKiogRGF0YSBiZWluZyBpbmplY3RlZCBpbnRvIHRoZSBjaGlsZCBjb21wb25lbnQuICovXG4gICAgaW5pdGlhbFN0YXRlPzogVERhdGEgfCBudWxsID0gbnVsbDtcbn1cbiJdfQ==
@@ -1,10 +0,0 @@
1
- import { Component } from '@angular/core';
2
- export class EmptyComponent {
3
- }
4
- EmptyComponent.decorators = [
5
- { type: Component, args: [{
6
- selector: 'empty-component',
7
- template: ``
8
- },] }
9
- ];
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9oYWlmZW5nL0lULzEwX1lDL1dvcmt0aWxlL25neC1wbGFuZXQvcGFja2FnZXMvcGxhbmV0L3NyYy8iLCJzb3VyY2VzIjpbImVtcHR5L2VtcHR5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTFDLE1BQU0sT0FBTyxjQUFjOzs7WUFKMUIsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFFBQVEsRUFBRSxFQUFFO2FBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlbXB0eS1jb21wb25lbnQnLFxuICAgIHRlbXBsYXRlOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBFbXB0eUNvbXBvbmVudCB7fVxuIl19
@@ -1,71 +0,0 @@
1
- import { Subject, Observable } from 'rxjs';
2
- import { filter, map } from 'rxjs/operators';
3
- import { Injectable, NgZone } from '@angular/core';
4
- import * as i0 from "@angular/core";
5
- const CUSTOM_EVENT_NAME = 'PLANET_GLOBAL_EVENT_DISPATCHER';
6
- export class GlobalEventDispatcher {
7
- constructor(ngZone) {
8
- this.ngZone = ngZone;
9
- this.subject$ = new Subject();
10
- this.hasAddGlobalEventListener = false;
11
- this.subscriptionCount = 0;
12
- this.globalEventListener = (event) => {
13
- this.subject$.next(event.detail);
14
- };
15
- }
16
- addGlobalEventListener() {
17
- this.hasAddGlobalEventListener = true;
18
- window.addEventListener(CUSTOM_EVENT_NAME, this.globalEventListener);
19
- }
20
- removeGlobalEventListener() {
21
- this.hasAddGlobalEventListener = false;
22
- window.removeEventListener(CUSTOM_EVENT_NAME, this.globalEventListener);
23
- }
24
- dispatch(name, payload) {
25
- window.dispatchEvent(new CustomEvent(CUSTOM_EVENT_NAME, {
26
- detail: {
27
- name: name,
28
- payload: payload
29
- }
30
- }));
31
- }
32
- register(eventName) {
33
- return new Observable(observer => {
34
- if (!this.hasAddGlobalEventListener) {
35
- this.addGlobalEventListener();
36
- }
37
- this.subscriptionCount++;
38
- const subscription = this.subject$
39
- .pipe(filter(event => {
40
- return event.name === eventName;
41
- }), map(event => {
42
- return event.payload;
43
- }))
44
- .subscribe(payload => {
45
- this.ngZone.run(() => {
46
- observer.next(payload);
47
- });
48
- });
49
- return () => {
50
- this.subscriptionCount--;
51
- subscription.unsubscribe();
52
- if (!this.subscriptionCount) {
53
- this.removeGlobalEventListener();
54
- }
55
- };
56
- });
57
- }
58
- getSubscriptionCount() {
59
- return this.subscriptionCount;
60
- }
61
- }
62
- GlobalEventDispatcher.ɵprov = i0.ɵɵdefineInjectable({ factory: function GlobalEventDispatcher_Factory() { return new GlobalEventDispatcher(i0.ɵɵinject(i0.NgZone)); }, token: GlobalEventDispatcher, providedIn: "root" });
63
- GlobalEventDispatcher.decorators = [
64
- { type: Injectable, args: [{
65
- providedIn: 'root'
66
- },] }
67
- ];
68
- GlobalEventDispatcher.ctorParameters = () => [
69
- { type: NgZone }
70
- ];
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWV2ZW50LWRpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhaWZlbmcvSVQvMTBfWUMvV29ya3RpbGUvbmd4LXBsYW5ldC9wYWNrYWdlcy9wbGFuZXQvc3JjLyIsInNvdXJjZXMiOlsiZ2xvYmFsLWV2ZW50LWRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPbkQsTUFBTSxpQkFBaUIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUszRCxNQUFNLE9BQU8scUJBQXFCO0lBcUI5QixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXBCMUIsYUFBUSxHQUFtQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXpELDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUVsQyxzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFFdEIsd0JBQW1CLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQztJQVltQyxDQUFDO0lBVjlCLHNCQUFzQjtRQUMxQixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8seUJBQXlCO1FBQzdCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDdkMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFJRCxRQUFRLENBQVcsSUFBWSxFQUFFLE9BQWtCO1FBQy9DLE1BQU0sQ0FBQyxhQUFhLENBQ2hCLElBQUksV0FBVyxDQUFDLGlCQUFpQixFQUFFO1lBQy9CLE1BQU0sRUFBRTtnQkFDSixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsT0FBTzthQUNuQjtTQUNKLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBSSxTQUFpQjtRQUN6QixPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVE7aUJBQzdCLElBQUksQ0FDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1gsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztZQUNwQyxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUNMO2lCQUNBLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ1AsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDekIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7aUJBQ3BDO1lBQ0wsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xDLENBQUM7Ozs7WUFyRUosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFYb0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsRGlzcGF0Y2hlckV2ZW50IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGF5bG9hZDogYW55O1xufVxuXG5jb25zdCBDVVNUT01fRVZFTlRfTkFNRSA9ICdQTEFORVRfR0xPQkFMX0VWRU5UX0RJU1BBVENIRVInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdsb2JhbEV2ZW50RGlzcGF0Y2hlciB7XG4gICAgcHJpdmF0ZSBzdWJqZWN0JDogU3ViamVjdDxHbG9iYWxEaXNwYXRjaGVyRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgaGFzQWRkR2xvYmFsRXZlbnRMaXN0ZW5lciA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25Db3VudCA9IDA7XG5cbiAgICBwcml2YXRlIGdsb2JhbEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdCQubmV4dChldmVudC5kZXRhaWwpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMuaGFzQWRkR2xvYmFsRXZlbnRMaXN0ZW5lciA9IHRydWU7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKENVU1RPTV9FVkVOVF9OQU1FLCB0aGlzLmdsb2JhbEV2ZW50TGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlR2xvYmFsRXZlbnRMaXN0ZW5lcigpIHtcbiAgICAgICAgdGhpcy5oYXNBZGRHbG9iYWxFdmVudExpc3RlbmVyID0gZmFsc2U7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKENVU1RPTV9FVkVOVF9OQU1FLCB0aGlzLmdsb2JhbEV2ZW50TGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHt9XG5cbiAgICBkaXNwYXRjaDxUUGF5bG9hZD4obmFtZTogc3RyaW5nLCBwYXlsb2FkPzogVFBheWxvYWQpIHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoQ1VTVE9NX0VWRU5UX05BTUUsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXI8VD4oZXZlbnROYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNBZGRHbG9iYWxFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudExpc3RlbmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbkNvdW50Kys7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnN1YmplY3QkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQubmFtZSA9PT0gZXZlbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uQ291bnQtLTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9uQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVHbG9iYWxFdmVudExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U3Vic2NyaXB0aW9uQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbkNvdW50O1xuICAgIH1cbn1cbiJdfQ==