@igo2/context
Version:
148 lines • 24.4 kB
JavaScript
import { ClusterDataSource, FeatureDataSource, VectorLayer, featureRandomStyle, featureRandomStyleFunction } from '@igo2/geo';
import GeoJSON from 'ol/format/GeoJSON';
export function handleFileImportSuccess(file, context, messageService, contextService) {
if (Object.keys(context).length <= 0) {
handleNothingToImportError(file, messageService);
return;
}
const contextTitle = computeLayerTitleFromFile(file);
addContextToContextList(context, contextTitle, contextService);
messageService.success('igo.context.contextImportExport.import.success.text', 'igo.context.contextImportExport.import.success.title', undefined, {
value: contextTitle
});
}
export function handleFileImportError(file, error, messageService, sizeMb) {
sizeMb = sizeMb ? sizeMb : 30;
const errMapping = {
'Invalid file': handleInvalidFileImportError,
'File is too large': handleSizeFileImportError,
'Failed to read file': handleUnreadbleFileImportError
};
errMapping[error.message](file, error, messageService, sizeMb);
}
export function handleInvalidFileImportError(file, error, messageService) {
messageService.error('igo.context.contextImportExport.import.invalid.text', 'igo.context.contextImportExport.import.invalid.title', undefined, {
value: file.name,
mimeType: file.type
});
}
export function handleSizeFileImportError(file, error, messageService, sizeMb) {
messageService.error('igo.context.contextImportExport.import.tooLarge.text', 'igo.context.contextImportExport.import.tooLarge.title', undefined, {
value: file.name,
size: sizeMb
});
}
export function handleUnreadbleFileImportError(file, error, messageService) {
messageService.error('igo.context.contextImportExport.import.unreadable.text', 'igo.context.contextImportExport.import.unreadable.title', undefined, {
value: file.name
});
}
export function handleNothingToImportError(file, messageService) {
messageService.error('igo.context.contextImportExport.import.empty.text', 'igo.context.contextImportExport.import.empty.title', undefined, { value: file.name });
}
export function addContextToContextList(context, contextTitle, contextService) {
context.title = contextTitle;
context.imported = true;
contextService.contexts$.value.ours.unshift(context);
contextService.contexts$.next(contextService.contexts$.value);
contextService.importedContext.unshift(context);
contextService.loadContext(context.uri);
}
export function getFileExtension(file) {
return file.name.split('.').pop().toLowerCase();
}
export function computeLayerTitleFromFile(file) {
return file.name.substr(0, file.name.lastIndexOf('.'));
}
export function addImportedFeaturesToMap(extraFeatures, map) {
const sourceOptions = {
type: 'vector',
queryable: true
};
const olFeatures = collectFeaturesFromExtraFeatures(extraFeatures);
const source = new FeatureDataSource(sourceOptions);
source.ol.addFeatures(olFeatures);
let randomStyle;
let editable = false;
const featureKeys = olFeatures[0]?.getKeys() ?? [];
if (featureKeys.includes('_style') || featureKeys.includes('_mapTitle')) {
randomStyle = featureRandomStyleFunction();
}
else {
randomStyle = featureRandomStyle();
editable = true;
}
const layer = new VectorLayer({
title: extraFeatures.name,
isIgoInternalLayer: true,
source,
igoStyle: { editable },
style: randomStyle,
visible: extraFeatures.visible,
opacity: extraFeatures.opacity
});
map.layerController.add(layer);
return layer;
}
export function addImportedFeaturesStyledToMap(extraFeatures, map, styleListService, styleService) {
let style;
let distance;
if (styleListService.getStyleList(extraFeatures.name + '.styleByAttribute')) {
const styleByAttribute = styleListService.getStyleList(extraFeatures.name + '.styleByAttribute');
style = (feature, resolution) => {
return styleService.createStyleByAttribute(feature, styleByAttribute, resolution);
};
}
else if (styleListService.getStyleList(extraFeatures.name + '.clusterStyle')) {
const clusterParam = styleListService.getStyleList(extraFeatures.name + '.clusterParam');
distance = styleListService.getStyleList(extraFeatures.name + '.distance');
style = (feature, resolution) => {
const baseStyle = styleService.createStyle(styleListService.getStyleList(extraFeatures.name + '.clusterStyle'), feature, resolution);
return styleService.createClusterStyle(feature, resolution, clusterParam, baseStyle);
};
}
else if (styleListService.getStyleList(extraFeatures.name + '.style')) {
style = (feature, resolution) => styleService.createStyle(styleListService.getStyleList(extraFeatures.name + '.style'), feature, resolution);
}
else {
style = (feature, resolution) => styleService.createStyle(styleListService.getStyleList('default.style'), feature, resolution);
}
let source;
const olFeatures = collectFeaturesFromExtraFeatures(extraFeatures);
if (styleListService.getStyleList(extraFeatures.name + '.clusterStyle')) {
const sourceOptions = {
distance,
type: 'cluster',
queryable: true
};
source = new ClusterDataSource(sourceOptions);
source.ol.source.addFeatures(olFeatures);
}
else {
const sourceOptions = {
type: 'vector',
queryable: true
};
source = new FeatureDataSource(sourceOptions);
source.ol.addFeatures(olFeatures);
}
const layer = new VectorLayer({
title: extraFeatures.name,
isIgoInternalLayer: true,
source,
style,
opacity: extraFeatures.opacity,
visible: extraFeatures.visible
});
map.layerController.add(layer);
return layer;
}
function collectFeaturesFromExtraFeatures(featureCollection) {
const format = new GeoJSON();
const features = format.readFeatures(featureCollection, {
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
});
return features;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbXBvcnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1pbXBvcnQtZXhwb3J0L3NoYXJlZC9jb250ZXh0LWltcG9ydC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLGlCQUFpQixFQU9qQixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMzQixNQUFNLFdBQVcsQ0FBQztBQUduQixPQUFPLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQVN4QyxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVUsRUFDVixPQUF3QixFQUN4QixjQUE4QixFQUM5QixjQUE4QjtJQUU5QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JDLDBCQUEwQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNqRCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJELHVCQUF1QixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFL0QsY0FBYyxDQUFDLE9BQU8sQ0FDcEIscURBQXFELEVBQ3JELHNEQUFzRCxFQUN0RCxTQUFTLEVBQ1Q7UUFDRSxLQUFLLEVBQUUsWUFBWTtLQUNwQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxJQUFVLEVBQ1YsS0FBWSxFQUNaLGNBQThCLEVBQzlCLE1BQWU7SUFFZixNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5QixNQUFNLFVBQVUsR0FBRztRQUNqQixjQUFjLEVBQUUs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O0lBQ0gsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxnQ0FBZ0MsQ0FDdkMsaUJBQWdDO0lBRWhDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtRQUN0RCxjQUFjLEVBQUUsV0FBVztRQUMzQixpQkFBaUIsRUFBRSxXQUFXO0tBQy9CLENBQUMsQ0FBQztJQUNILE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQge1xuICBDbHVzdGVyRGF0YVNvdXJjZSxcbiAgQ2x1c3RlckRhdGFTb3VyY2VPcHRpb25zLFxuICBDbHVzdGVyUGFyYW0sXG4gIEZlYXR1cmVEYXRhU291cmNlLFxuICBGZWF0dXJlRGF0YVNvdXJjZU9wdGlvbnMsXG4gIElnb01hcCxcbiAgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMsXG4gIFN0eWxlQnlBdHRyaWJ1dGUsXG4gIFN0eWxlTGlzdFNlcnZpY2UsXG4gIFN0eWxlU2VydmljZSxcbiAgVmVjdG9yTGF5ZXIsXG4gIGZlYXR1cmVSYW5kb21TdHlsZSxcbiAgZmVhdHVyZVJhbmRvbVN0eWxlRnVuY3Rpb25cbn0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIERldGFpbGVkQ29udGV4dCxcbiAgRXh0cmFGZWF0dXJlc1xufSBmcm9tICcuLi8uLi9jb250ZXh0LW1hbmFnZXIvc2hhcmVkL2NvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9jb250ZXh0LnNlcnZpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXG4gIGZpbGU6IEZpbGUsXG4gIGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCxcbiAgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2Vcbikge1xuICBpZiAoT2JqZWN0LmtleXMoY29udGV4dCkubGVuZ3RoIDw9IDApIHtcbiAgICBoYW5kbGVOb3RoaW5nVG9JbXBvcnRFcnJvcihmaWxlLCBtZXNzYWdlU2VydmljZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGV4dFRpdGxlID0gY29tcHV0ZUxheWVyVGl0bGVGcm9tRmlsZShmaWxlKTtcblxuICBhZGRDb250ZXh0VG9Db250ZXh0TGlzdChjb250ZXh0LCBjb250ZXh0VGl0bGUsIGNvbnRleHRTZXJ2aWNlKTtcblxuICBtZXNzYWdlU2VydmljZS5zdWNjZXNzKFxuICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmltcG9ydC5zdWNjZXNzLnRleHQnLFxuICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmltcG9ydC5zdWNjZXNzLnRpdGxlJyxcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgdmFsdWU6IGNvbnRleHRUaXRsZVxuICAgIH1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUZpbGVJbXBvcnRFcnJvcihcbiAgZmlsZTogRmlsZSxcbiAgZXJyb3I6IEVycm9yLFxuICBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gIHNpemVNYj86IG51bWJlclxuKSB7XG4gIHNpemVNYiA9IHNpemVNYiA/IHNpemVNYiA6IDMwO1xuICBjb25zdCBlcnJNYXBwaW5nID0ge1xuICAgICdJbnZhbGlkIGZpbGUnOiBoYW5kbGVJbnZhbGlkRmlsZUltcG9ydEVycm9yLFxuICAgICdGaWxlIGlzIHRvbyBsYXJnZSc6IGhhbmRsZVNpemVGaWxlSW1wb3J0RXJyb3IsXG4gICAgJ0ZhaWxlZCB0byByZWFkIGZpbGUnOiBoYW5kbGVVbnJlYWRibGVGaWxlSW1wb3J0RXJyb3JcbiAgfTtcbiAgZXJyTWFwcGluZ1tlcnJvci5tZXNzYWdlXShmaWxlLCBlcnJvciwgbWVzc2FnZVNlcnZpY2UsIHNpemVNYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVJbnZhbGlkRmlsZUltcG9ydEVycm9yKFxuICBmaWxlOiBGaWxlLFxuICBlcnJvcjogRXJyb3IsXG4gIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZVxuKSB7XG4gIG1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmltcG9ydC5pbnZhbGlkLnRleHQnLFxuICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmltcG9ydC5pbnZhbGlkLnRpdGxlJyxcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgdmFsdWU6IGZpbGUubmFtZSxcbiAgICAgIG1pbWVUeXBlOiBmaWxlLnR5cGVcbiAgICB9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTaXplRmlsZUltcG9ydEVycm9yKFxuICBmaWxlOiBGaWxlLFxuICBlcnJvcjogRXJyb3IsXG4gIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgc2l6ZU1iOiBudW1iZXJcbikge1xuICBtZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAnaWdvLmNvbnRleHQuY29udGV4dEltcG9ydEV4cG9ydC5pbXBvcnQudG9vTGFyZ2UudGV4dCcsXG4gICAgJ2lnby5jb250ZXh0LmNvbnRleHRJbXBvcnRFeHBvcnQuaW1wb3J0LnRvb0xhcmdlLnRpdGxlJyxcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgdmFsdWU6IGZpbGUubmFtZSxcbiAgICAgIHNpemU6IHNpemVNYlxuICAgIH1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVVucmVhZGJsZUZpbGVJbXBvcnRFcnJvcihcbiAgZmlsZTogRmlsZSxcbiAgZXJyb3I6IEVycm9yLFxuICBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2Vcbikge1xuICBtZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAnaWdvLmNvbnRleHQuY29udGV4dEltcG9ydEV4cG9ydC5pbXBvcnQudW5yZWFkYWJsZS50ZXh0JyxcbiAgICAnaWdvLmNvbnRleHQuY29udGV4dEltcG9ydEV4cG9ydC5pbXBvcnQudW5yZWFkYWJsZS50aXRsZScsXG4gICAgdW5kZWZpbmVkLFxuICAgIHtcbiAgICAgIHZhbHVlOiBmaWxlLm5hbWVcbiAgICB9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVOb3RoaW5nVG9JbXBvcnRFcnJvcihcbiAgZmlsZTogRmlsZSxcbiAgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXG4pIHtcbiAgbWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgJ2lnby5jb250ZXh0LmNvbnRleHRJbXBvcnRFeHBvcnQuaW1wb3J0LmVtcHR5LnRleHQnLFxuICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmltcG9ydC5lbXB0eS50aXRsZScsXG4gICAgdW5kZWZpbmVkLFxuICAgIHsgdmFsdWU6IGZpbGUubmFtZSB9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRDb250ZXh0VG9Db250ZXh0TGlzdChcbiAgY29udGV4dDogRGV0YWlsZWRDb250ZXh0LFxuICBjb250ZXh0VGl0bGU6IHN0cmluZyxcbiAgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlXG4pIHtcbiAgY29udGV4dC50aXRsZSA9IGNvbnRleHRUaXRsZTtcbiAgY29udGV4dC5pbXBvcnRlZCA9IHRydWU7XG4gIGNvbnRleHRTZXJ2aWNlLmNvbnRleHRzJC52YWx1ZS5vdXJzLnVuc2hpZnQoY29udGV4dCk7XG4gIGNvbnRleHRTZXJ2aWNlLmNvbnRleHRzJC5uZXh0KGNvbnRleHRTZXJ2aWNlLmNvbnRleHRzJC52YWx1ZSk7XG4gIGNvbnRleHRTZXJ2aWNlLmltcG9ydGVkQ29udGV4dC51bnNoaWZ0KGNvbnRleHQpO1xuICBjb250ZXh0U2VydmljZS5sb2FkQ29udGV4dChjb250ZXh0LnVyaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGU6IEZpbGUpOiBzdHJpbmcge1xuICByZXR1cm4gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVMYXllclRpdGxlRnJvbUZpbGUoZmlsZTogRmlsZSk6IHN0cmluZyB7XG4gIHJldHVybiBmaWxlLm5hbWUuc3Vic3RyKDAsIGZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEltcG9ydGVkRmVhdHVyZXNUb01hcChcbiAgZXh0cmFGZWF0dXJlczogRXh0cmFGZWF0dXJlcyxcbiAgbWFwOiBJZ29NYXBcbik6IFZlY3RvckxheWVyIHtcbiAgY29uc3Qgc291cmNlT3B0aW9uczogRmVhdHVyZURhdGFTb3VyY2VPcHRpb25zICYgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgPSB7XG4gICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgcXVlcnlhYmxlOiB0cnVlXG4gIH07XG5cbiAgY29uc3Qgb2xGZWF0dXJlcyA9IGNvbGxlY3RGZWF0dXJlc0Zyb21FeHRyYUZlYXR1cmVzKGV4dHJhRmVhdHVyZXMpO1xuICBjb25zdCBzb3VyY2UgPSBuZXcgRmVhdHVyZURhdGFTb3VyY2Uoc291cmNlT3B0aW9ucyk7XG4gIHNvdXJjZS5vbC5hZGRGZWF0dXJlcyhvbEZlYXR1cmVzKTtcblxuICBsZXQgcmFuZG9tU3R5bGU7XG4gIGxldCBlZGl0YWJsZSA9IGZhbHNlO1xuICBjb25zdCBmZWF0dXJlS2V5cyA9IG9sRmVhdHVyZXNbMF0/LmdldEtleXMoKSA/PyBbXTtcbiAgaWYgKGZlYXR1cmVLZXlzLmluY2x1ZGVzKCdfc3R5bGUnKSB8fCBmZWF0dXJlS2V5cy5pbmNsdWRlcygnX21hcFRpdGxlJykpIHtcbiAgICByYW5kb21TdHlsZSA9IGZlYXR1cmVSYW5kb21TdHlsZUZ1bmN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgcmFuZG9tU3R5bGUgPSBmZWF0dXJlUmFuZG9tU3R5bGUoKTtcbiAgICBlZGl0YWJsZSA9IHRydWU7XG4gIH1cbiAgY29uc3QgbGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgIHRpdGxlOiBleHRyYUZlYXR1cmVzLm5hbWUsXG4gICAgaXNJZ29JbnRlcm5hbExheWVyOiB0cnVlLFxuICAgIHNvdXJjZSxcbiAgICBpZ29TdHlsZTogeyBlZGl0YWJsZSB9LFxuICAgIHN0eWxlOiByYW5kb21TdHlsZSxcbiAgICB2aXNpYmxlOiBleHRyYUZlYXR1cmVzLnZpc2libGUsXG4gICAgb3BhY2l0eTogZXh0cmFGZWF0dXJlcy5vcGFjaXR5XG4gIH0pO1xuICBtYXAubGF5ZXJDb250cm9sbGVyLmFkZChsYXllcik7XG5cbiAgcmV0dXJuIGxheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkSW1wb3J0ZWRGZWF0dXJlc1N0eWxlZFRvTWFwKFxuICBleHRyYUZlYXR1cmVzOiBFeHRyYUZlYXR1cmVzLFxuICBtYXA6IElnb01hcCxcbiAgc3R5bGVMaXN0U2VydmljZTogU3R5bGVMaXN0U2VydmljZSxcbiAgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2Vcbik6IFZlY3RvckxheWVyIHtcbiAgbGV0IHN0eWxlO1xuICBsZXQgZGlzdGFuY2U6IG51bWJlcjtcblxuICBpZiAoc3R5bGVMaXN0U2VydmljZS5nZXRTdHlsZUxpc3QoZXh0cmFGZWF0dXJlcy5uYW1lICsgJy5zdHlsZUJ5QXR0cmlidXRlJykpIHtcbiAgICBjb25zdCBzdHlsZUJ5QXR0cmlidXRlOiBTdHlsZUJ5QXR0cmlidXRlID0gc3R5bGVMaXN0U2VydmljZS5nZXRTdHlsZUxpc3QoXG4gICAgICBleHRyYUZlYXR1cmVzLm5hbWUgKyAnLnN0eWxlQnlBdHRyaWJ1dGUnXG4gICAgKTtcblxuICAgIHN0eWxlID0gKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzdHlsZVNlcnZpY2UuY3JlYXRlU3R5bGVCeUF0dHJpYnV0ZShcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgc3R5bGVCeUF0dHJpYnV0ZSxcbiAgICAgICAgcmVzb2x1dGlvblxuICAgICAgKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKFxuICAgIHN0eWxlTGlzdFNlcnZpY2UuZ2V0U3R5bGVMaXN0KGV4dHJhRmVhdHVyZXMubmFtZSArICcuY2x1c3RlclN0eWxlJylcbiAgKSB7XG4gICAgY29uc3QgY2x1c3RlclBhcmFtOiBDbHVzdGVyUGFyYW0gPSBzdHlsZUxpc3RTZXJ2aWNlLmdldFN0eWxlTGlzdChcbiAgICAgIGV4dHJhRmVhdHVyZXMubmFtZSArICcuY2x1c3RlclBhcmFtJ1xuICAgICk7XG4gICAgZGlzdGFuY2UgPSBzdHlsZUxpc3RTZXJ2aWNlLmdldFN0eWxlTGlzdChleHRyYUZlYXR1cmVzLm5hbWUgKyAnLmRpc3RhbmNlJyk7XG5cbiAgICBzdHlsZSA9IChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBiYXNlU3R5bGUgPSBzdHlsZVNlcnZpY2UuY3JlYXRlU3R5bGUoXG4gICAgICAgIHN0eWxlTGlzdFNlcnZpY2UuZ2V0U3R5bGVMaXN0KGV4dHJhRmVhdHVyZXMubmFtZSArICcuY2x1c3RlclN0eWxlJyksXG4gICAgICAgIGZlYXR1cmUsXG4gICAgICAgIHJlc29sdXRpb25cbiAgICAgICk7XG4gICAgICByZXR1cm4gc3R5bGVTZXJ2aWNlLmNyZWF0ZUNsdXN0ZXJTdHlsZShcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgY2x1c3RlclBhcmFtLFxuICAgICAgICBiYXNlU3R5bGVcbiAgICAgICk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChzdHlsZUxpc3RTZXJ2aWNlLmdldFN0eWxlTGlzdChleHRyYUZlYXR1cmVzLm5hbWUgKyAnLnN0eWxlJykpIHtcbiAgICBzdHlsZSA9IChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PlxuICAgICAgc3R5bGVTZXJ2aWNlLmNyZWF0ZVN0eWxlKFxuICAgICAgICBzdHlsZUxpc3RTZXJ2aWNlLmdldFN0eWxlTGlzdChleHRyYUZlYXR1cmVzLm5hbWUgKyAnLnN0eWxlJyksXG4gICAgICAgIGZlYXR1cmUsXG4gICAgICAgIHJlc29sdXRpb25cbiAgICAgICk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUgPSAoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT5cbiAgICAgIHN0eWxlU2VydmljZS5jcmVhdGVTdHlsZShcbiAgICAgICAgc3R5bGVMaXN0U2VydmljZS5nZXRTdHlsZUxpc3QoJ2RlZmF1bHQuc3R5bGUnKSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgcmVzb2x1dGlvblxuICAgICAgKTtcbiAgfVxuICBsZXQgc291cmNlO1xuICBjb25zdCBvbEZlYXR1cmVzID0gY29sbGVjdEZlYXR1cmVzRnJvbUV4dHJhRmVhdHVyZXMoZXh0cmFGZWF0dXJlcyk7XG4gIGlmIChzdHlsZUxpc3RTZXJ2aWNlLmdldFN0eWxlTGlzdChleHRyYUZlYXR1cmVzLm5hbWUgKyAnLmNsdXN0ZXJTdHlsZScpKSB7XG4gICAgY29uc3Qgc291cmNlT3B0aW9uczogQ2x1c3RlckRhdGFTb3VyY2VPcHRpb25zICYgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgPVxuICAgICAge1xuICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgdHlwZTogJ2NsdXN0ZXInLFxuICAgICAgICBxdWVyeWFibGU6IHRydWVcbiAgICAgIH07XG4gICAgc291cmNlID0gbmV3IENsdXN0ZXJEYXRhU291cmNlKHNvdXJjZU9wdGlvbnMpO1xuICAgIHNvdXJjZS5vbC5zb3VyY2UuYWRkRmVhdHVyZXMob2xGZWF0dXJlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc291cmNlT3B0aW9uczogRmVhdHVyZURhdGFTb3VyY2VPcHRpb25zICYgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgPVxuICAgICAge1xuICAgICAgICB0eXBlOiAndmVjdG9yJyxcbiAgICAgICAgcXVlcnlhYmxlOiB0cnVlXG4gICAgICB9O1xuICAgIHNvdXJjZSA9IG5ldyBGZWF0dXJlRGF0YVNvdXJjZShzb3VyY2VPcHRpb25zKTtcbiAgICBzb3VyY2Uub2wuYWRkRmVhdHVyZXMob2xGZWF0dXJlcyk7XG4gIH1cblxuICBjb25zdCBsYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgdGl0bGU6IGV4dHJhRmVhdHVyZXMubmFtZSxcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgc291cmNlLFxuICAgIHN0eWxlLFxuICAgIG9wYWNpdHk6IGV4dHJhRmVhdHVyZXMub3BhY2l0eSxcbiAgICB2aXNpYmxlOiBleHRyYUZlYXR1cmVzLnZpc2libGVcbiAgfSk7XG4gIG1hcC5sYXllckNvbnRyb2xsZXIuYWRkKGxheWVyKTtcblxuICByZXR1cm4gbGF5ZXI7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RGZWF0dXJlc0Zyb21FeHRyYUZlYXR1cmVzKFxuICBmZWF0dXJlQ29sbGVjdGlvbjogRXh0cmFGZWF0dXJlc1xuKTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10ge1xuICBjb25zdCBmb3JtYXQgPSBuZXcgR2VvSlNPTigpO1xuICBjb25zdCBmZWF0dXJlcyA9IGZvcm1hdC5yZWFkRmVhdHVyZXMoZmVhdHVyZUNvbGxlY3Rpb24sIHtcbiAgICBkYXRhUHJvamVjdGlvbjogJ0VQU0c6NDMyNicsXG4gICAgZmVhdHVyZVByb2plY3Rpb246ICdFUFNHOjM4NTcnXG4gIH0pO1xuICByZXR1cm4gZmVhdHVyZXM7XG59XG4iXX0=