@net7/boilerplate-arianna 4.9.7 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/esm2022/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +29 -0
  2. package/{esm2020 → esm2022}/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/chart-tippy/chart-tippy.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/components/extended-tree/extended-tree.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/gallery-breadcrumbs-tooltip/gallery-breadcrumbs-tooltip.mjs +4 -4
  6. package/esm2022/lib/components/pdf-viewer/pdf-viewer.mjs +31 -0
  7. package/esm2022/lib/components/scheda-dropdown/scheda-dropdown.mjs +26 -0
  8. package/{esm2020 → esm2022}/lib/components/scheda-image-navigator/scheda-image-navigator.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/components/scheda-search/scheda-search.mjs +4 -4
  10. package/esm2022/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +82 -0
  11. package/esm2022/lib/config/apollo.config.mjs +738 -0
  12. package/esm2022/lib/data-sources/autocomplete-wrapper.ds.mjs +48 -0
  13. package/esm2022/lib/data-sources/aw-facets-wrapper.ds.mjs +162 -0
  14. package/esm2022/lib/data-sources/bubble-chart.ds.mjs +95 -0
  15. package/esm2022/lib/data-sources/carousel.ds.mjs +74 -0
  16. package/esm2022/lib/data-sources/entita-nav.ds.mjs +74 -0
  17. package/esm2022/lib/data-sources/extended-tree.ds.mjs +157 -0
  18. package/esm2022/lib/data-sources/gallery-results.ds.mjs +103 -0
  19. package/esm2022/lib/data-sources/home-autocomplete.ds.mjs +80 -0
  20. package/esm2022/lib/data-sources/home-facets-wrapper.ds.mjs +190 -0
  21. package/esm2022/lib/data-sources/linked-objects.ds.mjs +219 -0
  22. package/{esm2020 → esm2022}/lib/data-sources/map.ds.mjs +1 -1
  23. package/{esm2020 → esm2022}/lib/data-sources/related-entities.ds.mjs +2 -2
  24. package/{esm2020 → esm2022}/lib/data-sources/scheda-breadcrumbs.ds.mjs +1 -1
  25. package/{esm2020 → esm2022}/lib/data-sources/scheda-dropdown.ds.mjs +1 -1
  26. package/esm2022/lib/data-sources/scheda-image-navigator.ds.mjs +82 -0
  27. package/{esm2020 → esm2022}/lib/data-sources/scheda-image.ds.mjs +1 -1
  28. package/esm2022/lib/data-sources/scheda-pdf.ds.mjs +54 -0
  29. package/esm2022/lib/data-sources/scheda-search.ds.mjs +141 -0
  30. package/{esm2020 → esm2022}/lib/data-sources/sidebar-header.ds.mjs +1 -1
  31. package/esm2022/lib/data-sources/timeline.ds.mjs +106 -0
  32. package/esm2022/lib/data-sources/tree.ds.mjs +154 -0
  33. package/esm2022/lib/event-handlers/autocomplete-wrapper.eh.mjs +18 -0
  34. package/esm2022/lib/event-handlers/aw-facets-wrapper.eh.mjs +88 -0
  35. package/esm2022/lib/event-handlers/bubble-chart.eh.mjs +98 -0
  36. package/esm2022/lib/event-handlers/chart-tippy.eh.mjs +64 -0
  37. package/{esm2020 → esm2022}/lib/event-handlers/entita-nav.eh.mjs +1 -1
  38. package/esm2022/lib/event-handlers/extended-tree.eh.mjs +23 -0
  39. package/esm2022/lib/event-handlers/gallery-results.eh.mjs +38 -0
  40. package/esm2022/lib/event-handlers/hero.eh.mjs +25 -0
  41. package/{esm2020 → esm2022}/lib/event-handlers/home-autocomplete.eh.mjs +1 -1
  42. package/esm2022/lib/event-handlers/home-facets-wrapper.eh.mjs +125 -0
  43. package/{esm2020 → esm2022}/lib/event-handlers/home-item-tags-wrapper.eh.mjs +1 -1
  44. package/esm2022/lib/event-handlers/linked-objects.eh.mjs +60 -0
  45. package/esm2022/lib/event-handlers/map.eh.mjs +23 -0
  46. package/{esm2020 → esm2022}/lib/event-handlers/scheda-breadcrumbs.eh.mjs +1 -1
  47. package/esm2022/lib/event-handlers/scheda-dropdown.eh.mjs +17 -0
  48. package/esm2022/lib/event-handlers/scheda-image-navigator.eh.mjs +18 -0
  49. package/esm2022/lib/event-handlers/scheda-pdf.eh.mjs +14 -0
  50. package/{esm2020 → esm2022}/lib/event-handlers/scheda-search.eh.mjs +1 -1
  51. package/{esm2020 → esm2022}/lib/event-handlers/sidebar-header.eh.mjs +1 -1
  52. package/esm2022/lib/event-handlers/timeline.eh.mjs +46 -0
  53. package/esm2022/lib/event-handlers/tree.eh.mjs +119 -0
  54. package/esm2022/lib/helpers/metadata.helper.mjs +89 -0
  55. package/esm2022/lib/helpers/node.helper.mjs +14 -0
  56. package/esm2022/lib/helpers/title.helper.mjs +12 -0
  57. package/esm2022/lib/layouts/collection-layout/collection-layout.ds.mjs +185 -0
  58. package/esm2022/lib/layouts/collection-layout/collection-layout.eh.mjs +27 -0
  59. package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.mjs +5 -5
  60. package/esm2022/lib/layouts/entita-layout/entita-layout.ds.mjs +320 -0
  61. package/esm2022/lib/layouts/entita-layout/entita-layout.eh.mjs +119 -0
  62. package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.mjs +5 -5
  63. package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-facets.config.mjs +3 -3
  64. package/esm2022/lib/layouts/gallery-layout/gallery-layout.ds.mjs +48 -0
  65. package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.mjs +5 -5
  66. package/esm2022/lib/layouts/home-layout/home-layout.ds.mjs +298 -0
  67. package/esm2022/lib/layouts/home-layout/home-layout.eh.mjs +245 -0
  68. package/{esm2020 → esm2022}/lib/layouts/home-layout/home-layout.mjs +5 -5
  69. package/esm2022/lib/layouts/map-layout/map-layout.ds.mjs +122 -0
  70. package/esm2022/lib/layouts/map-layout/map-layout.eh.mjs +44 -0
  71. package/{esm2020 → esm2022}/lib/layouts/map-layout/map-layout.mjs +5 -5
  72. package/esm2022/lib/layouts/scheda-layout/scheda-layout.ds.mjs +472 -0
  73. package/esm2022/lib/layouts/scheda-layout/scheda-layout.eh.mjs +347 -0
  74. package/{esm2020 → esm2022}/lib/layouts/scheda-layout/scheda-layout.mjs +5 -5
  75. package/{esm2020 → esm2022}/lib/layouts/search-layout/search-facets.config.mjs +3 -3
  76. package/esm2022/lib/layouts/search-layout/search-layout.ds.mjs +306 -0
  77. package/esm2022/lib/layouts/search-layout/search-layout.eh.mjs +175 -0
  78. package/{esm2020 → esm2022}/lib/layouts/search-layout/search-layout.mjs +5 -5
  79. package/esm2022/lib/layouts/timeline-layout/timeline-layout.ds.mjs +143 -0
  80. package/esm2022/lib/layouts/timeline-layout/timeline-layout.eh.mjs +41 -0
  81. package/{esm2020 → esm2022}/lib/layouts/timeline-layout/timeline-layout.mjs +5 -5
  82. package/{esm2020 → esm2022}/lib/n7-boilerplate-arianna.module.mjs +48 -48
  83. package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-checkbox.mjs +1 -1
  84. package/esm2022/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +89 -0
  85. package/esm2022/lib/search/aw-facet-inputs/aw-facet-input.mjs +30 -0
  86. package/esm2022/lib/search/aw-search.model.mjs +331 -0
  87. package/esm2022/lib/search/aw-search.service.mjs +42 -0
  88. package/esm2022/lib/search/entity-links.helper.mjs +126 -0
  89. package/{fesm2020 → fesm2022}/net7-boilerplate-arianna.mjs +170 -159
  90. package/fesm2022/net7-boilerplate-arianna.mjs.map +1 -0
  91. package/lib/components/aw-facets-wrapper/aw-facets-wrapper.d.ts +1 -1
  92. package/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.d.ts +1 -1
  93. package/lib/components/chart-tippy/chart-tippy.d.ts +1 -1
  94. package/lib/components/extended-tree/extended-tree.d.ts +2 -2
  95. package/lib/components/gallery-breadcrumbs-tooltip/gallery-breadcrumbs-tooltip.d.ts +2 -2
  96. package/lib/components/pdf-viewer/pdf-viewer.d.ts +3 -3
  97. package/lib/components/scheda-dropdown/scheda-dropdown.d.ts +2 -2
  98. package/lib/components/scheda-image-navigator/scheda-image-navigator.d.ts +2 -2
  99. package/lib/components/scheda-search/scheda-search.d.ts +2 -2
  100. package/lib/components/smart-breadcrumbs/smart-breadcrumbs.d.ts +1 -1
  101. package/lib/config-types/arianna/app.d.ts +4 -4
  102. package/lib/config-types/arianna/layouts.d.ts +1 -1
  103. package/lib/data-sources/carousel.ds.d.ts +2 -2
  104. package/lib/data-sources/extended-tree.ds.d.ts +2 -2
  105. package/lib/layouts/collection-layout/collection-layout.d.ts +1 -1
  106. package/lib/layouts/collection-layout/collection-layout.types.d.ts +2 -2
  107. package/lib/layouts/entita-layout/entita-layout.d.ts +1 -1
  108. package/lib/layouts/entita-layout/entita-layout.types.d.ts +2 -2
  109. package/lib/layouts/gallery-layout/gallery-layout.d.ts +1 -1
  110. package/lib/layouts/home-layout/home-layout.d.ts +1 -1
  111. package/lib/layouts/map-layout/map-layout.d.ts +1 -1
  112. package/lib/layouts/map-layout/map-layout.ds.d.ts +1 -1
  113. package/lib/layouts/scheda-layout/scheda-layout.d.ts +1 -1
  114. package/lib/layouts/search-layout/search-layout.d.ts +1 -1
  115. package/lib/layouts/search-layout/search-layout.ds.d.ts +1 -1
  116. package/lib/layouts/timeline-layout/timeline-layout.d.ts +1 -1
  117. package/lib/layouts/timeline-layout/timeline-layout.ds.d.ts +1 -1
  118. package/lib/search/aw-search.model.d.ts +3 -3
  119. package/package.json +5 -11
  120. package/esm2020/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +0 -29
  121. package/esm2020/lib/components/pdf-viewer/pdf-viewer.mjs +0 -31
  122. package/esm2020/lib/components/scheda-dropdown/scheda-dropdown.mjs +0 -26
  123. package/esm2020/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +0 -82
  124. package/esm2020/lib/config/apollo.config.mjs +0 -738
  125. package/esm2020/lib/data-sources/autocomplete-wrapper.ds.mjs +0 -48
  126. package/esm2020/lib/data-sources/aw-facets-wrapper.ds.mjs +0 -162
  127. package/esm2020/lib/data-sources/bubble-chart.ds.mjs +0 -95
  128. package/esm2020/lib/data-sources/carousel.ds.mjs +0 -74
  129. package/esm2020/lib/data-sources/entita-nav.ds.mjs +0 -74
  130. package/esm2020/lib/data-sources/extended-tree.ds.mjs +0 -157
  131. package/esm2020/lib/data-sources/gallery-results.ds.mjs +0 -103
  132. package/esm2020/lib/data-sources/home-autocomplete.ds.mjs +0 -80
  133. package/esm2020/lib/data-sources/home-facets-wrapper.ds.mjs +0 -190
  134. package/esm2020/lib/data-sources/linked-objects.ds.mjs +0 -219
  135. package/esm2020/lib/data-sources/scheda-image-navigator.ds.mjs +0 -82
  136. package/esm2020/lib/data-sources/scheda-pdf.ds.mjs +0 -54
  137. package/esm2020/lib/data-sources/scheda-search.ds.mjs +0 -141
  138. package/esm2020/lib/data-sources/timeline.ds.mjs +0 -106
  139. package/esm2020/lib/data-sources/tree.ds.mjs +0 -154
  140. package/esm2020/lib/event-handlers/autocomplete-wrapper.eh.mjs +0 -18
  141. package/esm2020/lib/event-handlers/aw-facets-wrapper.eh.mjs +0 -88
  142. package/esm2020/lib/event-handlers/bubble-chart.eh.mjs +0 -98
  143. package/esm2020/lib/event-handlers/chart-tippy.eh.mjs +0 -64
  144. package/esm2020/lib/event-handlers/extended-tree.eh.mjs +0 -23
  145. package/esm2020/lib/event-handlers/gallery-results.eh.mjs +0 -38
  146. package/esm2020/lib/event-handlers/hero.eh.mjs +0 -25
  147. package/esm2020/lib/event-handlers/home-facets-wrapper.eh.mjs +0 -125
  148. package/esm2020/lib/event-handlers/linked-objects.eh.mjs +0 -60
  149. package/esm2020/lib/event-handlers/map.eh.mjs +0 -23
  150. package/esm2020/lib/event-handlers/scheda-dropdown.eh.mjs +0 -17
  151. package/esm2020/lib/event-handlers/scheda-image-navigator.eh.mjs +0 -18
  152. package/esm2020/lib/event-handlers/scheda-pdf.eh.mjs +0 -14
  153. package/esm2020/lib/event-handlers/timeline.eh.mjs +0 -46
  154. package/esm2020/lib/event-handlers/tree.eh.mjs +0 -119
  155. package/esm2020/lib/helpers/metadata.helper.mjs +0 -89
  156. package/esm2020/lib/helpers/node.helper.mjs +0 -14
  157. package/esm2020/lib/helpers/title.helper.mjs +0 -12
  158. package/esm2020/lib/layouts/collection-layout/collection-layout.ds.mjs +0 -185
  159. package/esm2020/lib/layouts/collection-layout/collection-layout.eh.mjs +0 -27
  160. package/esm2020/lib/layouts/entita-layout/entita-layout.ds.mjs +0 -320
  161. package/esm2020/lib/layouts/entita-layout/entita-layout.eh.mjs +0 -119
  162. package/esm2020/lib/layouts/gallery-layout/gallery-layout.ds.mjs +0 -48
  163. package/esm2020/lib/layouts/home-layout/home-layout.ds.mjs +0 -298
  164. package/esm2020/lib/layouts/home-layout/home-layout.eh.mjs +0 -245
  165. package/esm2020/lib/layouts/map-layout/map-layout.ds.mjs +0 -122
  166. package/esm2020/lib/layouts/map-layout/map-layout.eh.mjs +0 -44
  167. package/esm2020/lib/layouts/scheda-layout/scheda-layout.ds.mjs +0 -472
  168. package/esm2020/lib/layouts/scheda-layout/scheda-layout.eh.mjs +0 -347
  169. package/esm2020/lib/layouts/search-layout/search-layout.ds.mjs +0 -306
  170. package/esm2020/lib/layouts/search-layout/search-layout.eh.mjs +0 -175
  171. package/esm2020/lib/layouts/timeline-layout/timeline-layout.ds.mjs +0 -143
  172. package/esm2020/lib/layouts/timeline-layout/timeline-layout.eh.mjs +0 -41
  173. package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +0 -89
  174. package/esm2020/lib/search/aw-facet-inputs/aw-facet-input.mjs +0 -30
  175. package/esm2020/lib/search/aw-search.model.mjs +0 -331
  176. package/esm2020/lib/search/aw-search.service.mjs +0 -42
  177. package/esm2020/lib/search/entity-links.helper.mjs +0 -126
  178. package/fesm2015/net7-boilerplate-arianna.mjs +0 -8551
  179. package/fesm2015/net7-boilerplate-arianna.mjs.map +0 -1
  180. package/fesm2020/net7-boilerplate-arianna.mjs.map +0 -1
  181. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  182. /package/{esm2020 → esm2022}/lib/config-types/arianna/app.mjs +0 -0
  183. /package/{esm2020 → esm2022}/lib/config-types/arianna/index.mjs +0 -0
  184. /package/{esm2020 → esm2022}/lib/config-types/arianna/layouts.mjs +0 -0
  185. /package/{esm2020 → esm2022}/lib/config-types/index.mjs +0 -0
  186. /package/{esm2020 → esm2022}/lib/data-sources/chart-tippy.ds.mjs +0 -0
  187. /package/{esm2020 → esm2022}/lib/data-sources/entita-metadata-viewer.ds.mjs +0 -0
  188. /package/{esm2020 → esm2022}/lib/data-sources/hero.ds.mjs +0 -0
  189. /package/{esm2020 → esm2022}/lib/data-sources/home-hero-patrimonio.ds.mjs +0 -0
  190. /package/{esm2020 → esm2022}/lib/data-sources/home-item-tags-wrapper.ds.mjs +0 -0
  191. /package/{esm2020 → esm2022}/lib/data-sources/index.mjs +0 -0
  192. /package/{esm2020 → esm2022}/lib/data-sources/scheda-inner-title.ds.mjs +0 -0
  193. /package/{esm2020 → esm2022}/lib/data-sources/scheda-metadata.ds.mjs +0 -0
  194. /package/{esm2020 → esm2022}/lib/data-sources/search-layout-tabs.ds.mjs +0 -0
  195. /package/{esm2020 → esm2022}/lib/data-sources/table.ds.mjs +0 -0
  196. /package/{esm2020 → esm2022}/lib/event-handlers/home-hero-patrimonio.eh.mjs +0 -0
  197. /package/{esm2020 → esm2022}/lib/event-handlers/index.mjs +0 -0
  198. /package/{esm2020 → esm2022}/lib/event-handlers/search-layout-tabs.eh.mjs +0 -0
  199. /package/{esm2020 → esm2022}/lib/event-handlers/table.eh.mjs +0 -0
  200. /package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.config.mjs +0 -0
  201. /package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.types.mjs +0 -0
  202. /package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.config.mjs +0 -0
  203. /package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.types.mjs +0 -0
  204. /package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.config.mjs +0 -0
  205. /package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.eh.mjs +0 -0
  206. /package/{esm2020 → esm2022}/lib/layouts/home-layout/home-layout.config.mjs +0 -0
  207. /package/{esm2020 → esm2022}/lib/layouts/index.mjs +0 -0
  208. /package/{esm2020 → esm2022}/lib/layouts/map-layout/map-layout.config.mjs +0 -0
  209. /package/{esm2020 → esm2022}/lib/layouts/scheda-layout/scheda-layout.config.mjs +0 -0
  210. /package/{esm2020 → esm2022}/lib/layouts/search-layout/search-layout.config.mjs +0 -0
  211. /package/{esm2020 → esm2022}/lib/layouts/timeline-layout/timeline-layout.config.mjs +0 -0
  212. /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-select.mjs +0 -0
  213. /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-text.mjs +0 -0
  214. /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/index.mjs +0 -0
  215. /package/{esm2020 → esm2022}/net7-boilerplate-arianna.mjs +0 -0
  216. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,347 +0,0 @@
1
- import { EventHandler } from '@net7/core';
2
- import { isEmpty, isEqual, isNumber } from 'lodash';
3
- import { forkJoin, from, of, ReplaySubject, Subject, timer } from 'rxjs';
4
- import { debounce, filter, first, switchMap } from 'rxjs/operators';
5
- export class AwSchedaLayoutEH extends EventHandler {
6
- constructor() {
7
- super(...arguments);
8
- this.destroyed$ = new Subject();
9
- this.treeLoaded$ = new ReplaySubject();
10
- this.extendedTreeChanged$ = new Subject();
11
- this.schedaSearchChanged$ = new Subject();
12
- }
13
- listen() {
14
- this.innerEvents$.subscribe(({ type, payload }) => {
15
- switch (type) {
16
- case 'aw-scheda-layout.init':
17
- {
18
- this.dataSource.onInit(payload);
19
- this.configuration = payload.configuration;
20
- this.route = payload.route;
21
- this.router = payload.router;
22
- const paramId = this.route.snapshot.params.id || '';
23
- if (paramId) {
24
- this.dataSource.currentId = paramId;
25
- }
26
- this.listenRoute();
27
- this.listenRouteQueryParams();
28
- this.listenExtendedTree();
29
- this.listenSchedaSearch();
30
- this.loadNavigation(paramId);
31
- this.emitOuter('viewleaf');
32
- // scroll top
33
- window.scrollTo(0, 0);
34
- }
35
- break;
36
- case 'aw-scheda-layout.destroy':
37
- this.destroyed$.next();
38
- this.dataSource.onDestroy();
39
- break;
40
- case 'aw-scheda-layout.togglesidebar':
41
- this.dataSource.collapseSidebar();
42
- break;
43
- default:
44
- console.warn('unhandled inner event of type', type);
45
- break;
46
- }
47
- });
48
- this.outerEvents$.subscribe(({ type, payload }) => {
49
- switch (type) {
50
- case 'aw-sidebar-header.click':
51
- this.dataSource.collapseSidebar();
52
- break;
53
- case 'aw-scheda-dropdown.click':
54
- this.dataSource.changeDigitalObject(payload);
55
- break;
56
- /**
57
- * EXTENDED TREE EVENTS
58
- * ---------------------------------------------------> */
59
- case 'aw-extended-tree.change':
60
- {
61
- let key;
62
- let delay;
63
- if (payload.inputPayload === 'search-input') {
64
- key = 'query';
65
- delay = 1000;
66
- }
67
- else if (payload.inputPayload === 'limit-select') {
68
- key = 'limit';
69
- }
70
- else if (payload.inputPayload === 'page-input-change') {
71
- this.pageInputValue = +payload.value;
72
- }
73
- else if (payload.inputPayload === 'page-input-enter') {
74
- key = 'page';
75
- }
76
- if (key) {
77
- this.extendedTreeChanged$.next({
78
- key,
79
- delay,
80
- value: payload.value,
81
- });
82
- }
83
- }
84
- break;
85
- case 'aw-extended-tree.search':
86
- this.extendedTreeChanged$.next({
87
- key: 'query',
88
- value: payload.value
89
- });
90
- break;
91
- case 'aw-extended-tree.click':
92
- this.extendedTreeChanged$.next({
93
- key: 'page',
94
- value: payload
95
- });
96
- break;
97
- case 'aw-extended-tree.pageinputsubmit':
98
- if (isNumber(this.pageInputValue)) {
99
- this.extendedTreeChanged$.next({
100
- key: 'page',
101
- value: this.pageInputValue
102
- });
103
- }
104
- break;
105
- /**
106
- * SCHEDA (INTERNAL) SEARCH EVENTS
107
- * ---------------------------------------------------> */
108
- case 'aw-scheda-search.change':
109
- {
110
- let key;
111
- let delay;
112
- if (payload.inputPayload === 'input-change') {
113
- key = 'query';
114
- delay = 1000;
115
- }
116
- else if (payload.inputPayload === 'input-enter') {
117
- key = 'query';
118
- }
119
- else if (payload.inputPayload === 'limit-select') {
120
- key = 'limit';
121
- }
122
- if (key) {
123
- this.schedaSearchChanged$.next({
124
- key,
125
- delay,
126
- value: payload.value,
127
- });
128
- }
129
- }
130
- break;
131
- case 'aw-scheda-search.click':
132
- this.schedaSearchChanged$.next({
133
- key: 'page',
134
- value: payload
135
- });
136
- break;
137
- default:
138
- break;
139
- }
140
- });
141
- }
142
- listenRoute() {
143
- this.route.paramMap.subscribe((params) => {
144
- const paramId = params.get('id');
145
- if (paramId) {
146
- if (paramId) {
147
- this.dataSource.currentId = paramId;
148
- this.emitOuter('routechanged', paramId);
149
- }
150
- this.dataSource.contentIsLoading = true;
151
- this.dataSource.loadItem(paramId).pipe(switchMap((response) => this.parseDigitalObjects$(response))).subscribe((response) => {
152
- this.dataSource.contentIsLoading = false;
153
- if (response) {
154
- this.dataSource.loadContent(response);
155
- this.dataSource.loadExtendedTree();
156
- this.dataSource.loadInternalSearch();
157
- this.checkTreeItems(response);
158
- }
159
- });
160
- }
161
- // scroll top
162
- window.scrollTo(0, 0);
163
- });
164
- }
165
- listenExtendedTree() {
166
- this.extendedTreeChanged$.pipe(filter(({ key, value }) => !(key === 'page' && (!isNumber(+value) || +value < 1))), debounce(({ delay }) => timer(delay || 1))).subscribe(({ key, value }) => {
167
- const queryParams = {};
168
- if (typeof value === 'string') {
169
- queryParams[key] = value.trim().length ? value : null;
170
- }
171
- else {
172
- queryParams[key] = `${value}`;
173
- }
174
- // page check
175
- if (key !== 'page') {
176
- queryParams.page = '1';
177
- }
178
- // reset pageInput value
179
- this.pageInputValue = null;
180
- // update url
181
- this.router.navigate([], {
182
- queryParams,
183
- queryParamsHandling: 'merge'
184
- });
185
- });
186
- }
187
- listenSchedaSearch() {
188
- this.schedaSearchChanged$.pipe(filter(({ key, value }) => !(key === 'page' && (!isNumber(+value) || +value < 1))), debounce(({ delay }) => timer(delay || 1))).subscribe(({ key, value }) => {
189
- const queryParams = {};
190
- if (typeof value === 'string') {
191
- queryParams[`search-${key}`] = value.trim().length ? value : null;
192
- }
193
- else {
194
- queryParams[`search-${key}`] = `${value}`;
195
- }
196
- // page check
197
- if (key !== 'page') {
198
- queryParams['search-page'] = '1';
199
- }
200
- // update url
201
- this.router.navigate([], {
202
- queryParams,
203
- queryParamsHandling: 'merge'
204
- });
205
- });
206
- }
207
- listenRouteQueryParams() {
208
- this.route.queryParams.subscribe((params) => {
209
- const extendedTreeParams = {};
210
- const internalSearchParams = {};
211
- Object.keys(params).forEach((key) => {
212
- const treeAllowed = ['query', 'page', 'limit'];
213
- const internalAllowed = treeAllowed.map((item) => `search-${item}`);
214
- if (treeAllowed.includes(key)) {
215
- let value;
216
- if (key !== 'query') {
217
- value = isNumber(+params[key]) ? +params[key] : null;
218
- }
219
- else {
220
- value = params[key];
221
- }
222
- if (value) {
223
- extendedTreeParams[key] = value;
224
- }
225
- }
226
- if (internalAllowed.includes(key)) {
227
- let value;
228
- if (key !== 'search-query') {
229
- value = isNumber(+params[key]) ? +params[key] : null;
230
- }
231
- else {
232
- value = params[key];
233
- }
234
- if (value) {
235
- internalSearchParams[key] = value;
236
- }
237
- }
238
- });
239
- // scheda search changed
240
- if (!isEqual(this.dataSource.internalSearchParams, internalSearchParams)) {
241
- this.dataSource.internalSearchParams = internalSearchParams;
242
- // has node response
243
- if (this.dataSource.lastResponse) {
244
- this.emitOuter('schedasearchrequest');
245
- this.dataSource.loadInternalSearch();
246
- }
247
- // extended tree changed
248
- }
249
- if (!isEqual(this.dataSource.extendedTreeParams, extendedTreeParams)) {
250
- this.dataSource.extendedTreeParams = extendedTreeParams;
251
- // has node response
252
- if (this.dataSource.lastResponse) {
253
- this.emitOuter('extendedtreerequest');
254
- this.dataSource.loadExtendedTree();
255
- }
256
- }
257
- });
258
- }
259
- loadNavigation(selectedItem) {
260
- this.dataSource.updateNavigation('Caricamento in corso...');
261
- this.dataSource.getNavigation().subscribe((response) => {
262
- if (response) {
263
- this.dataSource.setTree(response);
264
- this.dataSource.updateNavigation(this.dataSource.getTree().label);
265
- this.emitOuter('navigationresponse', {
266
- tree: this.dataSource.getTree(),
267
- currentItem: selectedItem,
268
- basePath: this.configuration.get('paths').schedaBasePath,
269
- });
270
- // emit signal
271
- this.treeLoaded$.next();
272
- }
273
- });
274
- }
275
- parseDigitalObjects$(response) {
276
- const iiifManifest$ = {};
277
- const baseUrls = this.configuration.get('baseUrls') || {};
278
- const { iiifServer, iipServer } = baseUrls;
279
- if (Array.isArray(response?.digitalObjects)) {
280
- response.digitalObjects.forEach((digitalObject) => {
281
- // iip config url check
282
- if (iipServer && digitalObject.type === 'images-iip') {
283
- digitalObject.items.forEach((item) => {
284
- item.url = `${iipServer}${item.url}`;
285
- });
286
- }
287
- // iiif config url check
288
- if (iiifServer && digitalObject.type === 'images-iiif') {
289
- digitalObject.items.forEach((item) => {
290
- item.url = `${iiifServer}${item.url}`;
291
- });
292
- }
293
- if (digitalObject.type === 'images-iiif') {
294
- digitalObject.items.forEach(({ url }) => {
295
- iiifManifest$[url] = from(fetch(url)
296
- .then((data) => {
297
- if (!data.ok) {
298
- throw Error(data.statusText);
299
- }
300
- return data.json();
301
- })
302
- .catch((err) => {
303
- console.warn(`Error loading iiif manifest ${url}`, err);
304
- return null;
305
- }));
306
- });
307
- }
308
- });
309
- }
310
- if (!isEmpty(iiifManifest$)) {
311
- return forkJoin(iiifManifest$).pipe(switchMap((data) => {
312
- response.digitalObjects.forEach((digitalObject) => {
313
- if (digitalObject.type === 'images-iiif') {
314
- digitalObject.items.forEach((itemImages, index) => {
315
- digitalObject.items[index].iiifImages = this.getManifestImages(data[itemImages.url]);
316
- });
317
- }
318
- });
319
- return of(response);
320
- }));
321
- }
322
- return of(response);
323
- }
324
- getManifestImages(manifest) {
325
- const iiifImages = [];
326
- if (manifest?.sequences) {
327
- manifest.sequences.forEach(({ canvases }) => {
328
- canvases.forEach(({ images }) => {
329
- images.forEach(({ resource }) => {
330
- iiifImages.push(resource['@id']);
331
- });
332
- });
333
- });
334
- }
335
- return iiifImages;
336
- }
337
- checkTreeItems(response) {
338
- this.treeLoaded$.pipe(first()).subscribe(() => {
339
- const treeDS = this.dataSource.getWidgetDataSource('aw-tree');
340
- const { items } = treeDS.output;
341
- if (!items.length && response.lastAl?.id) {
342
- this.emitOuter('selectParent', response.lastAl.id);
343
- }
344
- });
345
- }
346
- }
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5laC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5laC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFDM0IsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUNMLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUNsRCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQ25DLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFlBQVk7SUFBbEQ7O1FBR1UsZUFBVSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBUXpDLGdCQUFXLEdBQXdCLElBQUksYUFBYSxFQUFFLENBQUM7UUFFdkQseUJBQW9CLEdBSXZCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFWCx5QkFBb0IsR0FJdkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQWlYckIsQ0FBQztJQTdXUSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ2hELFFBQVEsSUFBSSxFQUFFO2dCQUNaLEtBQUssdUJBQXVCO29CQUFFO3dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO3dCQUMz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LENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFRO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNuQixLQUFLLEVBQUUsQ0FDUixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3BEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEV2ZW50SGFuZGxlciB9IGZyb20gJ0BuZXQ3L2NvcmUnO1xuaW1wb3J0IHtcbiAgaXNFbXB0eSwgaXNFcXVhbCwgaXNOdW1iZXJcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGZvcmtKb2luLCBmcm9tLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGltZXJcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSwgZmlsdGVyLCBmaXJzdCwgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnQG5ldDcvYm9pbGVycGxhdGUtY29tbW9uJztcbmltcG9ydCB7IEF3U2NoZWRhTGF5b3V0RFMgfSBmcm9tICcuL3NjaGVkYS1sYXlvdXQuZHMnO1xuXG5leHBvcnQgY2xhc3MgQXdTY2hlZGFMYXlvdXRFSCBleHRlbmRzIEV2ZW50SGFuZGxlciB7XG4gIGRhdGFTb3VyY2U6IEF3U2NoZWRhTGF5b3V0RFM7XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2U7XG5cbiAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG5cbiAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcjtcblxuICBwcml2YXRlIHRyZWVMb2FkZWQkOiBSZXBsYXlTdWJqZWN0PHZvaWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICBwcml2YXRlIGV4dGVuZGVkVHJlZUNoYW5nZWQkOiBTdWJqZWN0PHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGRlbGF5PzogbnVtYmVyO1xuICB9PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBzY2hlZGFTZWFyY2hDaGFuZ2VkJDogU3ViamVjdDx7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgICBkZWxheT86IG51bWJlcjtcbiAgfT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgcGFnZUlucHV0VmFsdWU6IG51bWJlcjtcblxuICBwdWJsaWMgbGlzdGVuKCkge1xuICAgIHRoaXMuaW5uZXJFdmVudHMkLnN1YnNjcmliZSgoeyB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdhdy1zY2hlZGEtbGF5b3V0LmluaXQnOiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLm9uSW5pdChwYXlsb2FkKTtcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBwYXlsb2FkLmNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgdGhpcy5yb3V0ZSA9IHBheWxvYWQucm91dGU7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIgPSBwYXlsb2FkLnJvdXRlcjtcbiAgICAgICAgICBjb25zdCBwYXJhbUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQgfHwgJyc7XG4gICAgICAgICAgaWYgKHBhcmFtSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jdXJyZW50SWQgPSBwYXJhbUlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxpc3RlblJvdXRlKCk7XG4gICAgICAgICAgdGhpcy5saXN0ZW5Sb3V0ZVF1ZXJ5UGFyYW1zKCk7XG4gICAgICAgICAgdGhpcy5saXN0ZW5FeHRlbmRlZFRyZWUoKTtcbiAgICAgICAgICB0aGlzLmxpc3RlblNjaGVkYVNlYXJjaCgpO1xuICAgICAgICAgIHRoaXMubG9hZE5hdmlnYXRpb24ocGFyYW1JZCk7XG4gICAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ3ZpZXdsZWFmJyk7XG4gICAgICAgICAgLy8gc2Nyb2xsIHRvcFxuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlICdhdy1zY2hlZGEtbGF5b3V0LmRlc3Ryb3knOlxuICAgICAgICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLm9uRGVzdHJveSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F3LXNjaGVkYS1sYXlvdXQudG9nZ2xlc2lkZWJhcic6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNvbGxhcHNlU2lkZWJhcigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKCd1bmhhbmRsZWQgaW5uZXIgZXZlbnQgb2YgdHlwZScsIHR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRlckV2ZW50cyQuc3Vic2NyaWJlKCh7IHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2F3LXNpZGViYXItaGVhZGVyLmNsaWNrJzpcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29sbGFwc2VTaWRlYmFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LXNjaGVkYS1kcm9wZG93bi5jbGljayc6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNoYW5nZURpZ2l0YWxPYmplY3QocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVYVEVOREVEIFRSRUUgRVZFTlRTXG4gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gKi9cbiAgICAgICAgY2FzZSAnYXctZXh0ZW5kZWQtdHJlZS5jaGFuZ2UnOiB7XG4gICAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICAgIGxldCBkZWxheTogbnVtYmVyO1xuICAgICAgICAgIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ3NlYXJjaC1pbnB1dCcpIHtcbiAgICAgICAgICAgIGtleSA9ICdxdWVyeSc7XG4gICAgICAgICAgICBkZWxheSA9IDEwMDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2xpbWl0LXNlbGVjdCcpIHtcbiAgICAgICAgICAgIGtleSA9ICdsaW1pdCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ3BhZ2UtaW5wdXQtY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5wdXRWYWx1ZSA9ICtwYXlsb2FkLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5pbnB1dFBheWxvYWQgPT09ICdwYWdlLWlucHV0LWVudGVyJykge1xuICAgICAgICAgICAga2V5ID0gJ3BhZ2UnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgZGVsYXksXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1leHRlbmRlZC10cmVlLnNlYXJjaCc6XG4gICAgICAgICAgdGhpcy5leHRlbmRlZFRyZWVDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgICAgIGtleTogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWV4dGVuZGVkLXRyZWUuY2xpY2snOlxuICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWV4dGVuZGVkLXRyZWUucGFnZWlucHV0c3VibWl0JzpcbiAgICAgICAgICBpZiAoaXNOdW1iZXIodGhpcy5wYWdlSW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYWdlSW5wdXRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTQ0hFREEgKElOVEVSTkFMKSBTRUFSQ0ggRVZFTlRTXG4gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gKi9cbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLXNlYXJjaC5jaGFuZ2UnOiB7XG4gICAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICAgIGxldCBkZWxheTogbnVtYmVyO1xuICAgICAgICAgIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2lucHV0LWNoYW5nZScpIHtcbiAgICAgICAgICAgIGtleSA9ICdxdWVyeSc7XG4gICAgICAgICAgICBkZWxheSA9IDEwMDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2lucHV0LWVudGVyJykge1xuICAgICAgICAgICAga2V5ID0gJ3F1ZXJ5JztcbiAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQuaW5wdXRQYXlsb2FkID09PSAnbGltaXQtc2VsZWN0Jykge1xuICAgICAgICAgICAga2V5ID0gJ2xpbWl0JztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkYVNlYXJjaENoYW5nZWQkLm5leHQoe1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIGRlbGF5LFxuICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLXNlYXJjaC5jbGljayc6XG4gICAgICAgICAgdGhpcy5zY2hlZGFTZWFyY2hDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAgICAgdmFsdWU6IHBheWxvYWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUm91dGUoKSB7XG4gICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1JZCA9IHBhcmFtcy5nZXQoJ2lkJyk7XG4gICAgICBpZiAocGFyYW1JZCkge1xuICAgICAgICBpZiAocGFyYW1JZCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jdXJyZW50SWQgPSBwYXJhbUlkO1xuICAgICAgICAgIHRoaXMuZW1pdE91dGVyKCdyb3V0ZWNoYW5nZWQnLCBwYXJhbUlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29udGVudElzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkSXRlbShwYXJhbUlkKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2UpID0+IHRoaXMucGFyc2VEaWdpdGFsT2JqZWN0cyQocmVzcG9uc2UpKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29udGVudElzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRDb250ZW50KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRXh0ZW5kZWRUcmVlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UubG9hZEludGVybmFsU2VhcmNoKCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVHJlZUl0ZW1zKHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gc2Nyb2xsIHRvcFxuICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5FeHRlbmRlZFRyZWUoKSB7XG4gICAgdGhpcy5leHRlbmRlZFRyZWVDaGFuZ2VkJC5waXBlKFxuICAgICAgZmlsdGVyKCh7IGtleSwgdmFsdWUgfSkgPT4gIShrZXkgPT09ICdwYWdlJyAmJiAoIWlzTnVtYmVyKCt2YWx1ZSkgfHwgK3ZhbHVlIDwgMSkpKSxcbiAgICAgIGRlYm91bmNlKCh7IGRlbGF5IH0pID0+IHRpbWVyKGRlbGF5IHx8IDEpKSxcbiAgICApLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIFtpZDogc3RyaW5nXTogc3RyaW5nXG4gICAgICB9ID0ge307XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB2YWx1ZS50cmltKCkubGVuZ3RoID8gdmFsdWUgOiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IGAke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIHBhZ2UgY2hlY2tcbiAgICAgIGlmIChrZXkgIT09ICdwYWdlJykge1xuICAgICAgICBxdWVyeVBhcmFtcy5wYWdlID0gJzEnO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBwYWdlSW5wdXQgdmFsdWVcbiAgICAgIHRoaXMucGFnZUlucHV0VmFsdWUgPSBudWxsO1xuXG4gICAgICAvLyB1cGRhdGUgdXJsXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblNjaGVkYVNlYXJjaCgpIHtcbiAgICB0aGlzLnNjaGVkYVNlYXJjaENoYW5nZWQkLnBpcGUoXG4gICAgICBmaWx0ZXIoKHsga2V5LCB2YWx1ZSB9KSA9PiAhKGtleSA9PT0gJ3BhZ2UnICYmICghaXNOdW1iZXIoK3ZhbHVlKSB8fCArdmFsdWUgPCAxKSkpLFxuICAgICAgZGVib3VuY2UoKHsgZGVsYXkgfSkgPT4gdGltZXIoZGVsYXkgfHwgMSkpLFxuICAgICkuc3Vic2NyaWJlKCh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgW2lkOiBzdHJpbmddOiBzdHJpbmdcbiAgICAgIH0gPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcXVlcnlQYXJhbXNbYHNlYXJjaC0ke2tleX1gXSA9IHZhbHVlLnRyaW0oKS5sZW5ndGggPyB2YWx1ZSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhcmFtc1tgc2VhcmNoLSR7a2V5fWBdID0gYCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgLy8gcGFnZSBjaGVja1xuICAgICAgaWYgKGtleSAhPT0gJ3BhZ2UnKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zWydzZWFyY2gtcGFnZSddID0gJzEnO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdXJsXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblJvdXRlUXVlcnlQYXJhbXMoKSB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZXh0ZW5kZWRUcmVlUGFyYW1zID0ge307XG4gICAgICBjb25zdCBpbnRlcm5hbFNlYXJjaFBhcmFtcyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdHJlZUFsbG93ZWQgPSBbJ3F1ZXJ5JywgJ3BhZ2UnLCAnbGltaXQnXTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxBbGxvd2VkID0gdHJlZUFsbG93ZWQubWFwKChpdGVtKSA9PiBgc2VhcmNoLSR7aXRlbX1gKTtcbiAgICAgICAgaWYgKHRyZWVBbGxvd2VkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ3F1ZXJ5Jykge1xuICAgICAgICAgICAgdmFsdWUgPSBpc051bWJlcigrcGFyYW1zW2tleV0pID8gK3BhcmFtc1trZXldIDogbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBleHRlbmRlZFRyZWVQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJuYWxBbGxvd2VkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ3NlYXJjaC1xdWVyeScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaXNOdW1iZXIoK3BhcmFtc1trZXldKSA/ICtwYXJhbXNba2V5XSA6IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaW50ZXJuYWxTZWFyY2hQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkYSBzZWFyY2ggY2hhbmdlZFxuICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuZGF0YVNvdXJjZS5pbnRlcm5hbFNlYXJjaFBhcmFtcywgaW50ZXJuYWxTZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5pbnRlcm5hbFNlYXJjaFBhcmFtcyA9IGludGVybmFsU2VhcmNoUGFyYW1zO1xuICAgICAgICAvLyBoYXMgbm9kZSByZXNwb25zZVxuICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxhc3RSZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMuZW1pdE91dGVyKCdzY2hlZGFzZWFyY2hyZXF1ZXN0Jyk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRJbnRlcm5hbFNlYXJjaCgpO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGV4dGVuZGVkIHRyZWUgY2hhbmdlZFxuICAgICAgfVxuICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuZGF0YVNvdXJjZS5leHRlbmRlZFRyZWVQYXJhbXMsIGV4dGVuZGVkVHJlZVBhcmFtcykpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmV4dGVuZGVkVHJlZVBhcmFtcyA9IGV4dGVuZGVkVHJlZVBhcmFtcztcbiAgICAgICAgLy8gaGFzIG5vZGUgcmVzcG9uc2VcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sYXN0UmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcignZXh0ZW5kZWR0cmVlcmVxdWVzdCcpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRXh0ZW5kZWRUcmVlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5hdmlnYXRpb24oc2VsZWN0ZWRJdGVtKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZU5hdmlnYXRpb24oJ0NhcmljYW1lbnRvIGluIGNvcnNvLi4uJyk7XG4gICAgdGhpcy5kYXRhU291cmNlLmdldE5hdmlnYXRpb24oKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNldFRyZWUocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlTmF2aWdhdGlvbih0aGlzLmRhdGFTb3VyY2UuZ2V0VHJlZSgpLmxhYmVsKTtcbiAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ25hdmlnYXRpb25yZXNwb25zZScsIHtcbiAgICAgICAgICB0cmVlOiB0aGlzLmRhdGFTb3VyY2UuZ2V0VHJlZSgpLFxuICAgICAgICAgIGN1cnJlbnRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgYmFzZVBhdGg6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2NoZWRhQmFzZVBhdGgsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGVtaXQgc2lnbmFsXG4gICAgICAgIHRoaXMudHJlZUxvYWRlZCQubmV4dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURpZ2l0YWxPYmplY3RzJChyZXNwb25zZSkge1xuICAgIGNvbnN0IGlpaWZNYW5pZmVzdCQgPSB7fTtcbiAgICBjb25zdCBiYXNlVXJscyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2Jhc2VVcmxzJykgfHwge307XG4gICAgY29uc3QgeyBpaWlmU2VydmVyLCBpaXBTZXJ2ZXIgfSA9IGJhc2VVcmxzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlPy5kaWdpdGFsT2JqZWN0cykpIHtcbiAgICAgIHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzLmZvckVhY2goKGRpZ2l0YWxPYmplY3QpID0+IHtcbiAgICAgICAgLy8gaWlwIGNvbmZpZyB1cmwgY2hlY2tcbiAgICAgICAgaWYgKGlpcFNlcnZlciAmJiBkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlwJykge1xuICAgICAgICAgIGRpZ2l0YWxPYmplY3QuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS51cmwgPSBgJHtpaXBTZXJ2ZXJ9JHtpdGVtLnVybH1gO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlpaWYgY29uZmlnIHVybCBjaGVja1xuICAgICAgICBpZiAoaWlpZlNlcnZlciAmJiBkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlpZicpIHtcbiAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0udXJsID0gYCR7aWlpZlNlcnZlcn0ke2l0ZW0udXJsfWA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlnaXRhbE9iamVjdC50eXBlID09PSAnaW1hZ2VzLWlpaWYnKSB7XG4gICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtcy5mb3JFYWNoKCh7IHVybCB9KSA9PiB7XG4gICAgICAgICAgICBpaWlmTWFuaWZlc3QkW3VybF0gPSBmcm9tKFxuICAgICAgICAgICAgICBmZXRjaCh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5vaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihkYXRhLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuanNvbigpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgbG9hZGluZyBpaWlmIG1hbmlmZXN0ICR7dXJsfWAsIGVycik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaXNFbXB0eShpaWlmTWFuaWZlc3QkKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKGlpaWZNYW5pZmVzdCQpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2UuZGlnaXRhbE9iamVjdHMuZm9yRWFjaCgoZGlnaXRhbE9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpZ2l0YWxPYmplY3QudHlwZSA9PT0gJ2ltYWdlcy1paWlmJykge1xuICAgICAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW1JbWFnZXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtc1tpbmRleF0uaWlpZkltYWdlcyA9IHRoaXMuZ2V0TWFuaWZlc3RJbWFnZXMoXG4gICAgICAgICAgICAgICAgICBkYXRhW2l0ZW1JbWFnZXMudXJsXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYW5pZmVzdEltYWdlcyhtYW5pZmVzdCkge1xuICAgIGNvbnN0IGlpaWZJbWFnZXMgPSBbXTtcbiAgICBpZiAobWFuaWZlc3Q/LnNlcXVlbmNlcykge1xuICAgICAgbWFuaWZlc3Quc2VxdWVuY2VzLmZvckVhY2goKHsgY2FudmFzZXMgfSkgPT4ge1xuICAgICAgICBjYW52YXNlcy5mb3JFYWNoKCh7IGltYWdlcyB9KSA9PiB7XG4gICAgICAgICAgaW1hZ2VzLmZvckVhY2goKHsgcmVzb3VyY2UgfSkgPT4ge1xuICAgICAgICAgICAgaWlpZkltYWdlcy5wdXNoKHJlc291cmNlWydAaWQnXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpaWlmSW1hZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1RyZWVJdGVtcyhyZXNwb25zZSkge1xuICAgIHRoaXMudHJlZUxvYWRlZCQucGlwZShcbiAgICAgIGZpcnN0KClcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlRFMgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0V2lkZ2V0RGF0YVNvdXJjZSgnYXctdHJlZScpO1xuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdHJlZURTLm91dHB1dDtcbiAgICAgIGlmICghaXRlbXMubGVuZ3RoICYmIHJlc3BvbnNlLmxhc3RBbD8uaWQpIHtcbiAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ3NlbGVjdFBhcmVudCcsIHJlc3BvbnNlLmxhc3RBbC5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==