rr-table
Version:
Responsive and customizable React Table
282 lines (222 loc) • 28.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _v = _interopRequireDefault(require("uuid/v4"));
var _utils = require("../../utils");
var _Row = _interopRequireDefault(require("../Row"));
var _Head = _interopRequireDefault(require("../Head"));
var _EmptyDataRow = _interopRequireDefault(require("../defaults/EmptyDataRow"));
require("../../config/styles/default.css");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
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 _templateObject() {
var data = _taggedTemplateLiteral(["\n width: 100%;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
/** Styles */
var TableWrapper = _styledComponents.default.div(_templateObject());
/** Component */
var Table = function Table(_ref) {
var breakpoints = _ref.breakpoints,
cellPadding = _ref.cellPadding,
center = _ref.center,
colWidths = _ref.colWidths,
colored = _ref.colored,
emptyCellContent = _ref.emptyCellContent,
emptyList = _ref.emptyList,
fontSize = _ref.fontSize,
head = _ref.head,
headCell = _ref.headCell,
headHeight = _ref.headHeight,
isLoading = _ref.isLoading,
keys = _ref.keys,
lineClamp = _ref.lineClamp,
lineHeight = _ref.lineHeight,
list = _ref.list,
Loader = _ref.loader,
onRowClick = _ref.onRowClick,
onSort = _ref.onSort,
priorities = _ref.priorities,
row = _ref.row,
rowColor = _ref.rowColor,
rowHeight = _ref.rowHeight,
selectedRowId = _ref.selectedRowId,
separator = _ref.separator,
sort = _ref.sort,
styles = _ref.styles,
textColor = _ref.textColor,
titles = _ref.titles;
/** Head Component */
var HeadComponent = (0, _utils.defineComponentAsFunction)(head, _Head.default);
var propsPassedToHeadComponent = {
breakpoints: breakpoints,
cellPadding: cellPadding,
center: center,
colWidths: colWidths,
headCell: headCell,
headHeight: headHeight,
onSort: onSort,
priorities: priorities,
sortingState: sort,
textColor: textColor,
titles: titles
};
/** Row Component */
var renderRow = function renderRow() {
if (isLoading && Loader) {
return _react.default.createElement(Loader, null);
}
if (!list || list.length === 0) {
var rowContent = _react.default.createElement(_EmptyDataRow.default, null, "Pas de donn\xE9es disponibles");
if (typeof emptyList === 'function') {
rowContent = emptyList();
} else if (_react.default.isValidElement(emptyList)) {
rowContent = emptyList;
} else if (typeof emptyList === 'string') {
rowContent = _react.default.createElement(_EmptyDataRow.default, null, emptyList);
}
return _react.default.createElement(_Row.default, {
id: "no-data",
onClick: null
}, rowContent);
}
return list.map(function (data, index) {
var id = data.id || (0, _v.default)();
var items = (0, _utils.selectItems)({
data: data,
keys: keys,
separator: separator
});
var rowProps = {
data: data,
id: id,
breakpoints: breakpoints,
cellPadding: cellPadding,
center: center,
colWidths: colWidths,
colored: (0, _utils.setBackgroundColor)(index, colored),
emptyCellContent: emptyCellContent,
fontSize: fontSize,
onClick: onRowClick,
items: items,
key: id,
lineClamp: lineClamp,
lineHeight: lineHeight,
priorities: priorities,
rowColor: rowColor,
rowFeedback: true,
rowHeight: rowHeight,
selected: selectedRowId === id,
textColor: textColor
};
if (row) {
return row(_objectSpread({}, rowProps));
}
return _react.default.createElement(_Row.default, rowProps);
});
};
/** render */
return _react.default.createElement(TableWrapper, {
style: styles && styles.table
}, HeadComponent(propsPassedToHeadComponent), renderRow());
};
/** Props */
Table.propTypes = {
/** List of breakpoints */
breakpoints: _propTypes.default.arrayOf(_propTypes.default.number),
/** Cell Padding */
cellPadding: _propTypes.default.string,
/** Center the text in the cell */
center: _propTypes.default.bool,
/** row background color */
colored: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.shape({
color: _propTypes.default.string,
parity: _propTypes.default.oneOfType([_propTypes.default.oneOf(['even', 'odd']), _propTypes.default.number])
})]),
/** List of columns widths */
colWidths: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])),
/** Text or Component to display when cell is empty */
emptyCellContent: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]),
/** What to display when list is empty */
emptyList: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func, _propTypes.default.node]),
/** Text font-size */
fontSize: _propTypes.default.string,
/** Render Head Component */
head: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
/** Height of the Head row */
headHeight: _propTypes.default.string,
/** Render HeadCell Component */
headCell: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
/** Data is loading */
isLoading: _propTypes.default.bool,
/** Keys to display */
keys: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
display: _propTypes.default.string.isRequired,
replace: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)])
}), _propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.func])),
/** Number of lines before ellipsis */
lineClamp: _propTypes.default.number,
/** Height of a line */
lineHeight: _propTypes.default.number,
/** List of data to display */
list: _propTypes.default.arrayOf(_propTypes.default.object),
/** Component to display when data is loading */
loader: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]),
/** Custom function on row click (instead of open card) */
onRowClick: _propTypes.default.func,
/** List of priorities */
priorities: _propTypes.default.arrayOf(_propTypes.default.number),
/** Render Row Component */
row: _propTypes.default.func,
/** Colors of the row */
rowColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
default: _propTypes.default.string.isRequired,
hovered: _propTypes.default.string,
selected: _propTypes.default.string.isRequired
})]),
/** Height of the Row */
rowHeight: _propTypes.default.string,
/** Id of the selected Row */
selectedRowId: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),
/** separator to "join" list of string */
separator: _propTypes.default.string,
/** sorting function */
onSort: _propTypes.default.func,
/** sorting object */
sort: _propTypes.default.shape({
sortingKey: _propTypes.default.string,
order: _propTypes.default.oneOf(['ASC', 'DESC'])
}),
/** Custom styles */
styles: _propTypes.default.shape({
cell: _propTypes.default.object,
head: _propTypes.default.object,
headCell: _propTypes.default.object,
row: _propTypes.default.object,
table: _propTypes.default.object
}),
/** Colors of the displayed text */
textColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
default: _propTypes.default.string.isRequired,
hovered: _propTypes.default.string,
selected: _propTypes.default.string.isRequired
})]),
/** List of Titles of the columns */
titles: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
title: _propTypes.default.string.isRequired,
sortingKey: _propTypes.default.string
})]))
};
var _default = Table;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1RhYmxlL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJUYWJsZVdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJUYWJsZSIsImJyZWFrcG9pbnRzIiwiY2VsbFBhZGRpbmciLCJjZW50ZXIiLCJjb2xXaWR0aHMiLCJjb2xvcmVkIiwiZW1wdHlDZWxsQ29udGVudCIsImVtcHR5TGlzdCIsImZvbnRTaXplIiwiaGVhZCIsImhlYWRDZWxsIiwiaGVhZEhlaWdodCIsImlzTG9hZGluZyIsImtleXMiLCJsaW5lQ2xhbXAiLCJsaW5lSGVpZ2h0IiwibGlzdCIsIkxvYWRlciIsImxvYWRlciIsIm9uUm93Q2xpY2siLCJvblNvcnQiLCJwcmlvcml0aWVzIiwicm93Iiwicm93Q29sb3IiLCJyb3dIZWlnaHQiLCJzZWxlY3RlZFJvd0lkIiwic2VwYXJhdG9yIiwic29ydCIsInN0eWxlcyIsInRleHRDb2xvciIsInRpdGxlcyIsIkhlYWRDb21wb25lbnQiLCJIZWFkIiwicHJvcHNQYXNzZWRUb0hlYWRDb21wb25lbnQiLCJzb3J0aW5nU3RhdGUiLCJyZW5kZXJSb3ciLCJsZW5ndGgiLCJyb3dDb250ZW50IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsIm1hcCIsImRhdGEiLCJpbmRleCIsImlkIiwiaXRlbXMiLCJyb3dQcm9wcyIsIm9uQ2xpY2siLCJrZXkiLCJyb3dGZWVkYmFjayIsInNlbGVjdGVkIiwidGFibGUiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhcnJheU9mIiwibnVtYmVyIiwic3RyaW5nIiwiYm9vbCIsIm9uZU9mVHlwZSIsInNoYXBlIiwiY29sb3IiLCJwYXJpdHkiLCJvbmVPZiIsImZ1bmMiLCJub2RlIiwib2JqZWN0IiwiZGlzcGxheSIsImlzUmVxdWlyZWQiLCJyZXBsYWNlIiwiZGVmYXVsdCIsImhvdmVyZWQiLCJzb3J0aW5nS2V5Iiwib3JkZXIiLCJjZWxsIiwidGl0bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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QUNBcEMsRUFBQUEsTUFBTSxFQUFFc0IsbUJBQVVDLE9BQVYsQ0FDTkQsbUJBQVVLLFNBQVYsQ0FBb0IsQ0FDbEJMLG1CQUFVRyxNQURRLEVBRWxCSCxtQkFBVU0sS0FBVixDQUFnQjtBQUNkZSxJQUFBQSxLQUFLLEVBQUVyQixtQkFBVUcsTUFBVixDQUFpQlcsVUFEVjtBQUVkSSxJQUFBQSxVQUFVLEVBQUVsQixtQkFBVUc7QUFGUixHQUFoQixDQUZrQixDQUFwQixDQURNO0FBakdRLENBQWxCO2VBNEdldkQsSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgdXVpZHY0IGZyb20gJ3V1aWQvdjQnO1xuXG5pbXBvcnQgeyBzZXRCYWNrZ3JvdW5kQ29sb3IsIHNlbGVjdEl0ZW1zLCBkZWZpbmVDb21wb25lbnRBc0Z1bmN0aW9uIH0gZnJvbSAndXRpbHMnO1xuaW1wb3J0IFJvdyBmcm9tICdjb21wb25lbnRzL1Jvdyc7XG5pbXBvcnQgSGVhZCBmcm9tICdjb21wb25lbnRzL0hlYWQnO1xuaW1wb3J0IEVtcHR5RGF0YVJvdyBmcm9tICdjb21wb25lbnRzL2RlZmF1bHRzL0VtcHR5RGF0YVJvdyc7XG5pbXBvcnQgJ2NvbmZpZy9zdHlsZXMvZGVmYXVsdC5jc3MnO1xuXG4vKiogU3R5bGVzICovXG5jb25zdCBUYWJsZVdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMTAwJTtcbmA7XG5cbi8qKiBDb21wb25lbnQgKi9cbmNvbnN0IFRhYmxlID0gKHtcbiAgYnJlYWtwb2ludHMsXG4gIGNlbGxQYWRkaW5nLFxuICBjZW50ZXIsXG4gIGNvbFdpZHRocyxcbiAgY29sb3JlZCxcbiAgZW1wdHlDZWxsQ29udGVudCxcbiAgZW1wdHlMaXN0LFxuICBmb250U2l6ZSxcbiAgaGVhZCxcbiAgaGVhZENlbGwsXG4gIGhlYWRIZWlnaHQsXG4gIGlzTG9hZGluZyxcbiAga2V5cyxcbiAgbGluZUNsYW1wLFxuICBsaW5lSGVpZ2h0LFxuICBsaXN0LFxuICBsb2FkZXI6IExvYWRlcixcbiAgb25Sb3dDbGljayxcbiAgb25Tb3J0LFxuICBwcmlvcml0aWVzLFxuICByb3csXG4gIHJvd0NvbG9yLFxuICByb3dIZWlnaHQsXG4gIHNlbGVjdGVkUm93SWQsXG4gIHNlcGFyYXRvcixcbiAgc29ydCxcbiAgc3R5bGVzLFxuICB0ZXh0Q29sb3IsXG4gIHRpdGxlcyxcbn0pID0+IHtcbiAgLyoqIEhlYWQgQ29tcG9uZW50ICovXG4gIGNvbnN0IEhlYWRDb21wb25lbnQgPSBkZWZpbmVDb21wb25lbnRBc0Z1bmN0aW9uKGhlYWQsIEhlYWQpO1xuXG4gIGNvbnN0IHByb3BzUGFzc2VkVG9IZWFkQ29tcG9uZW50ID0ge1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGNlbGxQYWRkaW5nLFxuICAgIGNlbnRlcixcbiAgICBjb2xXaWR0aHMsXG4gICAgaGVhZENlbGwsXG4gICAgaGVhZEhlaWdodCxcbiAgICBvblNvcnQsXG4gICAgcHJpb3JpdGllcyxcbiAgICBzb3J0aW5nU3RhdGU6IHNvcnQsXG4gICAgdGV4dENvbG9yLFxuICAgIHRpdGxlcyxcbiAgfTtcblxuICAvKiogUm93IENvbXBvbmVudCAqL1xuICBjb25zdCByZW5kZXJSb3cgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZyAmJiBMb2FkZXIpIHtcbiAgICAgIHJldHVybiA8TG9hZGVyIC8+O1xuICAgIH1cbiAgICBpZiAoIWxpc3QgfHwgbGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCByb3dDb250ZW50ID0gPEVtcHR5RGF0YVJvdz5QYXMgZGUgZG9ubsOpZXMgZGlzcG9uaWJsZXM8L0VtcHR5RGF0YVJvdz47XG5cbiAgICAgIGlmICh0eXBlb2YgZW1wdHlMaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJvd0NvbnRlbnQgPSBlbXB0eUxpc3QoKTtcbiAgICAgIH0gZWxzZSBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoZW1wdHlMaXN0KSkge1xuICAgICAgICByb3dDb250ZW50ID0gZW1wdHlMaXN0O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW1wdHlMaXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByb3dDb250ZW50ID0gPEVtcHR5RGF0YVJvdz57ZW1wdHlMaXN0fTwvRW1wdHlEYXRhUm93PjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvdyBpZD1cIm5vLWRhdGFcIiBvbkNsaWNrPXtudWxsfT5cbiAgICAgICAgICB7cm93Q29udGVudH1cbiAgICAgICAgPC9Sb3c+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gZGF0YS5pZCB8fCB1dWlkdjQoKTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gc2VsZWN0SXRlbXMoeyBkYXRhLCBrZXlzLCBzZXBhcmF0b3IgfSk7XG5cbiAgICAgIGNvbnN0IHJvd1Byb3BzID0ge1xuICAgICAgICBkYXRhLFxuICAgICAgICBpZCxcbiAgICAgICAgYnJlYWtwb2ludHMsXG4gICAgICAgIGNlbGxQYWRkaW5nLFxuICAgICAgICBjZW50ZXIsXG4gICAgICAgIGNvbFdpZHRocyxcbiAgICAgICAgY29sb3JlZDogc2V0QmFja2dyb3VuZENvbG9yKGluZGV4LCBjb2xvcmVkKSxcbiAgICAgICAgZW1wdHlDZWxsQ29udGVudCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIG9uQ2xpY2s6IG9uUm93Q2xpY2ssXG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBrZXk6IGlkLFxuICAgICAgICBsaW5lQ2xhbXAsXG4gICAgICAgIGxpbmVIZWlnaHQsXG4gICAgICAgIHByaW9yaXRpZXMsXG4gICAgICAgIHJvd0NvbG9yLFxuICAgICAgICByb3dGZWVkYmFjazogdHJ1ZSxcbiAgICAgICAgcm93SGVpZ2h0LFxuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRSb3dJZCA9PT0gaWQsXG4gICAgICAgIHRleHRDb2xvcixcbiAgICAgIH07XG5cbiAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgcmV0dXJuIHJvdyh7IC4uLnJvd1Byb3BzIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gPFJvdyB7Li4ucm93UHJvcHN9IC8+O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKiByZW5kZXIgKi9cbiAgcmV0dXJuIChcbiAgICA8VGFibGVXcmFwcGVyIHN0eWxlPXtzdHlsZXMgJiYgc3R5bGVzLnRhYmxlfT5cbiAgICAgIHtIZWFkQ29tcG9uZW50KHByb3BzUGFzc2VkVG9IZWFkQ29tcG9uZW50KX1cbiAgICAgIHtyZW5kZXJSb3coKX1cbiAgICA8L1RhYmxlV3JhcHBlcj5cbiAgKTtcbn07XG5cbi8qKiBQcm9wcyAqL1xuVGFibGUucHJvcFR5cGVzID0ge1xuICAvKiogTGlzdCBvZiBicmVha3BvaW50cyAqL1xuICBicmVha3BvaW50czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksXG4gIC8qKiBDZWxsIFBhZGRpbmcgKi9cbiAgY2VsbFBhZGRpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBDZW50ZXIgdGhlIHRleHQgaW4gdGhlIGNlbGwgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqIHJvdyBiYWNrZ3JvdW5kIGNvbG9yICovXG4gIGNvbG9yZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5ib29sLFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHBhcml0eTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXZlbicsICdvZGQnXSksIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgICB9KSxcbiAgXSksXG4gIC8qKiBMaXN0IG9mIGNvbHVtbnMgd2lkdGhzICovXG4gIGNvbFdpZHRoczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSxcbiAgLyoqIFRleHQgb3IgQ29tcG9uZW50IHRvIGRpc3BsYXkgd2hlbiBjZWxsIGlzIGVtcHR5ICovXG4gIGVtcHR5Q2VsbENvbnRlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKiBXaGF0IHRvIGRpc3BsYXkgd2hlbiBsaXN0IGlzIGVtcHR5ICovXG4gIGVtcHR5TGlzdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5ub2RlXSksXG4gIC8qKiBUZXh0IGZvbnQtc2l6ZSAqL1xuICBmb250U2l6ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIFJlbmRlciBIZWFkIENvbXBvbmVudCAqL1xuICBoZWFkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKiogSGVpZ2h0IG9mIHRoZSBIZWFkIHJvdyAqL1xuICBoZWFkSGVpZ2h0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogUmVuZGVyIEhlYWRDZWxsIENvbXBvbmVudCAqL1xuICBoZWFkQ2VsbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqIERhdGEgaXMgbG9hZGluZyAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKiogS2V5cyB0byBkaXNwbGF5ICovXG4gIGtleXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGRpc3BsYXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgcmVwbGFjZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcbiAgICAgIH0pLFxuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICBdKSxcbiAgKSxcbiAgLyoqIE51bWJlciBvZiBsaW5lcyBiZWZvcmUgZWxsaXBzaXMgKi9cbiAgbGluZUNsYW1wOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKiogSGVpZ2h0IG9mIGEgbGluZSAqL1xuICBsaW5lSGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKiogTGlzdCBvZiBkYXRhIHRvIGRpc3BsYXkgKi9cbiAgbGlzdDogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIC8qKiBDb21wb25lbnQgdG8gZGlzcGxheSB3aGVuIGRhdGEgaXMgbG9hZGluZyAqL1xuICBsb2FkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKiogQ3VzdG9tIGZ1bmN0aW9uIG9uIHJvdyBjbGljayAoaW5zdGVhZCBvZiBvcGVuIGNhcmQpICovXG4gIG9uUm93Q2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogTGlzdCBvZiBwcmlvcml0aWVzICovXG4gIHByaW9yaXRpZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuICAvKiogUmVuZGVyIFJvdyBDb21wb25lbnQgKi9cbiAgcm93OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIENvbG9ycyBvZiB0aGUgcm93ICovXG4gIHJvd0NvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBkZWZhdWx0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBob3ZlcmVkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB9KSxcbiAgXSksXG4gIC8qKiBIZWlnaHQgb2YgdGhlIFJvdyAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBJZCBvZiB0aGUgc2VsZWN0ZWQgUm93ICovXG4gIHNlbGVjdGVkUm93SWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKiBzZXBhcmF0b3IgdG8gXCJqb2luXCIgbGlzdCBvZiBzdHJpbmcgKi9cbiAgc2VwYXJhdG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogc29ydGluZyBmdW5jdGlvbiAqL1xuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogc29ydGluZyBvYmplY3QgKi9cbiAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzb3J0aW5nS2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMub25lT2YoWydBU0MnLCAnREVTQyddKSxcbiAgfSksXG4gIC8qKiBDdXN0b20gc3R5bGVzICovXG4gIHN0eWxlczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjZWxsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGhlYWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgaGVhZENlbGw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm93OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRhYmxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICB9KSxcbiAgLyoqIENvbG9ycyBvZiB0aGUgZGlzcGxheWVkIHRleHQgKi9cbiAgdGV4dENvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBkZWZhdWx0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBob3ZlcmVkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB9KSxcbiAgXSksXG4gIC8qKiBMaXN0IG9mIFRpdGxlcyBvZiB0aGUgY29sdW1ucyAqL1xuICB0aXRsZXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIHNvcnRpbmdLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB9KSxcbiAgICBdKSxcbiAgKSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlO1xuIl19