@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.
- package/esm2022/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +29 -0
- package/{esm2020 → esm2022}/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/chart-tippy/chart-tippy.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/extended-tree/extended-tree.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/gallery-breadcrumbs-tooltip/gallery-breadcrumbs-tooltip.mjs +4 -4
- package/esm2022/lib/components/pdf-viewer/pdf-viewer.mjs +31 -0
- package/esm2022/lib/components/scheda-dropdown/scheda-dropdown.mjs +26 -0
- package/{esm2020 → esm2022}/lib/components/scheda-image-navigator/scheda-image-navigator.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/scheda-search/scheda-search.mjs +4 -4
- package/esm2022/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +82 -0
- package/esm2022/lib/config/apollo.config.mjs +738 -0
- package/esm2022/lib/data-sources/autocomplete-wrapper.ds.mjs +48 -0
- package/esm2022/lib/data-sources/aw-facets-wrapper.ds.mjs +162 -0
- package/esm2022/lib/data-sources/bubble-chart.ds.mjs +95 -0
- package/esm2022/lib/data-sources/carousel.ds.mjs +74 -0
- package/esm2022/lib/data-sources/entita-nav.ds.mjs +74 -0
- package/esm2022/lib/data-sources/extended-tree.ds.mjs +157 -0
- package/esm2022/lib/data-sources/gallery-results.ds.mjs +103 -0
- package/esm2022/lib/data-sources/home-autocomplete.ds.mjs +80 -0
- package/esm2022/lib/data-sources/home-facets-wrapper.ds.mjs +190 -0
- package/esm2022/lib/data-sources/linked-objects.ds.mjs +219 -0
- package/{esm2020 → esm2022}/lib/data-sources/map.ds.mjs +1 -1
- package/{esm2020 → esm2022}/lib/data-sources/related-entities.ds.mjs +2 -2
- package/{esm2020 → esm2022}/lib/data-sources/scheda-breadcrumbs.ds.mjs +1 -1
- package/{esm2020 → esm2022}/lib/data-sources/scheda-dropdown.ds.mjs +1 -1
- package/esm2022/lib/data-sources/scheda-image-navigator.ds.mjs +82 -0
- package/{esm2020 → esm2022}/lib/data-sources/scheda-image.ds.mjs +1 -1
- package/esm2022/lib/data-sources/scheda-pdf.ds.mjs +54 -0
- package/esm2022/lib/data-sources/scheda-search.ds.mjs +141 -0
- package/{esm2020 → esm2022}/lib/data-sources/sidebar-header.ds.mjs +1 -1
- package/esm2022/lib/data-sources/timeline.ds.mjs +106 -0
- package/esm2022/lib/data-sources/tree.ds.mjs +154 -0
- package/esm2022/lib/event-handlers/autocomplete-wrapper.eh.mjs +18 -0
- package/esm2022/lib/event-handlers/aw-facets-wrapper.eh.mjs +88 -0
- package/esm2022/lib/event-handlers/bubble-chart.eh.mjs +98 -0
- package/esm2022/lib/event-handlers/chart-tippy.eh.mjs +64 -0
- package/{esm2020 → esm2022}/lib/event-handlers/entita-nav.eh.mjs +1 -1
- package/esm2022/lib/event-handlers/extended-tree.eh.mjs +23 -0
- package/esm2022/lib/event-handlers/gallery-results.eh.mjs +38 -0
- package/esm2022/lib/event-handlers/hero.eh.mjs +25 -0
- package/{esm2020 → esm2022}/lib/event-handlers/home-autocomplete.eh.mjs +1 -1
- package/esm2022/lib/event-handlers/home-facets-wrapper.eh.mjs +125 -0
- package/{esm2020 → esm2022}/lib/event-handlers/home-item-tags-wrapper.eh.mjs +1 -1
- package/esm2022/lib/event-handlers/linked-objects.eh.mjs +60 -0
- package/esm2022/lib/event-handlers/map.eh.mjs +23 -0
- package/{esm2020 → esm2022}/lib/event-handlers/scheda-breadcrumbs.eh.mjs +1 -1
- package/esm2022/lib/event-handlers/scheda-dropdown.eh.mjs +17 -0
- package/esm2022/lib/event-handlers/scheda-image-navigator.eh.mjs +18 -0
- package/esm2022/lib/event-handlers/scheda-pdf.eh.mjs +14 -0
- package/{esm2020 → esm2022}/lib/event-handlers/scheda-search.eh.mjs +1 -1
- package/{esm2020 → esm2022}/lib/event-handlers/sidebar-header.eh.mjs +1 -1
- package/esm2022/lib/event-handlers/timeline.eh.mjs +46 -0
- package/esm2022/lib/event-handlers/tree.eh.mjs +119 -0
- package/esm2022/lib/helpers/metadata.helper.mjs +89 -0
- package/esm2022/lib/helpers/node.helper.mjs +14 -0
- package/esm2022/lib/helpers/title.helper.mjs +12 -0
- package/esm2022/lib/layouts/collection-layout/collection-layout.ds.mjs +185 -0
- package/esm2022/lib/layouts/collection-layout/collection-layout.eh.mjs +27 -0
- package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.mjs +5 -5
- package/esm2022/lib/layouts/entita-layout/entita-layout.ds.mjs +320 -0
- package/esm2022/lib/layouts/entita-layout/entita-layout.eh.mjs +119 -0
- package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.mjs +5 -5
- package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-facets.config.mjs +3 -3
- package/esm2022/lib/layouts/gallery-layout/gallery-layout.ds.mjs +48 -0
- package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.mjs +5 -5
- package/esm2022/lib/layouts/home-layout/home-layout.ds.mjs +298 -0
- package/esm2022/lib/layouts/home-layout/home-layout.eh.mjs +245 -0
- package/{esm2020 → esm2022}/lib/layouts/home-layout/home-layout.mjs +5 -5
- package/esm2022/lib/layouts/map-layout/map-layout.ds.mjs +122 -0
- package/esm2022/lib/layouts/map-layout/map-layout.eh.mjs +44 -0
- package/{esm2020 → esm2022}/lib/layouts/map-layout/map-layout.mjs +5 -5
- package/esm2022/lib/layouts/scheda-layout/scheda-layout.ds.mjs +472 -0
- package/esm2022/lib/layouts/scheda-layout/scheda-layout.eh.mjs +347 -0
- package/{esm2020 → esm2022}/lib/layouts/scheda-layout/scheda-layout.mjs +5 -5
- package/{esm2020 → esm2022}/lib/layouts/search-layout/search-facets.config.mjs +3 -3
- package/esm2022/lib/layouts/search-layout/search-layout.ds.mjs +306 -0
- package/esm2022/lib/layouts/search-layout/search-layout.eh.mjs +175 -0
- package/{esm2020 → esm2022}/lib/layouts/search-layout/search-layout.mjs +5 -5
- package/esm2022/lib/layouts/timeline-layout/timeline-layout.ds.mjs +143 -0
- package/esm2022/lib/layouts/timeline-layout/timeline-layout.eh.mjs +41 -0
- package/{esm2020 → esm2022}/lib/layouts/timeline-layout/timeline-layout.mjs +5 -5
- package/{esm2020 → esm2022}/lib/n7-boilerplate-arianna.module.mjs +48 -48
- package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-checkbox.mjs +1 -1
- package/esm2022/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +89 -0
- package/esm2022/lib/search/aw-facet-inputs/aw-facet-input.mjs +30 -0
- package/esm2022/lib/search/aw-search.model.mjs +331 -0
- package/esm2022/lib/search/aw-search.service.mjs +42 -0
- package/esm2022/lib/search/entity-links.helper.mjs +126 -0
- package/{fesm2020 → fesm2022}/net7-boilerplate-arianna.mjs +170 -159
- package/fesm2022/net7-boilerplate-arianna.mjs.map +1 -0
- package/lib/components/aw-facets-wrapper/aw-facets-wrapper.d.ts +1 -1
- package/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.d.ts +1 -1
- package/lib/components/chart-tippy/chart-tippy.d.ts +1 -1
- package/lib/components/extended-tree/extended-tree.d.ts +2 -2
- package/lib/components/gallery-breadcrumbs-tooltip/gallery-breadcrumbs-tooltip.d.ts +2 -2
- package/lib/components/pdf-viewer/pdf-viewer.d.ts +3 -3
- package/lib/components/scheda-dropdown/scheda-dropdown.d.ts +2 -2
- package/lib/components/scheda-image-navigator/scheda-image-navigator.d.ts +2 -2
- package/lib/components/scheda-search/scheda-search.d.ts +2 -2
- package/lib/components/smart-breadcrumbs/smart-breadcrumbs.d.ts +1 -1
- package/lib/config-types/arianna/app.d.ts +4 -4
- package/lib/config-types/arianna/layouts.d.ts +1 -1
- package/lib/data-sources/carousel.ds.d.ts +2 -2
- package/lib/data-sources/extended-tree.ds.d.ts +2 -2
- package/lib/layouts/collection-layout/collection-layout.d.ts +1 -1
- package/lib/layouts/collection-layout/collection-layout.types.d.ts +2 -2
- package/lib/layouts/entita-layout/entita-layout.d.ts +1 -1
- package/lib/layouts/entita-layout/entita-layout.types.d.ts +2 -2
- package/lib/layouts/gallery-layout/gallery-layout.d.ts +1 -1
- package/lib/layouts/home-layout/home-layout.d.ts +1 -1
- package/lib/layouts/map-layout/map-layout.d.ts +1 -1
- package/lib/layouts/map-layout/map-layout.ds.d.ts +1 -1
- package/lib/layouts/scheda-layout/scheda-layout.d.ts +1 -1
- package/lib/layouts/search-layout/search-layout.d.ts +1 -1
- package/lib/layouts/search-layout/search-layout.ds.d.ts +1 -1
- package/lib/layouts/timeline-layout/timeline-layout.d.ts +1 -1
- package/lib/layouts/timeline-layout/timeline-layout.ds.d.ts +1 -1
- package/lib/search/aw-search.model.d.ts +3 -3
- package/package.json +5 -11
- package/esm2020/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +0 -29
- package/esm2020/lib/components/pdf-viewer/pdf-viewer.mjs +0 -31
- package/esm2020/lib/components/scheda-dropdown/scheda-dropdown.mjs +0 -26
- package/esm2020/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +0 -82
- package/esm2020/lib/config/apollo.config.mjs +0 -738
- package/esm2020/lib/data-sources/autocomplete-wrapper.ds.mjs +0 -48
- package/esm2020/lib/data-sources/aw-facets-wrapper.ds.mjs +0 -162
- package/esm2020/lib/data-sources/bubble-chart.ds.mjs +0 -95
- package/esm2020/lib/data-sources/carousel.ds.mjs +0 -74
- package/esm2020/lib/data-sources/entita-nav.ds.mjs +0 -74
- package/esm2020/lib/data-sources/extended-tree.ds.mjs +0 -157
- package/esm2020/lib/data-sources/gallery-results.ds.mjs +0 -103
- package/esm2020/lib/data-sources/home-autocomplete.ds.mjs +0 -80
- package/esm2020/lib/data-sources/home-facets-wrapper.ds.mjs +0 -190
- package/esm2020/lib/data-sources/linked-objects.ds.mjs +0 -219
- package/esm2020/lib/data-sources/scheda-image-navigator.ds.mjs +0 -82
- package/esm2020/lib/data-sources/scheda-pdf.ds.mjs +0 -54
- package/esm2020/lib/data-sources/scheda-search.ds.mjs +0 -141
- package/esm2020/lib/data-sources/timeline.ds.mjs +0 -106
- package/esm2020/lib/data-sources/tree.ds.mjs +0 -154
- package/esm2020/lib/event-handlers/autocomplete-wrapper.eh.mjs +0 -18
- package/esm2020/lib/event-handlers/aw-facets-wrapper.eh.mjs +0 -88
- package/esm2020/lib/event-handlers/bubble-chart.eh.mjs +0 -98
- package/esm2020/lib/event-handlers/chart-tippy.eh.mjs +0 -64
- package/esm2020/lib/event-handlers/extended-tree.eh.mjs +0 -23
- package/esm2020/lib/event-handlers/gallery-results.eh.mjs +0 -38
- package/esm2020/lib/event-handlers/hero.eh.mjs +0 -25
- package/esm2020/lib/event-handlers/home-facets-wrapper.eh.mjs +0 -125
- package/esm2020/lib/event-handlers/linked-objects.eh.mjs +0 -60
- package/esm2020/lib/event-handlers/map.eh.mjs +0 -23
- package/esm2020/lib/event-handlers/scheda-dropdown.eh.mjs +0 -17
- package/esm2020/lib/event-handlers/scheda-image-navigator.eh.mjs +0 -18
- package/esm2020/lib/event-handlers/scheda-pdf.eh.mjs +0 -14
- package/esm2020/lib/event-handlers/timeline.eh.mjs +0 -46
- package/esm2020/lib/event-handlers/tree.eh.mjs +0 -119
- package/esm2020/lib/helpers/metadata.helper.mjs +0 -89
- package/esm2020/lib/helpers/node.helper.mjs +0 -14
- package/esm2020/lib/helpers/title.helper.mjs +0 -12
- package/esm2020/lib/layouts/collection-layout/collection-layout.ds.mjs +0 -185
- package/esm2020/lib/layouts/collection-layout/collection-layout.eh.mjs +0 -27
- package/esm2020/lib/layouts/entita-layout/entita-layout.ds.mjs +0 -320
- package/esm2020/lib/layouts/entita-layout/entita-layout.eh.mjs +0 -119
- package/esm2020/lib/layouts/gallery-layout/gallery-layout.ds.mjs +0 -48
- package/esm2020/lib/layouts/home-layout/home-layout.ds.mjs +0 -298
- package/esm2020/lib/layouts/home-layout/home-layout.eh.mjs +0 -245
- package/esm2020/lib/layouts/map-layout/map-layout.ds.mjs +0 -122
- package/esm2020/lib/layouts/map-layout/map-layout.eh.mjs +0 -44
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.ds.mjs +0 -472
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.eh.mjs +0 -347
- package/esm2020/lib/layouts/search-layout/search-layout.ds.mjs +0 -306
- package/esm2020/lib/layouts/search-layout/search-layout.eh.mjs +0 -175
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.ds.mjs +0 -143
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.eh.mjs +0 -41
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +0 -89
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input.mjs +0 -30
- package/esm2020/lib/search/aw-search.model.mjs +0 -331
- package/esm2020/lib/search/aw-search.service.mjs +0 -42
- package/esm2020/lib/search/entity-links.helper.mjs +0 -126
- package/fesm2015/net7-boilerplate-arianna.mjs +0 -8551
- package/fesm2015/net7-boilerplate-arianna.mjs.map +0 -1
- package/fesm2020/net7-boilerplate-arianna.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/config-types/arianna/app.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/config-types/arianna/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/config-types/arianna/layouts.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/config-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/chart-tippy.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/entita-metadata-viewer.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/hero.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/home-hero-patrimonio.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/home-item-tags-wrapper.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/scheda-inner-title.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/scheda-metadata.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/search-layout-tabs.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-sources/table.ds.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/event-handlers/home-hero-patrimonio.eh.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/event-handlers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/event-handlers/search-layout-tabs.eh.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/event-handlers/table.eh.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.eh.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/home-layout/home-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/map-layout/map-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/scheda-layout/scheda-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/search-layout/search-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/layouts/timeline-layout/timeline-layout.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-select.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-text.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/net7-boilerplate-arianna.mjs +0 -0
- /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==
|