@esfaenza/extensions 12.2.12 → 13.1.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/esfaenza-extensions.d.ts +1 -2
- package/esm2020/esfaenza-extensions.mjs +5 -0
- package/{esm2015/lib/models/CallResult.js → esm2020/lib/models/CallResult.mjs} +0 -0
- package/{esm2015/lib/models/CsvHeaders.js → esm2020/lib/models/CsvHeaders.mjs} +1 -1
- package/{esm2015/lib/models/ExportConsts.js → esm2020/lib/models/ExportConsts.mjs} +0 -0
- package/{esm2015/lib/models/ExtensionsModuleConfig.js → esm2020/lib/models/ExtensionsModuleConfig.mjs} +0 -0
- package/{esm2015/lib/models/GenericItem.js → esm2020/lib/models/GenericItem.mjs} +0 -0
- package/{esm2015/lib/models/TypeCode.js → esm2020/lib/models/TypeCode.mjs} +0 -0
- package/{esm2015/lib/models/providers/base/BaseStorageProvider.js → esm2020/lib/models/providers/base/BaseStorageProvider.mjs} +0 -0
- package/esm2020/lib/models/providers/implementation/DefaultStorageProvider.mjs +79 -0
- package/{esm2015/lib/models/session/base/BaseSessionRetriever.js → esm2020/lib/models/session/base/BaseSessionRetriever.mjs} +0 -0
- package/esm2020/lib/models/session/implementation/DefaultSessionRetriever.mjs +28 -0
- package/esm2020/lib/modules/extensions.full.module.mjs +58 -0
- package/esm2020/lib/modules/extensions.module.mjs +28 -0
- package/esm2020/lib/services/extensions.clipboard.service.mjs +165 -0
- package/esm2020/lib/services/extensions.dates.service.mjs +232 -0
- package/{esm2015/lib/services/extensions.exports.service.js → esm2020/lib/services/extensions.exports.service.mjs} +24 -17
- package/esm2020/lib/services/extensions.hashing.service.mjs +309 -0
- package/esm2020/lib/services/extensions.messages.service.mjs +323 -0
- package/esm2020/lib/services/extensions.storage.service.mjs +103 -0
- package/esm2020/lib/services/extensions.utilities.service.mjs +188 -0
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{esfaenza-extensions.js → esfaenza-extensions.mjs} +120 -75
- package/fesm2015/esfaenza-extensions.mjs.map +1 -0
- package/fesm2020/esfaenza-extensions.mjs +2055 -0
- package/fesm2020/esfaenza-extensions.mjs.map +1 -0
- package/lib/models/CsvHeaders.d.ts +4 -0
- package/lib/models/providers/implementation/DefaultStorageProvider.d.ts +3 -0
- package/lib/models/session/implementation/DefaultSessionRetriever.d.ts +3 -0
- package/lib/modules/extensions.full.module.d.ts +4 -0
- package/lib/modules/extensions.module.d.ts +4 -0
- package/lib/services/extensions.clipboard.service.d.ts +3 -0
- package/lib/services/extensions.dates.service.d.ts +3 -0
- package/lib/services/extensions.exports.service.d.ts +3 -0
- package/lib/services/extensions.hashing.service.d.ts +3 -0
- package/lib/services/extensions.messages.service.d.ts +3 -0
- package/lib/services/extensions.storage.service.d.ts +3 -0
- package/lib/services/extensions.utilities.service.d.ts +3 -0
- package/package.json +23 -11
- package/bundles/esfaenza-extensions.umd.js +0 -2435
- package/bundles/esfaenza-extensions.umd.js.map +0 -1
- package/esfaenza-extensions.metadata.json +0 -1
- package/esm2015/esfaenza-extensions.js +0 -7
- package/esm2015/lib/models/providers/implementation/DefaultStorageProvider.js +0 -79
- package/esm2015/lib/models/session/implementation/DefaultSessionRetriever.js +0 -26
- package/esm2015/lib/modules/extensions.full.module.js +0 -54
- package/esm2015/lib/modules/extensions.module.js +0 -24
- package/esm2015/lib/services/extensions.clipboard.service.js +0 -165
- package/esm2015/lib/services/extensions.dates.service.js +0 -224
- package/esm2015/lib/services/extensions.hashing.service.js +0 -306
- package/esm2015/lib/services/extensions.messages.service.js +0 -317
- package/esm2015/lib/services/extensions.storage.service.js +0 -100
- package/esm2015/lib/services/extensions.utilities.service.js +0 -185
- package/fesm2015/esfaenza-extensions.js.map +0 -1
package/esfaenza-extensions.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generated bundle index. Do not edit.
|
|
3
3
|
*/
|
|
4
|
+
/// <amd-module name="@esfaenza/extensions" />
|
|
4
5
|
export * from './public-api';
|
|
5
|
-
export { DefaultStorageProvider as ɵb } from './lib/models/providers/implementation/DefaultStorageProvider';
|
|
6
|
-
export { DefaultSessionRetriever as ɵa } from './lib/models/session/implementation/DefaultSessionRetriever';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3JjL2VzZmFlbnphLWV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
File without changes
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export class CsvHeaders {
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3N2SGVhZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3JjL2xpYi9tb2RlbHMvQ3N2SGVhZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0NBcUJ0QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBIZWFkZXIgcGVyIGlsIGZpbGUgQ1NWIGNoZSBzdGEgdmVuZW5kbyBnZW5lcmF0b1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENzdkhlYWRlcnMge1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlc3RhemlvbmUgZGVsbGEgY29sb25uYVxyXG4gICAqL1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCB2aXN1YWxpenphdGEgaW4gcXVlc3RhIGNvbG9ubmFcclxuICAgKi9cclxuICBrZXk6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogT3JkaW5lIGRlbGxhIGNvbG9ubmFcclxuICAgKi9cclxuICBvcmRlcjogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBUaXBvIGRlbGxhIGNvbG9ubmEgKHBlciBldmVudHVhbGkgZm9ybWF0dGF6aW9uaSBzZSBzaSBzY2FyaWNhIGluIEV4Y2VsKVxyXG4gICAqL1xyXG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZSc7XHJcbn1cclxuIl19
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { of } from "rxjs";
|
|
3
|
+
import { BaseStorageProvider } from "../base/BaseStorageProvider";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../session/base/BaseSessionRetriever";
|
|
6
|
+
/** Implementazione di default per la classe **BaseStorageProvider** */
|
|
7
|
+
export class DefaultStorageProvider extends BaseStorageProvider {
|
|
8
|
+
/** @ignore Costruttore */
|
|
9
|
+
constructor(session) { super(session); }
|
|
10
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
11
|
+
setItem(key, value) {
|
|
12
|
+
try {
|
|
13
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
14
|
+
return of(true);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Potrebbe arrivarmi un prefisso di salvataggio nella modalità di default. Questo serve per ripulire le stesse cose con quel prefisso e sperare di liberare spazio
|
|
18
|
+
if (value.savedprefix) {
|
|
19
|
+
console.warn("Spazio del local Storage insufficiente, prova a ripulirlo e risalvare");
|
|
20
|
+
//Pulisco tutte le view con nome che parta per "Hot"
|
|
21
|
+
for (let key in localStorage) {
|
|
22
|
+
if (localStorage.hasOwnProperty(key) && key.startsWith(value.savedprefix))
|
|
23
|
+
delete localStorage[key];
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
console.error("Spazio del local Storage insufficiente per salvare i risultati di ricerca con solo filtri. Non salvo nulla");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return of(false);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
36
|
+
getItem(key) {
|
|
37
|
+
try {
|
|
38
|
+
var ret = JSON.parse(localStorage.getItem(key));
|
|
39
|
+
return of(ret);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return of(null);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
46
|
+
removeItem(key) {
|
|
47
|
+
try {
|
|
48
|
+
localStorage.removeItem(key);
|
|
49
|
+
return of(true);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return of(false);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
56
|
+
clear() {
|
|
57
|
+
try {
|
|
58
|
+
localStorage.clear();
|
|
59
|
+
return of(true);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return of(false);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** @ignore Implementazione di Default con localStorage. Identity viene ignorata perché essendo già nel localStorage è già per sito */
|
|
66
|
+
getAll() {
|
|
67
|
+
var ret = {};
|
|
68
|
+
for (let key in localStorage) {
|
|
69
|
+
ret[key] = localStorage[key];
|
|
70
|
+
}
|
|
71
|
+
return of(ret);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
DefaultStorageProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DefaultStorageProvider, deps: [{ token: i1.BaseSessionRetriever }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
75
|
+
DefaultStorageProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DefaultStorageProvider });
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DefaultStorageProvider, decorators: [{
|
|
77
|
+
type: Injectable
|
|
78
|
+
}], ctorParameters: function () { return [{ type: i1.BaseSessionRetriever }]; } });
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdFN0b3JhZ2VQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3JjL2xpYi9tb2RlbHMvcHJvdmlkZXJzL2ltcGxlbWVudGF0aW9uL0RlZmF1bHRTdG9yYWdlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFFbEUsdUVBQXVFO0FBRXZFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxtQkFBbUI7SUFFMUQsMEJBQTBCO0lBQzFCLFlBQVksT0FBNkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9ELHNJQUFzSTtJQUMvSCxPQUFPLENBQUksR0FBVyxFQUFFLEtBQVE7UUFDbkMsSUFBSTtZQUNBLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUNELE1BQU07WUFDRixtS0FBbUs7WUFDbkssSUFBVSxLQUFNLENBQUMsV0FBVyxFQUFFO2dCQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7Z0JBRXRGLG9EQUFvRDtnQkFDcEQsS0FBSyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUU7b0JBQzFCLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFPLEtBQU0sQ0FBQyxXQUFXLENBQUM7d0JBQzVFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxJQUFJO29CQUNBLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDcEQ7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyw0R0FBNEcsQ0FBQyxDQUFDO2lCQUMvSDthQUNKO1lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQsc0lBQXNJO0lBQy9ILE9BQU8sQ0FBSSxHQUFXO1FBQ3pCLElBQUk7WUFDQSxJQUFJLEdBQUcsR0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQjtRQUNELE1BQU07WUFDRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFRCxzSUFBc0k7SUFDL0gsVUFBVSxDQUFDLEdBQVc7UUFDekIsSUFBSTtZQUNBLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkI7UUFDRCxNQUFNO1lBQ0YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQsc0lBQXNJO0lBQy9ILEtBQUs7UUFDUixJQUFJO1lBQ0EsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsTUFBTTtZQUNGLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVELHNJQUFzSTtJQUMvSCxNQUFNO1FBQ1QsSUFBSSxHQUFHLEdBQWdDLEVBQUUsQ0FBQztRQUMxQyxLQUFLLElBQUksR0FBRyxJQUFJLFlBQVksRUFBRTtZQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQzs7bUhBdkVRLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBCYXNlU2Vzc2lvblJldHJpZXZlciB9IGZyb20gXCIuLi8uLi9zZXNzaW9uL2Jhc2UvQmFzZVNlc3Npb25SZXRyaWV2ZXJcIjtcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VQcm92aWRlciB9IGZyb20gXCIuLi9iYXNlL0Jhc2VTdG9yYWdlUHJvdmlkZXJcIjtcclxuXHJcbi8qKiBJbXBsZW1lbnRhemlvbmUgZGkgZGVmYXVsdCBwZXIgbGEgY2xhc3NlICoqQmFzZVN0b3JhZ2VQcm92aWRlcioqICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERlZmF1bHRTdG9yYWdlUHJvdmlkZXIgZXh0ZW5kcyBCYXNlU3RvcmFnZVByb3ZpZGVyIHtcclxuXHJcbiAgICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgKi9cclxuICAgICBjb25zdHJ1Y3RvcihzZXNzaW9uOiBCYXNlU2Vzc2lvblJldHJpZXZlcikgeyBzdXBlcihzZXNzaW9uKTsgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIEltcGxlbWVudGF6aW9uZSBkaSBEZWZhdWx0IGNvbiBsb2NhbFN0b3JhZ2UuIElkZW50aXR5IHZpZW5lIGlnbm9yYXRhIHBlcmNow6kgZXNzZW5kbyBnacOgIG5lbCBsb2NhbFN0b3JhZ2Ugw6ggZ2nDoCBwZXIgc2l0byAqL1xyXG4gICAgcHVibGljIHNldEl0ZW08VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgLy8gUG90cmViYmUgYXJyaXZhcm1pIHVuIHByZWZpc3NvIGRpIHNhbHZhdGFnZ2lvIG5lbGxhIG1vZGFsaXTDoCBkaSBkZWZhdWx0LiBRdWVzdG8gc2VydmUgcGVyIHJpcHVsaXJlIGxlIHN0ZXNzZSBjb3NlIGNvbiBxdWVsIHByZWZpc3NvIGUgc3BlcmFyZSBkaSBsaWJlcmFyZSBzcGF6aW9cclxuICAgICAgICAgICAgaWYgKCg8YW55PnZhbHVlKS5zYXZlZHByZWZpeCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiU3BhemlvIGRlbCBsb2NhbCBTdG9yYWdlIGluc3VmZmljaWVudGUsIHByb3ZhIGEgcmlwdWxpcmxvIGUgcmlzYWx2YXJlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vUHVsaXNjbyB0dXR0ZSBsZSB2aWV3IGNvbiBub21lIGNoZSBwYXJ0YSBwZXIgXCJIb3RcIlxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkuc3RhcnRzV2l0aCgoPGFueT52YWx1ZSkuc2F2ZWRwcmVmaXgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxTdG9yYWdlW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiU3BhemlvIGRlbCBsb2NhbCBTdG9yYWdlIGluc3VmZmljaWVudGUgcGVyIHNhbHZhcmUgaSByaXN1bHRhdGkgZGkgcmljZXJjYSBjb24gc29sbyBmaWx0cmkuIE5vbiBzYWx2byBudWxsYVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBJbXBsZW1lbnRhemlvbmUgZGkgRGVmYXVsdCBjb24gbG9jYWxTdG9yYWdlLiBJZGVudGl0eSB2aWVuZSBpZ25vcmF0YSBwZXJjaMOpIGVzc2VuZG8gZ2nDoCBuZWwgbG9jYWxTdG9yYWdlIMOoIGdpw6AgcGVyIHNpdG8gKi9cclxuICAgIHB1YmxpYyBnZXRJdGVtPFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHJldCA9IDxUPkpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihyZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgSW1wbGVtZW50YXppb25lIGRpIERlZmF1bHQgY29uIGxvY2FsU3RvcmFnZS4gSWRlbnRpdHkgdmllbmUgaWdub3JhdGEgcGVyY2jDqSBlc3NlbmRvIGdpw6AgbmVsIGxvY2FsU3RvcmFnZSDDqCBnacOgIHBlciBzaXRvICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBJbXBsZW1lbnRhemlvbmUgZGkgRGVmYXVsdCBjb24gbG9jYWxTdG9yYWdlLiBJZGVudGl0eSB2aWVuZSBpZ25vcmF0YSBwZXJjaMOpIGVzc2VuZG8gZ2nDoCBuZWwgbG9jYWxTdG9yYWdlIMOoIGdpw6AgcGVyIHNpdG8gKi9cclxuICAgIHB1YmxpYyBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIEltcGxlbWVudGF6aW9uZSBkaSBEZWZhdWx0IGNvbiBsb2NhbFN0b3JhZ2UuIElkZW50aXR5IHZpZW5lIGlnbm9yYXRhIHBlcmNow6kgZXNzZW5kbyBnacOgIG5lbCBsb2NhbFN0b3JhZ2Ugw6ggZ2nDoCBwZXIgc2l0byAqL1xyXG4gICAgcHVibGljIGdldEFsbCgpOiBPYnNlcnZhYmxlPHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7IH0+IHtcclxuICAgICAgICB2YXIgcmV0OiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHJldFtrZXldID0gbG9jYWxTdG9yYWdlW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihyZXQpO1xyXG4gICAgfVxyXG59Il19
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { BaseSessionRetriever } from "../base/BaseSessionRetriever";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Implementazione di default per la classe **BaseSessionRetriever**
|
|
6
|
+
*/
|
|
7
|
+
export class DefaultSessionRetriever extends BaseSessionRetriever {
|
|
8
|
+
/**
|
|
9
|
+
* Costruttore
|
|
10
|
+
*
|
|
11
|
+
* @ignore
|
|
12
|
+
*/
|
|
13
|
+
constructor() { super(); }
|
|
14
|
+
/**
|
|
15
|
+
* Ottiene un ID sessione
|
|
16
|
+
*
|
|
17
|
+
* @returns {string} ID sessione
|
|
18
|
+
*/
|
|
19
|
+
getSessionKey() {
|
|
20
|
+
return "DUMMY_SESSION";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
DefaultSessionRetriever.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DefaultSessionRetriever, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
24
|
+
DefaultSessionRetriever.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DefaultSessionRetriever });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DefaultSessionRetriever, decorators: [{
|
|
26
|
+
type: Injectable
|
|
27
|
+
}], ctorParameters: function () { return []; } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdFNlc3Npb25SZXRyaWV2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvbW9kZWxzL3Nlc3Npb24vaW1wbGVtZW50YXRpb24vRGVmYXVsdFNlc3Npb25SZXRyaWV2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFcEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsb0JBQW9CO0lBRTdEOzs7O09BSUc7SUFDSCxnQkFBZ0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTFCOzs7O09BSUc7SUFDSCxhQUFhO1FBQ1QsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQzs7b0hBaEJRLHVCQUF1Qjt3SEFBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmFzZVNlc3Npb25SZXRyaWV2ZXIgfSBmcm9tIFwiLi4vYmFzZS9CYXNlU2Vzc2lvblJldHJpZXZlclwiO1xyXG5cclxuLyoqXHJcbiAqIEltcGxlbWVudGF6aW9uZSBkaSBkZWZhdWx0IHBlciBsYSBjbGFzc2UgKipCYXNlU2Vzc2lvblJldHJpZXZlcioqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEZWZhdWx0U2Vzc2lvblJldHJpZXZlciBleHRlbmRzIEJhc2VTZXNzaW9uUmV0cmlldmVyIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgdW4gSUQgc2Vzc2lvbmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gSUQgc2Vzc2lvbmVcclxuICAgICAqL1xyXG4gICAgZ2V0U2Vzc2lvbktleSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIkRVTU1ZX1NFU1NJT05cIjtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Angular
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { EXT_LOCALE, EXT_FANCY_ALERTS, APPSEARCH_PREFIX, EXT_ALLOW_UTC } from '../tokens';
|
|
4
|
+
// Servizi
|
|
5
|
+
import { ClipboardService } from "../services/extensions.clipboard.service";
|
|
6
|
+
import { DateService } from "../services/extensions.dates.service";
|
|
7
|
+
import { ExportService } from "../services/extensions.exports.service";
|
|
8
|
+
import { HashingService } from "../services/extensions.hashing.service";
|
|
9
|
+
import { MessageService } from "../services/extensions.messages.service";
|
|
10
|
+
import { UtilityService } from "../services/extensions.utilities.service";
|
|
11
|
+
import { StorageService } from '../services/extensions.storage.service';
|
|
12
|
+
// Providers
|
|
13
|
+
import { BaseSessionRetriever } from '../models/session/base/BaseSessionRetriever';
|
|
14
|
+
import { DefaultSessionRetriever } from '../models/session/implementation/DefaultSessionRetriever';
|
|
15
|
+
import { BaseStorageProvider } from '../models/providers/base/BaseStorageProvider';
|
|
16
|
+
import { DefaultStorageProvider } from '../models/providers/implementation/DefaultStorageProvider';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
/**
|
|
19
|
+
* Modulo di estensione che registra autonomamente **TUTTI** i servizi di estensione:
|
|
20
|
+
* ClipboardService,
|
|
21
|
+
* DateService,
|
|
22
|
+
* ExportService,
|
|
23
|
+
* HashingService,
|
|
24
|
+
* MessageService,
|
|
25
|
+
* UtilityService,
|
|
26
|
+
* StorageService,
|
|
27
|
+
*
|
|
28
|
+
* con eventuali provider che utilizzano
|
|
29
|
+
*/
|
|
30
|
+
export class FullExtensionsModule {
|
|
31
|
+
static forRoot(config) {
|
|
32
|
+
return {
|
|
33
|
+
ngModule: FullExtensionsModule,
|
|
34
|
+
providers: [
|
|
35
|
+
ClipboardService,
|
|
36
|
+
DateService,
|
|
37
|
+
ExportService,
|
|
38
|
+
HashingService,
|
|
39
|
+
MessageService,
|
|
40
|
+
UtilityService,
|
|
41
|
+
StorageService,
|
|
42
|
+
{ provide: EXT_LOCALE, useValue: config?.locale || 'it-IT' },
|
|
43
|
+
{ provide: EXT_FANCY_ALERTS, useValue: config?.fancy_alerts || true },
|
|
44
|
+
{ provide: APPSEARCH_PREFIX, useValue: config?.appsearch_prefix || 'Hot' },
|
|
45
|
+
{ provide: EXT_ALLOW_UTC, useValue: config?.allow_utc == null ? false : config?.allow_utc },
|
|
46
|
+
{ provide: BaseSessionRetriever, useClass: config?.sessionRetriever || DefaultSessionRetriever },
|
|
47
|
+
{ provide: BaseStorageProvider, useClass: config?.storageProvider || DefaultStorageProvider },
|
|
48
|
+
]
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
FullExtensionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FullExtensionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
53
|
+
FullExtensionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FullExtensionsModule });
|
|
54
|
+
FullExtensionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FullExtensionsModule });
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FullExtensionsModule, decorators: [{
|
|
56
|
+
type: NgModule
|
|
57
|
+
}] });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5mdWxsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3JjL2xpYi9tb2R1bGVzL2V4dGVuc2lvbnMuZnVsbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBSTlELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFGLFVBQVU7QUFDVixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxZQUFZO0FBQ1osT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7O0FBRW5HOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQStCO1FBQzVDLE9BQU87WUFDTCxRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLFNBQVMsRUFBRTtnQkFDVCxnQkFBZ0I7Z0JBQ2hCLFdBQVc7Z0JBQ1gsYUFBYTtnQkFDYixjQUFjO2dCQUNkLGNBQWM7Z0JBQ2QsY0FBYztnQkFDZCxjQUFjO2dCQUNkLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVELEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLElBQUksRUFBRTtnQkFDckUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxLQUFLLEVBQUM7Z0JBQ3pFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQztnQkFDMUYsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSx1QkFBdUIsRUFBRTtnQkFDaEcsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxlQUFlLElBQUksc0JBQXNCLEVBQUU7YUFDOUY7U0FDRixDQUFDO0lBQ0osQ0FBQzs7aUhBcEJVLG9CQUFvQjtrSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgRXh0ZW5zaW9uc01vZHVsZUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9FeHRlbnNpb25zTW9kdWxlQ29uZmlnJztcclxuaW1wb3J0IHsgRVhUX0xPQ0FMRSwgRVhUX0ZBTkNZX0FMRVJUUywgQVBQU0VBUkNIX1BSRUZJWCwgRVhUX0FMTE9XX1VUQyB9IGZyb20gJy4uL3Rva2Vucyc7XHJcblxyXG4vLyBTZXJ2aXppXHJcbmltcG9ydCB7IENsaXBib2FyZFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZXh0ZW5zaW9ucy5jbGlwYm9hcmQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9leHRlbnNpb25zLmRhdGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9leHRlbnNpb25zLmV4cG9ydHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIYXNoaW5nU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9leHRlbnNpb25zLmhhc2hpbmcuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9leHRlbnNpb25zLm1lc3NhZ2VzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZXh0ZW5zaW9ucy51dGlsaXRpZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2V4dGVuc2lvbnMuc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbi8vIFByb3ZpZGVyc1xyXG5pbXBvcnQgeyBCYXNlU2Vzc2lvblJldHJpZXZlciB9IGZyb20gJy4uL21vZGVscy9zZXNzaW9uL2Jhc2UvQmFzZVNlc3Npb25SZXRyaWV2ZXInO1xyXG5pbXBvcnQgeyBEZWZhdWx0U2Vzc2lvblJldHJpZXZlciB9IGZyb20gJy4uL21vZGVscy9zZXNzaW9uL2ltcGxlbWVudGF0aW9uL0RlZmF1bHRTZXNzaW9uUmV0cmlldmVyJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VQcm92aWRlciB9IGZyb20gJy4uL21vZGVscy9wcm92aWRlcnMvYmFzZS9CYXNlU3RvcmFnZVByb3ZpZGVyJztcclxuaW1wb3J0IHsgRGVmYXVsdFN0b3JhZ2VQcm92aWRlciB9IGZyb20gJy4uL21vZGVscy9wcm92aWRlcnMvaW1wbGVtZW50YXRpb24vRGVmYXVsdFN0b3JhZ2VQcm92aWRlcic7XHJcblxyXG4vKipcclxuICogTW9kdWxvIGRpIGVzdGVuc2lvbmUgY2hlIHJlZ2lzdHJhIGF1dG9ub21hbWVudGUgKipUVVRUSSoqIGkgc2Vydml6aSBkaSBlc3RlbnNpb25lOiBcclxuICogQ2xpcGJvYXJkU2VydmljZSwgXHJcbiAqIERhdGVTZXJ2aWNlLCBcclxuICogRXhwb3J0U2VydmljZSwgXHJcbiAqIEhhc2hpbmdTZXJ2aWNlLCBcclxuICogTWVzc2FnZVNlcnZpY2UsIFxyXG4gKiBVdGlsaXR5U2VydmljZSwgXHJcbiAqIFN0b3JhZ2VTZXJ2aWNlLCBcclxuICogXHJcbiAqIGNvbiBldmVudHVhbGkgcHJvdmlkZXIgY2hlIHV0aWxpenphbm9cclxuICovXHJcbkBOZ01vZHVsZSgpXHJcbmV4cG9ydCBjbGFzcyBGdWxsRXh0ZW5zaW9uc01vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnPzogRXh0ZW5zaW9uc01vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RnVsbEV4dGVuc2lvbnNNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBGdWxsRXh0ZW5zaW9uc01vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgQ2xpcGJvYXJkU2VydmljZSxcclxuICAgICAgICBEYXRlU2VydmljZSxcclxuICAgICAgICBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgICAgIEhhc2hpbmdTZXJ2aWNlLFxyXG4gICAgICAgIE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICAgIFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHsgcHJvdmlkZTogRVhUX0xPQ0FMRSwgdXNlVmFsdWU6IGNvbmZpZz8ubG9jYWxlIHx8ICdpdC1JVCcgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEVYVF9GQU5DWV9BTEVSVFMsIHVzZVZhbHVlOiBjb25maWc/LmZhbmN5X2FsZXJ0cyB8fCB0cnVlIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBBUFBTRUFSQ0hfUFJFRklYLCB1c2VWYWx1ZTogY29uZmlnPy5hcHBzZWFyY2hfcHJlZml4IHx8ICdIb3QnfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEVYVF9BTExPV19VVEMsIHVzZVZhbHVlOiBjb25maWc/LmFsbG93X3V0YyA9PSBudWxsID8gZmFsc2UgOiBjb25maWc/LmFsbG93X3V0Y30sXHJcbiAgICAgICAgeyBwcm92aWRlOiBCYXNlU2Vzc2lvblJldHJpZXZlciwgdXNlQ2xhc3M6IGNvbmZpZz8uc2Vzc2lvblJldHJpZXZlciB8fCBEZWZhdWx0U2Vzc2lvblJldHJpZXZlciB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogQmFzZVN0b3JhZ2VQcm92aWRlciwgdXNlQ2xhc3M6IGNvbmZpZz8uc3RvcmFnZVByb3ZpZGVyIHx8IERlZmF1bHRTdG9yYWdlUHJvdmlkZXIgfSxcclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Angular
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
// Modelli
|
|
4
|
+
import { EXT_LOCALE, EXT_FANCY_ALERTS, APPSEARCH_PREFIX, EXT_ALLOW_UTC } from '../tokens';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Modulo di estensione che non registra nessun servizio di estensione, dovranno essere dichiarati 1 per 1 dall'applicazione che li utilizza
|
|
8
|
+
*/
|
|
9
|
+
export class ExtensionsModule {
|
|
10
|
+
static forRoot(config) {
|
|
11
|
+
return {
|
|
12
|
+
ngModule: ExtensionsModule,
|
|
13
|
+
providers: [
|
|
14
|
+
{ provide: EXT_LOCALE, useValue: config?.locale || 'it-IT' },
|
|
15
|
+
{ provide: EXT_FANCY_ALERTS, useValue: config?.fancy_alerts || true },
|
|
16
|
+
{ provide: APPSEARCH_PREFIX, useValue: config?.appsearch_prefix || 'Hot' },
|
|
17
|
+
{ provide: EXT_ALLOW_UTC, useValue: config?.allow_utc == null ? false : config?.allow_utc }
|
|
18
|
+
]
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
ExtensionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExtensionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
23
|
+
ExtensionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExtensionsModule });
|
|
24
|
+
ExtensionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExtensionsModule });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExtensionsModule, decorators: [{
|
|
26
|
+
type: NgModule
|
|
27
|
+
}] });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvbW9kdWxlcy9leHRlbnNpb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUcxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUErQjtRQUM1QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDNUQsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUNyRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixJQUFJLEtBQUssRUFBRTtnQkFDMUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO2FBQzVGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OzZHQVhVLGdCQUFnQjs4R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgRVhUX0xPQ0FMRSwgRVhUX0ZBTkNZX0FMRVJUUywgQVBQU0VBUkNIX1BSRUZJWCwgRVhUX0FMTE9XX1VUQyB9IGZyb20gJy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IEV4dGVuc2lvbnNNb2R1bGVDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvRXh0ZW5zaW9uc01vZHVsZUNvbmZpZyc7XHJcblxyXG4vKipcclxuICogTW9kdWxvIGRpIGVzdGVuc2lvbmUgY2hlIG5vbiByZWdpc3RyYSBuZXNzdW4gc2Vydml6aW8gZGkgZXN0ZW5zaW9uZSwgZG92cmFubm8gZXNzZXJlIGRpY2hpYXJhdGkgMSBwZXIgMSBkYWxsJ2FwcGxpY2F6aW9uZSBjaGUgbGkgdXRpbGl6emFcclxuICovXHJcbkBOZ01vZHVsZSgpXHJcbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25zTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBFeHRlbnNpb25zTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxFeHRlbnNpb25zTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogRXh0ZW5zaW9uc01vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBFWFRfTE9DQUxFLCB1c2VWYWx1ZTogY29uZmlnPy5sb2NhbGUgfHwgJ2l0LUlUJyB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogRVhUX0ZBTkNZX0FMRVJUUywgdXNlVmFsdWU6IGNvbmZpZz8uZmFuY3lfYWxlcnRzIHx8IHRydWUgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEFQUFNFQVJDSF9QUkVGSVgsIHVzZVZhbHVlOiBjb25maWc/LmFwcHNlYXJjaF9wcmVmaXggfHwgJ0hvdCcgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEVYVF9BTExPV19VVEMsIHVzZVZhbHVlOiBjb25maWc/LmFsbG93X3V0YyA9PSBudWxsID8gZmFsc2UgOiBjb25maWc/LmFsbG93X3V0YyB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// Angular
|
|
2
|
+
import { Injectable, Inject, Optional } from "@angular/core";
|
|
3
|
+
import { EXT_LOCALE } from "../tokens";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./extensions.messages.service";
|
|
6
|
+
/**
|
|
7
|
+
* Service che fornisce un accesso base in lettura/scrittura sulla clipboard
|
|
8
|
+
*/
|
|
9
|
+
export class ClipboardService {
|
|
10
|
+
/**
|
|
11
|
+
* Costruttore
|
|
12
|
+
*
|
|
13
|
+
* @ignore
|
|
14
|
+
*/
|
|
15
|
+
constructor(msgService, LOCALE) {
|
|
16
|
+
this.msgService = msgService;
|
|
17
|
+
this.LOCALE = LOCALE;
|
|
18
|
+
/**
|
|
19
|
+
* Oggetto statico di localizzazione per i messaggi di questa Service
|
|
20
|
+
*/
|
|
21
|
+
this.loc = {
|
|
22
|
+
"Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation": {
|
|
23
|
+
'en-US': "Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation",
|
|
24
|
+
'it-IT': "Mi dispiace ma Firefox non supporta l'accesso diretto alla Clipboard, se non attraverso le estensioni. Si prega di usare Chrome"
|
|
25
|
+
},
|
|
26
|
+
"Generic error during 'copy' command execution": {
|
|
27
|
+
'en-US': "Generic error during 'copy' command execution",
|
|
28
|
+
'it-IT': "Errore generico durante l'esecuzione del comando 'copy'"
|
|
29
|
+
},
|
|
30
|
+
"Error during Clipboard content read operation": {
|
|
31
|
+
'en-US': "Error during Clipboard content read operation",
|
|
32
|
+
'it-IT': "Errore nella lettura del contenuto della Clipboard"
|
|
33
|
+
},
|
|
34
|
+
"Error during Clipboard content copy operation": {
|
|
35
|
+
'en-US': "Error during Clipboard content copy operation",
|
|
36
|
+
'it-IT': "Errore nella scrittura del contenuto nella Clipboard"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Prende il valore della clipboard.
|
|
42
|
+
* Si può specificare se ci si aspetta una lista o una matrice di valori in modo da ricevere già un risultato utilizzabile
|
|
43
|
+
*
|
|
44
|
+
* @param {'array' | 'matrix'} style Stile dell'output desiderato, se array o matrice
|
|
45
|
+
* @param {Function} valueFoundCallback Callback che questa funzione chiamerà una volta ottenuto i valori richiesti dalla clipboard
|
|
46
|
+
*/
|
|
47
|
+
getClipboard(style, valueFoundCallback) {
|
|
48
|
+
if (navigator.userAgent.indexOf("Firefox") != -1) {
|
|
49
|
+
//https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText
|
|
50
|
+
this.msgService.simpleError(this.loc["Unfortunately Firefox doesn't yet support direct Clipboard access if not via extensions, Please use Chrome to do this operation"][this.LOCALE ?? 'it-IT']);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (window.clipboardData) {
|
|
54
|
+
let data = window.clipboardData.getData("Text");
|
|
55
|
+
var value = style == "array" ? this.getClipboardLines(data) :
|
|
56
|
+
style == "matrix" ? this.getClipboardMatrix(data) : [];
|
|
57
|
+
if (valueFoundCallback)
|
|
58
|
+
valueFoundCallback(value);
|
|
59
|
+
}
|
|
60
|
+
else if (window.navigator.clipboard) {
|
|
61
|
+
window.navigator.permissions.query({ name: 'clipboard-read' }).then(result => {
|
|
62
|
+
if (!(result.state === 'granted' || result.state === 'prompt'))
|
|
63
|
+
if (valueFoundCallback)
|
|
64
|
+
valueFoundCallback([]);
|
|
65
|
+
window.navigator.clipboard.readText()
|
|
66
|
+
.then(t => {
|
|
67
|
+
var value = style == "array" ? this.getClipboardLines(t) :
|
|
68
|
+
style == "matrix" ? this.getClipboardMatrix(t) : [];
|
|
69
|
+
if (valueFoundCallback)
|
|
70
|
+
valueFoundCallback(value);
|
|
71
|
+
})
|
|
72
|
+
.catch(err => {
|
|
73
|
+
this.msgService.simpleError(this.loc["Error during Clipboard content read operation"][this.LOCALE ?? 'it-IT'] + ": " + err);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Ottiene il contenuto della clipboard diviso per righe (separate da newline)
|
|
80
|
+
*
|
|
81
|
+
* @param {string} data contenuto letto dalla clipboard
|
|
82
|
+
*
|
|
83
|
+
* @returns {string[]} Array contenente il testo preso dalla clipboard diviso per riga
|
|
84
|
+
*/
|
|
85
|
+
getClipboardLines(data) {
|
|
86
|
+
return data.trim().split("\r\n");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Ottiene il contenuto della clipboard diviso per righe (separate da newline) e colonne (separate da tab)
|
|
90
|
+
*
|
|
91
|
+
* @param {string} data contenuto letto dalla clipboard
|
|
92
|
+
*
|
|
93
|
+
* @returns {string[][]} Matrice contenente il testo preso dalla clipboard diviso per riga e colonna
|
|
94
|
+
*/
|
|
95
|
+
getClipboardMatrix(data) {
|
|
96
|
+
var ret = [];
|
|
97
|
+
var rows = data.split("\r\n");
|
|
98
|
+
// A quanto pare ogni valore è separato da un \t... spero che sia uno standard di quando si copia da excel altrimenti ciao
|
|
99
|
+
for (let i = 0; i < rows.length; i++)
|
|
100
|
+
ret.push(rows[i].split('\t').map(t => t.trim()));
|
|
101
|
+
return ret;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Metodo che copia un testo all'interno della clipboard
|
|
105
|
+
*
|
|
106
|
+
* @param {string} text Testo da inserire nella clipboard
|
|
107
|
+
*/
|
|
108
|
+
copyTextToClipboard(text) {
|
|
109
|
+
var textArea = document.createElement("textarea");
|
|
110
|
+
//
|
|
111
|
+
// *** This styling is an extra step which is likely not required. ***
|
|
112
|
+
//
|
|
113
|
+
// Why is it here? To ensure:
|
|
114
|
+
// 1. the element is able to have focus and selection.
|
|
115
|
+
// 2. if element was to flash render it has minimal visual impact.
|
|
116
|
+
// 3. less flakyness with selection and copying which **might** occur if
|
|
117
|
+
// the textarea element is not visible.
|
|
118
|
+
//
|
|
119
|
+
// The likelihood is the element won't even render, not even a flash,
|
|
120
|
+
// so some of these are just precautions. However in IE the element
|
|
121
|
+
// is visible whilst the popup box asking the user for permission for
|
|
122
|
+
// the web page to copy to the clipboard.
|
|
123
|
+
//
|
|
124
|
+
// Place in top-left corner of screen regardless of scroll position.
|
|
125
|
+
textArea.style.position = "fixed";
|
|
126
|
+
textArea.style.top = "0";
|
|
127
|
+
textArea.style.left = "0";
|
|
128
|
+
// Ensure it has a small width and height. Setting to 1px / 1em
|
|
129
|
+
// doesn't work as this gives a negative w/h on some browsers.
|
|
130
|
+
textArea.style.width = "2em";
|
|
131
|
+
textArea.style.height = "2em";
|
|
132
|
+
// We don't need padding, reducing the size if it does flash render.
|
|
133
|
+
textArea.style.padding = "0";
|
|
134
|
+
// Clean up any borders.
|
|
135
|
+
textArea.style.border = "none";
|
|
136
|
+
textArea.style.outline = "none";
|
|
137
|
+
textArea.style.boxShadow = "none";
|
|
138
|
+
// Avoid flash of white box if rendered for any reason.
|
|
139
|
+
textArea.style.background = "transparent";
|
|
140
|
+
textArea.value = text;
|
|
141
|
+
document.body.appendChild(textArea);
|
|
142
|
+
textArea.focus();
|
|
143
|
+
textArea.select();
|
|
144
|
+
try {
|
|
145
|
+
var successful = document.execCommand("copy");
|
|
146
|
+
if (!successful)
|
|
147
|
+
this.msgService.simpleError(this.loc["Generic error during 'copy' command execution"][this.LOCALE ?? 'it-IT']);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
this.msgService.simpleError(this.loc["Error during Clipboard content copy operation"][this.LOCALE ?? 'it-IT'] + ": " + err);
|
|
151
|
+
}
|
|
152
|
+
document.body.removeChild(textArea);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
ClipboardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ClipboardService, deps: [{ token: i1.MessageService }, { token: EXT_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
156
|
+
ClipboardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ClipboardService });
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ClipboardService, decorators: [{
|
|
158
|
+
type: Injectable
|
|
159
|
+
}], ctorParameters: function () { return [{ type: i1.MessageService }, { type: undefined, decorators: [{
|
|
160
|
+
type: Optional
|
|
161
|
+
}, {
|
|
162
|
+
type: Inject,
|
|
163
|
+
args: [EXT_LOCALE]
|
|
164
|
+
}] }]; } });
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5jbGlwYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3JjL2xpYi9zZXJ2aWNlcy9leHRlbnNpb25zLmNsaXBib2FyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7O0FBRXZDOztHQUVHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQXdCekI7Ozs7T0FJRztJQUNILFlBQTJCLFVBQTBCLEVBQTBDLE1BQWM7UUFBbEYsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFBMEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTNCN0c7O1dBRUc7UUFDSyxRQUFHLEdBQUc7WUFDVixpSUFBaUksRUFBRTtnQkFDL0gsT0FBTyxFQUFFLGlJQUFpSTtnQkFDMUksT0FBTyxFQUFFLGlJQUFpSTthQUM3STtZQUNELCtDQUErQyxFQUFFO2dCQUM3QyxPQUFPLEVBQUUsK0NBQStDO2dCQUN4RCxPQUFPLEVBQUUseURBQXlEO2FBQ3JFO1lBQ0QsK0NBQStDLEVBQUU7Z0JBQzdDLE9BQU8sRUFBRSwrQ0FBK0M7Z0JBQ3hELE9BQU8sRUFBRSxvREFBb0Q7YUFDaEU7WUFDRCwrQ0FBK0MsRUFBQztnQkFDNUMsT0FBTyxFQUFFLCtDQUErQztnQkFDeEQsT0FBTyxFQUFFLHNEQUFzRDthQUNsRTtTQUNKLENBQUM7SUFPK0csQ0FBQztJQUVsSDs7Ozs7O09BTUc7SUFDSSxZQUFZLENBQUMsS0FBeUIsRUFBRSxrQkFBNEQ7UUFDdkcsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUM5QyxxRUFBcUU7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QUMsS0FBSyxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWxCLElBQUk7WUFDQSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLElBQUcsQ0FBQyxVQUFVO2dCQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEg7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRSxHQUFHLENBQUMsQ0FBQztTQUM5SDtRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7OzZHQTdKUSxnQkFBZ0IsZ0RBNkJrRCxVQUFVO2lIQTdCNUUsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQThCaUQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbnMubWVzc2FnZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEVYVF9MT0NBTEUgfSBmcm9tIFwiLi4vdG9rZW5zXCI7XHJcblxyXG4vKipcclxuICogU2VydmljZSBjaGUgZm9ybmlzY2UgdW4gYWNjZXNzbyBiYXNlIGluIGxldHR1cmEvc2NyaXR0dXJhIHN1bGxhIGNsaXBib2FyZFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2xpcGJvYXJkU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPZ2dldHRvIHN0YXRpY28gZGkgbG9jYWxpenphemlvbmUgcGVyIGkgbWVzc2FnZ2kgZGkgcXVlc3RhIFNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2MgPSB7XHJcbiAgICAgICAgXCJVbmZvcnR1bmF0ZWx5IEZpcmVmb3ggZG9lc24ndCB5ZXQgc3VwcG9ydCBkaXJlY3QgQ2xpcGJvYXJkIGFjY2VzcyBpZiBub3QgdmlhIGV4dGVuc2lvbnMsIFBsZWFzZSB1c2UgQ2hyb21lIHRvIGRvIHRoaXMgb3BlcmF0aW9uXCI6IHtcclxuICAgICAgICAgICAgJ2VuLVVTJzogXCJVbmZvcnR1bmF0ZWx5IEZpcmVmb3ggZG9lc24ndCB5ZXQgc3VwcG9ydCBkaXJlY3QgQ2xpcGJvYXJkIGFjY2VzcyBpZiBub3QgdmlhIGV4dGVuc2lvbnMsIFBsZWFzZSB1c2UgQ2hyb21lIHRvIGRvIHRoaXMgb3BlcmF0aW9uXCIsXHJcbiAgICAgICAgICAgICdpdC1JVCc6IFwiTWkgZGlzcGlhY2UgbWEgRmlyZWZveCBub24gc3VwcG9ydGEgbCdhY2Nlc3NvIGRpcmV0dG8gYWxsYSBDbGlwYm9hcmQsIHNlIG5vbiBhdHRyYXZlcnNvIGxlIGVzdGVuc2lvbmkuIFNpIHByZWdhIGRpIHVzYXJlIENocm9tZVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIkdlbmVyaWMgZXJyb3IgZHVyaW5nICdjb3B5JyBjb21tYW5kIGV4ZWN1dGlvblwiOiB7XHJcbiAgICAgICAgICAgICdlbi1VUyc6IFwiR2VuZXJpYyBlcnJvciBkdXJpbmcgJ2NvcHknIGNvbW1hbmQgZXhlY3V0aW9uXCIsXHJcbiAgICAgICAgICAgICdpdC1JVCc6IFwiRXJyb3JlIGdlbmVyaWNvIGR1cmFudGUgbCdlc2VjdXppb25lIGRlbCBjb21hbmRvICdjb3B5J1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIkVycm9yIGR1cmluZyBDbGlwYm9hcmQgY29udGVudCByZWFkIG9wZXJhdGlvblwiOiB7XHJcbiAgICAgICAgICAgICdlbi1VUyc6IFwiRXJyb3IgZHVyaW5nIENsaXBib2FyZCBjb250ZW50IHJlYWQgb3BlcmF0aW9uXCIsXHJcbiAgICAgICAgICAgICdpdC1JVCc6IFwiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsIGNvbnRlbnV0byBkZWxsYSBDbGlwYm9hcmRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJFcnJvciBkdXJpbmcgQ2xpcGJvYXJkIGNvbnRlbnQgY29weSBvcGVyYXRpb25cIjp7XHJcbiAgICAgICAgICAgICdlbi1VUyc6IFwiRXJyb3IgZHVyaW5nIENsaXBib2FyZCBjb250ZW50IGNvcHkgb3BlcmF0aW9uXCIsXHJcbiAgICAgICAgICAgICdpdC1JVCc6IFwiRXJyb3JlIG5lbGxhIHNjcml0dHVyYSBkZWwgY29udGVudXRvIG5lbGxhIENsaXBib2FyZFwiXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgbXNnU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoRVhUX0xPQ0FMRSkgcHJpdmF0ZSBMT0NBTEU6IHN0cmluZykgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVuZGUgaWwgdmFsb3JlIGRlbGxhIGNsaXBib2FyZC4gXHJcbiAgICAgKiBTaSBwdcOyIHNwZWNpZmljYXJlIHNlIGNpIHNpIGFzcGV0dGEgdW5hIGxpc3RhIG8gdW5hIG1hdHJpY2UgZGkgdmFsb3JpIGluIG1vZG8gZGEgcmljZXZlcmUgZ2nDoCB1biByaXN1bHRhdG8gdXRpbGl6emFiaWxlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J2FycmF5JyB8ICdtYXRyaXgnfSBzdHlsZSBTdGlsZSBkZWxsJ291dHB1dCBkZXNpZGVyYXRvLCBzZSBhcnJheSBvIG1hdHJpY2VcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbHVlRm91bmRDYWxsYmFjayBDYWxsYmFjayBjaGUgcXVlc3RhIGZ1bnppb25lIGNoaWFtZXLDoCB1bmEgdm9sdGEgb3R0ZW51dG8gaSB2YWxvcmkgcmljaGllc3RpIGRhbGxhIGNsaXBib2FyZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2xpcGJvYXJkKHN0eWxlOiAnYXJyYXknIHwgJ21hdHJpeCcsIHZhbHVlRm91bmRDYWxsYmFjayA6ICh2YWx1ZXM6IHN0cmluZ1tdIHwgc3RyaW5nW11bXSkgPT4gdm9pZCkge1xyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJGaXJlZm94XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIC8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NsaXBib2FyZC9yZWFkVGV4dFxyXG4gICAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uuc2ltcGxlRXJyb3IodGhpcy5sb2NbXCJVbmZvcnR1bmF0ZWx5IEZpcmVmb3ggZG9lc24ndCB5ZXQgc3VwcG9ydCBkaXJlY3QgQ2xpcGJvYXJkIGFjY2VzcyBpZiBub3QgdmlhIGV4dGVuc2lvbnMsIFBsZWFzZSB1c2UgQ2hyb21lIHRvIGRvIHRoaXMgb3BlcmF0aW9uXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCg8YW55PndpbmRvdykuY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9ICg8YW55PndpbmRvdykuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gc3R5bGUgPT0gXCJhcnJheVwiPyB0aGlzLmdldENsaXBib2FyZExpbmVzKGRhdGEpIDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFwibWF0cml4XCIgPyB0aGlzLmdldENsaXBib2FyZE1hdHJpeChkYXRhKSA6IFtdO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVGb3VuZENhbGxiYWNrKSB2YWx1ZUZvdW5kQ2FsbGJhY2sodmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAoKDxhbnk+d2luZG93KS5uYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XHJcbiAgICAgICAgICAgICg8YW55PndpbmRvdykubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHsgbmFtZTogJ2NsaXBib2FyZC1yZWFkJyB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQuc3RhdGUgPT09ICdncmFudGVkJyB8fCByZXN1bHQuc3RhdGUgPT09ICdwcm9tcHQnKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVGb3VuZENhbGxiYWNrKSB2YWx1ZUZvdW5kQ2FsbGJhY2soW10pO1xyXG5cclxuICAgICAgICAgICAgICAgICg8YW55PndpbmRvdykubmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4odCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlID09IFwiYXJyYXlcIj8gdGhpcy5nZXRDbGlwYm9hcmRMaW5lcyh0KSA6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9PSBcIm1hdHJpeFwiID8gdGhpcy5nZXRDbGlwYm9hcmRNYXRyaXgodCkgOiBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRm91bmRDYWxsYmFjaykgdmFsdWVGb3VuZENhbGxiYWNrKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLnNpbXBsZUVycm9yKHRoaXMubG9jW1wiRXJyb3IgZHVyaW5nIENsaXBib2FyZCBjb250ZW50IHJlYWQgb3BlcmF0aW9uXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddICsgXCI6IFwiKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCBjb250ZW51dG8gZGVsbGEgY2xpcGJvYXJkIGRpdmlzbyBwZXIgcmlnaGUgKHNlcGFyYXRlIGRhIG5ld2xpbmUpXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIGNvbnRlbnV0byBsZXR0byBkYWxsYSBjbGlwYm9hcmRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBBcnJheSBjb250ZW5lbnRlIGlsIHRlc3RvIHByZXNvIGRhbGxhIGNsaXBib2FyZCBkaXZpc28gcGVyIHJpZ2FcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRDbGlwYm9hcmRMaW5lcyhkYXRhOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEudHJpbSgpLnNwbGl0KFwiXFxyXFxuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCBjb250ZW51dG8gZGVsbGEgY2xpcGJvYXJkIGRpdmlzbyBwZXIgcmlnaGUgKHNlcGFyYXRlIGRhIG5ld2xpbmUpIGUgY29sb25uZSAoc2VwYXJhdGUgZGEgdGFiKVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBjb250ZW51dG8gbGV0dG8gZGFsbGEgY2xpcGJvYXJkXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXVtdfSBNYXRyaWNlIGNvbnRlbmVudGUgaWwgdGVzdG8gcHJlc28gZGFsbGEgY2xpcGJvYXJkIGRpdmlzbyBwZXIgcmlnYSBlIGNvbG9ubmFcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRDbGlwYm9hcmRNYXRyaXgoZGF0YTogc3RyaW5nKTogc3RyaW5nW11bXSB7XHJcbiAgICAgICAgdmFyIHJldDogc3RyaW5nW11bXSA9IFtdO1xyXG4gICAgICAgIHZhciByb3dzID0gZGF0YS5zcGxpdChcIlxcclxcblwiKTtcclxuXHJcbiAgICAgICAgLy8gQSBxdWFudG8gcGFyZSBvZ25pIHZhbG9yZSDDqCBzZXBhcmF0byBkYSB1biBcXHQuLi4gc3Blcm8gY2hlIHNpYSB1bm8gc3RhbmRhcmQgZGkgcXVhbmRvIHNpIGNvcGlhIGRhIGV4Y2VsIGFsdHJpbWVudGkgY2lhb1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgcmV0LnB1c2gocm93c1tpXS5zcGxpdCgnXFx0JykubWFwKHQgPT4gdC50cmltKCkpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBjb3BpYSB1biB0ZXN0byBhbGwnaW50ZXJubyBkZWxsYSBjbGlwYm9hcmRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGVzdG8gZGEgaW5zZXJpcmUgbmVsbGEgY2xpcGJvYXJkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAqKiogVGhpcyBzdHlsaW5nIGlzIGFuIGV4dHJhIHN0ZXAgd2hpY2ggaXMgbGlrZWx5IG5vdCByZXF1aXJlZC4gKioqXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBXaHkgaXMgaXQgaGVyZT8gVG8gZW5zdXJlOlxyXG4gICAgICAgIC8vIDEuIHRoZSBlbGVtZW50IGlzIGFibGUgdG8gaGF2ZSBmb2N1cyBhbmQgc2VsZWN0aW9uLlxyXG4gICAgICAgIC8vIDIuIGlmIGVsZW1lbnQgd2FzIHRvIGZsYXNoIHJlbmRlciBpdCBoYXMgbWluaW1hbCB2aXN1YWwgaW1wYWN0LlxyXG4gICAgICAgIC8vIDMuIGxlc3MgZmxha3luZXNzIHdpdGggc2VsZWN0aW9uIGFuZCBjb3B5aW5nIHdoaWNoICoqbWlnaHQqKiBvY2N1ciBpZlxyXG4gICAgICAgIC8vICAgIHRoZSB0ZXh0YXJlYSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gVGhlIGxpa2VsaWhvb2QgaXMgdGhlIGVsZW1lbnQgd29uJ3QgZXZlbiByZW5kZXIsIG5vdCBldmVuIGEgZmxhc2gsXHJcbiAgICAgICAgLy8gc28gc29tZSBvZiB0aGVzZSBhcmUganVzdCBwcmVjYXV0aW9ucy4gSG93ZXZlciBpbiBJRSB0aGUgZWxlbWVudFxyXG4gICAgICAgIC8vIGlzIHZpc2libGUgd2hpbHN0IHRoZSBwb3B1cCBib3ggYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIGZvclxyXG4gICAgICAgIC8vIHRoZSB3ZWIgcGFnZSB0byBjb3B5IHRvIHRoZSBjbGlwYm9hcmQuXHJcbiAgICAgICAgLy9cclxuXHJcbiAgICAgICAgLy8gUGxhY2UgaW4gdG9wLWxlZnQgY29ybmVyIG9mIHNjcmVlbiByZWdhcmRsZXNzIG9mIHNjcm9sbCBwb3NpdGlvbi5cclxuICAgICAgICB0ZXh0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcclxuICAgICAgICB0ZXh0QXJlYS5zdHlsZS50b3AgPSBcIjBcIjtcclxuICAgICAgICB0ZXh0QXJlYS5zdHlsZS5sZWZ0ID0gXCIwXCI7XHJcblxyXG4gICAgICAgIC8vIEVuc3VyZSBpdCBoYXMgYSBzbWFsbCB3aWR0aCBhbmQgaGVpZ2h0LiBTZXR0aW5nIHRvIDFweCAvIDFlbVxyXG4gICAgICAgIC8vIGRvZXNuJ3Qgd29yayBhcyB0aGlzIGdpdmVzIGEgbmVnYXRpdmUgdy9oIG9uIHNvbWUgYnJvd3NlcnMuXHJcbiAgICAgICAgdGV4dEFyZWEuc3R5bGUud2lkdGggPSBcIjJlbVwiO1xyXG4gICAgICAgIHRleHRBcmVhLnN0eWxlLmhlaWdodCA9IFwiMmVtXCI7XHJcblxyXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgcGFkZGluZywgcmVkdWNpbmcgdGhlIHNpemUgaWYgaXQgZG9lcyBmbGFzaCByZW5kZXIuXHJcbiAgICAgICAgdGV4dEFyZWEuc3R5bGUucGFkZGluZyA9IFwiMFwiO1xyXG5cclxuICAgICAgICAvLyBDbGVhbiB1cCBhbnkgYm9yZGVycy5cclxuICAgICAgICB0ZXh0QXJlYS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcclxuICAgICAgICB0ZXh0QXJlYS5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XHJcbiAgICAgICAgdGV4dEFyZWEuc3R5bGUuYm94U2hhZG93ID0gXCJub25lXCI7XHJcblxyXG4gICAgICAgIC8vIEF2b2lkIGZsYXNoIG9mIHdoaXRlIGJveCBpZiByZW5kZXJlZCBmb3IgYW55IHJlYXNvbi5cclxuICAgICAgICB0ZXh0QXJlYS5zdHlsZS5iYWNrZ3JvdW5kID0gXCJ0cmFuc3BhcmVudFwiO1xyXG5cclxuICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IHRleHQ7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpO1xyXG4gICAgICAgIHRleHRBcmVhLmZvY3VzKCk7XHJcbiAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBzdWNjZXNzZnVsID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgICAgICAgICBpZighc3VjY2Vzc2Z1bClcclxuICAgICAgICAgICAgICAgIHRoaXMubXNnU2VydmljZS5zaW1wbGVFcnJvcih0aGlzLmxvY1tcIkdlbmVyaWMgZXJyb3IgZHVyaW5nICdjb3B5JyBjb21tYW5kIGV4ZWN1dGlvblwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXNnU2VydmljZS5zaW1wbGVFcnJvcih0aGlzLmxvY1tcIkVycm9yIGR1cmluZyBDbGlwYm9hcmQgY29udGVudCBjb3B5IG9wZXJhdGlvblwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSArIFwiOiBcIisgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpO1xyXG4gICAgfVxyXG59Il19
|