@cognitive-class/jupyterlab-cde-plugin
Version:
Drop-in Cognos Dashboard Embedded plugin for Jupyterlab
273 lines (217 loc) • 21.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _papaparse = require('papaparse');
var _papaparse2 = _interopRequireDefault(_papaparse);
var _spin = require('antd/lib/spin');
var _spin2 = _interopRequireDefault(_spin);
var _notification = require('antd/lib/notification');
var _notification2 = _interopRequireDefault(_notification);
var _dialog = require('./dialog');
var _dialog2 = _interopRequireDefault(_dialog);
var _sourceMetaForm = require('./source-meta-form');
var _sourceMetaForm2 = _interopRequireDefault(_sourceMetaForm);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
require('antd/lib/spin/style/index.css');
require('antd/lib/notification/style/index.css');
var SourceMetaDialog = function (_PureComponent) {
(0, _inherits3.default)(SourceMetaDialog, _PureComponent);
function SourceMetaDialog() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, SourceMetaDialog);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = SourceMetaDialog.__proto__ || (0, _getPrototypeOf2.default)(SourceMetaDialog)).call.apply(_ref, [this].concat(args))), _this), _this.formRef = _react2.default.createRef(), _this.state = {
data: null,
previewData: null,
toggleAdvanceOption: false,
previewColumns: null
}, _this.handleToggle = function () {
var toggleAdvanceOption = _this.state.toggleAdvanceOption;
_this.setState({ toggleAdvanceOption: !toggleAdvanceOption });
}, _this.handleSubmit = function (e) {
e.preventDefault();
var onSave = _this.props.onSave;
var values = _this.formRef.current.state.values;
values.table.column.forEach(function (each, index) {
values.table.column[index].label = each.name;
});
window.currentDashboard.addSources([{
module: values,
name: values.table.name,
id: values.source.id
}]);
onSave();
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(SourceMetaDialog, [{
key: 'componentDidMount',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var _props, selectedFiles, username, csvUrl, onCancel, requestUrl, fileContent, sourcePlaceholder, sourceId, previewData, previewColumns;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_props = this.props, selectedFiles = _props.selectedFiles, username = _props.username, csvUrl = _props.csvUrl, onCancel = _props.onCancel;
requestUrl = csvUrl || 'https://labs-api.cognitiveclass.ai/users/' + username + '/files/' + selectedFiles[0];
_context.next = 4;
return fetch('/user-redirect/cognos/filePreview?url=' + requestUrl, { credentials: 'include' }).then(function (resp) {
return resp.text();
}).then(function (data) {
return _papaparse2.default.parse(data);
});
case 4:
fileContent = _context.sent;
if (!(fileContent.errors.length > 0)) {
_context.next = 9;
break;
}
_notification2.default.error({
message: 'File Does Not Exists'
});
onCancel();
return _context.abrupt('return');
case 9:
sourcePlaceholder = [];
sourceId = (Date.now().toString(36) + Math.random().toString(36).substr(2, 5)).toUpperCase();
// eslint-disable-next-line no-return-assign
fileContent.data[0].forEach(function (item, index) {
return sourcePlaceholder[index] = {
name: item,
datatype: 'Text',
description: '',
label: item,
usage: 'attribute',
regularAggregate: 'none',
taxonomyFamily: 'cNone'
};
});
// fileContent.data[1].forEach((item, index) => {
// // eslint-disable-next-line no-restricted-globals
// if (!isNaN(item)) {
// sourcePlaceholder[index].datatype = 'NUMERIC'
// }
// })
previewData = [];
fileContent.data.forEach(function (row, index) {
var obj = {};
obj.key = index;
obj.width = 150;
row.forEach(function (item, innerIndex) {
obj['column_' + innerIndex] = item;
});
previewData.push(obj);
});
previewColumns = fileContent.data[0].map(function (item, index) {
return {
title: 'Column ' + (index + 1),
dataIndex: 'column_' + index,
key: 'column_' + index
};
});
this.setState({
previewData: previewData,
previewColumns: previewColumns,
data: (0, _extends3.default)({}, this.state.data, {
xsd: 'https://ibm.com/daas/module/1.0/module.xsd',
source: {
id: sourceId,
srcUrl: {
sourceUrl: requestUrl,
mimeType: 'text/csv'
}
},
table: {
name: 'table_' + sourceId,
column: sourcePlaceholder
},
label: 'Module Name',
identifier: 'moduleId'
})
});
case 16:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function componentDidMount() {
return _ref2.apply(this, arguments);
}
return componentDidMount;
}()
}, {
key: 'render',
value: function render() {
var _props2 = this.props,
content = _props2.content,
onCancel = _props2.onCancel,
innerRef = _props2.innerRef;
var _state = this.state,
data = _state.data,
previewData = _state.previewData,
previewColumns = _state.previewColumns,
toggleAdvanceOption = _state.toggleAdvanceOption;
return _react2.default.createElement(
_dialog2.default,
{
innerRef: innerRef,
title: 'Edit source metadata',
onCancel: onCancel,
onSubmit: this.handleSubmit,
okText: 'Ok',
width: '60vw'
},
content,
data ? _react2.default.createElement(_sourceMetaForm2.default, {
isToggled: toggleAdvanceOption,
handleToggle: this.handleToggle,
data: data,
formRef: this.formRef,
previewColumns: previewColumns,
previewData: previewData
}) : _react2.default.createElement(
'div',
{ style: { textAlign: 'center' } },
_react2.default.createElement(_spin2.default, { size: 'large' })
)
);
}
}]);
return SourceMetaDialog;
}(_react.PureComponent);
SourceMetaDialog.displayName = 'SourceMetaDialog';
SourceMetaDialog.propTypes = {
innerRef: _propTypes2.default.func.isRequired,
onCancel: _propTypes2.default.func.isRequired,
onSave: _propTypes2.default.func.isRequired,
content: _propTypes2.default.node.isRequired
// selectedFiles: PropTypes.arrayOf(PropTypes.string).isRequired,
};
exports.default = SourceMetaDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb3VyY2UtbWFuYWdlci9zb3VyY2UtbWV0YS1kaWFsb2cuanMiXSwibmFtZXMiOlsicmVxdWlyZSIsIlNvdXJjZU1ldGFEaWFsb2ciLCJmb3JtUmVmIiwiUmVhY3QiLCJjcmVhdGVSZWYiLCJzdGF0ZSIsImRhdGEiLCJwcmV2aWV3RGF0YSIsInRvZ2dsZUFkdmFuY2VPcHRpb24iLCJwcmV2aWV3Q29sdW1ucyIsImhhbmRsZVRvZ2dsZSIsInNldFN0YXRlIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0Iiwib25TYXZlIiwicHJvcHMiLCJ2YWx1ZXMiLCJjdXJyZW50IiwidGFibGUiLCJjb2x1bW4iLCJmb3JFYWNoIiwiZWFjaCIsImluZGV4IiwibGFiZWwiLCJuYW1lIiwid2luZG93IiwiY3VycmVudERhc2hib2FyZCIsImFkZFNvdXJjZXMiLCJtb2R1bGUiLCJpZCIsInNvdXJjZSIsInNlbGVjdGVkRmlsZXMiLCJ1c2VybmFtZSIsImNzdlVybCIsIm9uQ2FuY2VsIiwicmVxdWVzdFVybCIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJ0aGVuIiwicmVzcCIsInRleHQiLCJQYXBhIiwicGFyc2UiLCJmaWxlQ29udGVudCIsImVycm9ycyIsImxlbmd0aCIsIm5vdGlmaWNhdGlvbiIsImVycm9yIiwibWVzc2FnZSIsInNvdXJjZVBsYWNlaG9sZGVyIiwic291cmNlSWQiLCJEYXRlIiwibm93IiwidG9TdHJpbmciLCJNYXRoIiwicmFuZG9tIiwic3Vic3RyIiwidG9VcHBlckNhc2UiLCJpdGVtIiwiZGF0YXR5cGUiLCJkZXNjcmlwdGlvbiIsInVzYWdlIiwicmVndWxhckFnZ3JlZ2F0ZSIsInRheG9ub215RmFtaWx5Iiwicm93Iiwib2JqIiwia2V5Iiwid2lkdGgiLCJpbm5lckluZGV4IiwicHVzaCIsIm1hcCIsInRpdGxlIiwiZGF0YUluZGV4IiwieHNkIiwic3JjVXJsIiwic291cmNlVXJsIiwibWltZVR5cGUiLCJpZGVudGlmaWVyIiwiY29udGVudCIsImlubmVyUmVmIiwidGV4dEFsaWduIiwiUHVyZUNvbXBvbmVudCIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJub2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQUEsUUFBUSwrQkFBUjtBQUNBQSxRQUFRLHVDQUFSOztJQUVxQkMsZ0I7Ozs7Ozs7Ozs7Ozs7O2dPQUNuQkMsTyxHQUFVQyxnQkFBTUMsU0FBTixFLFFBWVZDLEssR0FBUTtBQUNOQyxZQUFNLElBREE7QUFFTkMsbUJBQWEsSUFGUDtBQUdOQywyQkFBcUIsS0FIZjtBQUlOQyxzQkFBZ0I7QUFKVixLLFFBaUZSQyxZLEdBQWUsWUFBTTtBQUFBLFVBQ1hGLG1CQURXLEdBQ2EsTUFBS0gsS0FEbEIsQ0FDWEcsbUJBRFc7O0FBRW5CLFlBQUtHLFFBQUwsQ0FBYyxFQUFFSCxxQkFBcUIsQ0FBQ0EsbUJBQXhCLEVBQWQ7QUFDRCxLLFFBRURJLFksR0FBZSxVQUFDQyxDQUFELEVBQU87QUFDcEJBLFFBQUVDLGNBQUY7QUFEb0IsVUFFWkMsTUFGWSxHQUVELE1BQUtDLEtBRkosQ0FFWkQsTUFGWTtBQUFBLFVBR1pFLE1BSFksR0FHRCxNQUFLZixPQUFMLENBQWFnQixPQUFiLENBQXFCYixLQUhwQixDQUdaWSxNQUhZOztBQUlwQkEsYUFBT0UsS0FBUCxDQUFhQyxNQUFiLENBQW9CQyxPQUFwQixDQUE0QixVQUFDQyxJQUFELEVBQU9DLEtBQVAsRUFBaUI7QUFDM0NOLGVBQU9FLEtBQVAsQ0FBYUMsTUFBYixDQUFvQkcsS0FBcEIsRUFBMkJDLEtBQTNCLEdBQW1DRixLQUFLRyxJQUF4QztBQUNELE9BRkQ7QUFHQUMsYUFBT0MsZ0JBQVAsQ0FBd0JDLFVBQXhCLENBQW1DLENBQUM7QUFDbENDLGdCQUFR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RDtBQUN4QjtBQUxpQixDO2tCQUxBdEYsZ0IiLCJmaWxlIjoic291cmNlLW1ldGEtZGlhbG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBQYXBhIGZyb20gJ3BhcGFwYXJzZSdcbmltcG9ydCBTcGluIGZyb20gJ2FudGQvbGliL3NwaW4nXG5pbXBvcnQgbm90aWZpY2F0aW9uIGZyb20gJ2FudGQvbGliL25vdGlmaWNhdGlvbidcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi9kaWFsb2cnXG5pbXBvcnQgU291cmNlTWV0YUZvcm0gZnJvbSAnLi9zb3VyY2UtbWV0YS1mb3JtJ1xuXG5yZXF1aXJlKCdhbnRkL2xpYi9zcGluL3N0eWxlL2luZGV4LmNzcycpXG5yZXF1aXJlKCdhbnRkL2xpYi9ub3RpZmljYXRpb24vc3R5bGUvaW5kZXguY3NzJylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291cmNlTWV0YURpYWxvZyBleHRlbmRzIFB1cmVDb21wb25lbnQge1xuICBmb3JtUmVmID0gUmVhY3QuY3JlYXRlUmVmKClcblxuICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnU291cmNlTWV0YURpYWxvZydcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGlubmVyUmVmOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uU2F2ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIC8vIHNlbGVjdGVkRmlsZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG4gIH1cblxuICBzdGF0ZSA9IHtcbiAgICBkYXRhOiBudWxsLFxuICAgIHByZXZpZXdEYXRhOiBudWxsLFxuICAgIHRvZ2dsZUFkdmFuY2VPcHRpb246IGZhbHNlLFxuICAgIHByZXZpZXdDb2x1bW5zOiBudWxsLFxuICB9XG5cbiAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWRGaWxlcywgdXNlcm5hbWUsIGNzdlVybCwgb25DYW5jZWwsXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBjc3ZVcmwgfHwgYGh0dHBzOi8vbGFicy1hcGkuY29nbml0aXZlY2xhc3MuYWkvdXNlcnMvJHt1c2VybmFtZX0vZmlsZXMvJHtzZWxlY3RlZEZpbGVzWzBdfWBcblxuICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZmV0Y2goYC91c2VyLXJlZGlyZWN0L2NvZ25vcy9maWxlUHJldmlldz91cmw9JHtyZXF1ZXN0VXJsfWAsIHsgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyB9KS50aGVuKHJlc3AgPT4gcmVzcC50ZXh0KCkpLnRoZW4oZGF0YSA9PiBQYXBhLnBhcnNlKGRhdGEpKVxuXG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vdGlmaWNhdGlvbi5lcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6ICdGaWxlIERvZXMgTm90IEV4aXN0cycsXG4gICAgICB9KVxuICAgICAgb25DYW5jZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlUGxhY2Vob2xkZXIgPSBbXVxuICAgIGNvbnN0IHNvdXJjZUlkID0gKERhdGUubm93KCkudG9TdHJpbmcoMzYpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDUpKS50b1VwcGVyQ2FzZSgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cbiAgICBmaWxlQ29udGVudC5kYXRhWzBdLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBzb3VyY2VQbGFjZWhvbGRlcltpbmRleF0gPSB7XG4gICAgICBuYW1lOiBpdGVtLFxuICAgICAgZGF0YXR5cGU6ICdUZXh0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGxhYmVsOiBpdGVtLFxuICAgICAgdXNhZ2U6ICdhdHRyaWJ1dGUnLFxuICAgICAgcmVndWxhckFnZ3JlZ2F0ZTogJ25vbmUnLFxuICAgICAgdGF4b25vbXlGYW1pbHk6ICdjTm9uZScsXG4gICAgfSlcbiAgICAvLyBmaWxlQ29udGVudC5kYXRhWzFdLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgLy8gICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgLy8gICBpZiAoIWlzTmFOKGl0ZW0pKSB7XG4gICAgLy8gICAgIHNvdXJjZVBsYWNlaG9sZGVyW2luZGV4XS5kYXRhdHlwZSA9ICdOVU1FUklDJ1xuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgY29uc3QgcHJldmlld0RhdGEgPSBbXVxuICAgIGZpbGVDb250ZW50LmRhdGEuZm9yRWFjaCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge31cbiAgICAgIG9iai5rZXkgPSBpbmRleFxuICAgICAgb2JqLndpZHRoID0gMTUwXG4gICAgICByb3cuZm9yRWFjaCgoaXRlbSwgaW5uZXJJbmRleCkgPT4ge1xuICAgICAgICBvYmpbYGNvbHVtbl8ke2lubmVySW5kZXh9YF0gPSBpdGVtXG4gICAgICB9KVxuICAgICAgcHJldmlld0RhdGEucHVzaChvYmopXG4gICAgfSlcbiAgICBjb25zdCBwcmV2aWV3Q29sdW1ucyA9IGZpbGVDb250ZW50LmRhdGFbMF0ubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIHRpdGxlOiBgQ29sdW1uICR7aW5kZXggKyAxfWAsXG4gICAgICBkYXRhSW5kZXg6IGBjb2x1bW5fJHtpbmRleH1gLFxuICAgICAga2V5OiBgY29sdW1uXyR7aW5kZXh9YCxcbiAgICB9KSlcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpZXdEYXRhLFxuICAgICAgcHJldmlld0NvbHVtbnMsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgeHNkOiAnaHR0cHM6Ly9pYm0uY29tL2RhYXMvbW9kdWxlLzEuMC9tb2R1bGUueHNkJyxcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgaWQ6IHNvdXJjZUlkLFxuICAgICAgICAgIHNyY1VybDoge1xuICAgICAgICAgICAgc291cmNlVXJsOiByZXF1ZXN0VXJsLFxuICAgICAgICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzdicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICBuYW1lOiBgdGFibGVfJHtzb3VyY2VJZH1gLFxuICAgICAgICAgIGNvbHVtbjogc291cmNlUGxhY2Vob2xkZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsOiAnTW9kdWxlIE5hbWUnLFxuICAgICAgICBpZGVudGlmaWVyOiAnbW9kdWxlSWQnLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgdG9nZ2xlQWR2YW5jZU9wdGlvbiB9ID0gdGhpcy5zdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoeyB0b2dnbGVBZHZhbmNlT3B0aW9uOiAhdG9nZ2xlQWR2YW5jZU9wdGlvbiB9KVxuICB9XG5cbiAgaGFuZGxlU3VibWl0ID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBjb25zdCB7IG9uU2F2ZSB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHsgdmFsdWVzIH0gPSB0aGlzLmZvcm1SZWYuY3VycmVudC5zdGF0ZVxuICAgIHZhbHVlcy50YWJsZS5jb2x1bW4uZm9yRWFjaCgoZWFjaCwgaW5kZXgpID0+IHtcbiAgICAgIHZhbHVlcy50YWJsZS5jb2x1bW5baW5kZXhdLmxhYmVsID0gZWFjaC5uYW1lXG4gICAgfSlcbiAgICB3aW5kb3cuY3VycmVudERhc2hib2FyZC5hZGRTb3VyY2VzKFt7XG4gICAgICBtb2R1bGU6IHZhbHVlcyxcbiAgICAgIG5hbWU6IHZhbHVlcy50YWJsZS5uYW1lLFxuICAgICAgaWQ6IHZhbHVlcy5zb3VyY2UuaWQsXG4gICAgfV0pXG4gICAgb25TYXZlKClcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZW50LFxuICAgICAgb25DYW5jZWwsXG4gICAgICBpbm5lclJlZixcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgY29uc3Qge1xuICAgICAgZGF0YSwgcHJldmlld0RhdGEsIHByZXZpZXdDb2x1bW5zLCB0b2dnbGVBZHZhbmNlT3B0aW9uLFxuICAgIH0gPSB0aGlzLnN0YXRlXG5cbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ1xuICAgICAgICBpbm5lclJlZj17aW5uZXJSZWZ9XG4gICAgICAgIHRpdGxlPVwiRWRpdCBzb3VyY2UgbWV0YWRhdGFcIlxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgb2tUZXh0PVwiT2tcIlxuICAgICAgICB3aWR0aD1cIjYwdndcIlxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgICAge2RhdGFcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgIDxTb3VyY2VNZXRhRm9ybVxuICAgICAgICAgICAgICBpc1RvZ2dsZWQ9e3RvZ2dsZUFkdmFuY2VPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZT17dGhpcy5oYW5kbGVUb2dnbGV9XG4gICAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICAgIGZvcm1SZWY9e3RoaXMuZm9ybVJlZn1cbiAgICAgICAgICAgICAgcHJldmlld0NvbHVtbnM9e3ByZXZpZXdDb2x1bW5zfVxuICAgICAgICAgICAgICBwcmV2aWV3RGF0YT17cHJldmlld0RhdGF9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgICA6IDxkaXYgc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJyB9fT48U3BpbiBzaXplPVwibGFyZ2VcIiAvPjwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L0RpYWxvZz5cbiAgICApXG4gIH1cbn1cbiJdfQ==