UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

124 lines 19.8 kB
import { getFieldFromDataGroups } from '../../utility/get-field'; import { GroupNavigationConstants } from '../model/group-navigation-constants'; import { UserFilterConstants } from '../../filter/models/user-filter-constants'; import { FilterField } from '../../data-fields/filter-field/models/filter-field'; import { SimpleFilter } from '../../filter/models/simple-filter'; import { SearchMode } from "../../search/models/component-configuration/search-mode"; /** * Extracts the item name and item icon (if any) rom a section of the navigation item task data. * @param dataSection an array containing the data groups that correspond to a single navigation entry * @param translateService is a service to translate label name */ export function extractIconAndTitle(dataSection, translateService) { const result = { name: '' }; if (dataSection.length === 0) { throw new Error('The provided task data does not belong to a Navigation menu item task. Icon and title cannot be extracted'); } const nameField = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_TITLE_FIELD_ID_SUFFIX); if (nameField === undefined) { throw new Error('Navigation name could not be resolved'); } const locale = translateService.currentLang.split('-')[0]; result.name = locale in nameField.value.translations ? nameField.value.translations[locale] : nameField.value.defaultValue; const useIcon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_ENABLED_FIELD_ID_SUFFIX); if (useIcon !== undefined && useIcon.value) { const icon = getFieldFromDataGroups(dataSection, GroupNavigationConstants.NAVIGATION_ENTRY_ICON_FIELD_ID_SUFFIX); if (icon === undefined) { this._log.error('Navigation entry icon could not be resolved, but is enabled. Icon was ignored'); } else { result.icon = icon.value; } } return result; } /** * Based on provided parameter extracts allowed or banned roles into an Array of strings from a section of the navigation item task data. * Each item has format ROLE_IMPORT_ID:NET_IMPORT_ID * @param dataSection an array containing the data groups that correspond to a single navigation entry * @param roleFieldId ID of field containing banned or allowed role IDs * @returns an Array of string values representing role IDs */ export function extractRoles(dataSection, roleFieldId) { if (dataSection.length === 0) { throw new Error('The provided task data does not belong to a Navigation menu item task. Role entries cannot be extracted'); } const roleIds = getFieldFromDataGroups(dataSection, roleFieldId); if (roleIds === undefined) { throw new Error('Navigation entry role authorization field could not be resolved'); } return roleIds.choices.map(choice => choice.key); } /** * Extracts the data and creates a filter object from the navigation item task data. * @param dataSection an array containing the data groups that correspond to a single navigation entry */ export function extractFilterFromData(dataSection) { return extractFilterFromFilterField(extractFilterFieldFromData(dataSection)); } /** * Extracts the filter field from the navigation item task data. * @param dataSection an array containing the data groups that correspond to a single navigation entry * @returns The extracted {@link FilterField} or `undefined` if it could not be extracted. */ export function extractFilterFieldFromData(dataSection) { const filterField = getFieldFromDataGroups(dataSection, UserFilterConstants.FILTER_FIELD_ID); if (filterField === undefined || !(filterField instanceof FilterField)) { throw new Error(`Filter could not be extracted. The provided datagroups do not contain a filter field with ID '${UserFilterConstants.FILTER_FIELD_ID}'`); } return filterField; } /** * @returns a {@link SimpleFilter} containing the filter stored in the provided {@link FilterField}. * Throws an error if this is not possible. */ export function extractFilterFromFilterField(filterField) { if (filterField === undefined || !(filterField instanceof FilterField)) { throw new Error('Filter could not be resolved'); } return SimpleFilter.fromQuery({ query: filterField.value }, filterField.filterMetadata.filterType); } /** * Extracts the selected search type from enumeration field of the navigation item task data. * @returns a {@link SearchMode} containing {@link SearchMode.ADVANCED} or {@link SearchMode.FULLTEXT} or {@link undefined} * if unexpected value is found * */ export function extractSearchTypeFromData(dataSection, typeFieldId) { const typeField = getFieldFromDataGroups(dataSection, typeFieldId); if (typeField === undefined) { throw new Error('Navigation entry search type field could not be resolved'); } switch (typeField.value) { case 'fulltext': return SearchMode.FULLTEXT; case 'fulltext_advanced': return SearchMode.ADVANCED; default: return undefined; } } /** * Extracts field value from data * @returns value of extracted field * @throws Error if no field is found * */ export function extractFieldValueFromData(dataSection, fieldId) { const field = getFieldFromDataGroups(dataSection, fieldId); if (field === undefined) { throw new Error(`Field ${fieldId} could not be resolved`); } return field.value; } /** * Checks if the data groups contain view * @returns true if the data contains filter * @throws Error if filter field is not found * */ export function hasView(dataSection) { const field = getFieldFromDataGroups(dataSection, 'view_configuration_form'); if (field === undefined) { throw new Error(`Field view_configuration_form could not be resolved`); } return field.value !== null && field.value !== undefined && field.value.length > 0; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1pdGVtLXRhc2stdXRpbGl0eS1tZXRob2RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL3V0aWxpdHkvbmF2aWdhdGlvbi1pdGVtLXRhc2stdXRpbGl0eS1tZXRob2RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRTdFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFL0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBR25GOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsV0FBNkIsRUFBRSxnQkFBa0M7SUFDakcsTUFBTSxNQUFNLEdBQTZCLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyR0FBMkcsQ0FBQyxDQUFDO0tBQ2hJO0lBRUQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxFQUFFLHdCQUF3QixDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFdkgsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUM1RDtJQUVELE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMs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QUMsQ0FBQztLQUMvRTtJQUVELFFBQVEsU0FBUyxDQUFDLEtBQUssRUFBRTtRQUNyQixLQUFLLFVBQVU7WUFDWCxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDL0IsS0FBSyxtQkFBbUI7WUFDcEIsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQy9CO1lBQ0ksT0FBTyxTQUFTLENBQUE7S0FDdkI7QUFDTCxDQUFDO0FBRUQ7Ozs7S0FJSztBQUNMLE1BQU0sVUFBVSx5QkFBeUIsQ0FBSSxXQUE2QixFQUFFLE9BQWU7SUFDdkYsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7OztLQUlLO0FBQ0wsTUFBTSxVQUFVLE9BQU8sQ0FBQyxXQUE2QjtJQUNqRCxNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUM3RSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQzFFO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7R3JvdXBOYXZpZ2F0aW9uSXRlbUxhYmVsfSBmcm9tICcuLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWl0ZW0tbGFiZWwnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtnZXRGaWVsZEZyb21EYXRhR3JvdXBzfSBmcm9tICcuLi8uLi91dGlsaXR5L2dldC1maWVsZCc7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSAnLi4vbW9kZWwvZ3JvdXAtbmF2aWdhdGlvbi1jb25zdGFudHMnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7VXNlckZpbHRlckNvbnN0YW50c30gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy91c2VyLWZpbHRlci1jb25zdGFudHMnO1xuaW1wb3J0IHtGaWx0ZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsdGVyLWZpZWxkL21vZGVscy9maWx0ZXItZmllbGQnO1xuaW1wb3J0IHtTaW1wbGVGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvc2ltcGxlLWZpbHRlcic7XG5pbXBvcnQge011bHRpY2hvaWNlRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL211bHRpY2hvaWNlLWZpZWxkL21vZGVscy9tdWx0aWNob2ljZS1maWVsZCc7XG5pbXBvcnQge1NlYXJjaE1vZGV9IGZyb20gXCIuLi8uLi9zZWFyY2gvbW9kZWxzL2NvbXBvbmVudC1jb25maWd1cmF0aW9uL3NlYXJjaC1tb2RlXCI7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGl0ZW0gbmFtZSBhbmQgaXRlbSBpY29uIChpZiBhbnkpIHJvbSBhIHNlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24gaXRlbSB0YXNrIGRhdGEuXG4gKiBAcGFyYW0gZGF0YVNlY3Rpb24gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZGF0YSBncm91cHMgdGhhdCBjb3JyZXNwb25kIHRvIGEgc2luZ2xlIG5hdmlnYXRpb24gZW50cnlcbiAqIEBwYXJhbSB0cmFuc2xhdGVTZXJ2aWNlIGlzIGEgc2VydmljZSB0byB0cmFuc2xhdGUgbGFiZWwgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEljb25BbmRUaXRsZShkYXRhU2VjdGlvbjogQXJyYXk8RGF0YUdyb3VwPiwgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSk6IEdyb3VwTmF2aWdhdGlvbkl0ZW1MYWJlbCB7XG4gICAgY29uc3QgcmVzdWx0OiBHcm91cE5hdmlnYXRpb25JdGVtTGFiZWwgPSB7bmFtZTogJyd9O1xuXG4gICAgaWYgKGRhdGFTZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCB0YXNrIGRhdGEgZG9lcyBub3QgYmVsb25nIHRvIGEgTmF2aWdhdGlvbiBtZW51IGl0ZW0gdGFzay4gSWNvbiBhbmQgdGl0bGUgY2Fubm90IGJlIGV4dHJhY3RlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVGaWVsZCA9IGdldEZpZWxkRnJvbURhdGFHcm91cHMoZGF0YVNlY3Rpb24sIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5OQVZJR0FUSU9OX0VOVFJZX1RJVExFX0ZJRUxEX0lEX1NVRkZJWCk7XG5cbiAgICBpZiAobmFtZUZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYXZpZ2F0aW9uIG5hbWUgY291bGQgbm90IGJlIHJlc29sdmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxlID0gdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZy5zcGxpdCgnLScpWzBdO1xuICAgIHJlc3VsdC5uYW1lID0gbG9jYWxlIGluIG5hbWVGaWVsZC52YWx1ZS50cmFuc2xhdGlvbnMgPyBuYW1lRmllbGQudmFsdWUudHJhbnNsYXRpb25zW2xvY2FsZV0gOiBuYW1lRmllbGQudmFsdWUuZGVmYXVsdFZhbHVlO1xuXG4gICAgY29uc3QgdXNlSWNvbiA9IGdldEZpZWxkRnJvbURhdGFHcm91cHMoZGF0YVNlY3Rpb24sIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5OQVZJR0FUSU9OX0VOVFJZX0lDT05fRU5BQkxFRF9GSUVMRF9JRF9TVUZGSVgpO1xuICAgIGlmICh1c2VJY29uICE9PSB1bmRlZmluZWQgJiYgdXNlSWNvbi52YWx1ZSkge1xuICAgICAgICBjb25zdCBpY29uID0gZ2V0RmllbGRGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fRU5UUllfSUNPTl9GSUVMRF9JRF9TVUZGSVgpO1xuICAgICAgICBpZiAoaWNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ05hdmlnYXRpb24gZW50cnkgaWNvbiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQsIGJ1dCBpcyBlbmFibGVkLiBJY29uIHdhcyBpZ25vcmVkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuaWNvbiA9IGljb24udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBwcm92aWRlZCBwYXJhbWV0ZXIgZXh0cmFjdHMgYWxsb3dlZCBvciBiYW5uZWQgcm9sZXMgaW50byBhbiBBcnJheSBvZiBzdHJpbmdzIGZyb20gYSBzZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uIGl0ZW0gdGFzayBkYXRhLlxuICogRWFjaCBpdGVtIGhhcyBmb3JtYXQgUk9MRV9JTVBPUlRfSUQ6TkVUX0lNUE9SVF9JRFxuICogQHBhcmFtIGRhdGFTZWN0aW9uIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRhdGEgZ3JvdXBzIHRoYXQgY29ycmVzcG9uZCB0byBhIHNpbmdsZSBuYXZpZ2F0aW9uIGVudHJ5XG4gKiBAcGFyYW0gcm9sZUZpZWxkSWQgSUQgb2YgZmllbGQgY29udGFpbmluZyBiYW5uZWQgb3IgYWxsb3dlZCByb2xlIElEc1xuICogQHJldHVybnMgYW4gQXJyYXkgb2Ygc3RyaW5nIHZhbHVlcyByZXByZXNlbnRpbmcgcm9sZSBJRHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSb2xlcyhkYXRhU2VjdGlvbjogQXJyYXk8RGF0YUdyb3VwPiwgcm9sZUZpZWxkSWQ6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmIChkYXRhU2VjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgdGFzayBkYXRhIGRvZXMgbm90IGJlbG9uZyB0byBhIE5hdmlnYXRpb24gbWVudSBpdGVtIHRhc2suIFJvbGUgZW50cmllcyBjYW5ub3QgYmUgZXh0cmFjdGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUlkcyA9IGdldEZpZWxkRnJvbURhdGFHcm91cHMoZGF0YVNlY3Rpb24sIHJvbGVGaWVsZElkKTtcbiAgICBpZiAocm9sZUlkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTmF2aWdhdGlvbiBlbnRyeSByb2xlIGF1dGhvcml6YXRpb24gZmllbGQgY291bGQgbm90IGJlIHJlc29sdmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChyb2xlSWRzIGFzIHVua25vd24gYXMgTXVsdGljaG9pY2VGaWVsZCkuY2hvaWNlcy5tYXAoY2hvaWNlID0+IGNob2ljZS5rZXkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBkYXRhIGFuZCBjcmVhdGVzIGEgZmlsdGVyIG9iamVjdCBmcm9tIHRoZSBuYXZpZ2F0aW9uIGl0ZW0gdGFzayBkYXRhLlxuICogQHBhcmFtIGRhdGFTZWN0aW9uIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRhdGEgZ3JvdXBzIHRoYXQgY29ycmVzcG9uZCB0byBhIHNpbmdsZSBuYXZpZ2F0aW9uIGVudHJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RmlsdGVyRnJvbURhdGEoZGF0YVNlY3Rpb246IEFycmF5PERhdGFHcm91cD4pOiBGaWx0ZXIge1xuICAgIHJldHVybiBleHRyYWN0RmlsdGVyRnJvbUZpbHRlckZpZWxkKGV4dHJhY3RGaWx0ZXJGaWVsZEZyb21EYXRhKGRhdGFTZWN0aW9uKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGZpbHRlciBmaWVsZCBmcm9tIHRoZSBuYXZpZ2F0aW9uIGl0ZW0gdGFzayBkYXRhLlxuICogQHBhcmFtIGRhdGFTZWN0aW9uIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRhdGEgZ3JvdXBzIHRoYXQgY29ycmVzcG9uZCB0byBhIHNpbmdsZSBuYXZpZ2F0aW9uIGVudHJ5XG4gKiBAcmV0dXJucyBUaGUgZXh0cmFjdGVkIHtAbGluayBGaWx0ZXJGaWVsZH0gb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGV4dHJhY3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGaWx0ZXJGaWVsZEZyb21EYXRhKGRhdGFTZWN0aW9uOiBBcnJheTxEYXRhR3JvdXA+KTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpbHRlckZpZWxkID0gZ2V0RmllbGRGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgVXNlckZpbHRlckNvbnN0YW50cy5GSUxURVJfRklFTERfSUQpO1xuXG4gICAgaWYgKGZpbHRlckZpZWxkID09PSB1bmRlZmluZWQgfHwgIShmaWx0ZXJGaWVsZCBpbnN0YW5jZW9mIEZpbHRlckZpZWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbHRlciBjb3VsZCBub3QgYmUgZXh0cmFjdGVkLiBUaGUgcHJvdmlkZWQgZGF0YWdyb3VwcyBkbyBub3QgY29udGFpbiBhIGZpbHRlciBmaWVsZCB3aXRoIElEICcke1xuICAgICAgICAgICAgVXNlckZpbHRlckNvbnN0YW50cy5GSUxURVJfRklFTERfSUR9J2ApO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJGaWVsZDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyBhIHtAbGluayBTaW1wbGVGaWx0ZXJ9IGNvbnRhaW5pbmcgdGhlIGZpbHRlciBzdG9yZWQgaW4gdGhlIHByb3ZpZGVkIHtAbGluayBGaWx0ZXJGaWVsZH0uXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhpcyBpcyBub3QgcG9zc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RmlsdGVyRnJvbUZpbHRlckZpZWxkKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IEZpbHRlciB7XG4gICAgaWYgKGZpbHRlckZpZWxkID09PSB1bmRlZmluZWQgfHwgIShmaWx0ZXJGaWVsZCBpbnN0YW5jZW9mIEZpbHRlckZpZWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbHRlciBjb3VsZCBub3QgYmUgcmVzb2x2ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFNpbXBsZUZpbHRlci5mcm9tUXVlcnkoe3F1ZXJ5OiBmaWx0ZXJGaWVsZC52YWx1ZX0sIGZpbHRlckZpZWxkLmZpbHRlck1ldGFkYXRhLmZpbHRlclR5cGUpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBzZWxlY3RlZCBzZWFyY2ggdHlwZSBmcm9tIGVudW1lcmF0aW9uIGZpZWxkIG9mIHRoZSBuYXZpZ2F0aW9uIGl0ZW0gdGFzayBkYXRhLlxuICogQHJldHVybnMgYSB7QGxpbmsgU2VhcmNoTW9kZX0gY29udGFpbmluZyB7QGxpbmsgU2VhcmNoTW9kZS5BRFZBTkNFRH0gb3Ige0BsaW5rIFNlYXJjaE1vZGUuRlVMTFRFWFR9IG9yIHtAbGluayB1bmRlZmluZWR9XG4gKiBpZiB1bmV4cGVjdGVkIHZhbHVlIGlzIGZvdW5kXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTZWFyY2hUeXBlRnJvbURhdGEoZGF0YVNlY3Rpb246IEFycmF5PERhdGFHcm91cD4sIHR5cGVGaWVsZElkOiBzdHJpbmcpOiBTZWFyY2hNb2RlIHtcbiAgICBjb25zdCB0eXBlRmllbGQgPSBnZXRGaWVsZEZyb21EYXRhR3JvdXBzKGRhdGFTZWN0aW9uLCB0eXBlRmllbGRJZCk7XG4gICAgaWYgKHR5cGVGaWVsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTmF2aWdhdGlvbiBlbnRyeSBzZWFyY2ggdHlwZSBmaWVsZCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVGaWVsZC52YWx1ZSkge1xuICAgICAgICBjYXNlICdmdWxsdGV4dCc6XG4gICAgICAgICAgICByZXR1cm4gU2VhcmNoTW9kZS5GVUxMVEVYVDtcbiAgICAgICAgY2FzZSAnZnVsbHRleHRfYWR2YW5jZWQnOlxuICAgICAgICAgICAgcmV0dXJuIFNlYXJjaE1vZGUuQURWQU5DRUQ7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3RzIGZpZWxkIHZhbHVlIGZyb20gZGF0YVxuICogQHJldHVybnMgdmFsdWUgb2YgZXh0cmFjdGVkIGZpZWxkXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vIGZpZWxkIGlzIGZvdW5kXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGaWVsZFZhbHVlRnJvbURhdGE8VD4oZGF0YVNlY3Rpb246IEFycmF5PERhdGFHcm91cD4sIGZpZWxkSWQ6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0RmllbGRGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgZmllbGRJZCk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWVsZCAke2ZpZWxkSWR9IGNvdWxkIG5vdCBiZSByZXNvbHZlZGApO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBkYXRhIGdyb3VwcyBjb250YWluIHZpZXdcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGEgY29udGFpbnMgZmlsdGVyXG4gKiBAdGhyb3dzIEVycm9yIGlmIGZpbHRlciBmaWVsZCBpcyBub3QgZm91bmRcbiAqICovXG5leHBvcnQgZnVuY3Rpb24gaGFzVmlldyhkYXRhU2VjdGlvbjogQXJyYXk8RGF0YUdyb3VwPik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0RmllbGRGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgJ3ZpZXdfY29uZmlndXJhdGlvbl9mb3JtJyk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWVsZCB2aWV3X2NvbmZpZ3VyYXRpb25fZm9ybSBjb3VsZCBub3QgYmUgcmVzb2x2ZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlICE9PSBudWxsICYmIGZpZWxkLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudmFsdWUubGVuZ3RoID4gMDtcbn1cbiJdfQ==