UNPKG

focus-components-v3

Version:

Focus web components to build applications (based on Material Design)

215 lines (172 loc) 20.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next); var _lang = require('lodash/lang'); var _union = require('lodash/union'); var _union2 = _interopRequireDefault(_union); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } //dependencies var UNSELECTED_KEY = 'UNSELECTED_KEY'; /** * Parse the value. * @param {string | number} propsValue - The value given as props to read the type. * @param {string} rawValue - The raw string value. * @return {strint | number} - The parsed value. */ function _valueParser(propsValue, rawValue) { if (UNSELECTED_KEY === rawValue) { return undefined; } var type = this.props.type; return type === 'number' ? +rawValue : rawValue; } /** * Component standing for an HTML input. */ var Select = function (_PureComponent) { _inherits(Select, _PureComponent); function Select() { var _temp, _this, _ret; _classCallCheck(this, Select); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, _PureComponent.call.apply(_PureComponent, [this].concat(args))), _this), _this.getValue = function () { var _this$props = _this.props, type = _this$props.type, rawInputValue = _this$props.rawInputValue; if ((0, _lang.isNull)(rawInputValue) || (0, _lang.isUndefined)(rawInputValue) || UNSELECTED_KEY === rawInputValue) return null; return type === 'number' ? +rawInputValue : rawInputValue; }, _this._handleSelectChange = function (evt) { var _this$props2 = _this.props, onChange = _this$props2.onChange, valueParser = _this$props2.valueParser, rawInputValue = _this$props2.rawInputValue; var value = evt.target.value; return onChange(valueParser.call(_this, rawInputValue, value)); }, _temp), _possibleConstructorReturn(_this, _ret); } /** * Get the dom value of the component. * @return {object} - The unformated dom value. */ /** * Handle the change on the select, it only propagates the value. * @param {object} evt - The react DOM event. * @return {object} - The function onChange from the props, called. */ /** inheritdoc */ Select.prototype._renderOptions = function _renderOptions(_ref, defaultValue) { var hasUndefined = _ref.hasUndefined, labelKey = _ref.labelKey, isRequired = _ref.isRequired, rawInputValue = _ref.rawInputValue, _ref$values = _ref.values, values = _ref$values === undefined ? [] : _ref$values, valueKey = _ref.valueKey, isActiveProperty = _ref.isActiveProperty, unSelectedLabel = _ref.unSelectedLabel; var isRequiredAndNoValue = isRequired && ((0, _lang.isUndefined)(rawInputValue) || (0, _lang.isNull)(rawInputValue)); if (hasUndefined || isRequiredAndNoValue) { var _ref2; values = (0, _union2.default)([(_ref2 = {}, _defineProperty(_ref2, labelKey, _i18next2.default.t(unSelectedLabel)), _defineProperty(_ref2, valueKey, UNSELECTED_KEY), _ref2)], values); } return values.filter(function (v) { return (0, _lang.isUndefined)(v[isActiveProperty]) || v[isActiveProperty] === true; }) // Filter on the .map(function (val, idx) { var optVal = '' + val[valueKey]; var elementValue = val[labelKey]; var optLabel = (0, _lang.isUndefined)(elementValue) || (0, _lang.isNull)(elementValue) ? _i18next2.default.t('focus.components.input.select.noLabel') : elementValue; return _react2.default.createElement( 'option', { key: idx, value: optVal, selected: val.isDefaultValue }, optLabel ); }); }; /** * @inheritdoc * @override */ Select.prototype.render = function render() { var _props = this.props, autoFocus = _props.autoFocus, error = _props.error, multiple = _props.multiple, name = _props.name, placeholder = _props.placeholder, style = _props.style, rawInputValue = _props.rawInputValue, values = _props.values, disabled = _props.disabled, onChange = _props.onChange, size = _props.size, valid = _props.valid; var selectProps = { autoFocus: autoFocus, disabled: disabled, multiple: multiple, size: size }; return _react2.default.createElement( 'div', { 'data-focus': 'select', ref: 'select', 'data-valid': !error, style: style }, _react2.default.createElement( 'select', _extends({ name: name, onChange: this._handleSelectChange, ref: 'htmlSelect', value: rawInputValue }, selectProps), this._renderOptions(this.props) ), !valid && _react2.default.createElement( 'div', { className: 'label-error', ref: 'error' }, error ) ); }; return Select; }(_react.PureComponent); //Static props. Select.displayName = 'Select'; Select.propTypes = { disabled: _react.PropTypes.bool, defaultValue: _react.PropTypes.object, error: _react.PropTypes.string, hasUndefined: _react.PropTypes.bool, isActiveProperty: _react.PropTypes.string, isRequired: _react.PropTypes.bool, labelKey: _react.PropTypes.string, multiple: _react.PropTypes.bool, name: _react.PropTypes.string.isRequired, onChange: _react.PropTypes.func.isRequired, placeholder: _react.PropTypes.string, unSelectedLabel: _react.PropTypes.string, rawInputValue: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number]), valid: _react.PropTypes.bool, valueKey: _react.PropTypes.string, values: _react.PropTypes.array.isRequired }; Select.defaultProps = { disabled: false, error: 'focus.components.input.select.error.default', hasUndefined: true, isActiveProperty: 'isActive', isRequired: false, labelKey: 'label', multiple: false, unSelectedLabel: 'select.unSelected', valid: true, values: [], valueKey: 'code', valueParser: _valueParser }; exports.default = Select; module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIlVOU0VMRUNURURfS0VZIiwiX3ZhbHVlUGFyc2VyIiwicHJvcHNWYWx1ZSIsInJhd1ZhbHVlIiwidW5kZWZpbmVkIiwidHlwZSIsInByb3BzIiwiU2VsZWN0IiwiZ2V0VmFsdWUiLCJyYXdJbnB1dFZhbHVlIiwiX2hhbmRsZVNlbGVjdENoYW5nZSIsImV2dCIsIm9uQ2hhbmdlIiwidmFsdWVQYXJzZXIiLCJ2YWx1ZSIsInRhcmdldCIsImNhbGwiLCJfcmVuZGVyT3B0aW9ucyIsImRlZmF1bHRWYWx1ZSIsImhhc1VuZGVmaW5lZCIsImxhYmVsS2V5IiwiaXNSZXF1aXJlZCIsInZhbHVlcyIsInZhbHVlS2V5IiwiaXNBY3RpdmVQcm9wZXJ0eSIsInVuU2VsZWN0ZWRMYWJlbCIsImlzUmVxdWlyZWRBbmROb1ZhbHVlIiwidCIsImZpbHRlciIsInYiLCJtYXAiLCJ2YWwiLCJpZHgiLCJvcHRWYWwiLCJlbGVtZW50VmFsdWUiLCJvcHRMYWJlbCIsImlzRGVmYXVsdFZhbHVlIiwicmVuZGVyIiwiYXV0b0ZvY3VzIiwiZXJyb3IiLCJtdWx0aXBsZSIsIm5hbWUiLCJwbGFjZWhvbGRlciIsInN0eWxlIiwiZGlzYWJsZWQiLCJzaXplIiwidmFsaWQiLCJzZWxlY3RQcm9wcyIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiYm9vbCIsIm9iamVjdCIsInN0cmluZyIsImZ1bmMiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJhcnJheSIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7K2VBTEE7OztBQU1BLElBQU1BLGlCQUFpQixnQkFBdkI7QUFDQTs7Ozs7O0FBTUEsU0FBU0MsWUFBVCxDQUFzQkMsVUFBdEIsRUFBa0NDLFFBQWxDLEVBQTRDO0FBQ3hDLFFBQUdILG1CQUFtQkcsUUFBdEIsRUFBZ0M7QUFDNUIsZUFBT0MsU0FBUDtB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VDtBQUtmMUIsc0JBQWtCLGlCQUFVNEIsTUFMYjtBQU1mL0IsZ0JBQVksaUJBQVU2QixJQU5QO0FBT2Y5QixjQUFVLGlCQUFVZ0MsTUFQTDtBQVFmWixjQUFVLGlCQUFVVSxJQVJMO0FBU2ZULFVBQU0saUJBQVVXLE1BQVYsQ0FBaUIvQixVQVRSO0FBVWZULGNBQVUsaUJBQVV5QyxJQUFWLENBQWVoQyxVQVZWO0FBV2ZxQixpQkFBYSxpQkFBVVUsTUFYUjtBQVlmM0IscUJBQWlCLGlCQUFVMkIsTUFaWjtBQWFmM0MsbUJBQWUsaUJBQVU2QyxTQUFWLENBQW9CLENBQy9CLGlCQUFVRixNQURxQixFQUUvQixpQkFBVUcsTUFGcUIsQ0FBcEIsQ0FiQTtBQWlCZlQsV0FBTyxpQkFBVUksSUFqQkY7QUFrQmYzQixjQUFVLGlCQUFVNkIsTUFsQkw7QUFtQmY5QixZQUFRLGlCQUFVa0MsS0FBVixDQUFnQm5DO0FBbkJULENBQW5CO0FBcUJBZCxPQUFPa0QsWUFBUCxHQUFzQjtBQUNsQmIsY0FBVSxLQURRO0FBRWxCTCxXQUFPLDZDQUZXO0FBR2xCcEIsa0JBQWMsSUFISTtBQUlsQkssc0JBQWtCLFVBSkE7QUFLbEJILGdCQUFZLEtBTE07QUFNbEJELGNBQVUsT0FOUTtBQU9sQm9CLGNBQVUsS0FQUTtBQVFsQmYscUJBQWlCLG1CQVJDO0FBU2xCcUIsV0FBTyxJQVRXO0FBVWxCeEIsWUFBUSxFQVZVO0FBV2xCQyxjQUFVLE1BWFE7QUFZbEJWLGlCQUFhWjtBQVpLLENBQXRCO2tCQWNlTSxNIiwiZmlsZSI6ImZyLUZSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9kZXBlbmRlbmNpZXNcclxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzLCBQdXJlQ29tcG9uZW50fSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xyXG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcclxuaW1wb3J0IHtpc1VuZGVmaW5lZCwgaXNOdWxsLCBpc051bWJlcn0gZnJvbSAnbG9kYXNoL2xhbmcnO1xyXG5pbXBvcnQgdW5pb24gZnJvbSAnbG9kYXNoL3VuaW9uJztcclxuY29uc3QgVU5TRUxFQ1RFRF9LRVkgPSAnVU5TRUxFQ1RFRF9LRVknO1xyXG4vKipcclxuKiBQYXJzZSB0aGUgdmFsdWUuXHJcbiogQHBhcmFtICB7c3RyaW5nIHwgbnVtYmVyfSBwcm9wc1ZhbHVlIC0gVGhlIHZhbHVlIGdpdmVuIGFzIHByb3BzIHRvIHJlYWQgdGhlIHR5cGUuXHJcbiogQHBhcmFtICB7c3RyaW5nfSByYXdWYWx1ZSAgIC0gVGhlIHJhdyBzdHJpbmcgdmFsdWUuXHJcbiogQHJldHVybiB7c3RyaW50IHwgbnVtYmVyfSAgLSBUaGUgcGFyc2VkIHZhbHVlLlxyXG4qL1xyXG5mdW5jdGlvbiBfdmFsdWVQYXJzZXIocHJvcHNWYWx1ZSwgcmF3VmFsdWUpIHtcclxuICAgIGlmKFVOU0VMRUNURURfS0VZID09PSByYXdWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7dHlwZX0gPSB0aGlzLnByb3BzO1xyXG4gICAgcmV0dXJuIHR5cGUgPT09ICdudW1iZXInID8gK3Jhd1ZhbHVlIDogcmF3VmFsdWU7XHJcbn1cclxuXHJcblxyXG4vKipcclxuKiBDb21wb25lbnQgc3RhbmRpbmcgZm9yIGFuIEhUTUwgaW5wdXQuXHJcbiovXHJcbmNsYXNzIFNlbGVjdCBleHRlbmRzIFB1cmVDb21wb25lbnQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXQgdGhlIGRvbSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAgKiBAcmV0dXJuIHtvYmplY3R9IC0gVGhlIHVuZm9ybWF0ZWQgZG9tIHZhbHVlLlxyXG4gICAgKi9cclxuICAgIGdldFZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHt0eXBlLCByYXdJbnB1dFZhbHVlfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgaWYgKGlzTnVsbChyYXdJbnB1dFZhbHVlKSB8fCBpc1VuZGVmaW5lZChyYXdJbnB1dFZhbHVlKSB8fCBVTlNFTEVDVEVEX0tFWSA9PT0gcmF3SW5wdXRWYWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdudW1iZXInID8gK3Jhd0lucHV0VmFsdWUgOiByYXdJbnB1dFZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICogSGFuZGxlIHRoZSBjaGFuZ2Ugb24gdGhlIHNlbGVjdCwgaXQgb25seSBwcm9wYWdhdGVzIHRoZSB2YWx1ZS5cclxuICAgICogQHBhcmFtICB7b2JqZWN0fSBldnQgLSBUaGUgcmVhY3QgRE9NIGV2ZW50LlxyXG4gICAgKiBAcmV0dXJuIHtvYmplY3R9IC0gVGhlIGZ1bmN0aW9uIG9uQ2hhbmdlIGZyb20gdGhlIHByb3BzLCBjYWxsZWQuXHJcbiAgICAqL1xyXG4gICAgX2hhbmRsZVNlbGVjdENoYW5nZSA9IChldnQpID0+IHtcclxuICAgICAgICBjb25zdCB7b25DaGFuZ2UsIHZhbHVlUGFyc2VyLCByYXdJbnB1dFZhbHVlfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIG9uQ2hhbmdlKHZhbHVlUGFyc2VyLmNhbGwodGhpcywgcmF3SW5wdXRWYWx1ZSwgdmFsdWUpKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIGluaGVyaXRkb2MgKi9cclxuICAgIF9yZW5kZXJPcHRpb25zKHtoYXNVbmRlZmluZWQsIGxhYmVsS2V5LCBpc1JlcXVpcmVkLCByYXdJbnB1dFZhbHVlLCB2YWx1ZXMgPSBbXSwgdmFsdWVLZXksIGlzQWN0aXZlUHJvcGVydHksIHVuU2VsZWN0ZWRMYWJlbH0sIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUmVxdWlyZWRBbmROb1ZhbHVlID0gaXNSZXF1aXJlZCAmJiAoaXNVbmRlZmluZWQocmF3SW5wdXRWYWx1ZSkgfHwgaXNOdWxsKHJhd0lucHV0VmFsdWUpKTtcclxuICAgICAgICBpZihoYXNVbmRlZmluZWQgfHwgaXNSZXF1aXJlZEFuZE5vVmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVzID0gdW5pb24oXHJcbiAgICAgICAgICAgICAgICBbe1tsYWJlbEtleV06IGkxOG5leHQudCh1blNlbGVjdGVkTGFiZWwpLCBbdmFsdWVLZXldOiBVTlNFTEVDVEVEX0tFWX1dLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZXNcclxuICAgICAgICAuZmlsdGVyKHYgPT4gaXNVbmRlZmluZWQodltpc0FjdGl2ZVByb3BlcnR5XSkgfHwgdltpc0FjdGl2ZVByb3BlcnR5XSA9PT0gdHJ1ZSkgLy8gRmlsdGVyIG9uIHRoZVxyXG4gICAgICAgIC5tYXAoKHZhbCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdFZhbCA9IGAke3ZhbFt2YWx1ZUtleV19YDtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gdmFsW2xhYmVsS2V5XTtcclxuICAgICAgICAgICAgY29uc3Qgb3B0TGFiZWwgPSBpc1VuZGVmaW5lZChlbGVtZW50VmFsdWUpIHx8IGlzTnVsbChlbGVtZW50VmFsdWUpID8gaTE4bmV4dC50KCdmb2N1cy5jb21wb25lbnRzLmlucHV0LnNlbGVjdC5ub0xhYmVsJykgOiBlbGVtZW50VmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiAoPG9wdGlvbiBrZXk9e2lkeH0gdmFsdWU9e29wdFZhbH0gc2VsZWN0ZWQ9e3ZhbC5pc0RlZmF1bHRWYWx1ZX0+e29wdExhYmVsfTwvb3B0aW9uPik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBpbmhlcml0ZG9jXHJcbiAgICAqIEBvdmVycmlkZVxyXG4gICAgKi9cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7IGF1dG9Gb2N1cywgZXJyb3IsIG11bHRpcGxlLCBuYW1lLCBwbGFjZWhvbGRlciwgc3R5bGUsIHJhd0lucHV0VmFsdWUsIHZhbHVlcywgZGlzYWJsZWQsIG9uQ2hhbmdlLCBzaXplLCB2YWxpZCB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBzZWxlY3RQcm9wcyA9IHsgYXV0b0ZvY3VzLCBkaXNhYmxlZCwgbXVsdGlwbGUsIHNpemUgfTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtZm9jdXM9J3NlbGVjdCcgcmVmPSdzZWxlY3QnIGRhdGEtdmFsaWQ9eyFlcnJvcn0gc3R5bGU9e3N0eWxlfT5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT17bmFtZX0gb25DaGFuZ2U9e3RoaXMuX2hhbmRsZVNlbGVjdENoYW5nZX0gcmVmPSdodG1sU2VsZWN0JyB2YWx1ZT17cmF3SW5wdXRWYWx1ZX0gey4uLnNlbGVjdFByb3BzfT5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyT3B0aW9ucyh0aGlzLnByb3BzKX1cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgeyF2YWxpZCAmJiA8ZGl2IGNsYXNzTmFtZT0nbGFiZWwtZXJyb3InIHJlZj0nZXJyb3InPntlcnJvcn08L2Rpdj59XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vU3RhdGljIHByb3BzLlxyXG5TZWxlY3QuZGlzcGxheU5hbWUgPSAnU2VsZWN0JztcclxuU2VsZWN0LnByb3BUeXBlcyA9IHtcclxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcclxuICAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9iamVjdCxcclxuICAgIGVycm9yOiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgaGFzVW5kZWZpbmVkOiBQcm9wVHlwZXMuYm9vbCxcclxuICAgIGlzQWN0aXZlUHJvcGVydHk6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICBpc1JlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcclxuICAgIGxhYmVsS2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxyXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxyXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXHJcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIHVuU2VsZWN0ZWRMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIHJhd0lucHV0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xyXG4gICAgICAgIFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICAgICAgUHJvcFR5cGVzLm51bWJlclxyXG4gICAgXSksXHJcbiAgICB2YWxpZDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgICB2YWx1ZUtleTogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIHZhbHVlczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWRcclxufTtcclxuU2VsZWN0LmRlZmF1bHRQcm9wcyA9IHtcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgIGVycm9yOiAnZm9jdXMuY29tcG9uZW50cy5pbnB1dC5zZWxlY3QuZXJyb3IuZGVmYXVsdCcsXHJcbiAgICBoYXNVbmRlZmluZWQ6IHRydWUsXHJcbiAgICBpc0FjdGl2ZVByb3BlcnR5OiAnaXNBY3RpdmUnLFxyXG4gICAgaXNSZXF1aXJlZDogZmFsc2UsXHJcbiAgICBsYWJlbEtleTogJ2xhYmVsJyxcclxuICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgIHVuU2VsZWN0ZWRMYWJlbDogJ3NlbGVjdC51blNlbGVjdGVkJyxcclxuICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgdmFsdWVzOiBbXSxcclxuICAgIHZhbHVlS2V5OiAnY29kZScsXHJcbiAgICB2YWx1ZVBhcnNlcjogX3ZhbHVlUGFyc2VyXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcclxuIl19