@pepperi-addons/ngx-composite-lib 0.0.16-beta.4 → 0.0.16-beta.42

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 (92) hide show
  1. package/bundles/pepperi-addons-ngx-composite-lib-color-settings.umd.js +10 -1
  2. package/bundles/pepperi-addons-ngx-composite-lib-color-settings.umd.js.map +1 -1
  3. package/bundles/pepperi-addons-ngx-composite-lib-data-view-builder.umd.js +393 -0
  4. package/bundles/pepperi-addons-ngx-composite-lib-data-view-builder.umd.js.map +1 -0
  5. package/bundles/pepperi-addons-ngx-composite-lib-file-status-panel.umd.js +15 -10
  6. package/bundles/pepperi-addons-ngx-composite-lib-file-status-panel.umd.js.map +1 -1
  7. package/bundles/pepperi-addons-ngx-composite-lib-generic-form.umd.js +91 -58
  8. package/bundles/pepperi-addons-ngx-composite-lib-generic-form.umd.js.map +1 -1
  9. package/bundles/pepperi-addons-ngx-composite-lib-generic-list.umd.js +119 -74
  10. package/bundles/pepperi-addons-ngx-composite-lib-generic-list.umd.js.map +1 -1
  11. package/bundles/pepperi-addons-ngx-composite-lib-group-buttons-settings.umd.js +5 -2
  12. package/bundles/pepperi-addons-ngx-composite-lib-group-buttons-settings.umd.js.map +1 -1
  13. package/bundles/pepperi-addons-ngx-composite-lib.umd.js +114 -50
  14. package/bundles/pepperi-addons-ngx-composite-lib.umd.js.map +1 -1
  15. package/color-settings/color-settings.component.d.ts +4 -1
  16. package/core/common/directives/reset-configuration-field.directive.d.ts +1 -0
  17. package/core/common/services/dimx.service.d.ts +32 -0
  18. package/core/common/services/public-api.d.ts +1 -0
  19. package/data-view-builder/data-view-builder.component.d.ts +35 -0
  20. package/data-view-builder/data-view-builder.model.d.ts +1 -0
  21. package/data-view-builder/data-view-builder.module.d.ts +23 -0
  22. package/data-view-builder/data-view-builder.service.d.ts +14 -0
  23. package/data-view-builder/menu-data-view/menu-data-view.component.d.ts +36 -0
  24. package/data-view-builder/package.json +10 -0
  25. package/{dimx-export/pepperi-addons-ngx-composite-lib-dimx-export.d.ts → data-view-builder/pepperi-addons-ngx-composite-lib-data-view-builder.d.ts} +1 -1
  26. package/data-view-builder/public-api.d.ts +3 -0
  27. package/esm2015/color-settings/color-settings.component.js +11 -2
  28. package/esm2015/core/common/directives/reset-configuration-field.directive.js +26 -22
  29. package/esm2015/core/common/services/dimx.service.js +50 -0
  30. package/esm2015/core/common/services/public-api.js +2 -1
  31. package/esm2015/data-view-builder/data-view-builder.component.js +122 -0
  32. package/esm2015/data-view-builder/data-view-builder.model.js +2 -0
  33. package/esm2015/data-view-builder/data-view-builder.module.js +82 -0
  34. package/esm2015/data-view-builder/data-view-builder.service.js +39 -0
  35. package/esm2015/data-view-builder/menu-data-view/menu-data-view.component.js +122 -0
  36. package/esm2015/data-view-builder/pepperi-addons-ngx-composite-lib-data-view-builder.js +5 -0
  37. package/esm2015/data-view-builder/public-api.js +7 -0
  38. package/esm2015/file-status-panel/file-status-panel.module.js +12 -4
  39. package/esm2015/generic-form/generic-form.component.js +86 -55
  40. package/esm2015/generic-form/generic-form.model.js +1 -1
  41. package/esm2015/generic-form/index.js +5 -0
  42. package/esm2015/generic-list/generic-list.component.js +65 -36
  43. package/esm2015/generic-list/generic-list.model.js +1 -1
  44. package/esm2015/generic-list/generic-list.module.js +7 -4
  45. package/esm2015/generic-list/generic-list.service.js +23 -10
  46. package/esm2015/group-buttons-settings/group-buttons-settings.component.js +2 -2
  47. package/esm2015/group-buttons-settings/group-buttons-settings.module.js +6 -3
  48. package/esm2015/ngx-composite-lib.module.js +19 -8
  49. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.js +10 -1
  50. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.js.map +1 -1
  51. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.js +360 -0
  52. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.js.map +1 -0
  53. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.js +12 -5
  54. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.js.map +1 -1
  55. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.js +85 -55
  56. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.js.map +1 -1
  57. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.js +88 -44
  58. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.js.map +1 -1
  59. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.js +6 -3
  60. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.js.map +1 -1
  61. package/fesm2015/pepperi-addons-ngx-composite-lib.js +117 -54
  62. package/fesm2015/pepperi-addons-ngx-composite-lib.js.map +1 -1
  63. package/file-status-panel/file-status-panel.module.d.ts +3 -0
  64. package/generic-form/generic-form.component.d.ts +12 -12
  65. package/generic-form/generic-form.model.d.ts +12 -13
  66. package/{dimx-export → generic-form}/index.d.ts +0 -0
  67. package/generic-list/generic-list.component.d.ts +11 -9
  68. package/generic-list/generic-list.model.d.ts +10 -6
  69. package/generic-list/generic-list.service.d.ts +2 -1
  70. package/group-buttons-settings/group-buttons-settings.module.d.ts +2 -1
  71. package/ngx-composite-lib.module.d.ts +4 -2
  72. package/package.json +2 -2
  73. package/src/assets/i18n/en.ngx-composite-lib.json +24 -1
  74. package/src/core/style/components/data-view-builder.scss +65 -0
  75. package/styling.scss +5 -1
  76. package/bundles/pepperi-addons-ngx-composite-lib-dimx-export.umd.js +0 -890
  77. package/bundles/pepperi-addons-ngx-composite-lib-dimx-export.umd.js.map +0 -1
  78. package/dimx-export/dimx.component.d.ts +0 -86
  79. package/dimx-export/dimx.model.d.ts +0 -5
  80. package/dimx-export/dimx.module.d.ts +0 -16
  81. package/dimx-export/dimx.service.d.ts +0 -21
  82. package/dimx-export/package.json +0 -16
  83. package/dimx-export/public-api.d.ts +0 -3
  84. package/esm2015/dimx-export/dimx.component.js +0 -335
  85. package/esm2015/dimx-export/dimx.model.js +0 -8
  86. package/esm2015/dimx-export/dimx.module.js +0 -53
  87. package/esm2015/dimx-export/dimx.service.js +0 -50
  88. package/esm2015/dimx-export/index.js +0 -5
  89. package/esm2015/dimx-export/pepperi-addons-ngx-composite-lib-dimx-export.js +0 -5
  90. package/esm2015/dimx-export/public-api.js +0 -7
  91. package/fesm2015/pepperi-addons-ngx-composite-lib-dimx-export.js +0 -446
  92. package/fesm2015/pepperi-addons-ngx-composite-lib-dimx-export.js.map +0 -1
@@ -1,335 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
- import { saveAs } from 'file-saver';
4
- import { PepGuid } from '@pepperi-addons/ngx-lib';
5
- import { FileStatusPanelComponent } from '@pepperi-addons/ngx-composite-lib/file-status-panel';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@ngx-translate/core";
8
- import * as i2 from "./dimx.service";
9
- import * as i3 from "@pepperi-addons/ngx-lib/snack-bar";
10
- export class DIMXComponent {
11
- constructor(translate, addonService, pepSnackBarService) {
12
- this.translate = translate;
13
- this.addonService = addonService;
14
- this.pepSnackBarService = pepSnackBarService;
15
- this.DIMXProcessDone = new EventEmitter();
16
- this.currentSnackBar = null;
17
- this.iFileID = 0;
18
- this.iFileArray = [];
19
- this.toBase64 = (file) => new Promise((resolve, reject) => {
20
- const reader = new FileReader();
21
- reader.readAsDataURL(file);
22
- reader.onload = () => resolve(reader.result);
23
- reader.onerror = error => reject(error);
24
- });
25
- }
26
- ngOnInit() {
27
- // Get the first translation for load all translations.
28
- this.translate.get('SHADOW_SETTINGS.INTENSITY_SOFT').toPromise().then((typeSoft) => {
29
- console.log("something");
30
- });
31
- }
32
- getDIMXExportPOSTBody(value) {
33
- return {
34
- "Format": value.DIMXExportFormat,
35
- "IncludeDeleted": value.DIMXExportIncludeDeleted,
36
- "Where": value.DIMXExportWhere,
37
- "Fields": value.DIMXExportFields,
38
- "Delimiter": value.DIMXExportDelimiter
39
- };
40
- }
41
- pollDIMXResult(pollingURL, ifile) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- console.log(`polling audit with the executionUUID: ${pollingURL}`);
44
- const delay = (ms) => new Promise(res => setTimeout(res, ms));
45
- let seconds = 0;
46
- const waitingTime = 1000; //in ms
47
- try {
48
- let result;
49
- while (true) {
50
- result = yield this.addonService.papiClient.get(`/audit_logs/${pollingURL}`);
51
- console.log(`result from auditlog get is: ${result}`);
52
- if (!result || result["Status"]["ID"] === 2 || result["Status"]["ID"] === 4) {
53
- console.log(`waited for ${seconds++} seconds`);
54
- yield delay(waitingTime);
55
- }
56
- else {
57
- break;
58
- }
59
- }
60
- switch (result["Status"]["ID"]) {
61
- case 0:
62
- ifile.status = "failed";
63
- ifile.returnedObject = { "ErrorMessage": result["AuditInfo"]["ErrorMessage"] };
64
- this.updateSnackbar();
65
- yield this.SendDoneEventIfDone();
66
- return null;
67
- case 1:
68
- console.log(`polling result: ${result["AuditInfo"]["ResultObject"]}`);
69
- return JSON.parse(result["AuditInfo"]["ResultObject"]);
70
- default:
71
- ifile.status = "failed";
72
- ifile.returnedObject = { "ErrorMessage": `unknown audit log type: ${result["Status"]}` };
73
- this.updateSnackbar();
74
- yield this.SendDoneEventIfDone();
75
- return null;
76
- }
77
- }
78
- catch (ex) {
79
- console.log(`pollDIMXResult: ${ex}`);
80
- ifile.status = "failed";
81
- ifile.returnedObject = { "ErrorMessage": ex.message };
82
- this.updateSnackbar();
83
- yield this.SendDoneEventIfDone();
84
- return null;
85
- }
86
- });
87
- }
88
- getNewFileName(value) {
89
- let extension;
90
- switch (value.DIMXExportFormat.toLowerCase()) {
91
- case "json":
92
- extension = ".json";
93
- break;
94
- case "csv":
95
- extension = '.csv';
96
- break;
97
- default:
98
- extension = "";
99
- }
100
- const filename = value.DIMXExportFileName;
101
- return filename + extension;
102
- }
103
- createNewIFile(fileName, status) {
104
- return {
105
- "key": this.iFileID++,
106
- "name": fileName,
107
- "status": status
108
- };
109
- }
110
- removeIfilesWithDelay(iFile, delay = 2000) {
111
- return __awaiter(this, void 0, void 0, function* () {
112
- window.setTimeout(() => {
113
- const index = this.iFileArray.findIndex(element => element === iFile);
114
- if (index >= 0) {
115
- this.iFileArray.splice(index, 1);
116
- this.updateSnackbar();
117
- }
118
- }, delay);
119
- });
120
- }
121
- clearIFilesWithDelay(delay = 2000) {
122
- return __awaiter(this, void 0, void 0, function* () {
123
- window.setTimeout(() => {
124
- this.iFileArray = [];
125
- //this.currentSnackBar?.instance.closeClick.emit();
126
- this.updateSnackbar();
127
- }, delay);
128
- });
129
- }
130
- uploadFile(options) {
131
- this.dimxImportOptions = options;
132
- const elem = document.getElementById("fileuploader");
133
- if (elem && document.createEvent) {
134
- const evt = document.createEvent("MouseEvents");
135
- evt.initEvent("click", true, false);
136
- elem.dispatchEvent(evt);
137
- }
138
- // this.fileField?.nativeElement.click();
139
- }
140
- IsFileInProgress(iFile) {
141
- return iFile.status == "downloading" || iFile.status == "uploading";
142
- }
143
- AnyFilesInProgress() {
144
- if (this.iFileArray.find(this.IsFileInProgress) === undefined) {
145
- return false;
146
- }
147
- return true;
148
- }
149
- GetDoneEventBody() {
150
- return this.iFileArray.map(iFile => {
151
- return {
152
- "FileName": iFile.name,
153
- "Status": iFile.status,
154
- "ReturnedObject": iFile.returnedObject
155
- };
156
- });
157
- }
158
- SendDoneEventIfDone() {
159
- return __awaiter(this, void 0, void 0, function* () {
160
- if (this.AnyFilesInProgress()) {
161
- return;
162
- }
163
- const eventObject = this.GetDoneEventBody();
164
- this.DIMXProcessDone.emit(eventObject);
165
- yield this.clearIFilesWithDelay();
166
- });
167
- }
168
- updateSnackbar() {
169
- var _a;
170
- if (!((_a = this.currentSnackBar) === null || _a === void 0 ? void 0 : _a.instance)) {
171
- this.currentSnackBar = this.pepSnackBarService.openSnackBarFromComponent(FileStatusPanelComponent, {
172
- title: "DIMX Process",
173
- content: this.iFileArray
174
- });
175
- this.currentSnackBar.instance.closeClick.subscribe(() => {
176
- this.currentSnackBar = null;
177
- });
178
- }
179
- else {
180
- this.currentSnackBar.instance.data.content = this.iFileArray;
181
- if (this.iFileArray.length === 0) {
182
- this.currentSnackBar.instance.snackBarRef.dismiss();
183
- this.currentSnackBar = null;
184
- }
185
- }
186
- }
187
- dimximportrun(e) {
188
- return __awaiter(this, void 0, void 0, function* () {
189
- console.log("Enter DIMXImportRun");
190
- const files = e.target.files;
191
- const fileListAsArray = Array.from(files);
192
- fileListAsArray.forEach((file, i) => __awaiter(this, void 0, void 0, function* () {
193
- const filex = file;
194
- const dimx_import_relativeURL = `/addons/api/44c97115-6d14-4626-91dc-83f176e9a0fc/api/file_import_upload`;
195
- const str = (yield this.toBase64(filex)); //???
196
- const ext = filex.name.split('.')[1];
197
- const value = { fileStr: str, fileExt: ext };
198
- const dimxUploadObject = Object.assign(Object.assign(Object.assign({}, this.getPFSUploadObject(value)), this.dimxImportOptions), { Resource: this.DIMXResource, AddonUUID: this.DIMXAddonUUID });
199
- const iFile = this.createNewIFile(filex.name, "uploading");
200
- console.log(`created new iFile: ${iFile}`);
201
- this.iFileArray.push(iFile);
202
- this.updateSnackbar();
203
- console.log(`added iFile to iFileArray`);
204
- try {
205
- console.log("posting to dimx import_upload now");
206
- const header = {};
207
- if (dimxUploadObject.ActionID) {
208
- header["X-Pepperi-ActionID"] = dimxUploadObject.ActionID;
209
- }
210
- if (dimxUploadObject.OwnerID) {
211
- header["X-Pepperi-OwnerID"] = dimxUploadObject.OwnerID;
212
- }
213
- const res = yield this.addonService.papiClient.post(dimx_import_relativeURL, dimxUploadObject, header);
214
- console.log("Got reply from dimx, calling poll with the result:");
215
- console.log(JSON.stringify(res));
216
- const poll_result = yield this.pollDIMXResult(res['ExecutionUUID'], iFile);
217
- if (poll_result === null) {
218
- return;
219
- }
220
- console.log(`done polling, got result: ${JSON.stringify(poll_result)}`);
221
- iFile.status = "done";
222
- iFile.returnedObject = poll_result;
223
- this.updateSnackbar();
224
- yield this.SendDoneEventIfDone();
225
- console.log("Imported the file");
226
- //await this.removeIfileWithDelay(iFile);
227
- // check all done
228
- }
229
- catch (ex) {
230
- console.log(`DIMXImportRun: ${ex}`);
231
- iFile.status = "failed";
232
- iFile.returnedObject = { "ErrorMessage": ex.message };
233
- this.updateSnackbar();
234
- yield this.SendDoneEventIfDone();
235
- //await this.removeIfileWithDelay(iFile, 2000);
236
- return;
237
- }
238
- }));
239
- });
240
- }
241
- getNewPFSUploadKey(fileExt) {
242
- const uuid = PepGuid.newGuid();
243
- const folder = 'DIMX_import';
244
- const pfsKey = `/${folder}/${uuid}.${fileExt}`;
245
- return pfsKey;
246
- }
247
- getPFSUploadObject(value) {
248
- const fileStrArr = value.fileStr.split(';');
249
- const mime = fileStrArr[0].split(':')[1];
250
- const pfsKey = this.getNewPFSUploadKey(value.fileExt);
251
- const pfsUploadObject = {
252
- "Key": pfsKey,
253
- "MIME": mime,
254
- "URI": value.fileStr
255
- };
256
- return pfsUploadObject;
257
- }
258
- DIMXExportRun(value) {
259
- return __awaiter(this, void 0, void 0, function* () {
260
- if (!value) {
261
- value = {};
262
- }
263
- if (!value.DIMXExportFormat) {
264
- value.DIMXExportFormat = 'json';
265
- }
266
- if (!value.DIMXExportIncludeDeleted) {
267
- value.DIMXExportIncludeDeleted = false;
268
- }
269
- if (!value.DIMXExportFileName) {
270
- value.DIMXExportFileName = 'export';
271
- }
272
- const bod = this.getDIMXExportPOSTBody(value ? value : {});
273
- const fileName = this.getNewFileName(value);
274
- const iFile = this.createNewIFile(fileName, "downloading");
275
- console.log(`created new iFile: ${iFile}`);
276
- this.iFileArray.push(iFile);
277
- this.updateSnackbar();
278
- console.log(`added iFile to iFileArray`);
279
- try {
280
- console.log("posting to dimx export now");
281
- const header = {};
282
- if (value.ActionID) {
283
- header["X-Pepperi-ActionID"] = value.ActionID;
284
- }
285
- const res = yield this.addonService.papiClient.post(`/addons/data/export/file/${this.DIMXAddonUUID}/${this.DIMXResource}`, bod, header);
286
- console.log("Got reply from dimx, calling poll with the result:");
287
- console.log(res);
288
- const result = yield this.pollDIMXResult(res['ExecutionUUID'], iFile);
289
- if (result === null) {
290
- return;
291
- }
292
- const url = result["DownloadURL"];
293
- console.log("attempting to download the file");
294
- console.log(`url is: ${url}`);
295
- const blob = yield fetch(url).then(r => r.blob());
296
- saveAs(blob, fileName);
297
- iFile.status = "done";
298
- iFile.returnedObject = result;
299
- this.updateSnackbar();
300
- yield this.SendDoneEventIfDone();
301
- console.log("downloaded the file");
302
- //await this.removeIfileWithDelay(iFile);
303
- }
304
- catch (ex) {
305
- iFile.status = "failed";
306
- iFile.returnedObject = { "ErrorMessage": ex.message };
307
- this.updateSnackbar();
308
- yield this.SendDoneEventIfDone();
309
- //await this.removeIfileWithDelay(iFile);
310
- console.log(`buttonClick: ${ex}`);
311
- return;
312
- }
313
- });
314
- }
315
- }
316
- DIMXComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DIMXComponent, deps: [{ token: i1.TranslateService }, { token: i2.DIMXService }, { token: i3.PepSnackBarService }], target: i0.ɵɵFactoryTarget.Component });
317
- DIMXComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: DIMXComponent, selector: "pep-dimx", inputs: { DIMXAddonUUID: "DIMXAddonUUID", DIMXResource: "DIMXResource" }, outputs: { DIMXProcessDone: "DIMXProcessDone" }, viewQueries: [{ propertyName: "fileField", first: true, predicate: ["fileField"], descendants: true }], ngImport: i0, template: "<!-- <pep-file-status-panel [title]=\"'File Imports/Exports'\" *ngIf=\"iFileArray?.length\" [filesList]=\"iFileArray\"></pep-file-status-panel> -->\n<input type=\"file\" multiple=\"multiple\" name=\"avatars\" id=\"fileuploader\" #fileField (change)=\"dimximportrun($event)\">\n<!-- <pep-button\n value=\"export\"\n styleType=\"strong\"\n styleStateType=\"success\"\n sizeType=\"sm\"\n classNames=\"hahah\"\n iconName=\"system_doc\"\n (buttonClick)=\"buttonClick($event)\"\n></pep-button> -->", styles: ["#fileuploader{display:none}:host{width:100%}:host .shadow-size-group,:host .shadow-type-group{display:block;margin-bottom:var(--pep-form-spacing, 1rem)}\n"] });
318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DIMXComponent, decorators: [{
319
- type: Component,
320
- args: [{
321
- selector: 'pep-dimx',
322
- templateUrl: './dimx.component.html',
323
- styleUrls: ['./dimx.component.scss']
324
- }]
325
- }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DIMXService }, { type: i3.PepSnackBarService }]; }, propDecorators: { fileField: [{
326
- type: ViewChild,
327
- args: ['fileField']
328
- }], DIMXAddonUUID: [{
329
- type: Input
330
- }], DIMXResource: [{
331
- type: Input
332
- }], DIMXProcessDone: [{
333
- type: Output
334
- }] } });
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlteC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9kaW14LWV4cG9ydC9kaW14LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2RpbXgtZXhwb3J0L2RpbXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3RHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxELE9BQU8sRUFBYyx3QkFBd0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7OztBQVMzRyxNQUFNLE9BQU8sYUFBYTtJQU90QixZQUNZLFNBQTJCLEVBQzVCLFlBQXlCLEVBQ3hCLGtCQUFzQztRQUZ0QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBTnhDLG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsb0JBQWUsR0FBa0QsSUFBSSxDQUFDO1FBbUc5RSxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osZUFBVSxHQUFjLEVBQUUsQ0FBQztRQXFLM0IsYUFBUSxHQUFHLENBQUMsSUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUVyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBRWhDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0IsTUFBTSxDQUFD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S0FFMkIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNiLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBESU1YU2VydmljZSB9IGZyb20gJy4vZGlteC5zZXJ2aWNlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgUGVwR3VpZCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IElGaWxlRXh0IH0gZnJvbSAnLic7XG5pbXBvcnQgeyBGaWxlU3RhdHVzLCBGaWxlU3RhdHVzUGFuZWxDb21wb25lbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWNvbXBvc2l0ZS1saWIvZmlsZS1zdGF0dXMtcGFuZWwnO1xuaW1wb3J0IHsgUGVwU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvc25hY2stYmFyJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtZGlteCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RpbXguY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RpbXguY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBESU1YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdmaWxlRmllbGQnKSBmaWxlRmllbGQ6RWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBESU1YQWRkb25VVUlEITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIERJTVhSZXNvdXJjZSE6IHN0cmluZztcbiAgICBAT3V0cHV0KCkgRElNWFByb2Nlc3NEb25lOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBkaW14SW1wb3J0T3B0aW9uczogeyBPdmVyd3JpdGVPQmplY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkOyBEZWxpbWl0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7IE93bmVySUQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7IEFjdGlvbklEPzogc3RyaW5nIHwgdW5kZWZpbmVkfSB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGN1cnJlbnRTbmFja0JhcjogTWF0U25hY2tCYXJSZWY8RmlsZVN0YXR1c1BhbmVsQ29tcG9uZW50PnxudWxsID0gbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhZGRvblNlcnZpY2U6IERJTVhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBlcFNuYWNrQmFyU2VydmljZTogUGVwU25hY2tCYXJTZXJ2aWNlLFxuICAgICkge1xuXG4gICAgfVxuXG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgXG4gICAgICAgIC8vIEdldCB0aGUgZmlyc3QgdHJhbnNsYXRpb24gZm9yIGxvYWQgYWxsIHRyYW5zbGF0aW9ucy5cbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KCdTSEFET1dfU0VUVElOR1MuSU5URU5TSVRZX1NPRlQnKS50b1Byb21pc2UoKS50aGVuKCh0eXBlU29mdCkgPT4geyBjb25zb2xlLmxvZyhcInNvbWV0aGluZ1wiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RElNWEV4cG9ydFBPU1RCb2R5KHZhbHVlOntcbiAgICAgICAgRElNWEV4cG9ydEZvcm1hdD86c3RyaW5nLFxuICAgICAgICBESU1YRXhwb3J0SW5jbHVkZURlbGV0ZWQ/OiBib29sZWFuLFxuICAgICAgICBESU1YRXhwb3J0RmlsZU5hbWU/OiBzdHJpbmcsXG4gICAgICAgIERJTVhFeHBvcnRXaGVyZT86IHN0cmluZyxcbiAgICAgICAgRElNWEV4cG9ydEZpZWxkcz86IHN0cmluZyxcbiAgICAgICAgRElNWEV4cG9ydERlbGltaXRlcj86c3RyaW5nXG4gICAgfSl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcIkZvcm1hdFwiOnZhbHVlLkRJTVhFeHBvcnRGb3JtYXQsXG4gICAgICAgICAgICBcIkluY2x1ZGVEZWxldGVkXCI6dmFsdWUuRElNWEV4cG9ydEluY2x1ZGVEZWxldGVkLFxuICAgICAgICAgICAgXCJXaGVyZVwiOnZhbHVlLkRJTVhFeHBvcnRXaGVyZSxcbiAgICAgICAgICAgIFwiRmllbGRzXCI6dmFsdWUuRElNWEV4cG9ydEZpZWxkcyxcbiAgICAgICAgICAgIFwiRGVsaW1pdGVyXCI6dmFsdWUuRElNWEV4cG9ydERlbGltaXRlclxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgcG9sbERJTVhSZXN1bHQocG9sbGluZ1VSTDpzdHJpbmcsIGlmaWxlOklGaWxlRXh0KXtcbiAgICAgICAgY29uc29sZS5sb2coYHBvbGxpbmcgYXVkaXQgd2l0aCB0aGUgZXhlY3V0aW9uVVVJRDogJHtwb2xsaW5nVVJMfWApO1xuICAgICAgICBjb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XG4gICAgICAgIGxldCBzZWNvbmRzID0gMDtcbiAgICAgICAgY29uc3Qgd2FpdGluZ1RpbWUgPSAxMDAwOyAvL2luIG1zXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmFkZG9uU2VydmljZS5wYXBpQ2xpZW50LmdldChgL2F1ZGl0X2xvZ3MvJHtwb2xsaW5nVVJMfWApO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgcmVzdWx0IGZyb20gYXVkaXRsb2cgZ2V0IGlzOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICBpZiggIXJlc3VsdCB8fCByZXN1bHRbXCJTdGF0dXNcIl1bXCJJRFwiXSA9PT0gMiB8fCByZXN1bHRbXCJTdGF0dXNcIl1bXCJJRFwiXSA9PT0gNCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB3YWl0ZWQgZm9yICR7c2Vjb25kcysrfSBzZWNvbmRzYCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KHdhaXRpbmdUaW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoKHJlc3VsdFtcIlN0YXR1c1wiXVtcIklEXCJdKXtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmaWxlLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmaWxlLnJldHVybmVkT2JqZWN0ID0ge1wiRXJyb3JNZXNzYWdlXCI6IHJlc3VsdFtcIkF1ZGl0SW5mb1wiXVtcIkVycm9yTWVzc2FnZVwiXX1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTbmFja2JhcigpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlNlbmREb25lRXZlbnRJZkRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgcG9sbGluZyByZXN1bHQ6ICR7cmVzdWx0W1wiQXVkaXRJbmZvXCJdW1wiUmVzdWx0T2JqZWN0XCJdfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHRbXCJBdWRpdEluZm9cIl1bXCJSZXN1bHRPYmplY3RcIl0pO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmaWxlLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmaWxlLnJldHVybmVkT2JqZWN0ID0ge1wiRXJyb3JNZXNzYWdlXCI6IGB1bmtub3duIGF1ZGl0IGxvZyB0eXBlOiAke3Jlc3VsdFtcIlN0YXR1c1wiXX1gfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNuYWNrYmFyKCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuU2VuZERvbmVFdmVudElmRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGV4KXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwb2xsRElNWFJlc3VsdDogJHtleH1gKTtcbiAgICAgICAgICAgIGlmaWxlLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG4gICAgICAgICAgICBpZmlsZS5yZXR1cm5lZE9iamVjdCA9IHtcIkVycm9yTWVzc2FnZVwiOiAoZXggYXMge21lc3NhZ2U6c3RyaW5nfSkubWVzc2FnZX07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNuYWNrYmFyKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNlbmREb25lRXZlbnRJZkRvbmUoKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TmV3RmlsZU5hbWUodmFsdWU6e1xuICAgICAgICBESU1YRXhwb3J0Rm9ybWF0OnN0cmluZyxcbiAgICAgICAgRElNWEV4cG9ydEZpbGVOYW1lOiBzdHJpbmcsXG4gICAgfSl7XG4gICAgICAgIGxldCBleHRlbnNpb247XG4gICAgICAgIHN3aXRjaCAodmFsdWUuRElNWEV4cG9ydEZvcm1hdC50b0xvd2VyQ2FzZSgpKXtcbiAgICAgICAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gXCIuanNvblwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNzdlwiOlxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9ICcuY3N2JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHZhbHVlLkRJTVhFeHBvcnRGaWxlTmFtZTtcbiAgICAgICAgcmV0dXJuIGZpbGVuYW1lK2V4dGVuc2lvbjtcbiAgICB9XG4gICAgXG4gICAgaUZpbGVJRCA9IDA7XG4gICAgaUZpbGVBcnJheTpJRmlsZUV4dFtdID0gW107XG4gICAgY3JlYXRlTmV3SUZpbGUoZmlsZU5hbWU6c3RyaW5nICwgc3RhdHVzOlwiZG93bmxvYWRpbmdcInxcInVwbG9hZGluZ1wiKTpJRmlsZUV4dHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwia2V5XCI6dGhpcy5pRmlsZUlEKyssXG4gICAgICAgICAgICBcIm5hbWVcIjpmaWxlTmFtZSxcbiAgICAgICAgICAgIFwic3RhdHVzXCI6c3RhdHVzfTtcbiAgICB9XG5cbiAgICBhc3luYyByZW1vdmVJZmlsZXNXaXRoRGVsYXkoaUZpbGU6RmlsZVN0YXR1cywgZGVsYXkgPSAyMDAwKSB7XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pRmlsZUFycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IGVsZW1lbnQgPT09IGlGaWxlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmlGaWxlQXJyYXkuc3BsaWNlKGluZGV4LDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU25hY2tiYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZGVsYXkpXG4gICAgfVxuXG4gICAgYXN5bmMgY2xlYXJJRmlsZXNXaXRoRGVsYXkoZGVsYXkgPSAyMDAwKXtcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pRmlsZUFycmF5ID0gW107XG4gICAgICAgICAgICAvL3RoaXMuY3VycmVudFNuYWNrQmFyPy5pbnN0YW5jZS5jbG9zZUNsaWNrLmVtaXQoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU25hY2tiYXIoKTtcbiAgICAgICAgfSwgZGVsYXkpXG4gICAgfVxuXG5cbiAgICB1cGxvYWRGaWxlKG9wdGlvbnM/OntPdmVyd3JpdGVPQmplY3Q/OmJvb2xlYW4sIERlbGltaXRlcj86c3RyaW5nLCBPd25lcklEPzpzdHJpbmcsIEFjdGlvbklEPzpzdHJpbmd9KXtcbiAgICAgICAgdGhpcy5kaW14SW1wb3J0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZpbGV1cGxvYWRlclwiKTtcbiAgIGlmKGVsZW0gJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7XG4gICAgICBldnQuaW5pdEV2ZW50KFwiY2xpY2tcIiwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgZWxlbS5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICB9XG4gICAgICAgIC8vIHRoaXMuZmlsZUZpZWxkPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfSAgIFxuXG4gICAgSXNGaWxlSW5Qcm9ncmVzcyhpRmlsZTpGaWxlU3RhdHVzKXtcbiAgICAgICAgcmV0dXJuIGlGaWxlLnN0YXR1cyA9PSBcImRvd25sb2FkaW5nXCIgfHwgaUZpbGUuc3RhdHVzID09IFwidXBsb2FkaW5nXCI7XG4gICAgfVxuXG4gICAgQW55RmlsZXNJblByb2dyZXNzKCl7XG4gICAgICAgIGlmICh0aGlzLmlGaWxlQXJyYXkuZmluZCh0aGlzLklzRmlsZUluUHJvZ3Jlc3MpID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgR2V0RG9uZUV2ZW50Qm9keSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5pRmlsZUFycmF5Lm1hcChpRmlsZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFwiRmlsZU5hbWVcIjogaUZpbGUubmFtZSwgXG4gICAgICAgICAgICAgICAgXCJTdGF0dXNcIjogaUZpbGUuc3RhdHVzLFxuICAgICAgICAgICAgICAgIFwiUmV0dXJuZWRPYmplY3RcIjogaUZpbGUucmV0dXJuZWRPYmplY3QhXG4gICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgU2VuZERvbmVFdmVudElmRG9uZSgpe1xuICAgICAgICBpZiAodGhpcy5BbnlGaWxlc0luUHJvZ3Jlc3MoKSl7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRPYmplY3Q6YW55ID0gdGhpcy5HZXREb25lRXZlbnRCb2R5KCk7XG4gICAgICAgIHRoaXMuRElNWFByb2Nlc3NEb25lLmVtaXQoZXZlbnRPYmplY3QpO1xuICAgICAgICBhd2FpdCB0aGlzLmNsZWFySUZpbGVzV2l0aERlbGF5KCk7XG4gICAgfVxuXG4gICAgdXBkYXRlU25hY2tiYXIoKXtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTbmFja0Jhcj8uaW5zdGFuY2Upe1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U25hY2tCYXIgPSB0aGlzLnBlcFNuYWNrQmFyU2VydmljZS5vcGVuU25hY2tCYXJGcm9tQ29tcG9uZW50KEZpbGVTdGF0dXNQYW5lbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkRJTVggUHJvY2Vzc1wiLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuaUZpbGVBcnJheVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNuYWNrQmFyLmluc3RhbmNlLmNsb3NlQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTbmFja0JhciA9IG51bGw7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTbmFja0Jhci5pbnN0YW5jZS5kYXRhLmNvbnRlbnQgPSB0aGlzLmlGaWxlQXJyYXk7XG4gICAgICAgICAgICBpZiAodGhpcy5pRmlsZUFycmF5Lmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U25hY2tCYXIuaW5zdGFuY2Uuc25hY2tCYXJSZWYuZGlzbWlzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNuYWNrQmFyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGRpbXhpbXBvcnRydW4oZTphbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJFbnRlciBESU1YSW1wb3J0UnVuXCIpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzO1xuICAgICAgICBjb25zdCBmaWxlTGlzdEFzQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgZmlsZUxpc3RBc0FycmF5LmZvckVhY2goYXN5bmMgKGZpbGUsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGV4ID0gKGZpbGUgYXMgSFRNTElucHV0RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBkaW14X2ltcG9ydF9yZWxhdGl2ZVVSTCA9IGAvYWRkb25zL2FwaS80NGM5NzExNS02ZDE0LTQ2MjYtOTFkYy04M2YxNzZlOWEwZmMvYXBpL2ZpbGVfaW1wb3J0X3VwbG9hZGA7XG4gICAgICAgICAgICBjb25zdCBzdHIgPSAoYXdhaXQgdGhpcy50b0Jhc2U2NChmaWxleCkpIGFzIHN0cmluZzsgLy8/Pz9cbiAgICAgICAgICAgIGNvbnN0IGV4dCA9IGZpbGV4Lm5hbWUuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge2ZpbGVTdHI6c3RyLCBmaWxlRXh0OmV4dH1cbiAgICAgICAgICAgIGNvbnN0IGRpbXhVcGxvYWRPYmplY3QgPSB7Li4udGhpcy5nZXRQRlNVcGxvYWRPYmplY3QodmFsdWUpLCAuLi50aGlzLmRpbXhJbXBvcnRPcHRpb25zLCBSZXNvdXJjZTp0aGlzLkRJTVhSZXNvdXJjZSwgQWRkb25VVUlEOnRoaXMuRElNWEFkZG9uVVVJRH07XG4gICAgICAgICAgICBjb25zdCBpRmlsZTpJRmlsZUV4dCA9IHRoaXMuY3JlYXRlTmV3SUZpbGUoZmlsZXgubmFtZSwgXCJ1cGxvYWRpbmdcIik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgY3JlYXRlZCBuZXcgaUZpbGU6ICR7aUZpbGV9YCk7XG4gICAgICAgICAgICB0aGlzLmlGaWxlQXJyYXkucHVzaChpRmlsZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNuYWNrYmFyKCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgYWRkZWQgaUZpbGUgdG8gaUZpbGVBcnJheWApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwb3N0aW5nIHRvIGRpbXggaW1wb3J0X3VwbG9hZCBub3dcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyOmFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmKGRpbXhVcGxvYWRPYmplY3QuQWN0aW9uSUQpe1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJbXCJYLVBlcHBlcmktQWN0aW9uSURcIl09ZGlteFVwbG9hZE9iamVjdC5BY3Rpb25JRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGlteFVwbG9hZE9iamVjdC5Pd25lcklEKXtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyW1wiWC1QZXBwZXJpLU93bmVySURcIl09ZGlteFVwbG9hZE9iamVjdC5Pd25lcklEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFkZG9uU2VydmljZS5wYXBpQ2xpZW50LnBvc3QoZGlteF9pbXBvcnRfcmVsYXRpdmVVUkwsIGRpbXhVcGxvYWRPYmplY3QsIGhlYWRlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHb3QgcmVwbHkgZnJvbSBkaW14LCBjYWxsaW5nIHBvbGwgd2l0aCB0aGUgcmVzdWx0OlwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXMpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGxfcmVzdWx0ID0gYXdhaXQgdGhpcy5wb2xsRElNWFJlc3VsdChyZXNbJ0V4ZWN1dGlvblVVSUQnXSwgaUZpbGUpO1xuICAgICAgICAgICAgICAgIGlmIChwb2xsX3Jlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBkb25lIHBvbGxpbmcsIGdvdCByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocG9sbF9yZXN1bHQpfWApO1xuICAgICAgICAgICAgICAgIGlGaWxlLnN0YXR1cyA9IFwiZG9uZVwiO1xuICAgICAgICAgICAgICAgIGlGaWxlLnJldHVybmVkT2JqZWN0ID0gcG9sbF9yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTbmFja2JhcigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuU2VuZERvbmVFdmVudElmRG9uZSgpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0ZWQgdGhlIGZpbGVcIik7XG4gICAgICAgICAgICAgICAgLy9hd2FpdCB0aGlzLnJlbW92ZUlmaWxlV2l0aERlbGF5KGlGaWxlKTtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBhbGwgZG9uZVxuICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChleCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYERJTVhJbXBvcnRSdW46ICR7ZXh9YCk7XG4gICAgICAgICAgICAgICAgaUZpbGUuc3RhdHVzID0gXCJmYWlsZWRcIjtcbiAgICAgICAgICAgICAgICBpRmlsZS5yZXR1cm5lZE9iamVjdCA9IHtcIkVycm9yTWVzc2FnZVwiOiAoZXggYXMge21lc3NhZ2U6c3RyaW5nfSkubWVzc2FnZX1cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNuYWNrYmFyKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5TZW5kRG9uZUV2ZW50SWZEb25lKCk7XG4gICAgICAgICAgICAgICAgLy9hd2FpdCB0aGlzLnJlbW92ZUlmaWxlV2l0aERlbGF5KGlGaWxlLCAyMDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0TmV3UEZTVXBsb2FkS2V5KGZpbGVFeHQ6c3RyaW5nKXtcbiAgICAgICAgY29uc3QgdXVpZCA9IFBlcEd1aWQubmV3R3VpZCgpO1xuICAgICAgICBjb25zdCBmb2xkZXIgPSAnRElNWF9pbXBvcnQnO1xuICAgICAgICBjb25zdCBwZnNLZXkgPSBgLyR7Zm9sZGVyfS8ke3V1aWR9LiR7ZmlsZUV4dH1gO1xuICAgICAgICByZXR1cm4gcGZzS2V5O1xuICAgIH1cbiAgICBnZXRQRlNVcGxvYWRPYmplY3QodmFsdWU6e2ZpbGVTdHI6c3RyaW5nLCBmaWxlRXh0OnN0cmluZ30pe1xuICAgICAgICBjb25zdCBmaWxlU3RyQXJyID0gdmFsdWUuZmlsZVN0ci5zcGxpdCgnOycpO1xuICAgICAgICBjb25zdCBtaW1lID0gZmlsZVN0ckFyclswXS5zcGxpdCgnOicpWzFdO1xuICAgICAgICBjb25zdCBwZnNLZXkgPSB0aGlzLmdldE5ld1BGU1VwbG9hZEtleSh2YWx1ZS5maWxlRXh0KTtcbiAgICAgICAgY29uc3QgcGZzVXBsb2FkT2JqZWN0ID0ge1xuICAgICAgICAgICAgXCJLZXlcIjogcGZzS2V5LFxuICAgICAgICAgICAgXCJNSU1FXCI6IG1pbWUsXG4gICAgICAgICAgICBcIlVSSVwiOnZhbHVlLmZpbGVTdHJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGZzVXBsb2FkT2JqZWN0O1xuICAgIH1cblxuICAgIHRvQmFzZTY0ID0gKGZpbGU6YW55KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICAgIFxuICAgICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIGFzeW5jIERJTVhFeHBvcnRSdW4odmFsdWU6IHtcbiAgICAgICAgRElNWEV4cG9ydEZvcm1hdD86c3RyaW5nLFxuICAgICAgICBESU1YRXhwb3J0SW5jbHVkZURlbGV0ZWQ/OiBib29sZWFuLFxuICAgICAgICBESU1YRXhwb3J0RmlsZU5hbWU/OiBzdHJpbmcsXG4gICAgICAgIERJTVhFeHBvcnRXaGVyZT86IHN0cmluZyxcbiAgICAgICAgRElNWEV4cG9ydEZpZWxkcz86IHN0cmluZyxcbiAgICAgICAgRElNWEV4cG9ydERlbGltaXRlcj86c3RyaW5nLFxuICAgICAgICBBY3Rpb25JRD86c3RyaW5nXG4gICAgfSkge1xuICAgICAgICBpZiAoIXZhbHVlKXtcbiAgICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZS5ESU1YRXhwb3J0Rm9ybWF0KXtcbiAgICAgICAgICAgIHZhbHVlLkRJTVhFeHBvcnRGb3JtYXQgPSAnanNvbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZS5ESU1YRXhwb3J0SW5jbHVkZURlbGV0ZWQpe1xuICAgICAgICAgICAgdmFsdWUuRElNWEV4cG9ydEluY2x1ZGVEZWxldGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZS5ESU1YRXhwb3J0RmlsZU5hbWUpe1xuICAgICAgICAgICAgdmFsdWUuRElNWEV4cG9ydEZpbGVOYW1lID0gJ2V4cG9ydCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9kID0gdGhpcy5nZXRESU1YRXhwb3J0UE9TVEJvZHkodmFsdWUgPyB2YWx1ZSA6IHt9KTtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmdldE5ld0ZpbGVOYW1lKHZhbHVlIGFzIHtESU1YRXhwb3J0Rm9ybWF0OnN0cmluZywgRElNWEV4cG9ydEZpbGVOYW1lOnN0cmluZ30pO1xuICAgICAgICBjb25zdCBpRmlsZTpJRmlsZUV4dCA9IHRoaXMuY3JlYXRlTmV3SUZpbGUoZmlsZU5hbWUsIFwiZG93bmxvYWRpbmdcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGBjcmVhdGVkIG5ldyBpRmlsZTogJHtpRmlsZX1gKTtcbiAgICAgICAgdGhpcy5pRmlsZUFycmF5LnB1c2goaUZpbGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNuYWNrYmFyKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBhZGRlZCBpRmlsZSB0byBpRmlsZUFycmF5YCk7XG4gICAgIFxuICAgICAgICB0cnl7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicG9zdGluZyB0byBkaW14IGV4cG9ydCBub3dcIik7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXI6YW55ID0ge307XG4gICAgICAgICAgICBpZih2YWx1ZS5BY3Rpb25JRCl7XG4gICAgICAgICAgICAgICAgaGVhZGVyW1wiWC1QZXBwZXJpLUFjdGlvbklEXCJdPXZhbHVlLkFjdGlvbklEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hZGRvblNlcnZpY2UucGFwaUNsaWVudC5wb3N0KGAvYWRkb25zL2RhdGEvZXhwb3J0L2ZpbGUvJHt0aGlzLkRJTVhBZGRvblVVSUR9LyR7dGhpcy5ESU1YUmVzb3VyY2V9YCwgYm9kLCBoZWFkZXIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJHb3QgcmVwbHkgZnJvbSBkaW14LCBjYWxsaW5nIHBvbGwgd2l0aCB0aGUgcmVzdWx0OlwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBvbGxESU1YUmVzdWx0KHJlc1snRXhlY3V0aW9uVVVJRCddLCBpRmlsZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmwgPSByZXN1bHRbXCJEb3dubG9hZFVSTFwiXTtcblxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhdHRlbXB0aW5nIHRvIGRvd25sb2FkIHRoZSBmaWxlXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVybCBpczogJHt1cmx9YCk7XG4gICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgZmV0Y2godXJsKS50aGVuKHIgPT4gci5ibG9iKCkpO1xuICAgICAgICAgICAgc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlGaWxlLnN0YXR1cyA9IFwiZG9uZVwiO1xuICAgICAgICAgICAgaUZpbGUucmV0dXJuZWRPYmplY3QgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNuYWNrYmFyKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNlbmREb25lRXZlbnRJZkRvbmUoKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZG93bmxvYWRlZCB0aGUgZmlsZVwiKTtcbiAgICAgICAgICAgIC8vYXdhaXQgdGhpcy5yZW1vdmVJZmlsZVdpdGhEZWxheShpRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZXgpe1xuICAgICAgICAgICAgaUZpbGUuc3RhdHVzPSBcImZhaWxlZFwiO1xuICAgICAgICAgICAgaUZpbGUucmV0dXJuZWRPYmplY3QgPSB7XCJFcnJvck1lc3NhZ2VcIjooZXggYXMge21lc3NhZ2U6c3RyaW5nfSkubWVzc2FnZX1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU25hY2tiYXIoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuU2VuZERvbmVFdmVudElmRG9uZSgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0aGlzLnJlbW92ZUlmaWxlV2l0aERlbGF5KGlGaWxlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBidXR0b25DbGljazogJHtleH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG5cbiAgIFxuXG4gICBcbn1cbiIsIjwhLS0gPHBlcC1maWxlLXN0YXR1cy1wYW5lbCBbdGl0bGVdPVwiJ0ZpbGUgSW1wb3J0cy9FeHBvcnRzJ1wiICpuZ0lmPVwiaUZpbGVBcnJheT8ubGVuZ3RoXCIgW2ZpbGVzTGlzdF09XCJpRmlsZUFycmF5XCI+PC9wZXAtZmlsZS1zdGF0dXMtcGFuZWw+IC0tPlxuPGlucHV0IHR5cGU9XCJmaWxlXCIgbXVsdGlwbGU9XCJtdWx0aXBsZVwiIG5hbWU9XCJhdmF0YXJzXCIgaWQ9XCJmaWxldXBsb2FkZXJcIiAjZmlsZUZpZWxkIChjaGFuZ2UpPVwiZGlteGltcG9ydHJ1bigkZXZlbnQpXCI+XG48IS0tIDxwZXAtYnV0dG9uXG4gIHZhbHVlPVwiZXhwb3J0XCJcbiAgc3R5bGVUeXBlPVwic3Ryb25nXCJcbiAgc3R5bGVTdGF0ZVR5cGU9XCJzdWNjZXNzXCJcbiAgc2l6ZVR5cGU9XCJzbVwiXG4gIGNsYXNzTmFtZXM9XCJoYWhhaFwiXG4gIGljb25OYW1lPVwic3lzdGVtX2RvY1wiXG4gIChidXR0b25DbGljayk9XCJidXR0b25DbGljaygkZXZlbnQpXCJcbj48L3BlcC1idXR0b24+IC0tPiJdfQ==
@@ -1,8 +0,0 @@
1
- import { FileStatus } from '@pepperi-addons/ngx-composite-lib/file-status-panel';
2
- export class IFileExt extends FileStatus {
3
- constructor() {
4
- super(...arguments);
5
- this.status = 'downloading';
6
- }
7
- }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlteC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2RpbXgtZXhwb3J0L2RpbXgubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixVQUFVLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUVqRyxNQUFNLE9BQU8sUUFBUyxTQUFRLFVBQVU7SUFBeEM7O1FBQ0ksV0FBTSxHQUFtQixhQUFhLENBQUM7SUFFM0MsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZVN0YXR1c1R5cGUsIEZpbGVTdGF0dXMgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWNvbXBvc2l0ZS1saWIvZmlsZS1zdGF0dXMtcGFuZWwnO1xuXG5leHBvcnQgY2xhc3MgSUZpbGVFeHQgZXh0ZW5kcyBGaWxlU3RhdHVzIHtcbiAgICBzdGF0dXM6IEZpbGVTdGF0dXNUeXBlID0gJ2Rvd25sb2FkaW5nJztcbiAgICByZXR1cm5lZE9iamVjdD86IGFueTtcbn0iXX0=
@@ -1,53 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { PepNgxLibModule } from '@pepperi-addons/ngx-lib';
4
- import { DIMXComponent } from './dimx.component';
5
- import { pepIconSystemDoc } from '@pepperi-addons/ngx-lib/icon';
6
- import { PepButtonModule } from '@pepperi-addons/ngx-lib/button';
7
- import { PepIconModule } from '@pepperi-addons/ngx-lib/icon';
8
- import { PepFileStatusPanelModule } from '@pepperi-addons/ngx-composite-lib/file-status-panel';
9
- import { PepSnackBarModule } from '@pepperi-addons/ngx-lib/snack-bar';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@pepperi-addons/ngx-lib/icon";
12
- const pepIcons = [
13
- pepIconSystemDoc,
14
- ];
15
- export class PepDIMXModule {
16
- constructor(pepIconRegistry) {
17
- this.pepIconRegistry = pepIconRegistry;
18
- this.pepIconRegistry.registerIcons(pepIcons);
19
- }
20
- }
21
- PepDIMXModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PepDIMXModule, deps: [{ token: i1.PepIconRegistry }], target: i0.ɵɵFactoryTarget.NgModule });
22
- PepDIMXModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PepDIMXModule, declarations: [DIMXComponent], imports: [CommonModule,
23
- PepNgxLibModule,
24
- PepButtonModule,
25
- PepIconModule,
26
- PepFileStatusPanelModule,
27
- PepSnackBarModule], exports: [DIMXComponent] });
28
- PepDIMXModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PepDIMXModule, imports: [[
29
- CommonModule,
30
- PepNgxLibModule,
31
- PepButtonModule,
32
- PepIconModule,
33
- PepFileStatusPanelModule,
34
- PepSnackBarModule,
35
- ]] });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PepDIMXModule, decorators: [{
37
- type: NgModule,
38
- args: [{
39
- declarations: [
40
- DIMXComponent
41
- ],
42
- imports: [
43
- CommonModule,
44
- PepNgxLibModule,
45
- PepButtonModule,
46
- PepIconModule,
47
- PepFileStatusPanelModule,
48
- PepSnackBarModule,
49
- ],
50
- exports: [DIMXComponent]
51
- }]
52
- }], ctorParameters: function () { return [{ type: i1.PepIconRegistry }]; } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlteC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9kaW14LWV4cG9ydC9kaW14Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7QUFFdEUsTUFBTSxRQUFRLEdBQUc7SUFDYixnQkFBZ0I7Q0FDbkIsQ0FBQTtBQWdCRCxNQUFNLE9BQU8sYUFBYTtJQUN0QixZQUNZLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUV4QyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDOzswR0FMUSxhQUFhOzJHQUFiLGFBQWEsaUJBWmxCLGFBQWEsYUFHYixZQUFZO1FBQ1osZUFBZTtRQUNmLGVBQWU7UUFDZixhQUFhO1FBQ2Isd0JBQXdCO1FBQ3hCLGlCQUFpQixhQUVYLGFBQWE7MkdBRWQsYUFBYSxZQVZiO1lBQ0wsWUFBWTtZQUNaLGVBQWU7WUFDZixlQUFlO1lBQ2YsYUFBYTtZQUNiLHdCQUF3QjtZQUN4QixpQkFBaUI7U0FDcEI7MkZBR1EsYUFBYTtrQkFkekIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUU7d0JBQ1YsYUFBYTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixpQkFBaUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBlcE5neExpYk1vZHVsZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IERJTVhDb21wb25lbnQgfSBmcm9tICcuL2RpbXguY29tcG9uZW50JztcbmltcG9ydCB7IFBlcEljb25SZWdpc3RyeSwgcGVwSWNvblN5c3RlbURvYyB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2ljb24nO1xuaW1wb3J0IHsgUGVwQnV0dG9uTW9kdWxlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvYnV0dG9uJztcbmltcG9ydCB7IFBlcEljb25Nb2R1bGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9pY29uJztcbmltcG9ydCB7IFBlcEZpbGVTdGF0dXNQYW5lbE1vZHVsZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtY29tcG9zaXRlLWxpYi9maWxlLXN0YXR1cy1wYW5lbCc7XG5pbXBvcnQgeyBQZXBTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL3NuYWNrLWJhcic7XG5cbmNvbnN0IHBlcEljb25zID0gW1xuICAgIHBlcEljb25TeXN0ZW1Eb2MsXG5dXG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIERJTVhDb21wb25lbnRcbiAgICBdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBQZXBOZ3hMaWJNb2R1bGUsXG4gICAgICAgIFBlcEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgUGVwSWNvbk1vZHVsZSxcbiAgICAgICAgUGVwRmlsZVN0YXR1c1BhbmVsTW9kdWxlLFxuICAgICAgICBQZXBTbmFja0Jhck1vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtESU1YQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBQZXBESU1YTW9kdWxlIHsgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcGVwSWNvblJlZ2lzdHJ5OiBQZXBJY29uUmVnaXN0cnksXG4gICAgKSB7XG4gICAgICAgIHRoaXMucGVwSWNvblJlZ2lzdHJ5LnJlZ2lzdGVySWNvbnMocGVwSWNvbnMpO1xuICAgIH1cblxuXG59XG4iXX0=
@@ -1,50 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import jwt from 'jwt-decode';
3
- import { PapiClient } from '@pepperi-addons/papi-sdk';
4
- import { Injectable } from '@angular/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@pepperi-addons/ngx-lib";
7
- export class DIMXService {
8
- constructor(session, pepperiDataConverter, pepHttp) {
9
- this.session = session;
10
- this.pepperiDataConverter = pepperiDataConverter;
11
- this.pepHttp = pepHttp;
12
- this.tempToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjRiYTFjNzJmMTI3NThjYzEzMzg3ZWQ3YTBiZjNlODg3IiwidHlwIjoiSldUIn0.eyJuYmYiOjE2NDc3ODY2NDgsImV4cCI6MTY0Nzc5MDI0OCwiaXNzIjoiaHR0cHM6Ly9pZHAuc2FuZGJveC5wZXBwZXJpLmNvbSIsImF1ZCI6WyJodHRwczovL2lkcC5zYW5kYm94LnBlcHBlcmkuY29tL3Jlc291cmNlcyIsInBlcHBlcmkuYXBpbnQiLCJwZXBwZXJpLndhY2QiXSwiY2xpZW50X2lkIjoiaW9zLmNvbS53cm50eS5wZXBwZXJ5Iiwic3ViIjoiOTE1ZWUxODItNTk3Ni00ZjJlLWFhOGQtZDQ1ZjI3N2Y2OTdjIiwiYXV0aF90aW1lIjoxNjQ3Nzg2NjQ4LCJpZHAiOiJsb2NhbCIsInBlcHBlcmkuYXBpbnRiYXNldXJsIjoiaHR0cHM6Ly9yZXN0YXBpLnNhbmRib3gucGVwcGVyaS5jb20iLCJlbWFpbCI6Ik9kZWRAcGVwcGVyaXRlc3QuY29tIiwicGVwcGVyaS5pZCI6MTE0NzcwOTcsInBlcHBlcmkudXNlcnV1aWQiOiI5MTVlZTE4Mi01OTc2LTRmMmUtYWE4ZC1kNDVmMjc3ZjY5N2MiLCJwZXBwZXJpLmRpc3RyaWJ1dG9ydXVpZCI6IjBhM2FmNGU3LTMyZGUtNDExOC04Y2NmLTVkOWRiZDc5YzA0MSIsInBlcHBlcmkuZGlzdHJpYnV0b3JpZCI6MzAwMTUwMzEsInBlcHBlcmkuZGF0YWNlbnRlciI6InNhbmRib3giLCJwZXBwZXJpLmVtcGxveWVldHlwZSI6MSwicGVwcGVyaS5iYXNldXJsIjoiaHR0cHM6Ly9wYXBpLnN0YWdpbmcucGVwcGVyaS5jb20vVjEuMCIsInBlcHBlcmkud2FjZGJhc2V1cmwiOiJodHRwczovL2NwYXBpLnN0YWdpbmcucGVwcGVyaS5jb20iLCJuYW1lIjoiT2RlZCBBbnN3ZXIiLCJzY29wZSI6WyJwZXBwZXJpLmFwaW50IiwicGVwcGVyaS53YWNkIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbInB3ZCJdfQ.XIpG0urTDreOIB3ehAKQqeQoFLiCYnxqYdXo61XaOWuJQe5hvJXNvjdnNuoC79GDiayHXEbrlsExcg5JYnou46bf35D9tEKQSx1ZF5S_vhSZcc5vg7OlS-2_AGJdov0RqC22Ti2nIBoWRkQK_Xv1D9aNWoE23ygD85bHyEI76z35aqpsUY6vy4yR_L-2p9GByslkYByaU9ES4RgLDCefTbo9C40ux0sH62IeJnC9cOC7hSIaCdMzvXVUg1BFh5ZvZGybaqwMRCXmc5XgvgN9e1Q3ej2Mje-Rt4Vqz9OCYHZJ3GZEiyzEatJDXFAwfXhQJypPu9ucNL_r8jy_r5FIGQ";
13
- this.accessToken = '';
14
- this.papiBaseURL = '';
15
- window.sessionStorage.setItem('idp_token', this.tempToken);
16
- const accessToken = this.session.getIdpToken();
17
- this.parsedToken = jwt(accessToken);
18
- this.papiBaseURL = this.parsedToken["pepperi.baseurl"];
19
- }
20
- get papiClient() {
21
- return new PapiClient({
22
- baseURL: this.papiBaseURL,
23
- token: this.session.getIdpToken(),
24
- suppressLogging: true
25
- });
26
- }
27
- get(endpoint) {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- return yield this.papiClient.get(endpoint);
30
- });
31
- }
32
- post(endpoint, body) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- return yield this.papiClient.post(endpoint, body);
35
- });
36
- }
37
- pepGet(endpoint) {
38
- return this.pepHttp.getPapiApiCall(endpoint);
39
- }
40
- pepPost(endpoint, body) {
41
- return this.pepHttp.postPapiApiCall(endpoint, body);
42
- }
43
- }
44
- DIMXService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DIMXService, deps: [{ token: i1.PepSessionService }, { token: i1.PepDataConvertorService }, { token: i1.PepHttpService }], target: i0.ɵɵFactoryTarget.Injectable });
45
- DIMXService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DIMXService, providedIn: 'root' });
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DIMXService, decorators: [{
47
- type: Injectable,
48
- args: [{ providedIn: 'root' }]
49
- }], ctorParameters: function () { return [{ type: i1.PepSessionService }, { type: i1.PepDataConvertorService }, { type: i1.PepHttpService }]; } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlteC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZGlteC1leHBvcnQvZGlteC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUszQyxNQUFNLE9BQU8sV0FBVztJQWNwQixZQUNXLE9BQTJCLEVBQzNCLG9CQUE2QyxFQUM1QyxPQUF1QjtRQUZ4QixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzVDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBaEJuQyxjQUFTLEdBQUcsKytDQUErK0MsQ0FBQTtRQUMzL0MsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxFQUFFLENBQUE7UUFlWixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDMUQsQ0FBQztJQWxCRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksVUFBVSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDakMsZUFBZSxFQUFDLElBQUk7U0FDdkIsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQWNLLEdBQUcsQ0FBQyxRQUFnQjs7WUFDdEIsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUM7S0FBQTtJQUVLLElBQUksQ0FBQyxRQUFnQixFQUFFLElBQVM7O1lBQ2xDLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBRUQsTUFBTSxDQUFDLFFBQWdCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFnQixFQUFFLElBQVM7UUFDL0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7d0dBeENRLFdBQVc7NEdBQVgsV0FBVyxjQURFLE1BQU07MkZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGp3dCBmcm9tICdqd3QtZGVjb2RlJztcbmltcG9ydCB7IFBhcGlDbGllbnQgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvcGFwaS1zZGsnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1BlcEh0dHBTZXJ2aWNlLCBQZXBEYXRhQ29udmVydG9yU2VydmljZSwgUGVwU2Vzc2lvblNlcnZpY2V9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBESU1YU2VydmljZSB7XG4gICAgdGVtcFRva2VuID0gXCJleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2SWpSaVlURmpOekptTVRJM05UaGpZekV6TXpnM1pXUTNZVEJpWmpObE9EZzNJaXdpZEhsd0lqb2lTbGRVSW4wLmV5SnVZbVlpT2pFMk5EYzNPRFkyTkRnc0ltVjRjQ0k2TVRZME56YzVNREkwT0N3aWFYTnpJam9pYUhSMGNITTZMeTlwWkhBdWMyRnVaR0p2ZUM1d1pYQndaWEpwTG1OdmJTSXNJbUYxWkNJNld5Sm9kSFJ3Y3pvdkwybGtjQzV6WVc1a1ltOTRMbkJsY0hCbGNta3VZMjl0TDNKbGMyOTFjbU5sY3lJc0luQmxjSEJsY21rdVlYQnBiblFpTENKd1pYQndaWEpwTG5kaFkyUWlYU3dpWTJ4cFpXNTBYMmxrSWpvaWFXOXpMbU52YlM1M2NtNTBlUzV3WlhCd1pYSjVJaXdpYzNWaUlqb2lPVEUxWldVeE9ESXROVGszTmkwMFpqSmxMV0ZoT0dRdFpEUTFaakkzTjJZMk9UZGpJaXdpWVhWMGFGOTBhVzFsSWpveE5qUTNOemcyTmpRNExDSnBaSEFpT2lKc2IyTmhiQ0lzSW5CbGNIQmxjbWt1WVhCcGJuUmlZWE5sZFhKc0lqb2lhSFIwY0hNNkx5OXlaWE4wWVhCcExuTmhibVJpYjNndWNHVndjR1Z5YVM1amIyMGlMQ0psYldGcGJDSTZJazlrWldSQWNHVndjR1Z5YVhSbGMzUXVZMjl0SWl3aWNHVndjR1Z5YVM1cFpDSTZNVEUwTnpjd09UY3NJbkJsY0hCbGNta3VkWE5sY25WMWFXUWlPaUk1TVRWbFpURTRNaTAxT1RjMkxUUm1NbVV0WVdFNFpDMWtORFZtTWpjM1pqWTVOMk1pTENKd1pYQndaWEpwTG1ScGMzUnlhV0oxZEc5eWRYVnBaQ0k2SWpCaE0yRm1OR1UzTFRNeVpHVXROREV4T0MwNFkyTm1MVFZrT1dSaVpEYzVZekEwTVNJc0luQmxjSEJsY21rdVpHbHpkSEpwWW5WMGIzSnBaQ0k2TXpBd01UVXdNekVzSW5CbGNIQmxjbWt1WkdGMFlXTmxiblJsY2lJNkluTmhibVJpYjNnaUxDSndaWEJ3WlhKcExtVnRjR3h2ZVdWbGRIbHdaU0k2TVN3aWNHVndjR1Z5YVM1aVlYTmxkWEpzSWpvaWFIUjBjSE02THk5d1lYQnBMbk4wWVdkcGJtY3VjR1Z3Y0dWeWFTNWpiMjB2VmpFdU1DSXNJbkJsY0hCbGNta3VkMkZqWkdKaGMyVjFjbXdpT2lKb2RIUndjem92TDJOd1lYQnBMbk4wWVdkcGJtY3VjR1Z3Y0dWeWFTNWpiMjBpTENKdVlXMWxJam9pVDJSbFpDQkJibk4zWlhJaUxDSnpZMjl3WlNJNld5SndaWEJ3WlhKcExtRndhVzUwSWl3aWNHVndjR1Z5YVM1M1lXTmtJaXdpYjJabWJHbHVaVjloWTJObGMzTWlYU3dpWVcxeUlqcGJJbkIzWkNKZGZRLlhJcEcwdXJURHJlT0lCM2VoQUtRcWVRb0ZMaUNZbnhxWWRYbzYxWGFPV3VKUWU1aHZKWE52amRuTnVvQzc5R0RpYXlIWEVicmxzRXhjZzVKWW5vdTQ2YmYzNUQ5dEVLUVN4MVpGNVNfdmhTWmNjNXZnN09sUy0yX0FHSmRvdjBScUMyMlRpMm5JQm9XUmtRS19YdjFEOWFOV29FMjN5Z0Q4NWJIeUVJNzZ6MzVhcXBzVVk2dnk0eVJfTC0ycDlHQnlzbGtZQnlhVTlFUzRSZ0xEQ2VmVGJvOUM0MHV4MHNINjJJZUpuQzljT0M3aFNJYUNkTXp2WFZVZzFCRmg1WnZaR3liYXF3TVJDWG1jNVhndmdOOWUxUTNlajJNamUtUnQ0VnF6OU9DWUhaSjNHWkVpeXpFYXRKRFhGQXdmWGhRSnlwUHU5dWNOTF9yOGp5X3I1RklHUVwiXG4gICAgYWNjZXNzVG9rZW4gPSAnJztcbiAgICBwYXJzZWRUb2tlbjogYW55XG4gICAgcGFwaUJhc2VVUkwgPSAnJ1xuXG4gICAgZ2V0IHBhcGlDbGllbnQoKTogUGFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgUGFwaUNsaWVudCh7XG4gICAgICAgICAgICBiYXNlVVJMOiB0aGlzLnBhcGlCYXNlVVJMLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMuc2Vzc2lvbi5nZXRJZHBUb2tlbigpLFxuICAgICAgICAgICAgc3VwcHJlc3NMb2dnaW5nOnRydWVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNlc3Npb246ICBQZXBTZXNzaW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHBlcHBlcmlEYXRhQ29udmVydGVyOiBQZXBEYXRhQ29udmVydG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwZXBIdHRwOiBQZXBIdHRwU2VydmljZVxuICAgICkge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaWRwX3Rva2VuJyx0aGlzLnRlbXBUb2tlbilcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLnNlc3Npb24uZ2V0SWRwVG9rZW4oKTtcbiAgICAgIFxuICAgICAgICB0aGlzLnBhcnNlZFRva2VuID0gand0KGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgdGhpcy5wYXBpQmFzZVVSTCA9IHRoaXMucGFyc2VkVG9rZW5bXCJwZXBwZXJpLmJhc2V1cmxcIl1cbiAgICB9XG5cbiAgICBhc3luYyBnZXQoZW5kcG9pbnQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBhcGlDbGllbnQuZ2V0KGVuZHBvaW50KTtcbiAgICB9XG5cbiAgICBhc3luYyBwb3N0KGVuZHBvaW50OiBzdHJpbmcsIGJvZHk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBhcGlDbGllbnQucG9zdChlbmRwb2ludCwgYm9keSk7XG4gICAgfVxuXG4gICAgcGVwR2V0KGVuZHBvaW50OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXBIdHRwLmdldFBhcGlBcGlDYWxsKGVuZHBvaW50KTtcbiAgICB9XG5cbiAgICBwZXBQb3N0KGVuZHBvaW50OiBzdHJpbmcsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcEh0dHAucG9zdFBhcGlBcGlDYWxsKGVuZHBvaW50LCBib2R5KTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- /*
2
- * export from ngx-composite-lib/dimx-export
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9kaW14LWV4cG9ydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGV4cG9ydCBmcm9tIG5neC1jb21wb3NpdGUtbGliL2RpbXgtZXhwb3J0XG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVwcGVyaS1hZGRvbnMtbmd4LWNvbXBvc2l0ZS1saWItZGlteC1leHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9zaXRlLWxpYi9kaW14LWV4cG9ydC9wZXBwZXJpLWFkZG9ucy1uZ3gtY29tcG9zaXRlLWxpYi1kaW14LWV4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -1,7 +0,0 @@
1
- /*
2
- * Public API Surface of ngx-composite-lib/dimx-export
3
- */
4
- export * from './dimx.module';
5
- export * from './dimx.component';
6
- export * from './dimx.model';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2RpbXgtZXhwb3J0L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtY29tcG9zaXRlLWxpYi9kaW14LWV4cG9ydFxuICovXG5leHBvcnQgKiBmcm9tICcuL2RpbXgubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlteC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kaW14Lm1vZGVsJztcbiJdfQ==