@igo2/geo 18.0.0-next.6 → 18.0.0-next.8

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 (40) hide show
  1. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  2. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  3. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  4. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  5. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  6. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  7. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  8. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  9. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  10. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  11. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +66 -2
  12. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  13. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +7 -5
  14. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  15. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  16. package/esm2022/lib/filter/shared/ogc-filter.mjs +7 -2
  17. package/esm2022/lib/import-export/import-export/import-export.component.mjs +196 -315
  18. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  19. package/esm2022/lib/import-export/shared/export.service.mjs +252 -89
  20. package/esm2022/lib/import-export/shared/export.type.mjs +9 -9
  21. package/esm2022/lib/import-export/shared/export.utils.mjs +5 -1
  22. package/esm2022/lib/layer/shared/layer.service.mjs +1 -1
  23. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  24. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  25. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +12 -15
  26. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  27. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +1 -2
  28. package/fesm2022/igo2-geo.mjs +3119 -3008
  29. package/fesm2022/igo2-geo.mjs.map +1 -1
  30. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +15 -0
  31. package/lib/import-export/import-export/import-export.component.d.ts +22 -14
  32. package/lib/import-export/shared/export.interface.d.ts +10 -3
  33. package/lib/import-export/shared/export.service.d.ts +28 -15
  34. package/lib/import-export/shared/export.type.d.ts +8 -16
  35. package/lib/import-export/shared/export.utils.d.ts +2 -0
  36. package/lib/layer/shared/layers/vector-layer.d.ts +0 -3
  37. package/locale/en.geo.json +8 -3
  38. package/locale/fr.geo.json +8 -3
  39. package/package.json +6 -7
  40. package/src/_index.scss +2 -1
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ltcG9ydC1leHBvcnQvc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVuY29kaW5nRm9ybWF0LCBFeHBvcnRGb3JtYXQgfSBmcm9tICcuL2V4cG9ydC50eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRPcHRpb25zIHtcbiAgZm9ybWF0PzogRXhwb3J0Rm9ybWF0O1xuICBlbmNvZGluZz86IEVuY29kaW5nRm9ybWF0O1xuICBsYXllcnM6IHN0cmluZ1tdO1xuICBsYXllcnNXaXRoU2VsZWN0aW9uPzogc3RyaW5nW107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGNvbWJpbmVMYXllcnM/OiBib29sZWFuO1xuICBzZXBhcmF0b3I/OiBib29sZWFuO1xuICBmZWF0dXJlSW5NYXBFeHRlbnQ/OiBib29sZWFuO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ltcG9ydC1leHBvcnQvc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEZlYXR1cmUgfSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuXG5pbXBvcnQgeyBBbnlFeHBvcnRGb3JtYXQsIENzdlNlcGFyYXRvciB9IGZyb20gJy4vZXhwb3J0LnR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydE9wdGlvbnMge1xuICBmb3JtYXQ/OiBBbnlFeHBvcnRGb3JtYXQ7XG4gIGxheWVyczogc3RyaW5nW107XG4gIGxheWVyc1dpdGhTZWxlY3Rpb24/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgY29tYmluZUxheWVycz86IGJvb2xlYW47XG4gIHNlcGFyYXRvcj86IGJvb2xlYW47XG4gIGNzdlNlcGFyYXRvcj86IENzdlNlcGFyYXRvcjtcbiAgZmVhdHVyZUluTWFwRXh0ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW9tZXRyeUNvbGxlY3Rpb24ge1xuICAvKiogVGhlIGdlb21ldHJ5IHR5cGUgKi9cbiAgdHlwZTogVHlwZSB8IG51bGw7XG4gIGZlYXR1cmVzOiBPbEZlYXR1cmVbXTtcbn1cbiJdfQ==
@@ -1,49 +1,58 @@
1
+ import { HttpClient } from '@angular/common/http';
1
2
  import { Injectable } from '@angular/core';
2
3
  import { ConfigService } from '@igo2/core/config';
3
- import { downloadContent } from '@igo2/utils';
4
+ import { addExcelSheetToWorkBook, createExcelWorkBook, downloadBlob, downloadContent, isIsoDate, writeExcelFile } from '@igo2/utils';
4
5
  import OlFeature from 'ol/Feature';
5
6
  import * as olformat from 'ol/format';
6
- import { Observable } from 'rxjs';
7
- import { encode } from 'windows-1252';
7
+ import { circular } from 'ol/geom/Polygon';
8
+ import { Observable, catchError, lastValueFrom, of, tap } from 'rxjs';
9
+ import { ClusterDataSource, WFSDataSource } from '../../datasource';
10
+ import { VectorLayer } from '../../layer';
8
11
  import { ExportInvalidFileError, ExportNothingToExportError } from './export.errors';
9
- import { EncodingFormat, ExportFormat } from './export.type';
12
+ import { isCsvExport } from './export.utils';
10
13
  import * as i0 from "@angular/core";
11
14
  import * as i1 from "@igo2/core/config";
15
+ import * as i2 from "@angular/common/http";
12
16
  const SHAPEFILE_FIELD_MAX_LENGHT = 255;
13
17
  export class ExportService {
14
18
  config;
19
+ httpClient;
15
20
  static ogreFormats = {
16
21
  GML: 'gml',
17
22
  GPX: 'gpx',
18
23
  KML: 'kml',
19
24
  Shapefile: 'ESRI Shapefile',
25
+ CSV: 'CSV',
26
+ /** @deprecated use CSV */
20
27
  CSVcomma: 'CSVcomma',
28
+ /** @deprecated use CSV */
21
29
  CSVsemicolon: 'CSVsemicolon'
22
30
  };
23
31
  static noOgreFallbacks = ['GML', 'GPX', 'KML'];
24
32
  ogreUrl;
25
33
  aggregateInComment = true;
26
- constructor(config) {
34
+ constructor(config, httpClient) {
27
35
  this.config = config;
36
+ this.httpClient = httpClient;
28
37
  this.ogreUrl = this.config.getConfig('importExport.url');
29
38
  const gpxAggregateInComment = this.config.getConfig('importExport.gpxAggregateInComment');
30
39
  if (gpxAggregateInComment !== undefined) {
31
40
  this.aggregateInComment = gpxAggregateInComment;
32
41
  }
33
42
  }
34
- export(olFeatures, format, title, encoding, projectionIn = 'EPSG:4326', projectionOut = 'EPSG:4326') {
35
- const exportOlFeatures = this.generateFeature(olFeatures, format, '_featureStore');
36
- return this.exportAsync(exportOlFeatures, format, title, encoding, projectionIn, projectionOut);
43
+ export(olFeatures, options, title, projectionIn = 'EPSG:4326', projectionOut = 'EPSG:4326') {
44
+ const exportOlFeatures = this.cleanFeatures(olFeatures, options.format, '_featureStore');
45
+ return this.exportAsync(exportOlFeatures, options, title, projectionIn, projectionOut);
37
46
  }
38
- generateFeature(olFeatures, format, excludePrefix = '_') {
39
- if (format === ExportFormat.GPX && this.aggregateInComment) {
47
+ cleanFeatures(olFeatures, format, excludePrefix = '_') {
48
+ if (format === 'GPX' && this.aggregateInComment) {
40
49
  return this.generateAggregatedFeature(olFeatures);
41
50
  }
42
51
  return olFeatures.map((olFeature) => {
43
52
  let keys = olFeature
44
53
  .getKeys()
45
54
  .filter((key) => !key.startsWith(excludePrefix));
46
- if (format === ExportFormat.Shapefile && olFeature.get('_style')) {
55
+ if (format === 'Shapefile' && olFeature.get('_style')) {
47
56
  const style = JSON.stringify(olFeature.get('_style'));
48
57
  if (style.length > SHAPEFILE_FIELD_MAX_LENGHT)
49
58
  keys = keys.filter((key) => key !== '_style');
@@ -63,7 +72,6 @@ export class ExportService {
63
72
  let comment = '';
64
73
  const properties = keys.reduce((acc, key) => {
65
74
  if (key && key !== 'geometry') {
66
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
67
75
  key === 'id' && olFeature.get('draw')
68
76
  ? (comment += key + ':' + olFeature.get('draw') + ' \r\n')
69
77
  : (comment += key + ':' + olFeature.get(key) + ' \r\n');
@@ -79,8 +87,9 @@ export class ExportService {
79
87
  return newFeature;
80
88
  });
81
89
  }
82
- exportAsync(olFeatures, format, title, encoding, projectionIn, projectionOut) {
83
- const doExport = (observer) => {
90
+ exportAsync(olFeatures, options, title, projectionIn, projectionOut) {
91
+ const { format } = options;
92
+ return new Observable((observer) => {
84
93
  const nothingToExport = this.nothingToExport(olFeatures, format);
85
94
  if (nothingToExport) {
86
95
  observer.error(new ExportNothingToExportError());
@@ -90,103 +99,138 @@ export class ExportService {
90
99
  if (ogreFormats.indexOf(format) >= 0) {
91
100
  if (!this.ogreUrl) {
92
101
  if (ExportService.noOgreFallbacks.indexOf(format) >= 0) {
93
- this.exportToFile(olFeatures, observer, format, title, projectionIn, projectionOut);
102
+ this.exportToFile(olFeatures, format, title, projectionIn, projectionOut);
103
+ observer.complete();
94
104
  }
95
105
  else {
96
106
  observer.error(new ExportInvalidFileError());
97
107
  }
98
108
  return;
99
109
  }
100
- this.exportWithOgre(olFeatures, observer, format, title, encoding, projectionIn, projectionOut);
110
+ this.exportWithOgre(olFeatures, options, title, projectionIn, projectionOut).subscribe({
111
+ complete: () => observer.complete(),
112
+ error: (error) => observer.error(error)
113
+ });
101
114
  }
102
115
  else {
103
- this.exportToFile(olFeatures, observer, format, title, projectionIn, projectionOut);
116
+ this.exportToFile(olFeatures, format, title, projectionIn, projectionOut);
117
+ observer.complete();
104
118
  }
105
- };
106
- return new Observable(doExport);
119
+ });
120
+ }
121
+ async exportToFile(olFeatures, format, title, projectionIn, projectionOut) {
122
+ const features = this.formatFeatures(olFeatures, format, projectionIn, projectionOut);
123
+ const fileName = `${title}.${format.toLowerCase()}`;
124
+ downloadContent(features, 'attachment/plain;charset=utf-8', fileName);
107
125
  }
108
- exportToFile(olFeatures, observer, format, title, projectionIn, projectionOut) {
109
- const olFormat = new olformat[format]();
110
- const featuresText = olFormat.writeFeatures(olFeatures, {
126
+ formatFeatures(features, format, projectionIn = 'EPSG:4326', projectionOut = 'EPSG:4326') {
127
+ const formatter = this.getFormatter(format);
128
+ const cleanFeatures = this.cleanFeatures(features, format, '_featureStore');
129
+ return formatter.writeFeatures(cleanFeatures, {
111
130
  dataProjection: projectionOut,
112
- featureProjection: projectionIn,
113
- featureType: 'feature',
114
- featureNS: 'http://example.com/feature'
131
+ featureProjection: projectionIn
115
132
  });
116
- const fileName = `${title}.${format.toLowerCase()}`;
117
- downloadContent(featuresText, 'attachment/plain;charset=utf-8', fileName);
118
- observer.complete();
119
133
  }
120
- exportWithOgre(olFeatures, observer, format, title, encodingType, projectionIn, projectionOut) {
121
- let featuresText = new olformat.GeoJSON().writeFeatures(olFeatures, {
134
+ getFormatter(format) {
135
+ switch (format) {
136
+ case 'GPX':
137
+ return new olformat.GPX();
138
+ case 'GML':
139
+ return new olformat.GML();
140
+ case 'KML':
141
+ return new olformat.KML();
142
+ default:
143
+ return new olformat.GeoJSON();
144
+ }
145
+ }
146
+ async exportExcel(map, store, data) {
147
+ const workBook = await createExcelWorkBook();
148
+ for (const layerName of data.layers) {
149
+ const layer = map.getLayerById(layerName);
150
+ const features = await lastValueFrom(this.getFeatures(map, layer, data, store));
151
+ const formattedFeatures = features?.length
152
+ ? this.formatFeatures(features, 'GeoJSON')
153
+ : null;
154
+ const collection = features
155
+ ? JSON.parse(formattedFeatures)
156
+ : {
157
+ features: []
158
+ };
159
+ const rows = collection.features.map((feature) => this.formatRecord(feature.properties));
160
+ await addExcelSheetToWorkBook(layer.title, rows, workBook);
161
+ }
162
+ const title = this.getTitleFromLayers(data.layers, map);
163
+ writeExcelFile(workBook, title, { compression: true });
164
+ }
165
+ getTitleFromLayers(layers, map) {
166
+ return layers.length === 1
167
+ ? this.getLayerTitleFromId(layers[0], map)
168
+ : 'igo';
169
+ }
170
+ getLayerTitleFromId(id, map) {
171
+ const layer = map.getLayerById(id);
172
+ return layer.title;
173
+ }
174
+ formatRecord(record) {
175
+ return Object.entries(record).reduce((formatted, [key, value]) => {
176
+ formatted[key] = this.formatDataType(value);
177
+ return formatted;
178
+ }, {});
179
+ }
180
+ formatDataType(value) {
181
+ switch (true) {
182
+ case typeof value === 'string': {
183
+ if (isIsoDate(value)) {
184
+ return new Date(value).toLocaleString();
185
+ }
186
+ return value;
187
+ }
188
+ case typeof value === 'object':
189
+ case value instanceof Array: {
190
+ return JSON.stringify(value);
191
+ }
192
+ default:
193
+ return value;
194
+ }
195
+ }
196
+ exportWithOgre(olFeatures, { format, csvSeparator = null }, title, projectionIn, projectionOut) {
197
+ const featuresText = new olformat.GeoJSON().writeFeatures(olFeatures, {
122
198
  dataProjection: projectionOut,
123
199
  featureProjection: projectionIn
124
200
  });
125
201
  const url = `${this.ogreUrl}/convertJson`;
126
- const form = document.createElement('form');
127
- form.style.display = 'none';
128
- document.body.appendChild(form);
129
- form.setAttribute('method', 'post');
130
- form.setAttribute('target', '_blank');
131
- form.setAttribute('action', url);
132
- if (encodingType === EncodingFormat.UTF8) {
133
- form.acceptCharset = 'UTF-8';
134
- form.enctype = 'application/x-www-form-urlencoded; charset=utf-8;';
135
- }
136
- else if (encodingType === EncodingFormat.LATIN1) {
137
- const enctype = 'ISO-8859-1';
138
- const featuresJson = JSON.parse(featuresText);
139
- featuresJson.features.map((f) => {
140
- const encodedProperties = String.fromCharCode.apply(null, encode(JSON.stringify(f.properties), { mode: 'replacement' }));
141
- f.properties = JSON.parse(encodedProperties);
142
- });
143
- featuresText = JSON.stringify(featuresJson);
144
- const encoding = document.createElement('input');
145
- encoding.setAttribute('type', 'hidden');
146
- encoding.setAttribute('name', 'encoding');
147
- encoding.setAttribute('value', enctype);
148
- form.appendChild(encoding);
149
- }
150
- if (format === 'CSVsemicolon') {
151
- const options = document.createElement('input');
152
- options.setAttribute('type', 'hidden');
153
- options.setAttribute('name', 'lco');
154
- options.setAttribute('value', 'SEPARATOR=SEMICOLON');
155
- form.appendChild(options);
156
- }
157
- const geojsonField = document.createElement('input');
158
- geojsonField.setAttribute('type', 'hidden');
159
- geojsonField.setAttribute('name', 'json');
160
- geojsonField.setAttribute('value', featuresText);
161
- form.appendChild(geojsonField);
162
- const outputNameField = document.createElement('input');
202
+ const formData = new FormData();
203
+ formData.append('json', featuresText);
163
204
  let outputName = format === 'Shapefile'
164
205
  ? `${title}.zip`
165
206
  : `${title}.${format.toLowerCase()}`;
166
- if (format === 'CSVcomma' || format === 'CSVsemicolon') {
207
+ let ogreFormat = ExportService.ogreFormats[format];
208
+ if (isCsvExport(format)) {
167
209
  outputName = `${title}.csv`;
210
+ if (format === 'CSVcomma' || format === 'CSVsemicolon') {
211
+ ogreFormat = 'CSV';
212
+ }
213
+ formData.append('lco', `SEPARATOR=${csvSeparator}`);
214
+ if (format === 'CSVsemicolon') {
215
+ formData.append('lco', `SEPARATOR=${csvSeparator}`);
216
+ }
168
217
  }
169
- outputName = outputName.replace(' ', '_');
170
- outputName = outputName
218
+ formData.append('outputName', this.formatFilename(outputName));
219
+ formData.append('format', ogreFormat);
220
+ return this.httpClient
221
+ .post(url, formData, {
222
+ responseType: 'blob'
223
+ })
224
+ .pipe(tap((value) => {
225
+ downloadBlob(value, outputName);
226
+ }));
227
+ }
228
+ formatFilename(name) {
229
+ return name
230
+ .replaceAll(' ', '_')
171
231
  .normalize('NFD')
172
232
  .replace(/[\u0300-\u036f]/g, '')
173
233
  .replace(/’/g, "'");
174
- outputNameField.setAttribute('type', 'hidden');
175
- outputNameField.setAttribute('name', 'outputName');
176
- outputNameField.setAttribute('value', outputName);
177
- form.appendChild(outputNameField);
178
- let ogreFormat = ExportService.ogreFormats[format];
179
- if (format === 'CSVcomma' || format === 'CSVsemicolon') {
180
- ogreFormat = 'CSV';
181
- }
182
- const outputFormatField = document.createElement('input');
183
- outputFormatField.setAttribute('type', 'hidden');
184
- outputFormatField.setAttribute('name', 'format');
185
- outputFormatField.setAttribute('value', ogreFormat);
186
- form.appendChild(outputFormatField);
187
- form.submit();
188
- document.body.removeChild(form);
189
- observer.complete();
190
234
  }
191
235
  nothingToExport(olFeatures, format) {
192
236
  if (olFeatures.length === 0) {
@@ -200,7 +244,126 @@ export class ExportService {
200
244
  }
201
245
  return false;
202
246
  }
203
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExportService, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
247
+ getFeaturesFromMap(layer, options) {
248
+ const dataSource = layer.dataSource.ol;
249
+ const extent = layer.map.viewController.getExtent();
250
+ let features = options.featureInMapExtent
251
+ ? dataSource.getFeaturesInExtent(extent)
252
+ : dataSource.getFeatures();
253
+ if (layer.dataSource instanceof ClusterDataSource) {
254
+ features = features.flatMap((cluster) => cluster.get('features'));
255
+ }
256
+ return features;
257
+ }
258
+ getFeaturesFromWorkspace(wks, layerName, data) {
259
+ const hasSelection = data.layersWithSelection.indexOf(layerName) !== -1;
260
+ const isInMapExtent = data.featureInMapExtent;
261
+ if (hasSelection && isInMapExtent) {
262
+ // Only export selected feature && into map extent
263
+ return wks.entityStore.stateView
264
+ .all()
265
+ .filter((e) => e.state.inMapExtent && e.state.selected)
266
+ .map((e) => e.entity.ol);
267
+ }
268
+ else if (hasSelection && !isInMapExtent) {
269
+ // Only export selected feature && (into map extent OR not)
270
+ return wks.entityStore.stateView
271
+ .all()
272
+ .filter((e) => e.state.selected)
273
+ .map((e) => e.entity.ol);
274
+ }
275
+ else if (isInMapExtent) {
276
+ // Only into map extent
277
+ return wks.entityStore.stateView
278
+ .all()
279
+ .filter((e) => e.state.inMapExtent)
280
+ .map((e) => e.entity.ol);
281
+ }
282
+ else {
283
+ // All features
284
+ return wks.entityStore.stateView
285
+ .all()
286
+ .map((e) => e.entity.ol);
287
+ }
288
+ }
289
+ getFeatures(map, layer, data, store) {
290
+ const projection = map.viewController.getOlProjection();
291
+ const extent = data.featureInMapExtent
292
+ ? map.viewController.getExtent()
293
+ : undefined;
294
+ if (layer.dataSource instanceof WFSDataSource) {
295
+ return layer.dataSource
296
+ .fetchFeatures({
297
+ extent,
298
+ projection,
299
+ httpClient: this.httpClient
300
+ })
301
+ .pipe(catchError((e) => {
302
+ throw e;
303
+ }));
304
+ }
305
+ // Filter spatial use external API to make query and use Workspace to store data
306
+ else if (layer.options.workspace?.enabled) {
307
+ const wks = this.getWorkspaceByLayerId(layer.id, store);
308
+ if (wks?.entityStore?.stateView.all().length) {
309
+ const features = this.getFeaturesFromWorkspace(wks, layer.id, data);
310
+ return of(features).pipe(catchError((e) => {
311
+ throw e;
312
+ }));
313
+ }
314
+ }
315
+ else if (layer instanceof VectorLayer) {
316
+ return of(this.getFeaturesFromMap(layer, data));
317
+ }
318
+ return of([]);
319
+ }
320
+ getWorkspaceByLayerId(id, store) {
321
+ const wksFromLayerId = store
322
+ .all()
323
+ .find((workspace) => workspace
324
+ .layer.id === id);
325
+ if (wksFromLayerId) {
326
+ return wksFromLayerId;
327
+ }
328
+ return;
329
+ }
330
+ getGeomTypes(features, format) {
331
+ let geomTypes = [];
332
+ if (format === 'Shapefile' || format === 'GPX') {
333
+ features.forEach((olFeature) => {
334
+ const featureGeomType = olFeature.getGeometry().getType();
335
+ const currentGeomType = geomTypes.find((geomType) => geomType.type === featureGeomType);
336
+ if (currentGeomType) {
337
+ currentGeomType.features.push(olFeature);
338
+ }
339
+ else {
340
+ geomTypes.push({
341
+ type: featureGeomType,
342
+ features: [olFeature]
343
+ });
344
+ }
345
+ });
346
+ }
347
+ else {
348
+ geomTypes = [{ type: null, features: features }];
349
+ }
350
+ geomTypes.forEach((geomType) => {
351
+ geomType.features.forEach((feature) => {
352
+ const radius = feature.get('rad');
353
+ if (radius) {
354
+ const center4326 = [
355
+ feature.get('longitude'),
356
+ feature.get('latitude')
357
+ ];
358
+ const circle = circular(center4326, radius, 500);
359
+ circle.transform('EPSG:4326', feature.get('_projection'));
360
+ feature.setGeometry(circle);
361
+ }
362
+ });
363
+ });
364
+ return geomTypes;
365
+ }
366
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExportService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
204
367
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExportService, providedIn: 'root' });
205
368
  }
206
369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExportService, decorators: [{
@@ -208,5 +371,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
208
371
  args: [{
209
372
  providedIn: 'root'
210
373
  }]
211
- }], ctorParameters: () => [{ type: i1.ConfigService }] });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUd0QyxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRTdELE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBS3ZDLE1BQU0sT0FBTyxhQUFhO0lBZUo7SUFkcEIsTUFBTSxDQUFDLFdBQVcsR0FBRztRQUNuQixHQUFHLEVBQUUsS0FBSztRQUNWLEdBQUcsRUFBRSxLQUFLO1FBQ1YsR0FBRyxFQUFFLEtBQUs7UUFDVixTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFlBQVksRUFBRSxjQUFjO0tBQzdCLENBQUM7SUFFRixNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV2QyxPQUFPLENBQVM7SUFDaEIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBRWxDLFlBQW9CLE1B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RU8sZUFBZSxDQUNyQixVQUFtQyxFQUNuQyxNQUFjO1FBRWQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEQsT0FBTyxDQUNMLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FDaEQsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUNsQyxJQUFJLENBQUMsQ0FDUCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFdBQVcsS0FBSyxTQUFTLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzt3R0E3U1UsYUFBYTs0R0FBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBkb3dubG9hZENvbnRlbnQgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgKiBhcyBvbGZvcm1hdCBmcm9tICdvbC9mb3JtYXQnO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJ3dpbmRvd3MtMTI1Mic7XG5cbmltcG9ydCB7XG4gIEV4cG9ydEludmFsaWRGaWxlRXJyb3IsXG4gIEV4cG9ydE5vdGhpbmdUb0V4cG9ydEVycm9yXG59IGZyb20gJy4vZXhwb3J0LmVycm9ycyc7XG5pbXBvcnQgeyBFbmNvZGluZ0Zvcm1hdCwgRXhwb3J0Rm9ybWF0IH0gZnJvbSAnLi9leHBvcnQudHlwZSc7XG5cbmNvbnN0IFNIQVBFRklMRV9GSUVMRF9NQVhfTEVOR0hUID0gMjU1O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcbiAgc3RhdGljIG9ncmVGb3JtYXRzID0ge1xuICAgIEdNTDogJ2dtbCcsXG4gICAgR1BYOiAnZ3B4JyxcbiAgICBLTUw6ICdrbWwnLFxuICAgIFNoYXBlZmlsZTogJ0VTUkkgU2hhcGVmaWxlJyxcbiAgICBDU1Zjb21tYTogJ0NTVmNvbW1hJyxcbiAgICBDU1ZzZW1pY29sb246ICdDU1ZzZW1pY29sb24nXG4gIH07XG5cbiAgc3RhdGljIG5vT2dyZUZhbGxiYWNrcyA9IFsnR01MJywgJ0dQWCcsICdLTUwnXTtcblxuICBwcml2YXRlIG9ncmVVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBhZ2dyZWdhdGVJbkNvbW1lbnQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlKSB7XG4gICAgdGhpcy5vZ3JlVXJsID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQudXJsJyk7XG4gICAgY29uc3QgZ3B4QWdncmVnYXRlSW5Db21tZW50ID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKFxuICAgICAgJ2ltcG9ydEV4cG9ydC5ncHhBZ2dyZWdhdGVJbkNvbW1lbnQnXG4gICAgKTtcbiAgICBpZiAoZ3B4QWdncmVnYXRlSW5Db21tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlSW5Db21tZW50ID0gZ3B4QWdncmVnYXRlSW5Db21tZW50O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydChcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBmb3JtYXQ6IEV4cG9ydEZvcm1hdCxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdCxcbiAgICBwcm9qZWN0aW9uSW4gPSAnRVBTRzo0MzI2JyxcbiAgICBwcm9qZWN0aW9uT3V0ID0gJ0VQU0c6NDMyNidcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZXhwb3J0T2xGZWF0dXJlcyA9IHRoaXMuZ2VuZXJhdGVGZWF0dXJlKFxuICAgICAgb2xGZWF0dXJlcyxcbiAgICAgIGZvcm1hdCxcbiAgICAgICdfZmVhdHVyZVN0b3JlJ1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5leHBvcnRBc3luYyhcbiAgICAgIGV4cG9ydE9sRmVhdHVyZXMsXG4gICAgICBmb3JtYXQsXG4gICAgICB0aXRsZSxcbiAgICAgIGVuY29kaW5nLFxuICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgcHJvamVjdGlvbk91dFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVGZWF0dXJlKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGZvcm1hdDogRXhwb3J0Rm9ybWF0LFxuICAgIGV4Y2x1ZGVQcmVmaXggPSAnXydcbiAgKTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10ge1xuICAgIGlmIChmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFggJiYgdGhpcy5hZ2dyZWdhdGVJbkNvbW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQWdncmVnYXRlZEZlYXR1cmUob2xGZWF0dXJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9sRmVhdHVyZXMubWFwKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgbGV0IGtleXMgPSBvbEZlYXR1cmVcbiAgICAgICAgLmdldEtleXMoKVxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4gIWtleS5zdGFydHNXaXRoKGV4Y2x1ZGVQcmVmaXgpKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZSAmJiBvbEZlYXR1cmUuZ2V0KCdfc3R5bGUnKSkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IEpTT04uc3RyaW5naWZ5KG9sRmVhdHVyZS5nZXQoJ19zdHlsZScpKTtcbiAgICAgICAgaWYgKHN0eWxlLmxlbmd0aCA+IFNIQVBFRklMRV9GSUVMRF9NQVhfTEVOR0hUKVxuICAgICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09ICdfc3R5bGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvcGVydGllcyA9IGtleXMucmVkdWNlKFxuICAgICAgICAoYWNjOiBvYmplY3QsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSBvbEZlYXR1cmUuZ2V0KGtleSk7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAgeyBnZW9tZXRyeTogb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXcgT2xGZWF0dXJlKHByb3BlcnRpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUFnZ3JlZ2F0ZWRGZWF0dXJlKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdXG4gICk6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdIHtcbiAgICByZXR1cm4gb2xGZWF0dXJlcy5tYXAoKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gb2xGZWF0dXJlXG4gICAgICAgIC5nZXRLZXlzKClcbiAgICAgICAgLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+ICFrZXkuc3RhcnRzV2l0aCgnXycpKTtcbiAgICAgIGxldCBjb21tZW50ID0gJyc7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0ga2V5cy5yZWR1Y2UoXG4gICAgICAgIChhY2M6IG9iamVjdCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleSAhPT0gJ2dlb21ldHJ5Jykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGtleSA9PT0gJ2lkJyAmJiBvbEZlYXR1cmUuZ2V0KCdkcmF3JylcbiAgICAgICAgICAgICAgPyAoY29tbWVudCArPSBrZXkgKyAnOicgKyBvbEZlYXR1cmUuZ2V0KCdkcmF3JykgKyAnICAgXFxyXFxuJylcbiAgICAgICAgICAgICAgOiAoY29tbWVudCArPSBrZXkgKyAnOicgKyBvbEZlYXR1cmUuZ2V0KGtleSkgKyAnICAgXFxyXFxuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjY1trZXldID0gb2xGZWF0dXJlLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBnZW9tZXRyeTogb2xGZWF0dXJlLmdldEdlb21ldHJ5KClcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0ZlYXR1cmUgPSBuZXcgT2xGZWF0dXJlKHByb3BlcnRpZXMpO1xuICAgICAgbmV3RmVhdHVyZS5zZXQoJ25hbWUnLCBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICBuZXdGZWF0dXJlLnNldCgnY210JywgY29tbWVudCk7XG5cbiAgICAgIHJldHVybiBuZXdGZWF0dXJlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRBc3luYyhcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBmb3JtYXQ6IEV4cG9ydEZvcm1hdCxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdCxcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uT3V0OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZG9FeHBvcnQgPSAob2JzZXJ2ZXI6IE9ic2VydmVyPHZvaWQ+KSA9PiB7XG4gICAgICBjb25zdCBub3RoaW5nVG9FeHBvcnQgPSB0aGlzLm5vdGhpbmdUb0V4cG9ydChvbEZlYXR1cmVzLCBmb3JtYXQpO1xuICAgICAgaWYgKG5vdGhpbmdUb0V4cG9ydCkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXhwb3J0Tm90aGluZ1RvRXhwb3J0RXJyb3IoKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcbiAgICAgIGlmIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCkge1xuICAgICAgICBpZiAoIXRoaXMub2dyZVVybCkge1xuICAgICAgICAgIGlmIChFeHBvcnRTZXJ2aWNlLm5vT2dyZUZhbGxiYWNrcy5pbmRleE9mKGZvcm1hdCkgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoXG4gICAgICAgICAgICAgIG9sRmVhdHVyZXMsXG4gICAgICAgICAgICAgIG9ic2VydmVyLFxuICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICBwcm9qZWN0aW9uSW4sXG4gICAgICAgICAgICAgIHByb2plY3Rpb25PdXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFeHBvcnRJbnZhbGlkRmlsZUVycm9yKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHBvcnRXaXRoT2dyZShcbiAgICAgICAgICBvbEZlYXR1cmVzLFxuICAgICAgICAgIG9ic2VydmVyLFxuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgICBwcm9qZWN0aW9uSW4sXG4gICAgICAgICAgcHJvamVjdGlvbk91dFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoXG4gICAgICAgICAgb2xGZWF0dXJlcyxcbiAgICAgICAgICBvYnNlcnZlcixcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgICAgIHByb2plY3Rpb25PdXRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRvRXhwb3J0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBleHBvcnRUb0ZpbGUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgb2JzZXJ2ZXI6IE9ic2VydmVyPHZvaWQ+LFxuICAgIGZvcm1hdDogRXhwb3J0Rm9ybWF0LFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbkluOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbk91dDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IG9sRm9ybWF0ID0gbmV3IG9sZm9ybWF0W2Zvcm1hdF0oKTtcbiAgICBjb25zdCBmZWF0dXJlc1RleHQgPSBvbEZvcm1hdC53cml0ZUZlYXR1cmVzKG9sRmVhdHVyZXMsIHtcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uT3V0LFxuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb25JbixcbiAgICAgIGZlYXR1cmVUeXBlOiAnZmVhdHVyZScsXG4gICAgICBmZWF0dXJlTlM6ICdodHRwOi8vZXhhbXBsZS5jb20vZmVhdHVyZSdcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7dGl0bGV9LiR7Zm9ybWF0LnRvTG93ZXJDYXNlKCl9YDtcblxuICAgIGRvd25sb2FkQ29udGVudChmZWF0dXJlc1RleHQsICdhdHRhY2htZW50L3BsYWluO2NoYXJzZXQ9dXRmLTgnLCBmaWxlTmFtZSk7XG4gICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0V2l0aE9ncmUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgb2JzZXJ2ZXI6IE9ic2VydmVyPHZvaWQ+LFxuICAgIGZvcm1hdDogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZW5jb2RpbmdUeXBlOiBFbmNvZGluZ0Zvcm1hdCxcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uT3V0OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IGZlYXR1cmVzVGV4dDogc3RyaW5nID0gbmV3IG9sZm9ybWF0Lkdlb0pTT04oKS53cml0ZUZlYXR1cmVzKFxuICAgICAgb2xGZWF0dXJlcyxcbiAgICAgIHtcbiAgICAgICAgZGF0YVByb2plY3Rpb246IHByb2plY3Rpb25PdXQsXG4gICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uSW5cbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vZ3JlVXJsfS9jb252ZXJ0SnNvbmA7XG4gICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICBmb3JtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgICBmb3JtLnNldEF0dHJpYnV0ZSgnbWV0aG9kJywgJ3Bvc3QnKTtcbiAgICBmb3JtLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuICAgIGZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLCB1cmwpO1xuXG4gICAgaWYgKGVuY29kaW5nVHlwZSA9PT0gRW5jb2RpbmdGb3JtYXQuVVRGOCkge1xuICAgICAgZm9ybS5hY2NlcHRDaGFyc2V0ID0gJ1VURi04JztcbiAgICAgIGZvcm0uZW5jdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTg7JztcbiAgICB9IGVsc2UgaWYgKGVuY29kaW5nVHlwZSA9PT0gRW5jb2RpbmdGb3JtYXQuTEFUSU4xKSB7XG4gICAgICBjb25zdCBlbmN0eXBlID0gJ0lTTy04ODU5LTEnO1xuICAgICAgY29uc3QgZmVhdHVyZXNKc29uID0gSlNPTi5wYXJzZShmZWF0dXJlc1RleHQpO1xuICAgICAgZmVhdHVyZXNKc29uLmZlYXR1cmVzLm1hcCgoZikgPT4ge1xuICAgICAgICBjb25zdCBlbmNvZGVkUHJvcGVydGllcyA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBlbmNvZGUoSlNPTi5zdHJpbmdpZnkoZi5wcm9wZXJ0aWVzKSwgeyBtb2RlOiAncmVwbGFjZW1lbnQnIH0pXG4gICAgICAgICk7XG4gICAgICAgIGYucHJvcGVydGllcyA9IEpTT04ucGFyc2UoZW5jb2RlZFByb3BlcnRpZXMpO1xuICAgICAgfSk7XG4gICAgICBmZWF0dXJlc1RleHQgPSBKU09OLnN0cmluZ2lmeShmZWF0dXJlc0pzb24pO1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgZW5jb2Rpbmcuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpO1xuICAgICAgZW5jb2Rpbmcuc2V0QXR0cmlidXRlKCduYW1lJywgJ2VuY29kaW5nJyk7XG4gICAgICBlbmNvZGluZy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgZW5jdHlwZSk7XG4gICAgICBmb3JtLmFwcGVuZENoaWxkKGVuY29kaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICBvcHRpb25zLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgIG9wdGlvbnMuc2V0QXR0cmlidXRlKCduYW1lJywgJ2xjbycpO1xuICAgICAgb3B0aW9ucy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ1NFUEFSQVRPUj1TRU1JQ09MT04nKTtcbiAgICAgIGZvcm0uYXBwZW5kQ2hpbGQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2VvanNvbkZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBnZW9qc29uRmllbGQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpO1xuICAgIGdlb2pzb25GaWVsZC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnanNvbicpO1xuICAgIGdlb2pzb25GaWVsZC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgZmVhdHVyZXNUZXh0KTtcbiAgICBmb3JtLmFwcGVuZENoaWxkKGdlb2pzb25GaWVsZCk7XG5cbiAgICBjb25zdCBvdXRwdXROYW1lRmllbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGxldCBvdXRwdXROYW1lID1cbiAgICAgIGZvcm1hdCA9PT0gJ1NoYXBlZmlsZSdcbiAgICAgICAgPyBgJHt0aXRsZX0uemlwYFxuICAgICAgICA6IGAke3RpdGxlfS4ke2Zvcm1hdC50b0xvd2VyQ2FzZSgpfWA7XG4gICAgaWYgKGZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKSB7XG4gICAgICBvdXRwdXROYW1lID0gYCR7dGl0bGV9LmNzdmA7XG4gICAgfVxuICAgIG91dHB1dE5hbWUgPSBvdXRwdXROYW1lLnJlcGxhY2UoJyAnLCAnXycpO1xuICAgIG91dHB1dE5hbWUgPSBvdXRwdXROYW1lXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgLnJlcGxhY2UoL+KAmS9nLCBcIidcIik7XG4gICAgb3V0cHV0TmFtZUZpZWxkLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICBvdXRwdXROYW1lRmllbGQuc2V0QXR0cmlidXRlKCduYW1lJywgJ291dHB1dE5hbWUnKTtcbiAgICBvdXRwdXROYW1lRmllbGQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIG91dHB1dE5hbWUpO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQob3V0cHV0TmFtZUZpZWxkKTtcblxuICAgIGxldCBvZ3JlRm9ybWF0ID0gRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0c1tmb3JtYXRdO1xuICAgIGlmIChmb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykge1xuICAgICAgb2dyZUZvcm1hdCA9ICdDU1YnO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRGb3JtYXRGaWVsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgb3V0cHV0Rm9ybWF0RmllbGQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpO1xuICAgIG91dHB1dEZvcm1hdEZpZWxkLnNldEF0dHJpYnV0ZSgnbmFtZScsICdmb3JtYXQnKTtcbiAgICBvdXRwdXRGb3JtYXRGaWVsZC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2dyZUZvcm1hdCk7XG4gICAgZm9ybS5hcHBlbmRDaGlsZChvdXRwdXRGb3JtYXRGaWVsZCk7XG5cbiAgICBmb3JtLnN1Ym1pdCgpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZm9ybSk7XG5cbiAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RoaW5nVG9FeHBvcnQoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgZm9ybWF0OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKG9sRmVhdHVyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gJ0dQWCcpIHtcbiAgICAgIGNvbnN0IHBvaW50T3JMaW5lID0gb2xGZWF0dXJlcy5maW5kKChvbEZlYXR1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBbJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnTXVsdGlMaW5lU3RyaW5nJ10uaW5kZXhPZihcbiAgICAgICAgICAgIG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKVxuICAgICAgICAgICkgPj0gMFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcG9pbnRPckxpbmUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
374
+ }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsY0FBYyxFQUNmLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0MsT0FBTyxFQUFFLFVBQVUsRUFBWSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBFLE9BQU8sRUFBWSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPcEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFN0MsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFLdkMsTUFBTSxPQUFPLGFBQWE7SUFtQmQ7SUFDQTtJQW5CVixNQUFNLENBQUMsV0FBVyxHQUFxQztRQUNyRCxHQUFHLEVBQUUsS0FBSztR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VSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDakQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7d0dBNWZVLGFBQWE7NEdBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW50aXR5UmVjb3JkIH0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5pbXBvcnQgeyBXb3Jrc3BhY2UsIFdvcmtzcGFjZVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uL3dvcmtzcGFjZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHtcbiAgYWRkRXhjZWxTaGVldFRvV29ya0Jvb2ssXG4gIGNyZWF0ZUV4Y2VsV29ya0Jvb2ssXG4gIGRvd25sb2FkQmxvYixcbiAgZG93bmxvYWRDb250ZW50LFxuICBpc0lzb0RhdGUsXG4gIHdyaXRlRXhjZWxGaWxlXG59IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCAqIGFzIG9sZm9ybWF0IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgY2lyY3VsYXIgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuXG5pbXBvcnQgeyBGZWF0dXJlQ29sbGVjdGlvbiB9IGZyb20gJ2dlb2pzb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIGNhdGNoRXJyb3IsIGxhc3RWYWx1ZUZyb20sIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UsIFdGU0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlJztcbmltcG9ydCB7IEFueUxheWVyLCBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQge1xuICBFZGl0aW9uV29ya3NwYWNlLFxuICBGZWF0dXJlV29ya3NwYWNlLFxuICBXZnNXb3Jrc3BhY2Vcbn0gZnJvbSAnLi4vLi4vd29ya3NwYWNlJztcbmltcG9ydCB7XG4gIEV4cG9ydEludmFsaWRGaWxlRXJyb3IsXG4gIEV4cG9ydE5vdGhpbmdUb0V4cG9ydEVycm9yXG59IGZyb20gJy4vZXhwb3J0LmVycm9ycyc7XG5pbXBvcnQgeyBFeHBvcnRPcHRpb25zLCBHZW9tZXRyeUNvbGxlY3Rpb24gfSBmcm9tICcuL2V4cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQW55RXhwb3J0Rm9ybWF0LCBFeHBvcnRPZ3JlRm9ybWF0IH0gZnJvbSAnLi9leHBvcnQudHlwZSc7XG5pbXBvcnQgeyBpc0NzdkV4cG9ydCB9IGZyb20gJy4vZXhwb3J0LnV0aWxzJztcblxuY29uc3QgU0hBUEVGSUxFX0ZJRUxEX01BWF9MRU5HSFQgPSAyNTU7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xuICBzdGF0aWMgb2dyZUZvcm1hdHM6IFJlY29yZDxFeHBvcnRPZ3JlRm9ybWF0LCBzdHJpbmc+ID0ge1xuICAgIEdNTDogJ2dtbCcsXG4gICAgR1BYOiAnZ3B4JyxcbiAgICBLTUw6ICdrbWwnLFxuICAgIFNoYXBlZmlsZTogJ0VTUkkgU2hhcGVmaWxlJyxcbiAgICBDU1Y6ICdDU1YnLFxuICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgQ1NWICovXG4gICAgQ1NWY29tbWE6ICdDU1Zjb21tYScsXG4gICAgLyoqIEBkZXByZWNhdGVkIHVzZSBDU1YgKi9cbiAgICBDU1ZzZW1pY29sb246ICdDU1ZzZW1pY29sb24nXG4gIH07XG5cbiAgc3RhdGljIG5vT2dyZUZhbGxiYWNrczogUGFydGlhbDxBbnlFeHBvcnRGb3JtYXRbXT4gPSBbJ0dNTCcsICdHUFgnLCAnS01MJ107XG5cbiAgcHJpdmF0ZSBvZ3JlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgYWdncmVnYXRlSW5Db21tZW50ID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5vZ3JlVXJsID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQudXJsJyk7XG4gICAgY29uc3QgZ3B4QWdncmVnYXRlSW5Db21tZW50ID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKFxuICAgICAgJ2ltcG9ydEV4cG9ydC5ncHhBZ2dyZWdhdGVJbkNvbW1lbnQnXG4gICAgKTtcbiAgICBpZiAoZ3B4QWdncmVnYXRlSW5Db21tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlSW5Db21tZW50ID0gZ3B4QWdncmVnYXRlSW5Db21tZW50O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydChcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBvcHRpb25zOiBFeHBvcnRPcHRpb25zLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgcHJvamVjdGlvbkluID0gJ0VQU0c6NDMyNicsXG4gICAgcHJvamVjdGlvbk91dCA9ICdFUFNHOjQzMjYnXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGV4cG9ydE9sRmVhdHVyZXMgPSB0aGlzLmNsZWFuRmVhdHVyZXMoXG4gICAgICBvbEZlYXR1cmVzLFxuICAgICAgb3B0aW9ucy5mb3JtYXQsXG4gICAgICAnX2ZlYXR1cmVTdG9yZSdcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhwb3J0QXN5bmMoXG4gICAgICBleHBvcnRPbEZlYXR1cmVzLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRpdGxlLFxuICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgcHJvamVjdGlvbk91dFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW5GZWF0dXJlcyhcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSxcbiAgICBmb3JtYXQ6IEFueUV4cG9ydEZvcm1hdCxcbiAgICBleGNsdWRlUHJlZml4ID0gJ18nXG4gICk6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdIHtcbiAgICBpZiAoZm9ybWF0ID09PSAnR1BYJyAmJiB0aGlzLmFnZ3JlZ2F0ZUluQ29tbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVBZ2dyZWdhdGVkRmVhdHVyZShvbEZlYXR1cmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2xGZWF0dXJlcy5tYXAoKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICBsZXQga2V5cyA9IG9sRmVhdHVyZVxuICAgICAgICAuZ2V0S2V5cygpXG4gICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiAha2V5LnN0YXJ0c1dpdGgoZXhjbHVkZVByZWZpeCkpO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnU2hhcGVmaWxlJyAmJiBvbEZlYXR1cmUuZ2V0KCdfc3R5bGUnKSkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IEpTT04uc3RyaW5naWZ5KG9sRmVhdHVyZS5nZXQoJ19zdHlsZScpKTtcbiAgICAgICAgaWYgKHN0eWxlLmxlbmd0aCA+IFNIQVBFRklMRV9GSUVMRF9NQVhfTEVOR0hUKVxuICAgICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09ICdfc3R5bGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvcGVydGllcyA9IGtleXMucmVkdWNlKFxuICAgICAgICAoYWNjOiBvYmplY3QsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSBvbEZlYXR1cmUuZ2V0KGtleSk7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAgeyBnZW9tZXRyeTogb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXcgT2xGZWF0dXJlKHByb3BlcnRpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUFnZ3JlZ2F0ZWRGZWF0dXJlKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdXG4gICk6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdIHtcbiAgICByZXR1cm4gb2xGZWF0dXJlcy5tYXAoKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gb2xGZWF0dXJlXG4gICAgICAgIC5nZXRLZXlzKClcbiAgICAgICAgLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+ICFrZXkuc3RhcnRzV2l0aCgnXycpKTtcbiAgICAgIGxldCBjb21tZW50ID0gJyc7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0ga2V5cy5yZWR1Y2UoXG4gICAgICAgIChhY2M6IG9iamVjdCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleSAhPT0gJ2dlb21ldHJ5Jykge1xuICAgICAgICAgICAga2V5ID09PSAnaWQnICYmIG9sRmVhdHVyZS5nZXQoJ2RyYXcnKVxuICAgICAgICAgICAgICA/IChjb21tZW50ICs9IGtleSArICc6JyArIG9sRmVhdHVyZS5nZXQoJ2RyYXcnKSArICcgICBcXHJcXG4nKVxuICAgICAgICAgICAgICA6IChjb21tZW50ICs9IGtleSArICc6JyArIG9sRmVhdHVyZS5nZXQoa2V5KSArICcgICBcXHJcXG4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjW2tleV0gPSBvbEZlYXR1cmUuZ2V0KGtleSk7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGdlb21ldHJ5OiBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3QgbmV3RmVhdHVyZSA9IG5ldyBPbEZlYXR1cmUocHJvcGVydGllcyk7XG4gICAgICBuZXdGZWF0dXJlLnNldCgnbmFtZScsIG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgIG5ld0ZlYXR1cmUuc2V0KCdjbXQnLCBjb21tZW50KTtcblxuICAgICAgcmV0dXJuIG5ld0ZlYXR1cmU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydEFzeW5jKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIG9wdGlvbnM6IEV4cG9ydE9wdGlvbnMsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uT3V0OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmb3JtYXQgfSA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8dm9pZD4pID0+IHtcbiAgICAgIGNvbnN0IG5vdGhpbmdUb0V4cG9ydCA9IHRoaXMubm90aGluZ1RvRXhwb3J0KG9sRmVhdHVyZXMsIGZvcm1hdCk7XG4gICAgICBpZiAobm90aGluZ1RvRXhwb3J0KSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFeHBvcnROb3RoaW5nVG9FeHBvcnRFcnJvcigpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xuICAgICAgaWYgKG9ncmVGb3JtYXRzLmluZGV4T2YoZm9ybWF0KSA+PSAwKSB7XG4gICAgICAgIGlmICghdGhpcy5vZ3JlVXJsKSB7XG4gICAgICAgICAgaWYgKEV4cG9ydFNlcnZpY2Uubm9PZ3JlRmFsbGJhY2tzLmluZGV4T2YoZm9ybWF0KSA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFRvRmlsZShcbiAgICAgICAgICAgICAgb2xGZWF0dXJlcyxcbiAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgICAgICAgICBwcm9qZWN0aW9uT3V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEV4cG9ydEludmFsaWRGaWxlRXJyb3IoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cG9ydFdpdGhPZ3JlKFxuICAgICAgICAgIG9sRmVhdHVyZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBwcm9qZWN0aW9uSW4sXG4gICAgICAgICAgcHJvamVjdGlvbk91dFxuICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoXG4gICAgICAgICAgb2xGZWF0dXJlcyxcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgcHJvamVjdGlvbkluLFxuICAgICAgICAgIHByb2plY3Rpb25PdXRcbiAgICAgICAgKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBleHBvcnRUb0ZpbGUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgZm9ybWF0OiBBbnlFeHBvcnRGb3JtYXQsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgICBwcm9qZWN0aW9uT3V0OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmZvcm1hdEZlYXR1cmVzKFxuICAgICAgb2xGZWF0dXJlcyxcbiAgICAgIGZvcm1hdCxcbiAgICAgIHByb2plY3Rpb25JbixcbiAgICAgIHByb2plY3Rpb25PdXRcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHt0aXRsZX0uJHtmb3JtYXQudG9Mb3dlckNhc2UoKX1gO1xuICAgIGRvd25sb2FkQ29udGVudChmZWF0dXJlcywgJ2F0dGFjaG1lbnQvcGxhaW47Y2hhcnNldD11dGYtOCcsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RmVhdHVyZXMoXG4gICAgZmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGZvcm1hdDogQW55RXhwb3J0Rm9ybWF0LFxuICAgIHByb2plY3Rpb25JbiA9ICdFUFNHOjQzMjYnLFxuICAgIHByb2plY3Rpb25PdXQgPSAnRVBTRzo0MzI2J1xuICApIHtcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLmdldEZvcm1hdHRlcihmb3JtYXQpO1xuICAgIGNvbnN0IGNsZWFuRmVhdHVyZXMgPSB0aGlzLmNsZWFuRmVhdHVyZXMoZmVhdHVyZXMsIGZvcm1hdCwgJ19mZWF0dXJlU3RvcmUnKTtcbiAgICByZXR1cm4gZm9ybWF0dGVyLndyaXRlRmVhdHVyZXMoY2xlYW5GZWF0dXJlcywge1xuICAgICAgZGF0YVByb2plY3Rpb246IHByb2plY3Rpb25PdXQsXG4gICAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gICAgfSk7XG4gIH1cblxuICBnZXRGb3JtYXR0ZXIoZm9ybWF0OiBBbnlFeHBvcnRGb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnR1BYJzpcbiAgICAgICAgcmV0dXJuIG5ldyBvbGZvcm1hdC5HUFgoKTtcbiAgICAgIGNhc2UgJ0dNTCc6XG4gICAgICAgIHJldHVybiBuZXcgb2xmb3JtYXQuR01MKCk7XG4gICAgICBjYXNlICdLTUwnOlxuICAgICAgICByZXR1cm4gbmV3IG9sZm9ybWF0LktNTCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBvbGZvcm1hdC5HZW9KU09OKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhwb3J0RXhjZWwobWFwOiBJZ29NYXAsIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZSwgZGF0YTogRXhwb3J0T3B0aW9ucykge1xuICAgIGNvbnN0IHdvcmtCb29rID0gYXdhaXQgY3JlYXRlRXhjZWxXb3JrQm9vaygpO1xuXG4gICAgZm9yIChjb25zdCBsYXllck5hbWUgb2YgZGF0YS5sYXllcnMpIHtcbiAgICAgIGNvbnN0IGxheWVyID0gbWFwLmdldExheWVyQnlJZChsYXllck5hbWUpO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmdldEZlYXR1cmVzKG1hcCwgbGF5ZXIsIGRhdGEsIHN0b3JlKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZm9ybWF0dGVkRmVhdHVyZXMgPSBmZWF0dXJlcz8ubGVuZ3RoXG4gICAgICAgID8gdGhpcy5mb3JtYXRGZWF0dXJlcyhmZWF0dXJlcywgJ0dlb0pTT04nKVxuICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IGNvbGxlY3Rpb246IEZlYXR1cmVDb2xsZWN0aW9uID0gZmVhdHVyZXNcbiAgICAgICAgPyBKU09OLnBhcnNlKGZvcm1hdHRlZEZlYXR1cmVzKVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbXVxuICAgICAgICAgIH07XG4gICAgICBjb25zdCByb3dzID0gY29sbGVjdGlvbi5mZWF0dXJlcy5tYXAoKGZlYXR1cmUpID0+XG4gICAgICAgIHRoaXMuZm9ybWF0UmVjb3JkKGZlYXR1cmUucHJvcGVydGllcylcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGFkZEV4Y2VsU2hlZXRUb1dvcmtCb29rKGxheWVyLnRpdGxlLCByb3dzLCB3b3JrQm9vayk7XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFRpdGxlRnJvbUxheWVycyhkYXRhLmxheWVycywgbWFwKTtcbiAgICB3cml0ZUV4Y2VsRmlsZSh3b3JrQm9vaywgdGl0bGUsIHsgY29tcHJlc3Npb246IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpdGxlRnJvbUxheWVycyhsYXllcnM6IHN0cmluZ1tdLCBtYXA6IElnb01hcCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxheWVycy5sZW5ndGggPT09IDFcbiAgICAgID8gdGhpcy5nZXRMYXllclRpdGxlRnJvbUlkKGxheWVyc1swXSwgbWFwKVxuICAgICAgOiAnaWdvJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGF5ZXJUaXRsZUZyb21JZChpZDogc3RyaW5nLCBtYXA6IElnb01hcCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF5ZXIgPSBtYXAuZ2V0TGF5ZXJCeUlkKGlkKTtcbiAgICByZXR1cm4gbGF5ZXIudGl0bGU7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFJlY29yZChcbiAgICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVjb3JkKS5yZWR1Y2UoKGZvcm1hdHRlZCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBmb3JtYXR0ZWRba2V5XSA9IHRoaXMuZm9ybWF0RGF0YVR5cGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGFUeXBlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc6IHtcbiAgICAgICAgaWYgKGlzSXNvRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZykudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JzpcbiAgICAgIGNhc2UgdmFsdWUgaW5zdGFuY2VvZiBBcnJheToge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0V2l0aE9ncmUoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgeyBmb3JtYXQsIGNzdlNlcGFyYXRvciA9IG51bGwgfTogRXhwb3J0T3B0aW9ucyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHByb2plY3Rpb25Jbjogc3RyaW5nLFxuICAgIHByb2plY3Rpb25PdXQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBmZWF0dXJlc1RleHQgPSBuZXcgb2xmb3JtYXQuR2VvSlNPTigpLndyaXRlRmVhdHVyZXMob2xGZWF0dXJlcywge1xuICAgICAgZGF0YVByb2plY3Rpb246IHByb2plY3Rpb25PdXQsXG4gICAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gICAgfSk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vZ3JlVXJsfS9jb252ZXJ0SnNvbmA7XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uJywgZmVhdHVyZXNUZXh0KTtcblxuICAgIGxldCBvdXRwdXROYW1lID1cbiAgICAgIGZvcm1hdCA9PT0gJ1NoYXBlZmlsZSdcbiAgICAgICAgPyBgJHt0aXRsZX0uemlwYFxuICAgICAgICA6IGAke3RpdGxlfS4ke2Zvcm1hdC50b0xvd2VyQ2FzZSgpfWA7XG4gICAgbGV0IG9ncmVGb3JtYXQgPSBFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzW2Zvcm1hdF07XG5cbiAgICBpZiAoaXNDc3ZFeHBvcnQoZm9ybWF0KSkge1xuICAgICAgb3V0cHV0TmFtZSA9IGAke3RpdGxlfS5jc3ZgO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpIHtcbiAgICAgICAgb2dyZUZvcm1hdCA9ICdDU1YnO1xuICAgICAgfVxuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2xjbycsIGBTRVBBUkFUT1I9JHtjc3ZTZXBhcmF0b3J9YCk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnbGNvJywgYFNFUEFSQVRPUj0ke2NzdlNlcGFyYXRvcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ291dHB1dE5hbWUnLCB0aGlzLmZvcm1hdEZpbGVuYW1lKG91dHB1dE5hbWUpKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2Zvcm1hdCcsIG9ncmVGb3JtYXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QodXJsLCBmb3JtRGF0YSwge1xuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgZG93bmxvYWRCbG9iKHZhbHVlLCBvdXRwdXROYW1lKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEZpbGVuYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWVcbiAgICAgIC5yZXBsYWNlQWxsKCcgJywgJ18nKVxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC/igJkvZywgXCInXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RoaW5nVG9FeHBvcnQoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgZm9ybWF0OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKG9sRmVhdHVyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gJ0dQWCcpIHtcbiAgICAgIGNvbnN0IHBvaW50T3JMaW5lID0gb2xGZWF0dXJlcy5maW5kKChvbEZlYXR1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBbJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnTXVsdGlMaW5lU3RyaW5nJ10uaW5kZXhPZihcbiAgICAgICAgICAgIG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKVxuICAgICAgICAgICkgPj0gMFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcG9pbnRPckxpbmUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGZWF0dXJlc0Zyb21NYXAoXG4gICAgbGF5ZXI6IFZlY3RvckxheWVyLFxuICAgIG9wdGlvbnM6IEV4cG9ydE9wdGlvbnNcbiAgKTogT2xGZWF0dXJlW10ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBsYXllci5kYXRhU291cmNlLm9sO1xuICAgIGNvbnN0IGV4dGVudCA9IGxheWVyLm1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKTtcblxuICAgIGxldCBmZWF0dXJlczogT2xGZWF0dXJlW10gPSBvcHRpb25zLmZlYXR1cmVJbk1hcEV4dGVudFxuICAgICAgPyBkYXRhU291cmNlLmdldEZlYXR1cmVzSW5FeHRlbnQoZXh0ZW50KVxuICAgICAgOiBkYXRhU291cmNlLmdldEZlYXR1cmVzKCk7XG5cbiAgICBpZiAobGF5ZXIuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIENsdXN0ZXJEYXRhU291cmNlKSB7XG4gICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXIpID0+IGNsdXN0ZXIuZ2V0KCdmZWF0dXJlcycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGZWF0dXJlc0Zyb21Xb3Jrc3BhY2UoXG4gICAgd2tzOiBXb3Jrc3BhY2UsXG4gICAgbGF5ZXJOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRXhwb3J0T3B0aW9uc1xuICApOiBPbEZlYXR1cmVbXSB7XG4gICAgY29uc3QgaGFzU2VsZWN0aW9uID0gZGF0YS5sYXllcnNXaXRoU2VsZWN0aW9uLmluZGV4T2YobGF5ZXJOYW1lKSAhPT0gLTE7XG4gICAgY29uc3QgaXNJbk1hcEV4dGVudCA9IGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50O1xuICAgIGlmIChoYXNTZWxlY3Rpb24gJiYgaXNJbk1hcEV4dGVudCkge1xuICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiBpbnRvIG1hcCBleHRlbnRcbiAgICAgIHJldHVybiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5hbGwoKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudCAmJiBlLnN0YXRlLnNlbGVjdGVkXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sIGFzIE9sRmVhdHVyZSk7XG4gICAgfSBlbHNlIGlmIChoYXNTZWxlY3Rpb24gJiYgIWlzSW5NYXBFeHRlbnQpIHtcbiAgICAgIC8vIE9ubHkgZXhwb3J0IHNlbGVjdGVkIGZlYXR1cmUgJiYgIChpbnRvIG1hcCBleHRlbnQgT1Igbm90KVxuICAgICAgcmV0dXJuIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLmFsbCgpXG4gICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wgYXMgT2xGZWF0dXJlKTtcbiAgICB9IGVsc2UgaWYgKGlzSW5NYXBFeHRlbnQpIHtcbiAgICAgIC8vIE9ubHkgaW50byBtYXAgZXh0ZW50XG4gICAgICByZXR1cm4gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuYWxsKClcbiAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQpXG4gICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCBhcyBPbEZlYXR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBbGwgZmVhdHVyZXNcbiAgICAgIHJldHVybiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5hbGwoKVxuICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wgYXMgT2xGZWF0dXJlKTtcbiAgICB9XG4gIH1cblxuICBnZXRGZWF0dXJlcyhcbiAgICBtYXA6IElnb01hcCxcbiAgICBsYXllcjogQW55TGF5ZXIsXG4gICAgZGF0YTogRXhwb3J0T3B0aW9ucyxcbiAgICBzdG9yZTogV29ya3NwYWNlU3RvcmVcbiAgKTogT2JzZXJ2YWJsZTxPbEZlYXR1cmVbXT4ge1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKCk7XG4gICAgY29uc3QgZXh0ZW50ID0gZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcbiAgICAgID8gbWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChsYXllci5kYXRhU291cmNlIGluc3RhbmNlb2YgV0ZTRGF0YVNvdXJjZSkge1xuICAgICAgcmV0dXJuIGxheWVyLmRhdGFTb3VyY2VcbiAgICAgICAgLmZldGNoRmVhdHVyZXMoe1xuICAgICAgICAgIGV4dGVudCxcbiAgICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAgIGh0dHBDbGllbnQ6IHRoaXMuaHR0cENsaWVudFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8vIEZpbHRlciBzcGF0aWFsIHVzZSBleHRlcm5hbCBBUEkgdG8gbWFrZSBxdWVyeSBhbmQgdXNlIFdvcmtzcGFjZSB0byBzdG9yZSBkYXRhXG4gICAgZWxzZSBpZiAobGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/LmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHdrcyA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyLmlkLCBzdG9yZSk7XG4gICAgICBpZiAod2tzPy5lbnRpdHlTdG9yZT8uc3RhdGVWaWV3LmFsbCgpLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0RmVhdHVyZXNGcm9tV29ya3NwYWNlKHdrcywgbGF5ZXIuaWQsIGRhdGEpO1xuICAgICAgICByZXR1cm4gb2YoZmVhdHVyZXMpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0RmVhdHVyZXNGcm9tTWFwKGxheWVyLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFdvcmtzcGFjZUJ5TGF5ZXJJZChpZDogc3RyaW5nLCBzdG9yZTogV29ya3NwYWNlU3RvcmUpOiBXb3Jrc3BhY2Uge1xuICAgIGNvbnN0IHdrc0Zyb21MYXllcklkID0gc3RvcmVcbiAgICAgIC5hbGwoKVxuICAgICAgLmZpbmQoXG4gICAgICAgICh3b3Jrc3BhY2UpID0+XG4gICAgICAgICAgKHdvcmtzcGFjZSBhcyBXZnNXb3Jrc3BhY2UgfCBGZWF0dXJlV29ya3NwYWNlIHwgRWRpdGlvbldvcmtzcGFjZSlcbiAgICAgICAgICAgIC5sYXllci5pZCA9PT0gaWRcbiAgICAgICk7XG4gICAgaWYgKHdrc0Zyb21MYXllcklkKSB7XG4gICAgICByZXR1cm4gd2tzRnJvbUxheWVySWQ7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGdldEdlb21UeXBlcyhcbiAgICBmZWF0dXJlczogT2xGZWF0dXJlW10sXG4gICAgZm9ybWF0PzogQW55RXhwb3J0Rm9ybWF0XG4gICk6IEdlb21ldHJ5Q29sbGVjdGlvbltdIHtcbiAgICBsZXQgZ2VvbVR5cGVzOiBHZW9tZXRyeUNvbGxlY3Rpb25bXSA9IFtdO1xuICAgIGlmIChmb3JtYXQgPT09ICdTaGFwZWZpbGUnIHx8IGZvcm1hdCA9PT0gJ0dQWCcpIHtcbiAgICAgIGZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBmZWF0dXJlR2VvbVR5cGUgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRHZW9tVHlwZSA9IGdlb21UeXBlcy5maW5kKFxuICAgICAgICAgIChnZW9tVHlwZSkgPT4gZ2VvbVR5cGUudHlwZSA9PT0gZmVhdHVyZUdlb21UeXBlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjdXJyZW50R2VvbVR5cGUpIHtcbiAgICAgICAgICBjdXJyZW50R2VvbVR5cGUuZmVhdHVyZXMucHVzaChvbEZlYXR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdlb21UeXBlcy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IGZlYXR1cmVHZW9tVHlwZSxcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbb2xGZWF0dXJlXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VvbVR5cGVzID0gW3sgdHlwZTogbnVsbCwgZmVhdHVyZXM6IGZlYXR1cmVzIH1dO1xuICAgIH1cblxuICAgIGdlb21UeXBlcy5mb3JFYWNoKChnZW9tVHlwZSkgPT4ge1xuICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcbiAgICAgICAgaWYgKHJhZGl1cykge1xuICAgICAgICAgIGNvbnN0IGNlbnRlcjQzMjY6IG51bWJlcltdID0gW1xuICAgICAgICAgICAgZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLFxuICAgICAgICAgICAgZmVhdHVyZS5nZXQoJ2xhdGl0dWRlJylcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGNpcmN1bGFyKGNlbnRlcjQzMjYsIHJhZGl1cywgNTAwKTtcbiAgICAgICAgICBjaXJjbGUudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XG4gICAgICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShjaXJjbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZW9tVHlwZXM7XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +1,13 @@
1
- import { strEnum } from '@igo2/utils';
2
- export const ExportFormat = strEnum([
3
- 'URL',
1
+ export const ExportFormat = [
4
2
  'GeoJSON',
3
+ 'Excel',
4
+ 'Shapefile',
5
5
  'GML',
6
6
  'GPX',
7
7
  'KML',
8
- 'Shapefile',
9
- 'CSVcomma',
10
- 'CSVsemicolon'
11
- ]);
12
- export const EncodingFormat = strEnum(['UTF8', 'LATIN1']);
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L3NoYXJlZC9leHBvcnQudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDbEMsS0FBSztJQUNMLFNBQVM7SUFDVCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxXQUFXO0lBQ1gsVUFBVTtJQUNWLGNBQWM7Q0FDZixDQUFDLENBQUM7QUFHSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJFbnVtIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgRXhwb3J0Rm9ybWF0ID0gc3RyRW51bShbXG4gICdVUkwnLFxuICAnR2VvSlNPTicsXG4gICdHTUwnLFxuICAnR1BYJyxcbiAgJ0tNTCcsXG4gICdTaGFwZWZpbGUnLFxuICAnQ1NWY29tbWEnLFxuICAnQ1NWc2VtaWNvbG9uJ1xuXSk7XG5leHBvcnQgdHlwZSBFeHBvcnRGb3JtYXQgPSBrZXlvZiB0eXBlb2YgRXhwb3J0Rm9ybWF0O1xuXG5leHBvcnQgY29uc3QgRW5jb2RpbmdGb3JtYXQgPSBzdHJFbnVtKFsnVVRGOCcsICdMQVRJTjEnXSk7XG5leHBvcnQgdHlwZSBFbmNvZGluZ0Zvcm1hdCA9IGtleW9mIHR5cGVvZiBFbmNvZGluZ0Zvcm1hdDtcbiJdfQ==
8
+ 'CSV',
9
+ 'URL'
10
+ ];
11
+ export const ExportFormatLegacy = ['CSVcomma', 'CSVsemicolon'];
12
+ export const CsvSeparator = ['auto', 'comma', 'semicolon'];
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L3NoYXJlZC9leHBvcnQudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsU0FBUztJQUNULE9BQU87SUFDUCxXQUFXO0lBQ1gsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7Q0FDRyxDQUFDO0FBR1gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFVLENBQUM7QUFHeEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEFueUV4cG9ydEZvcm1hdCA9IEV4cG9ydEZvcm1hdCB8IEV4cG9ydEZvcm1hdExlZ2FjeTtcblxuZXhwb3J0IGNvbnN0IEV4cG9ydEZvcm1hdCA9IFtcbiAgJ0dlb0pTT04nLFxuICAnRXhjZWwnLFxuICAnU2hhcGVmaWxlJyxcbiAgJ0dNTCcsXG4gICdHUFgnLFxuICAnS01MJyxcbiAgJ0NTVicsXG4gICdVUkwnXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgRXhwb3J0Rm9ybWF0ID0gKHR5cGVvZiBFeHBvcnRGb3JtYXQpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBFeHBvcnRGb3JtYXRMZWdhY3kgPSBbJ0NTVmNvbW1hJywgJ0NTVnNlbWljb2xvbiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgRXhwb3J0Rm9ybWF0TGVnYWN5ID0gKHR5cGVvZiBFeHBvcnRGb3JtYXRMZWdhY3kpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBDc3ZTZXBhcmF0b3IgPSBbJ2F1dG8nLCAnY29tbWEnLCAnc2VtaWNvbG9uJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBDc3ZTZXBhcmF0b3IgPSAodHlwZW9mIENzdlNlcGFyYXRvcilbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgRXhwb3J0T2dyZUZvcm1hdCA9IEV4dHJhY3Q8XG4gIEFueUV4cG9ydEZvcm1hdCxcbiAgJ0dNTCcgfCAnR1BYJyB8ICdLTUwnIHwgJ1NoYXBlZmlsZScgfCAnQ1NWY29tbWEnIHwgJ0NTVnNlbWljb2xvbicgfCAnQ1NWJ1xuPjtcbiJdfQ==