@arsedizioni/ars-utils 18.2.165 → 18.2.167
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/clipper.common/common/definitions.d.ts +7 -1
- package/esm2022/clipper.common/common/common.module.mjs +4 -4
- package/esm2022/clipper.common/common/definitions.mjs +22 -2
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +3 -3
- package/esm2022/clipper.common/common/services/clipper.service.mjs +3 -3
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +6 -6
- package/esm2022/clipper.ui/ui/document/document.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +3 -3
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/references/references.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +3 -3
- package/esm2022/core/core.module.mjs +8 -8
- package/esm2022/core/dateFnsAdapter.mjs +3 -3
- package/esm2022/core/directives/autoFocusDirective.mjs +3 -3
- package/esm2022/core/directives/changeDateIntervalDirective.mjs +3 -3
- package/esm2022/core/directives/copyClipboardDirective.mjs +4 -4
- package/esm2022/core/directives/validators.mjs +33 -33
- package/esm2022/core/pipes/format.pipe.mjs +4 -4
- package/esm2022/core/pipes/replace.pipe.mjs +4 -4
- package/esm2022/core/pipes/safe-html.pipe.mjs +4 -4
- package/esm2022/core/pipes/safe-url.pipe.mjs +4 -4
- package/esm2022/core/pipes/search-callback.pipe.mjs +3 -3
- package/esm2022/core/pipes/search-filter.pipe.mjs +4 -4
- package/esm2022/core/services/broadcast.service.mjs +3 -3
- package/esm2022/core/services/environment.service.mjs +3 -3
- package/esm2022/core/services/screen.service.mjs +3 -3
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +6 -6
- package/esm2022/help/help.module.mjs +4 -4
- package/esm2022/help/services/help.service.mjs +3 -3
- package/esm2022/support.common/common/common.module.mjs +4 -4
- package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +3 -3
- package/esm2022/support.common/common/services/support.service.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +3 -3
- package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +3 -3
- package/esm2022/tinymce/tinymce.module.mjs +4 -4
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +3 -3
- package/esm2022/ui/ui/paginatorIntl.mjs +3 -3
- package/esm2022/ui/ui/services/dialog.service.mjs +3 -3
- package/esm2022/ui/ui/services/ui.service.mjs +3 -3
- package/esm2022/ui/ui/ui.module.mjs +4 -4
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +6 -6
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +3 -3
- package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +3 -3
- package/esm2022/ui.application/ui/ui.module.mjs +4 -4
- package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +3 -3
- package/esm2022/ui.oauth/ui/ui.module.mjs +4 -4
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +32 -12
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +86 -86
- package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
- package/package.json +7 -7
- package/ui.application/ui/components/chips-selector/chips-selector.component.d.ts +1 -1
- package/clipper.common/common/services/clipper.working.service.d.ts +0 -41
- package/esm2022/clipper.common/common/services/clipper.working.service.mjs +0 -157
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arsedizioni/ars-utils",
|
|
3
|
-
"version": "18.2.
|
|
3
|
+
"version": "18.2.167",
|
|
4
4
|
"author": {
|
|
5
5
|
"email": "software@arsedizioni.it",
|
|
6
6
|
"name": "Fabio Buscaroli, Alberto Doria"
|
|
@@ -47,18 +47,18 @@
|
|
|
47
47
|
"esm": "./esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs",
|
|
48
48
|
"default": "./fesm2022/arsedizioni-ars-utils-clipper.ui.mjs"
|
|
49
49
|
},
|
|
50
|
-
"./help": {
|
|
51
|
-
"types": "./help/index.d.ts",
|
|
52
|
-
"esm2022": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
|
|
53
|
-
"esm": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
|
|
54
|
-
"default": "./fesm2022/arsedizioni-ars-utils-help.mjs"
|
|
55
|
-
},
|
|
56
50
|
"./core": {
|
|
57
51
|
"types": "./core/index.d.ts",
|
|
58
52
|
"esm2022": "./esm2022/core/arsedizioni-ars-utils-core.mjs",
|
|
59
53
|
"esm": "./esm2022/core/arsedizioni-ars-utils-core.mjs",
|
|
60
54
|
"default": "./fesm2022/arsedizioni-ars-utils-core.mjs"
|
|
61
55
|
},
|
|
56
|
+
"./help": {
|
|
57
|
+
"types": "./help/index.d.ts",
|
|
58
|
+
"esm2022": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
|
|
59
|
+
"esm": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
|
|
60
|
+
"default": "./fesm2022/arsedizioni-ars-utils-help.mjs"
|
|
61
|
+
},
|
|
62
62
|
"./support.ui": {
|
|
63
63
|
"types": "./support.ui/index.d.ts",
|
|
64
64
|
"esm2022": "./esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs",
|
|
@@ -15,7 +15,7 @@ export declare class ChipsSelectorComponent implements OnInit, OnDestroy, AfterC
|
|
|
15
15
|
collapsedWidth: import("@angular/core").InputSignal<number>;
|
|
16
16
|
collapseAt: import("@angular/core").InputSignal<number>;
|
|
17
17
|
collapseAtContainer: import("@angular/core").InputSignal<boolean>;
|
|
18
|
-
collapseDisplayMode: import("@angular/core").InputSignal<"
|
|
18
|
+
collapseDisplayMode: import("@angular/core").InputSignal<"button" | "dropdown">;
|
|
19
19
|
label: import("@angular/core").InputSignal<string>;
|
|
20
20
|
multiple: import("@angular/core").InputSignal<boolean>;
|
|
21
21
|
mode: import("@angular/core").InputSignal<"collapsed" | "dinamyc">;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Signal } from '@angular/core';
|
|
2
|
-
import { ClipperUserWorkingDocument } from '../definitions';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class ClipperWorkingService {
|
|
5
|
-
private httpClient;
|
|
6
|
-
private dialogService;
|
|
7
|
-
private serviceUri;
|
|
8
|
-
items: import("@angular/core").WritableSignal<ClipperUserWorkingDocument[]>;
|
|
9
|
-
total: Signal<number>;
|
|
10
|
-
constructor();
|
|
11
|
-
/**
|
|
12
|
-
* Initialize service
|
|
13
|
-
* @param serviceUri : the service uri
|
|
14
|
-
*/
|
|
15
|
-
initialize(serviceUri?: string | null | undefined): void;
|
|
16
|
-
/**
|
|
17
|
-
* Update storage
|
|
18
|
-
*/
|
|
19
|
-
private updateStorage;
|
|
20
|
-
/**
|
|
21
|
-
* Load entries
|
|
22
|
-
* @param: showBusy: if true show a busy loading message. Default is true.
|
|
23
|
-
*/
|
|
24
|
-
load(showBusy?: boolean): void;
|
|
25
|
-
/**
|
|
26
|
-
* Add one or more entry
|
|
27
|
-
* @param documentIds : the document ids to add
|
|
28
|
-
*/
|
|
29
|
-
add(documentIds: string[]): import("rxjs").Subscription;
|
|
30
|
-
/**
|
|
31
|
-
* Remove one entry
|
|
32
|
-
* @param documentId : the document id
|
|
33
|
-
*/
|
|
34
|
-
remove(documentId: any): import("rxjs").Subscription;
|
|
35
|
-
/**
|
|
36
|
-
* Clear all entries
|
|
37
|
-
*/
|
|
38
|
-
clear(): import("rxjs").Subscription;
|
|
39
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClipperWorkingService, never>;
|
|
40
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<ClipperWorkingService>;
|
|
41
|
-
}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { computed, inject, Injectable, signal } from '@angular/core';
|
|
3
|
-
import { SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
4
|
-
import { DialogService } from '@arsedizioni/ars-utils/ui';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class ClipperWorkingService {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.httpClient = inject(HttpClient);
|
|
9
|
-
this.dialogService = inject(DialogService);
|
|
10
|
-
this.items = signal([]);
|
|
11
|
-
this.total = computed(() => {
|
|
12
|
-
return this.items().length;
|
|
13
|
-
});
|
|
14
|
-
const data = sessionStorage.getItem('clipper_working');
|
|
15
|
-
if (data) {
|
|
16
|
-
this.items.set(JSON.parse(data));
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Initialize service
|
|
21
|
-
* @param serviceUri : the service uri
|
|
22
|
-
*/
|
|
23
|
-
initialize(serviceUri = null) {
|
|
24
|
-
this.serviceUri = serviceUri;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Update storage
|
|
28
|
-
*/
|
|
29
|
-
updateStorage() {
|
|
30
|
-
sessionStorage.setItem('clipper_working', JSON.stringify(this.items()));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Load entries
|
|
34
|
-
* @param: showBusy: if true show a busy loading message. Default is true.
|
|
35
|
-
*/
|
|
36
|
-
load(showBusy = true) {
|
|
37
|
-
if (showBusy) {
|
|
38
|
-
this.dialogService.busy("Caricamento in corso...");
|
|
39
|
-
}
|
|
40
|
-
this.httpClient
|
|
41
|
-
.get(this.serviceUri + '/documents/working')
|
|
42
|
-
.subscribe({
|
|
43
|
-
next: r => {
|
|
44
|
-
if (!r.success) {
|
|
45
|
-
this.dialogService.error(r.message);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
if (r.value) {
|
|
49
|
-
const items = [];
|
|
50
|
-
r.value.forEach(n => {
|
|
51
|
-
if (n.documentDescriptor) {
|
|
52
|
-
const documentInfo = JSON.parse(n.documentDescriptor);
|
|
53
|
-
if (documentInfo) {
|
|
54
|
-
n.title1 = documentInfo.Title1 ?? documentInfo.Title2;
|
|
55
|
-
n.title2 = documentInfo.Title1 ? documentInfo.Title2 : null;
|
|
56
|
-
}
|
|
57
|
-
n.documentDescriptor = null;
|
|
58
|
-
items.push(n);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
this.items.set(items);
|
|
62
|
-
this.updateStorage();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
complete: () => {
|
|
67
|
-
if (showBusy) {
|
|
68
|
-
this.dialogService.clearBusy();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Add one or more entry
|
|
75
|
-
* @param documentIds : the document ids to add
|
|
76
|
-
*/
|
|
77
|
-
add(documentIds) {
|
|
78
|
-
return this.httpClient
|
|
79
|
-
.post(this.serviceUri + '/documents/working/add', { documentIds: documentIds })
|
|
80
|
-
.subscribe(r => {
|
|
81
|
-
if (!r.success) {
|
|
82
|
-
this.dialogService.error(r.message);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
if (r.value) {
|
|
86
|
-
const newItems = [];
|
|
87
|
-
r.value.forEach(n => {
|
|
88
|
-
if (n.documentDescriptor) {
|
|
89
|
-
const documentInfo = JSON.parse(n.documentDescriptor);
|
|
90
|
-
if (documentInfo) {
|
|
91
|
-
n.title1 = documentInfo.Title1 ?? documentInfo.Title2;
|
|
92
|
-
n.title2 = documentInfo.Title1 ? documentInfo.Title2 : null;
|
|
93
|
-
}
|
|
94
|
-
n.documentDescriptor = null;
|
|
95
|
-
newItems.push(n);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
if (newItems.length > 0) {
|
|
99
|
-
this.items.update(values => [...values, ...newItems]);
|
|
100
|
-
this.updateStorage();
|
|
101
|
-
}
|
|
102
|
-
this.dialogService.toast('Operazione completata con successo.');
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Remove one entry
|
|
109
|
-
* @param documentId : the document id
|
|
110
|
-
*/
|
|
111
|
-
remove(documentId) {
|
|
112
|
-
return this.httpClient
|
|
113
|
-
.post(this.serviceUri + '/documents/working/delete', { documentIds: [documentId] })
|
|
114
|
-
.subscribe(r => {
|
|
115
|
-
if (!r.success) {
|
|
116
|
-
this.dialogService.error(r.message);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
let p = SystemUtils.arrayFindIndexByKey(this.items(), 'documentId', documentId);
|
|
120
|
-
if (p !== -1) {
|
|
121
|
-
this.items.update(values => {
|
|
122
|
-
values.splice(p, 1);
|
|
123
|
-
return [...values];
|
|
124
|
-
});
|
|
125
|
-
this.updateStorage();
|
|
126
|
-
this.dialogService.toast('Operazione completata con successo.');
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Clear all entries
|
|
133
|
-
*/
|
|
134
|
-
clear() {
|
|
135
|
-
return this.httpClient
|
|
136
|
-
.post(this.serviceUri + '/documents/working/delete', { deleteAll: true })
|
|
137
|
-
.subscribe(r => {
|
|
138
|
-
if (!r.success) {
|
|
139
|
-
this.dialogService.error(r.message);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
this.items.set([]);
|
|
143
|
-
this.updateStorage();
|
|
144
|
-
this.dialogService.toast('Operazione completata con successo.');
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperWorkingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
149
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperWorkingService, providedIn: 'root' }); }
|
|
150
|
-
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperWorkingService, decorators: [{
|
|
152
|
-
type: Injectable,
|
|
153
|
-
args: [{
|
|
154
|
-
providedIn: 'root',
|
|
155
|
-
}]
|
|
156
|
-
}], ctorParameters: () => [] });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci53b3JraW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24vY29tbW9uL3NlcnZpY2VzL2NsaXBwZXIud29ya2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFFTCxXQUFXLEVBQ1osTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsYUFBYSxFQUNkLE1BQU0sMkJBQTJCLENBQUM7O0FBTW5DLE1BQU0sT0FBTyxxQkFBcUI7SUFZaEM7UUFYUSxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBSXRDLFVBQUssR0FBRyxNQUFNLENBQStCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELFVBQUssR0FBbUIsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFJRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7S0FHQztJQUNELFVBQVUsQ0FBQyxhQUF3QyxJQUFJO1FBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFB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QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FuS1UscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGNvbXB1dGVkLCBpbmplY3QsIEluamVjdGFibGUsIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQXBpUmVzdWx0LFxyXG4gIFN5c3RlbVV0aWxzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHtcclxuICBEaWFsb2dTZXJ2aWNlXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aSc7XHJcbmltcG9ydCB7IENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50IH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJXb3JraW5nU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKVxyXG5cclxuICBwcml2YXRlIHNlcnZpY2VVcmk6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBpdGVtcyA9IHNpZ25hbDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPihbXSk7XHJcbiAgcHVibGljIHRvdGFsOiBTaWduYWw8bnVtYmVyPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkubGVuZ3RoO1xyXG4gIH0pO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl93b3JraW5nJyk7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICB0aGlzLml0ZW1zLnNldChKU09OLnBhcnNlKGRhdGEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBJbml0aWFsaXplIHNlcnZpY2VcclxuICogQHBhcmFtIHNlcnZpY2VVcmkgOiB0aGUgc2VydmljZSB1cmlcclxuICovXHJcbiAgaW5pdGlhbGl6ZShzZXJ2aWNlVXJpOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzdG9yYWdlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdG9yYWdlKCkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl93b3JraW5nJywgSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtcygpKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGVudHJpZXNcclxuICAgKiBAcGFyYW06IHNob3dCdXN5OiBpZiB0cnVlIHNob3cgYSBidXN5IGxvYWRpbmcgbWVzc2FnZS4gRGVmYXVsdCBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIGxvYWQoc2hvd0J1c3k6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAoc2hvd0J1c3kpIHtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koXCJDYXJpY2FtZW50byBpbiBjb3Jzby4uLlwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZydcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtczogQ2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChuLmRvY3VtZW50RGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4udGl0bGUxID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/PyBkb2N1bWVudEluZm8uVGl0bGUyO1xyXG4gICAgICAgICAgICAgICAgICAgIG4udGl0bGUyID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/IGRvY3VtZW50SW5mby5UaXRsZTIgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnREZXNjcmlwdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldChpdGVtcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9yYWdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2hvd0J1c3kpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgb25lIG9yIG1vcmUgZW50cnlcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZHMgOiB0aGUgZG9jdW1lbnQgaWRzIHRvIGFkZFxyXG4gICAqL1xyXG4gIGFkZChkb2N1bWVudElkczogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2FkZCcsXHJcbiAgICAgICAgeyBkb2N1bWVudElkczogZG9jdW1lbnRJZHMgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtczogQ2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXSA9IFtdO1xyXG4gICAgICAgICAgICByLnZhbHVlLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG4uZG9jdW1lbnREZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudEluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgbi50aXRsZTEgPSBkb2N1bWVudEluZm8uVGl0bGUxID8/IGRvY3VtZW50SW5mby5UaXRsZTI7XHJcbiAgICAgICAgICAgICAgICAgIG4udGl0bGUyID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/IGRvY3VtZW50SW5mby5UaXRsZTIgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbi5kb2N1bWVudERlc2NyaXB0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbXMucHVzaChuKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKHZhbHVlcyA9PiBbLi4udmFsdWVzLCAuLi5uZXdJdGVtc10pO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG9uZSBlbnRyeVxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICovXHJcbiAgcmVtb3ZlKGRvY3VtZW50SWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9kZWxldGUnLFxyXG4gICAgICAgIHsgZG9jdW1lbnRJZHM6IFtkb2N1bWVudElkXSB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBwID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kSW5kZXhCeUtleShcclxuICAgICAgICAgICAgdGhpcy5pdGVtcygpLFxyXG4gICAgICAgICAgICAnZG9jdW1lbnRJZCcsXHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAocCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUodmFsdWVzID0+IHtcclxuICAgICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKHAsIDEpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCBlbnRyaWVzXHJcbiAgICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkZWxldGVBbGw6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnNldChbXSk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0b3JhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|