focus-components-v3
Version:
Focus web components to build applications (based on Material Design)
215 lines (172 loc) • 20.7 kB
JavaScript
'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