@esfaenza/extensions 12.2.14 → 13.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/esfaenza-extensions.d.ts +1 -2
  2. package/esm2020/esfaenza-extensions.mjs +5 -0
  3. package/{esm2015/lib/models/CallResult.js → esm2020/lib/models/CallResult.mjs} +0 -0
  4. package/{esm2015/lib/models/CsvHeaders.js → esm2020/lib/models/CsvHeaders.mjs} +0 -0
  5. package/{esm2015/lib/models/ExportConsts.js → esm2020/lib/models/ExportConsts.mjs} +0 -0
  6. package/{esm2015/lib/models/ExtensionsModuleConfig.js → esm2020/lib/models/ExtensionsModuleConfig.mjs} +0 -0
  7. package/{esm2015/lib/models/GenericItem.js → esm2020/lib/models/GenericItem.mjs} +0 -0
  8. package/{esm2015/lib/models/TypeCode.js → esm2020/lib/models/TypeCode.mjs} +0 -0
  9. package/{esm2015/lib/models/providers/base/BaseStorageProvider.js → esm2020/lib/models/providers/base/BaseStorageProvider.mjs} +0 -0
  10. package/esm2020/lib/models/providers/implementation/DefaultStorageProvider.mjs +79 -0
  11. package/{esm2015/lib/models/session/base/BaseSessionRetriever.js → esm2020/lib/models/session/base/BaseSessionRetriever.mjs} +0 -0
  12. package/esm2020/lib/models/session/implementation/DefaultSessionRetriever.mjs +28 -0
  13. package/esm2020/lib/modules/extensions.full.module.mjs +58 -0
  14. package/esm2020/lib/modules/extensions.module.mjs +28 -0
  15. package/esm2020/lib/services/extensions.clipboard.service.mjs +165 -0
  16. package/esm2020/lib/services/extensions.dates.service.mjs +232 -0
  17. package/esm2020/lib/services/extensions.exports.service.mjs +453 -0
  18. package/esm2020/lib/services/extensions.hashing.service.mjs +309 -0
  19. package/esm2020/lib/services/extensions.messages.service.mjs +323 -0
  20. package/esm2020/lib/services/extensions.storage.service.mjs +103 -0
  21. package/esm2020/lib/services/extensions.utilities.service.mjs +188 -0
  22. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  23. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  24. package/fesm2015/{esfaenza-extensions.js → esfaenza-extensions.mjs} +105 -67
  25. package/fesm2015/esfaenza-extensions.mjs.map +1 -0
  26. package/fesm2020/esfaenza-extensions.mjs +2055 -0
  27. package/fesm2020/esfaenza-extensions.mjs.map +1 -0
  28. package/lib/models/providers/implementation/DefaultStorageProvider.d.ts +3 -0
  29. package/lib/models/session/implementation/DefaultSessionRetriever.d.ts +3 -0
  30. package/lib/modules/extensions.full.module.d.ts +4 -0
  31. package/lib/modules/extensions.module.d.ts +4 -0
  32. package/lib/services/extensions.clipboard.service.d.ts +3 -0
  33. package/lib/services/extensions.dates.service.d.ts +3 -0
  34. package/lib/services/extensions.exports.service.d.ts +3 -0
  35. package/lib/services/extensions.hashing.service.d.ts +3 -0
  36. package/lib/services/extensions.messages.service.d.ts +3 -0
  37. package/lib/services/extensions.storage.service.d.ts +3 -0
  38. package/lib/services/extensions.utilities.service.d.ts +3 -0
  39. package/package.json +22 -10
  40. package/bundles/esfaenza-extensions.umd.js +0 -2442
  41. package/bundles/esfaenza-extensions.umd.js.map +0 -1
  42. package/esfaenza-extensions.metadata.json +0 -1
  43. package/esm2015/esfaenza-extensions.js +0 -7
  44. package/esm2015/lib/models/providers/implementation/DefaultStorageProvider.js +0 -79
  45. package/esm2015/lib/models/session/implementation/DefaultSessionRetriever.js +0 -26
  46. package/esm2015/lib/modules/extensions.full.module.js +0 -54
  47. package/esm2015/lib/modules/extensions.module.js +0 -24
  48. package/esm2015/lib/services/extensions.clipboard.service.js +0 -165
  49. package/esm2015/lib/services/extensions.dates.service.js +0 -224
  50. package/esm2015/lib/services/extensions.exports.service.js +0 -453
  51. package/esm2015/lib/services/extensions.hashing.service.js +0 -306
  52. package/esm2015/lib/services/extensions.messages.service.js +0 -317
  53. package/esm2015/lib/services/extensions.storage.service.js +0 -100
  54. package/esm2015/lib/services/extensions.utilities.service.js +0 -185
  55. package/fesm2015/esfaenza-extensions.js.map +0 -1
@@ -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==
@@ -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
@@ -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