Files

Return to Package Diff Home.
Brought to you by Intrinsic.

Package Diff: enzyme-adapter-react-16 @ 1.12.1 .. 1.13.2

build/detectFiberTags.js

@@ -10,6 +10,8 @@
var _reactDom2 = _interopRequireDefault(_reactDom);
+var _enzymeAdapterUtils = require('enzyme-adapter-utils');
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -50,6 +52,64 @@
return inst._reactInternalFiber.child;
}
+function getLazyFiber(LazyComponent) {
+ var container = global.document.createElement('div');
+ var inst = null;
+ // eslint-disable-next-line react/prefer-stateless-function
+
+ var Tester = function (_React$Component2) {
+ _inherits(Tester, _React$Component2);
+
+ function Tester() {
+ _classCallCheck(this, Tester);
+
+ return _possibleConstructorReturn(this, (Tester.__proto__ || Object.getPrototypeOf(Tester)).apply(this, arguments));
+ }
+
+ _createClass(Tester, [{
+ key: 'render',
+ value: function () {
+ function render() {
+ inst = this;
+ return _react2['default'].createElement(LazyComponent);
+ }
+
+ return render;
+ }()
+ }]);
+
+ return Tester;
+ }(_react2['default'].Component);
+ // eslint-disable-next-line react/prefer-stateless-function
+
+
+ var SuspenseWrapper = function (_React$Component3) {
+ _inherits(SuspenseWrapper, _React$Component3);
+
+ function SuspenseWrapper() {
+ _classCallCheck(this, SuspenseWrapper);
+
+ return _possibleConstructorReturn(this, (SuspenseWrapper.__proto__ || Object.getPrototypeOf(SuspenseWrapper)).apply(this, arguments));
+ }
+
+ _createClass(SuspenseWrapper, [{
+ key: 'render',
+ value: function () {
+ function render() {
+ return _react2['default'].createElement(_react2['default'].Suspense, { fallback: false }, _react2['default'].createElement(Tester));
+ }
+
+ return render;
+ }()
+ }]);
+
+ return SuspenseWrapper;
+ }(_react2['default'].Component);
+
+ _reactDom2['default'].render(_react2['default'].createElement(SuspenseWrapper), container);
+ return inst._reactInternalFiber.child;
+}
+
module.exports = function () {
function detectFiberTags() {
var supportsMode = typeof _react2['default'].StrictMode !== 'undefined';
@@ -57,14 +117,16 @@
var supportsForwardRef = typeof _react2['default'].forwardRef !== 'undefined';
var supportsMemo = typeof _react2['default'].memo !== 'undefined';
var supportsProfiler = typeof _react2['default'].unstable_Profiler !== 'undefined';
+ var supportsSuspense = typeof _react2['default'].Suspense !== 'undefined';
+ var supportsLazy = typeof _react2['default'].lazy !== 'undefined';
function Fn() {
return null;
}
// eslint-disable-next-line react/prefer-stateless-function
- var Cls = function (_React$Component2) {
- _inherits(Cls, _React$Component2);
+ var Cls = function (_React$Component4) {
+ _inherits(Cls, _React$Component4);
function Cls() {
_classCallCheck(this, Cls);
@@ -88,6 +150,7 @@
var Ctx = null;
var FwdRef = null;
+ var LazyComponent = null;
if (supportsContext) {
Ctx = _react2['default'].createContext();
}
@@ -98,6 +161,13 @@
return null;
});
}
+ if (supportsLazy) {
+ LazyComponent = _react2['default'].lazy(function () {
+ return (0, _enzymeAdapterUtils.fakeDynamicImport)(function () {
+ return null;
+ });
+ });
+ }
return {
HostRoot: getFiber('test')['return']['return'].tag, // Go two levels above to find the root
@@ -120,11 +190,13 @@
return onRender;
}()
- })).tag : -1
+ })).tag : -1,
+ Suspense: supportsSuspense ? getFiber(_react2['default'].createElement(_react2['default'].Suspense, { fallback: false })).tag : -1,
+ Lazy: supportsLazy ? getLazyFiber(LazyComponent).tag : -1
};
}
return detectFiberTags;
}();
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXRlY3RGaWJlclRhZ3MuanMiXSwibmFtZXMiOlsiZ2V0RmliZXIiLCJlbGVtZW50IiwiY29udGFpbmVyIiwiZ2xvYmFsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5zdCIsIlRlc3RlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUmVhY3RET00iLCJyZW5kZXIiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwiY2hpbGQiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGV0ZWN0RmliZXJUYWdzIiwic3VwcG9ydHNNb2RlIiwiU3RyaWN0TW9kZSIsInN1cHBvcnRzQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJzdXBwb3J0c0ZvcndhcmRSZWYiLCJmb3J3YXJkUmVmIiwic3VwcG9ydHNNZW1vIiwibWVtbyIsInN1cHBvcnRzUHJvZmlsZXIiLCJ1bnN0YWJsZV9Qcm9maWxlciIsIkZuIiwiQ2xzIiwiQ3R4IiwiRndkUmVmIiwicHJvcHMiLCJyZWYiLCJIb3N0Um9vdCIsInRhZyIsIkNsYXNzQ29tcG9uZW50IiwiRnJhZ21lbnQiLCJGdW5jdGlvbmFsQ29tcG9uZW50IiwiTWVtb1NGQyIsIk1lbW9DbGFzcyIsIkhvc3RQb3J0YWwiLCJjcmVhdGVQb3J0YWwiLCJIb3N0Q29tcG9uZW50IiwiSG9zdFRleHQiLCJNb2RlIiwiQ29udGV4dENvbnN1bWVyIiwiQ29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJQcm92aWRlciIsInZhbHVlIiwiRm9yd2FyZFJlZiIsIlByb2ZpbGVyIiwiaWQiLCJvblJlbmRlciJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLFNBQVNBLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQTJCO0FBQ3pCLE1BQU1DLFlBQVlDLE9BQU9DLFFBQVAsQ0FBZ0JDLGFBQWhCLENBQThCLEtBQTlCLENBQWxCO0FBQ0EsTUFBSUMsT0FBTyxJQUFYOztBQUZ5QixNQUduQkMsTUFIbUI7QUFBQTs7QUFBQTtBQUFB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QUFOO0FBQUEsT0FBeEMsQ0FBVCxFQUE4RFosR0FEakQsR0FFYixDQUFDLENBbkJBO0FBb0JMYSx1QkFBaUI1QixrQkFDYm5CLFNBQVNRLG1CQUFNSCxhQUFOLENBQW9Cd0IsSUFBSW1CLFFBQXhCLEVBQWtDLEVBQUVDLE9BQU8sSUFBVCxFQUFsQyxFQUFtRCxJQUFuRCxDQUFULEVBQW1FZixHQUR0RCxHQUViLENBQUMsQ0F0QkE7QUF1QkxnQixrQkFBWTdCLHFCQUNSckIsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0J5QixNQUFwQixDQUFULEVBQXNDSSxHQUQ5QixHQUVSLENBQUMsQ0F6QkE7QUEwQkxpQixnQkFBVTFCLG1CQUNOekIsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0JHLG1CQUFNa0IsaUJBQTFCLEVBQTZDLEVBQUUwQixJQUFJLE1BQU4sRUFBY0MsUUFBZDtBQUFBLDhCQUF5QixDQUFFOztBQUEzQjtBQUFBO0FBQUEsT0FBN0MsQ0FBVCxFQUFzRm5CLEdBRGhGLEdBRU4sQ0FBQztBQTVCQSxLQUFQO0FBOEJEOztBQXpERCxTQUEwQmxCLGVBQTFCO0FBQUEiLCJmaWxlIjoiZGV0ZWN0RmliZXJUYWdzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG5mdW5jdGlvbiBnZXRGaWJlcihlbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbGV0IGluc3QgPSBudWxsO1xuICBjbGFzcyBUZXN0ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGluc3QgPSB0aGlzO1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIFJlYWN0RE9NLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RlciksIGNvbnRhaW5lcik7XG4gIHJldHVybiBpbnN0Ll9yZWFjdEludGVybmFsRmliZXIuY2hpbGQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGV0ZWN0RmliZXJUYWdzKCkge1xuICBjb25zdCBzdXBwb3J0c01vZGUgPSB0eXBlb2YgUmVhY3QuU3RyaWN0TW9kZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIGNvbnN0IHN1cHBvcnRzQ29udGV4dCA9IHR5cGVvZiBSZWFjdC5jcmVhdGVDb250ZXh0ICE9PSAndW5kZWZpbmVkJztcbiAgY29uc3Qgc3VwcG9ydHNGb3J3YXJkUmVmID0gdHlwZW9mIFJlYWN0LmZvcndhcmRSZWYgIT09ICd1bmRlZmluZWQnO1xuICBjb25zdCBzdXBwb3J0c01lbW8gPSB0eXBlb2YgUmVhY3QubWVtbyAhPT0gJ3VuZGVmaW5lZCc7XG4gIGNvbnN0IHN1cHBvcnRzUHJvZmlsZXIgPSB0eXBlb2YgUmVhY3QudW5zdGFibGVfUHJvZmlsZXIgIT09ICd1bmRlZmluZWQnO1xuXG4gIGZ1bmN0aW9uIEZuKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG4gIGNsYXNzIENscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGxldCBDdHggPSBudWxsO1xuICBsZXQgRndkUmVmID0gbnVsbDtcbiAgaWYgKHN1cHBvcnRzQ29udGV4dCkge1xuICAgIEN0eCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbiAgfVxuICBpZiAoc3VwcG9ydHNGb3J3YXJkUmVmKSB7XG4gICAgLy8gUmVhY3Qgd2lsbCB3YXJuIGlmIHdlIGRvbid0IGhhdmUgYm90aCBhcmd1bWVudHMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgRndkUmVmID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4gbnVsbCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEhvc3RSb290OiBnZXRGaWJlcigndGVzdCcpLnJldHVybi5yZXR1cm4udGFnLCAvLyBHbyB0d28gbGV2ZWxzIGFib3ZlIHRvIGZpbmQgdGhlIHJvb3RcbiAgICBDbGFzc0NvbXBvbmVudDogZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChDbHMpKS50YWcsXG4gICAgRnJhZ21lbnQ6IGdldEZpYmVyKFtbJ25lc3RlZCddXSkudGFnLFxuICAgIEZ1bmN0aW9uYWxDb21wb25lbnQ6IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm4pKS50YWcsXG4gICAgTWVtb1NGQzogc3VwcG9ydHNNZW1vXG4gICAgICA/IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QubWVtbyhGbikpKS50YWdcbiAgICAgIDogLTEsXG4gICAgTWVtb0NsYXNzOiBzdXBwb3J0c01lbW9cbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5tZW1vKENscykpKS50YWdcbiAgICAgIDogLTEsXG4gICAgSG9zdFBvcnRhbDogZ2V0RmliZXIoUmVhY3RET00uY3JlYXRlUG9ydGFsKG51bGwsIGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkpLnRhZyxcbiAgICBIb3N0Q29tcG9uZW50OiBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KCdzcGFuJykpLnRhZyxcbiAgICBIb3N0VGV4dDogZ2V0RmliZXIoJ3RleHQnKS50YWcsXG4gICAgTW9kZTogc3VwcG9ydHNNb2RlXG4gICAgICA/IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuU3RyaWN0TW9kZSkpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBDb250ZXh0Q29uc3VtZXI6IHN1cHBvcnRzQ29udGV4dFxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEN0eC5Db25zdW1lciwgbnVsbCwgKCkgPT4gbnVsbCkpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBDb250ZXh0UHJvdmlkZXI6IHN1cHBvcnRzQ29udGV4dFxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEN0eC5Qcm92aWRlciwgeyB2YWx1ZTogbnVsbCB9LCBudWxsKSkudGFnXG4gICAgICA6IC0xLFxuICAgIEZvcndhcmRSZWY6IHN1cHBvcnRzRm9yd2FyZFJlZlxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEZ3ZFJlZikpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBQcm9maWxlcjogc3VwcG9ydHNQcm9maWxlclxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LnVuc3RhYmxlX1Byb2ZpbGVyLCB7IGlkOiAnbW9jaycsIG9uUmVuZGVyKCkge30gfSkpLnRhZ1xuICAgICAgOiAtMSxcbiAgfTtcbn07XG4iXX0=
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXRlY3RGaWJlclRhZ3MuanMiXSwibmFtZXMiOlsiZ2V0RmliZXIiLCJlbGVtZW50IiwiY29udGFpbmVyIiwiZ2xvYmFsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5zdCIsIlRlc3RlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUmVhY3RET00iLCJyZW5kZXIiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwiY2hpbGQiLCJnZXRMYXp5RmliZXIiLCJMYXp5Q29tcG9uZW50IiwiU3VzcGVuc2VXcmFwcGVyIiwiU3VzcGVuc2UiLCJmYWxsYmFjayIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZXRlY3RGaWJlclRhZ3MiLCJzdXBwb3J0c01vZGUiLCJTdHJpY3RNb2RlIiwic3VwcG9ydHNDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInN1cHBvcnRzRm9yd2FyZFJlZiIsImZvcndhcmRSZWYiLCJzdXBwb3J0c01lbW8iLCJtZW1vIiwic3VwcG9ydHNQcm9maWxlciIsInVuc3RhYmxlX1Byb2ZpbGVyIiwic3VwcG9ydHNTdXNwZW5zZSIsInN1cHBvcnRzTGF6eSIsImxhenkiLCJGbiIsIkNscyIsIkN0eCIsIkZ3ZFJlZiIsInByb3BzIiwicmVmIiwiSG9zdFJvb3QiLCJ0YWciLCJDbGFzc0NvbXBvbmVudCIsIkZyYWdtZW50IiwiRnVuY3Rpb25hbENvbXBvbmVudCIsIk1lbW9TRkMiLCJNZW1vQ2xhc3MiLCJIb3N0UG9ydGFsIiwiY3JlYXRlUG9ydGFsIiwiSG9zdENvbXBvbmVudCIsIkhvc3RUZXh0IiwiTW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnN1bWVyIiwiQ29udGV4dFByb3ZpZGVyIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIkZvcndhcmRSZWYiLCJQcm9maWxlciIsImlkIiwib25SZW5kZXIiLCJMYXp5Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7O0FBRUEsU0FBU0EsUUFBVCxDQUFrQkMsT0FB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QUFvQkcsbUJBQU1lLFVBQTFCLENBQVQsRUFBZ0RtQixHQUQ5QyxHQUVGLENBQUMsQ0FoQkE7QUFpQkxXLHVCQUFpQjdCLGtCQUNieEIsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0JnQyxJQUFJaUIsUUFBeEIsRUFBa0MsSUFBbEMsRUFBd0M7QUFBQSxlQUFNLElBQU47QUFBQSxPQUF4QyxDQUFULEVBQThEWixHQURqRCxHQUViLENBQUMsQ0FuQkE7QUFvQkxhLHVCQUFpQi9CLGtCQUNieEIsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0JnQyxJQUFJbUIsUUFBeEIsRUFBa0MsRUFBRUMsT0FBTyxJQUFULEVBQWxDLEVBQW1ELElBQW5ELENBQVQsRUFBbUVmLEdBRHRELEdBRWIsQ0FBQyxDQXRCQTtBQXVCTGdCLGtCQUFZaEMscUJBQ1IxQixTQUFTUSxtQkFBTUgsYUFBTixDQUFvQmlDLE1BQXBCLENBQVQsRUFBc0NJLEdBRDlCLEdBRVIsQ0FBQyxDQXpCQTtBQTBCTGlCLGdCQUFVN0IsbUJBQ045QixTQUFTUSxtQkFBTUgsYUFBTixDQUFvQkcsbUJBQU11QixpQkFBMUIsRUFBNkMsRUFBRTZCLElBQUksTUFBTixFQUFjQyxRQUFkO0FBQUEsOEJBQXlCLENBQUU7O0FBQTNCO0FBQUE7QUFBQSxPQUE3QyxDQUFULEVBQXNGbkIsR0FEaEYsR0FFTixDQUFDLENBNUJBO0FBNkJMekIsZ0JBQVVlLG1CQUNOaEMsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0JHLG1CQUFNUyxRQUExQixFQUFvQyxFQUFFQyxVQUFVLEtBQVosRUFBcEMsQ0FBVCxFQUFtRXdCLEdBRDdELEdBRU4sQ0FBQyxDQS9CQTtBQWdDTG9CLFlBQU03QixlQUNGbkIsYUFBYUMsYUFBYixFQUE0QjJCLEdBRDFCLEdBRUYsQ0FBQztBQWxDQSxLQUFQO0FBb0NEOztBQXJFRCxTQUEwQnJCLGVBQTFCO0FBQUEiLCJmaWxlIjoiZGV0ZWN0RmliZXJUYWdzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgZmFrZUR5bmFtaWNJbXBvcnQgfSBmcm9tICdlbnp5bWUtYWRhcHRlci11dGlscyc7XG5cbmZ1bmN0aW9uIGdldEZpYmVyKGVsZW1lbnQpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBsZXQgaW5zdCA9IG51bGw7XG4gIGNsYXNzIFRlc3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgaW5zdCA9IHRoaXM7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cbiAgUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdGVyKSwgY29udGFpbmVyKTtcbiAgcmV0dXJuIGluc3QuX3JlYWN0SW50ZXJuYWxGaWJlci5jaGlsZDtcbn1cblxuZnVuY3Rpb24gZ2V0TGF6eUZpYmVyKExhenlDb21wb25lbnQpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBsZXQgaW5zdCA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG4gIGNsYXNzIFRlc3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgaW5zdCA9IHRoaXM7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMYXp5Q29tcG9uZW50KTtcbiAgICB9XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3ByZWZlci1zdGF0ZWxlc3MtZnVuY3Rpb25cbiAgY2xhc3MgU3VzcGVuc2VXcmFwcGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgUmVhY3QuU3VzcGVuc2UsXG4gICAgICAgIHsgZmFsbGJhY2s6IGZhbHNlIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdGVyKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIFJlYWN0RE9NLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFN1c3BlbnNlV3JhcHBlciksIGNvbnRhaW5lcik7XG4gIHJldHVybiBpbnN0Ll9yZWFjdEludGVybmFsRmliZXIuY2hpbGQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGV0ZWN0RmliZXJUYWdzKCkge1xuICBjb25zdCBzdXBwb3J0c01vZGUgPSB0eXBlb2YgUmVhY3QuU3RyaWN0TW9kZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIGNvbnN0IHN1cHBvcnRzQ29udGV4dCA9IHR5cGVvZiBSZWFjdC5jcmVhdGVDb250ZXh0ICE9PSAndW5kZWZpbmVkJztcbiAgY29uc3Qgc3VwcG9ydHNGb3J3YXJkUmVmID0gdHlwZW9mIFJlYWN0LmZvcndhcmRSZWYgIT09ICd1bmRlZmluZWQnO1xuICBjb25zdCBzdXBwb3J0c01lbW8gPSB0eXBlb2YgUmVhY3QubWVtbyAhPT0gJ3VuZGVmaW5lZCc7XG4gIGNvbnN0IHN1cHBvcnRzUHJvZmlsZXIgPSB0eXBlb2YgUmVhY3QudW5zdGFibGVfUHJvZmlsZXIgIT09ICd1bmRlZmluZWQnO1xuICBjb25zdCBzdXBwb3J0c1N1c3BlbnNlID0gdHlwZW9mIFJlYWN0LlN1c3BlbnNlICE9PSAndW5kZWZpbmVkJztcbiAgY29uc3Qgc3VwcG9ydHNMYXp5ID0gdHlwZW9mIFJlYWN0LmxhenkgIT09ICd1bmRlZmluZWQnO1xuXG4gIGZ1bmN0aW9uIEZuKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG4gIGNsYXNzIENscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGxldCBDdHggPSBudWxsO1xuICBsZXQgRndkUmVmID0gbnVsbDtcbiAgbGV0IExhenlDb21wb25lbnQgPSBudWxsO1xuICBpZiAoc3VwcG9ydHNDb250ZXh0KSB7XG4gICAgQ3R4ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuICB9XG4gIGlmIChzdXBwb3J0c0ZvcndhcmRSZWYpIHtcbiAgICAvLyBSZWFjdCB3aWxsIHdhcm4gaWYgd2UgZG9uJ3QgaGF2ZSBib3RoIGFyZ3VtZW50cy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBGd2RSZWYgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiBudWxsKTtcbiAgfVxuICBpZiAoc3VwcG9ydHNMYXp5KSB7XG4gICAgTGF6eUNvbXBvbmVudCA9IFJlYWN0LmxhenkoKCkgPT4gZmFrZUR5bmFtaWNJbXBvcnQoKCkgPT4gbnVsbCkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBIb3N0Um9vdDogZ2V0RmliZXIoJ3Rlc3QnKS5yZXR1cm4ucmV0dXJuLnRhZywgLy8gR28gdHdvIGxldmVscyBhYm92ZSB0byBmaW5kIHRoZSByb290XG4gICAgQ2xhc3NDb21wb25lbnQ6IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2xzKSkudGFnLFxuICAgIEZyYWdtZW50OiBnZXRGaWJlcihbWyduZXN0ZWQnXV0pLnRhZyxcbiAgICBGdW5jdGlvbmFsQ29tcG9uZW50OiBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEZuKSkudGFnLFxuICAgIE1lbW9TRkM6IHN1cHBvcnRzTWVtb1xuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Lm1lbW8oRm4pKSkudGFnXG4gICAgICA6IC0xLFxuICAgIE1lbW9DbGFzczogc3VwcG9ydHNNZW1vXG4gICAgICA/IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QubWVtbyhDbHMpKSkudGFnXG4gICAgICA6IC0xLFxuICAgIEhvc3RQb3J0YWw6IGdldEZpYmVyKFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChudWxsLCBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpKS50YWcsXG4gICAgSG9zdENvbXBvbmVudDogZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudCgnc3BhbicpKS50YWcsXG4gICAgSG9zdFRleHQ6IGdldEZpYmVyKCd0ZXh0JykudGFnLFxuICAgIE1vZGU6IHN1cHBvcnRzTW9kZVxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LlN0cmljdE1vZGUpKS50YWdcbiAgICAgIDogLTEsXG4gICAgQ29udGV4dENvbnN1bWVyOiBzdXBwb3J0c0NvbnRleHRcbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChDdHguQ29uc3VtZXIsIG51bGwsICgpID0+IG51bGwpKS50YWdcbiAgICAgIDogLTEsXG4gICAgQ29udGV4dFByb3ZpZGVyOiBzdXBwb3J0c0NvbnRleHRcbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChDdHguUHJvdmlkZXIsIHsgdmFsdWU6IG51bGwgfSwgbnVsbCkpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBGb3J3YXJkUmVmOiBzdXBwb3J0c0ZvcndhcmRSZWZcbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChGd2RSZWYpKS50YWdcbiAgICAgIDogLTEsXG4gICAgUHJvZmlsZXI6IHN1cHBvcnRzUHJvZmlsZXJcbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC51bnN0YWJsZV9Qcm9maWxlciwgeyBpZDogJ21vY2snLCBvblJlbmRlcigpIHt9IH0pKS50YWdcbiAgICAgIDogLTEsXG4gICAgU3VzcGVuc2U6IHN1cHBvcnRzU3VzcGVuc2VcbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5TdXNwZW5zZSwgeyBmYWxsYmFjazogZmFsc2UgfSkpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBMYXp5OiBzdXBwb3J0c0xhenlcbiAgICAgID8gZ2V0TGF6eUZpYmVyKExhenlDb21wb25lbnQpLnRhZ1xuICAgICAgOiAtMSxcbiAgfTtcbn07XG4iXX0=
//# sourceMappingURL=detectFiberTags.js.map
\ No newline at end of file

build/detectFiberTags.js.map

@@ -1 +1 @@
-{"version":3,"sources":["../src/detectFiberTags.js"],"names":["getFiber","element","container","global","document","createElement","inst","Tester","React","Component","ReactDOM","render","_reactInternalFiber","child","module","exports","detectFiberTags","supportsMode","StrictMode","supportsContext","createContext","supportsForwardRef","forwardRef","supportsMemo","memo","supportsProfiler","unstable_Profiler","Fn","Cls","Ctx","FwdRef","props","ref","HostRoot","tag","ClassComponent","Fragment","FunctionalComponent","MemoSFC","MemoClass","HostPortal","createPortal","HostComponent","HostText","Mode","ContextConsumer","Consumer","ContextProvider","Provider","value","ForwardRef","Profiler","id","onRender"],"mappings":"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","file":"detectFiberTags.js","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nfunction getFiber(element) {\n const container = global.document.createElement('div');\n let inst = null;\n class Tester extends React.Component {\n render() {\n inst = this;\n return element;\n }\n }\n ReactDOM.render(React.createElement(Tester), container);\n return inst._reactInternalFiber.child;\n}\n\nmodule.exports = function detectFiberTags() {\n const supportsMode = typeof React.StrictMode !== 'undefined';\n const supportsContext = typeof React.createContext !== 'undefined';\n const supportsForwardRef = typeof React.forwardRef !== 'undefined';\n const supportsMemo = typeof React.memo !== 'undefined';\n const supportsProfiler = typeof React.unstable_Profiler !== 'undefined';\n\n function Fn() {\n return null;\n }\n // eslint-disable-next-line react/prefer-stateless-function\n class Cls extends React.Component {\n render() {\n return null;\n }\n }\n let Ctx = null;\n let FwdRef = null;\n if (supportsContext) {\n Ctx = React.createContext();\n }\n if (supportsForwardRef) {\n // React will warn if we don't have both arguments.\n // eslint-disable-next-line no-unused-vars\n FwdRef = React.forwardRef((props, ref) => null);\n }\n\n return {\n HostRoot: getFiber('test').return.return.tag, // Go two levels above to find the root\n ClassComponent: getFiber(React.createElement(Cls)).tag,\n Fragment: getFiber([['nested']]).tag,\n FunctionalComponent: getFiber(React.createElement(Fn)).tag,\n MemoSFC: supportsMemo\n ? getFiber(React.createElement(React.memo(Fn))).tag\n : -1,\n MemoClass: supportsMemo\n ? getFiber(React.createElement(React.memo(Cls))).tag\n : -1,\n HostPortal: getFiber(ReactDOM.createPortal(null, global.document.createElement('div'))).tag,\n HostComponent: getFiber(React.createElement('span')).tag,\n HostText: getFiber('text').tag,\n Mode: supportsMode\n ? getFiber(React.createElement(React.StrictMode)).tag\n : -1,\n ContextConsumer: supportsContext\n ? getFiber(React.createElement(Ctx.Consumer, null, () => null)).tag\n : -1,\n ContextProvider: supportsContext\n ? getFiber(React.createElement(Ctx.Provider, { value: null }, null)).tag\n : -1,\n ForwardRef: supportsForwardRef\n ? getFiber(React.createElement(FwdRef)).tag\n : -1,\n Profiler: supportsProfiler\n ? getFiber(React.createElement(React.unstable_Profiler, { id: 'mock', onRender() {} })).tag\n : -1,\n };\n};\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/detectFiberTags.js"],"names":["getFiber","element","container","global","document","createElement","inst","Tester","React","Component","ReactDOM","render","_reactInternalFiber","child","getLazyFiber","LazyComponent","SuspenseWrapper","Suspense","fallback","module","exports","detectFiberTags","supportsMode","StrictMode","supportsContext","createContext","supportsForwardRef","forwardRef","supportsMemo","memo","supportsProfiler","unstable_Profiler","supportsSuspense","supportsLazy","lazy","Fn","Cls","Ctx","FwdRef","props","ref","HostRoot","tag","ClassComponent","Fragment","FunctionalComponent","MemoSFC","MemoClass","HostPortal","createPortal","HostComponent","HostText","Mode","ContextConsumer","Consumer","ContextProvider","Provider","value","ForwardRef","Profiler","id","onRender","Lazy"],"mappings":"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","file":"detectFiberTags.js","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { fakeDynamicImport } from 'enzyme-adapter-utils';\n\nfunction getFiber(element) {\n const container = global.document.createElement('div');\n let inst = null;\n class Tester extends React.Component {\n render() {\n inst = this;\n return element;\n }\n }\n ReactDOM.render(React.createElement(Tester), container);\n return inst._reactInternalFiber.child;\n}\n\nfunction getLazyFiber(LazyComponent) {\n const container = global.document.createElement('div');\n let inst = null;\n // eslint-disable-next-line react/prefer-stateless-function\n class Tester extends React.Component {\n render() {\n inst = this;\n return React.createElement(LazyComponent);\n }\n }\n // eslint-disable-next-line react/prefer-stateless-function\n class SuspenseWrapper extends React.Component {\n render() {\n return React.createElement(\n React.Suspense,\n { fallback: false },\n React.createElement(Tester),\n );\n }\n }\n ReactDOM.render(React.createElement(SuspenseWrapper), container);\n return inst._reactInternalFiber.child;\n}\n\nmodule.exports = function detectFiberTags() {\n const supportsMode = typeof React.StrictMode !== 'undefined';\n const supportsContext = typeof React.createContext !== 'undefined';\n const supportsForwardRef = typeof React.forwardRef !== 'undefined';\n const supportsMemo = typeof React.memo !== 'undefined';\n const supportsProfiler = typeof React.unstable_Profiler !== 'undefined';\n const supportsSuspense = typeof React.Suspense !== 'undefined';\n const supportsLazy = typeof React.lazy !== 'undefined';\n\n function Fn() {\n return null;\n }\n // eslint-disable-next-line react/prefer-stateless-function\n class Cls extends React.Component {\n render() {\n return null;\n }\n }\n let Ctx = null;\n let FwdRef = null;\n let LazyComponent = null;\n if (supportsContext) {\n Ctx = React.createContext();\n }\n if (supportsForwardRef) {\n // React will warn if we don't have both arguments.\n // eslint-disable-next-line no-unused-vars\n FwdRef = React.forwardRef((props, ref) => null);\n }\n if (supportsLazy) {\n LazyComponent = React.lazy(() => fakeDynamicImport(() => null));\n }\n\n return {\n HostRoot: getFiber('test').return.return.tag, // Go two levels above to find the root\n ClassComponent: getFiber(React.createElement(Cls)).tag,\n Fragment: getFiber([['nested']]).tag,\n FunctionalComponent: getFiber(React.createElement(Fn)).tag,\n MemoSFC: supportsMemo\n ? getFiber(React.createElement(React.memo(Fn))).tag\n : -1,\n MemoClass: supportsMemo\n ? getFiber(React.createElement(React.memo(Cls))).tag\n : -1,\n HostPortal: getFiber(ReactDOM.createPortal(null, global.document.createElement('div'))).tag,\n HostComponent: getFiber(React.createElement('span')).tag,\n HostText: getFiber('text').tag,\n Mode: supportsMode\n ? getFiber(React.createElement(React.StrictMode)).tag\n : -1,\n ContextConsumer: supportsContext\n ? getFiber(React.createElement(Ctx.Consumer, null, () => null)).tag\n : -1,\n ContextProvider: supportsContext\n ? getFiber(React.createElement(Ctx.Provider, { value: null }, null)).tag\n : -1,\n ForwardRef: supportsForwardRef\n ? getFiber(React.createElement(FwdRef)).tag\n : -1,\n Profiler: supportsProfiler\n ? getFiber(React.createElement(React.unstable_Profiler, { id: 'mock', onRender() {} })).tag\n : -1,\n Suspense: supportsSuspense\n ? getFiber(React.createElement(React.Suspense, { fallback: false })).tag\n : -1,\n Lazy: supportsLazy\n ? getLazyFiber(LazyComponent).tag\n : -1,\n };\n};\n"]}
\ No newline at end of file

build/ReactSixteenAdapter.js

@@ -38,6 +38,10 @@
var _checkPropTypes3 = _interopRequireDefault(_checkPropTypes2);
+var _has = require('has');
+
+var _has2 = _interopRequireDefault(_has);
+
var _reactIs = require('react-is');
var _enzyme = require('enzyme');
@@ -248,6 +252,20 @@
rendered: childrenToTree(node.child)
};
}
+ case FiberTags.Suspense:
+ {
+ return {
+ nodeType: 'function',
+ type: _reactIs.Suspense,
+ props: (0, _object2['default'])({}, node.memoizedProps),
+ key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key),
+ ref: node.ref,
+ instance: null,
+ rendered: childrenToTree(node.child)
+ };
+ }
+ case FiberTags.Lazy:
+ return childrenToTree(node.child);
default:
throw new Error('Enzyme Internal Error: unknown node with tag ' + String(node.tag));
}
@@ -295,6 +313,25 @@
return mapper(node);
}
+function replaceLazyWithFallback(node, fallback) {
+ if (!node) {
+ return null;
+ }
+ if (Array.isArray(node)) {
+ return node.map(function (el) {
+ return replaceLazyWithFallback(el, fallback);
+ });
+ }
+ if ((0, _reactIs.isLazy)(node.type)) {
+ return fallback;
+ }
+ return (0, _object2['default'])({}, node, {
+ props: (0, _object2['default'])({}, node.props, {
+ children: replaceLazyWithFallback(node.props.children, fallback)
+ })
+ });
+}
+
var eventOptions = {
animation: true,
pointerEvents: is164,
@@ -361,6 +398,11 @@
return { $$typeof: _reactIs.Element, type: type };
}
+function isStateful(Component) {
+ return Component.prototype && (Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components
+ );
+}
+
var ReactSixteenAdapter = function (_EnzymeAdapter) {
_inherits(ReactSixteenAdapter, _EnzymeAdapter);
@@ -399,6 +441,9 @@
value: function () {
function createMountRenderer(options) {
(0, _enzymeAdapterUtils.assertDomAvailable)('mount');
+ if ((0, _has2['default'])(options, 'suspenseFallback')) {
+ throw new TypeError('`suspenseFallback` is not supported by the `mount` renderer');
+ }
if (FiberTags === null) {
// Requires DOM.
FiberTags = (0, _detectFiberTags2['default'])();
@@ -489,7 +534,9 @@
if (!eventFn) {
throw new TypeError('ReactWrapper::simulate() event \'' + String(event) + '\' does not exist');
}
- eventFn(_nodeToHostNode(node), mock);
+ wrapAct(function () {
+ eventFn(adapter.nodeToHostNode(node), mock);
+ });
}
return simulateEvent;
@@ -532,19 +579,99 @@
}, {
key: 'createShallowRenderer',
value: function () {
- function createShallowRenderer() /* options */{
+ function createShallowRenderer() {
+ var _this4 = this;
+
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
var adapter = this;
var renderer = new _shallow2['default']();
+ var suspenseFallback = options.suspenseFallback;
+
+ if (typeof suspenseFallback !== 'undefined' && typeof suspenseFallback !== 'boolean') {
+ throw TypeError('`options.suspenseFallback` should be boolean or undefined');
+ }
var isDOM = false;
var cachedNode = null;
var lastComponent = null;
var wrappedComponent = null;
+ var sentinel = {};
+
+ // wrap memo components with a PureComponent, or a class component with sCU
+ var wrapPureComponent = function () {
+ function wrapPureComponent(Component, compare) {
+ if (!is166) {
+ throw new RangeError('this function should not be called in React < 16.6. Please report this!');
+ }
+ if (lastComponent !== Component) {
+ if (isStateful(Component)) {
+ wrappedComponent = function (_Component) {
+ _inherits(wrappedComponent, _Component);
+
+ function wrappedComponent() {
+ _classCallCheck(this, wrappedComponent);
+
+ return _possibleConstructorReturn(this, (wrappedComponent.__proto__ || Object.getPrototypeOf(wrappedComponent)).apply(this, arguments));
+ }
+
+ return wrappedComponent;
+ }(Component); // eslint-disable-line react/prefer-stateless-function
+ if (compare) {
+ wrappedComponent.prototype.shouldComponentUpdate = function (nextProps) {
+ return !compare(_this4.props, nextProps);
+ };
+ } else {
+ wrappedComponent.prototype.isPureReactComponent = true;
+ }
+ } else {
+ var memoized = sentinel;
+ var prevProps = void 0;
+ wrappedComponent = function () {
+ function wrappedComponent(props) {
+ var shouldUpdate = memoized === sentinel || (compare ? !compare(prevProps, props) : !(0, _Utils.shallowEqual)(prevProps, props));
+ if (shouldUpdate) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ memoized = Component.apply(undefined, [(0, _object2['default'])({}, Component.defaultProps, props)].concat(args));
+ prevProps = props;
+ }
+ return memoized;
+ }
+
+ return wrappedComponent;
+ }();
+ }
+ (0, _object2['default'])(wrappedComponent, Component, { displayName: adapter.displayNameOfNode({ type: Component }) });
+ lastComponent = Component;
+ }
+ return wrappedComponent;
+ }
+
+ return wrapPureComponent;
+ }();
// Wrap functional components on versions prior to 16.5,
// to avoid inadvertently pass a `this` instance to it.
var wrapFunctionalComponent = function () {
function wrapFunctionalComponent(Component) {
+ if (is166 && (0, _has2['default'])(Component, 'defaultProps')) {
+ if (lastComponent !== Component) {
+ wrappedComponent = (0, _object2['default'])(
+ // eslint-disable-next-line new-cap
+ function (props) {
+ for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ args[_key2 - 1] = arguments[_key2];
+ }
+
+ return Component.apply(undefined, [(0, _object2['default'])({}, Component.defaultProps, props)].concat(args));
+ }, Component, { displayName: adapter.displayNameOfNode({ type: Component }) });
+ lastComponent = Component;
+ }
+ return wrappedComponent;
+ }
if (is165) {
return Component;
}
@@ -592,24 +719,47 @@
});
} else {
isDOM = false;
- var Component = el.type;
+ var renderedEl = el;
+ if ((0, _reactIs.isLazy)(renderedEl)) {
+ throw TypeError('`React.lazy` is not supported by shallow rendering.');
+ }
+ if ((0, _reactIs.isSuspense)(renderedEl)) {
+ var children = renderedEl.props.children;
+ if (suspenseFallback) {
+ var fallback = renderedEl.props.fallback;
+
+ children = replaceLazyWithFallback(children, fallback);
+ }
+ var FakeSuspenseWrapper = function () {
+ function FakeSuspenseWrapper() {
+ return children;
+ }
+
+ return FakeSuspenseWrapper;
+ }();
+ renderedEl = _react2['default'].createElement(FakeSuspenseWrapper, null, children);
+ }
+ var _renderedEl = renderedEl,
+ Component = _renderedEl.type;
- var isStateful = Component.prototype && (Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components
- );
var context = (0, _enzymeAdapterUtils.getMaskedContext)(Component.contextTypes, unmaskedContext);
- if (!isStateful && (0, _reactIs.isMemo)(el.type)) {
- var InnerComp = el.type.type;
+ if ((0, _reactIs.isMemo)(el.type)) {
+ var _el$type = el.type,
+ InnerComp = _el$type.type,
+ compare = _el$type.compare;
+
+
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
- return renderer.render((0, _object2['default'])({}, el, { type: wrapFunctionalComponent(InnerComp) }), context);
+ return renderer.render((0, _object2['default'])({}, el, { type: wrapPureComponent(InnerComp, compare) }), context);
});
}
- if (!isStateful && typeof Component === 'function') {
+ if (!isStateful(Component) && typeof Component === 'function') {
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
- return renderer.render((0, _object2['default'])({}, el, { type: wrapFunctionalComponent(Component) }), context);
+ return renderer.render((0, _object2['default'])({}, renderedEl, { type: wrapFunctionalComponent(Component) }), context);
});
}
@@ -646,7 +796,7 @@
}
}
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
- return renderer.render(el, context);
+ return renderer.render(renderedEl, context);
});
}
}
@@ -690,8 +840,8 @@
}(),
simulateEvent: function () {
function simulateEvent(node, event) {
- for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
- args[_key - 2] = arguments[_key];
+ for (var _len3 = arguments.length, args = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
+ args[_key3 - 2] = arguments[_key3];
}
var handler = node.props[(0, _enzymeAdapterUtils.propFromEvent)(event, eventOptions)];
@@ -734,6 +884,9 @@
key: 'createStringRenderer',
value: function () {
function createStringRenderer(options) {
+ if ((0, _has2['default'])(options, 'suspenseFallback')) {
+ throw new TypeError('`suspenseFallback` should not be specified in options of string renderer');
+ }
return {
render: function () {
function render(el, context) {
@@ -795,7 +948,9 @@
value: function () {
function nodeToElement(node) {
if (!node || (typeof node === 'undefined' ? 'undefined' : _typeof(node)) !== 'object') return null;
- return _react2['default'].createElement(node.type, (0, _enzymeAdapterUtils.propsWithKeysAndRef)(node));
+ var type = node.type;
+
+ return _react2['default'].createElement((0, _reactIs.isMemo)(type) ? type.type : type, (0, _enzymeAdapterUtils.propsWithKeysAndRef)(node));
}
return nodeToElement;
@@ -848,6 +1003,8 @@
return 'Profiler';
case _reactIs.Portal || NaN:
return 'Portal';
+ case _reactIs.Suspense || NaN:
+ return 'Suspense';
default:
}
}
@@ -860,7 +1017,10 @@
case _reactIs.ContextProvider || NaN:
return 'ContextProvider';
case _reactIs.Memo || NaN:
- return (0, _enzymeAdapterUtils.displayNameOfNode)(type);
+ {
+ var nodeName = (0, _enzymeAdapterUtils.displayNameOfNode)(node);
+ return typeof nodeName === 'string' ? nodeName : 'Memo(' + String((0, _enzymeAdapterUtils.displayNameOfNode)(type)) + ')';
+ }
case _reactIs.ForwardRef || NaN:
{
if (type.displayName) {
@@ -869,6 +1029,10 @@
var name = (0, _enzymeAdapterUtils.displayNameOfNode)({ type: type.render });
return name ? 'ForwardRef(' + String(name) + ')' : 'ForwardRef';
}
+ case _reactIs.Lazy || NaN:
+ {
+ return 'lazy';
+ }
default:
return (0, _enzymeAdapterUtils.displayNameOfNode)(node);
}
@@ -908,7 +1072,7 @@
value: function () {
function isCustomComponent(type) {
var fakeElement = makeFakeElement(type);
- return !!type && (typeof type === 'function' || (0, _reactIs.isForwardRef)(fakeElement) || (0, _reactIs.isContextProvider)(fakeElement) || (0, _reactIs.isContextConsumer)(fakeElement));
+ return !!type && (typeof type === 'function' || (0, _reactIs.isForwardRef)(fakeElement) || (0, _reactIs.isContextProvider)(fakeElement) || (0, _reactIs.isContextConsumer)(fakeElement) || (0, _reactIs.isSuspense)(fakeElement));
}
return isCustomComponent;
@@ -941,10 +1105,10 @@
// React stores references to the Provider on a Consumer differently across versions.
if (Consumer) {
var Provider = void 0;
- if (Consumer.Provider) {
+ if (Consumer._context) {
+ Provider = Consumer._context.Provider; // check this first, to avoid a deprecation warning
+ } else if (Consumer.Provider) {
Provider = Consumer.Provider;
- } else if (Consumer._context) {
- Provider = Consumer._context.Provider;
}
if (Provider) {
return Provider;
@@ -982,5 +1146,5 @@
}(_enzyme.EnzymeAdapter);
module.exports = ReactSixteenAdapter;
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9SZWFjdFNpeHRlZW5BZGFwdGVyLmpzIl0sIm5hbWVzIjpbImlzMTY0IiwiVGVzdFV0aWxzIiwiU2ltdWxhdGUiLCJ0b3VjaFN0YXJ0IiwiaXMxNjUiLCJhdXhDbGljayIsImlzMTY2IiwiUmVhY3QiLCJ1bnN0YWJsZV9Bc3luY01vZGUiLCJpczE2OCIsImFjdCIsImhhc1Nob3VsZENvbXBvbmVudFVwZGF0ZUJ1ZyIsInNlbXZlciIsInNhdGlzZmllcyIsInRlc3RSZW5kZXJlclZlcnNpb24iLCJGaWJlclRhZ3MiLCJub2RlQW5kU2libGluZ3NBcnJheSIsIm5vZGVXaXRoU2libGluZyIsImFycmF5Iiwibm9kZSIsInB1c2giLCJzaWJsaW5nIiwiZmxhdHRlbiIsImFyciIsInJlc3VsdCIsInN0YWNrIiwiaSIsImxlbmd0aCIsIm4iLCJwb3AiLCJlbCIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGVUeXBlRnJvbVR5cGUiLCJ0eXBlIiwiUG9ydGFsIiwiZWxlbWVudFRvVHJlZSIsImNoaWxkcmVuIiwiY29udGFpbmVySW5mbyIsInByb3BzIiwibm9kZVR5cGUiLCJrZXkiLCJyZWYiLCJpbnN0YW5jZSIsInJlbmRlcmVkIiwidG9UcmVlIiwidm5vZGUiLCJ0YWciLCJIb3N0Um9vdCIsImNoaWxkcmVuVG9UcmVlIiwiY2hpbGQiLCJIb3N0UG9ydGFsIiwic3RhdGVOb2RlIiwibWVtb2l6ZWRQcm9wcyIsIkNsYXNzQ29tcG9uZW50IiwiRnVuY3Rpb25hbENvbXBvbmVudCIsIk1lbW9DbGFzcyIsImVsZW1lbnRUeXBlIiwiTWVtb1NGQyIsInJlbmRlcmVkTm9kZXMiLCJtYXAiLCJIb3N0Q29tcG9uZW50IiwiSG9zdFRleHQiLCJGcmFnbWVudCIsIk1vZGUiLCJDb250ZXh0UHJvdmlkZXIiLCJDb250ZXh0Q29uc3VtZXIiLCJQcm9maWxlciIsIkZvcndhcmRSZWYiLCJwZW5kaW5nUHJvcHMiLCJFcnJvciIsIm5vZGVUb0hvc3ROb2RlIiwiX25vZGUiLCJtYXBwZXIiLCJpdGVtIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsImV2ZW50T3B0aW9ucyIsImFuaW1hdGlvbiIsInBvaW50ZXJFdmVudHMiLCJnZXRFbXB0eVN0YXRlVmFsdWUiLCJFbXB0eVN0YXRlIiwiQ29tcG9uZW50IiwidGVzdFJlbmRlcmVyIiwiU2hhbGxvd1JlbmRlcmVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIl9pbnN0YW5jZSIsInN0YXRlIiwid3JhcEFjdCIsImZuIiwicmV0dXJuVmFsIiwiZ2V0UHJvdmlkZXJEZWZhdWx0VmFsdWUiLCJQcm92aWRlciIsIl9jb250ZXh0IiwiX2RlZmF1bHRWYWx1ZSIsIl9jdXJyZW50VmFsdWUiLCJtYWtlRmFrZUVsZW1lbnQiLCIkJHR5cGVvZiIsIkVsZW1lbnQiLCJSZWFjdFNpeHRlZW5BZGFwdGVyIiwibGlmZWN5Y2xlcyIsIm9wdGlvbnMiLCJlbmFibGVDb21wb25lbnREaWRVcGRhdGVPblNldFN0YXRlIiwibGVnYWN5Q29udGV4dE1vZGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJvblNldFN0YXRlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUiLCJzZXRTdGF0ZSIsInNraXBzQ29tcG9uZW50RGlkVXBkYXRlT25OdWxsaXNoIiwiZ2V0Q2hpbGRDb250ZXh0IiwiY2FsbGVkQnlSZW5kZXJlciIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImF0dGFjaFRvIiwiaHlkcmF0ZUluIiwid3JhcHBpbmdDb21wb25lbnRQcm9wcyIsImRvbU5vZGUiLCJnbG9iYWwiLCJkb2N1bWVudCIsImFkYXB0ZXIiLCJjb250ZXh0IiwiY2FsbGJhY2siLCJ3cmFwcGVyUHJvcHMiLCJSZWFjdFdyYXBwZXJDb21wb25lbnQiLCJ3cmFwcGVkRWwiLCJoeWRyYXRlIiwic2V0Q2hpbGRQcm9wcyIsInVubW91bnQiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiZ2V0Tm9kZSIsImlzQ3VzdG9tQ29tcG9uZW50IiwiX3JlYWN0SW50ZXJuYWxGaWJlciIsInNpbXVsYXRlRXJyb3IiLCJub2RlSGllcmFyY2h5Iiwicm9vdE5vZGUiLCJlcnJvciIsImlzRXJyb3JCb3VuZGFyeSIsImVsSW5zdGFuY2UiLCJjb21wb25lbnREaWRDYXRjaCIsImZpbmQiLCJjYXRjaGluZ0luc3RhbmNlIiwiY2F0Y2hpbmdUeXBlIiwiZGlzcGxheU5hbWVPZk5vZGUiLCJ1bmRlZmluZWQiLCJzaW11bGF0ZUV2ZW50IiwiZXZlbnQiLCJtb2NrIiwibWFwcGVkRXZlbnQiLCJldmVudEZuIiwiVHlwZUVycm9yIiwiYmF0Y2hlZFVwZGF0ZXMiLCJnZXRXcmFwcGluZ0NvbXBvbmVudFJlbmRlcmVyIiwiaW5zdCIsImdldE1vdW50V3JhcHBlckluc3RhbmNlIiwicmVuZGVyZXIiLCJpc0RPTSIsImNhY2hlZE5vZGUiLCJsYXN0Q29tcG9uZW50Iiwid3JhcHBlZENvbXBvbmVudCIsIndyYXBGdW5jdGlvbmFsQ29tcG9uZW50IiwidW5tYXNrZWRDb250ZXh0IiwicHJvdmlkZXJWYWx1ZXMiLCJNYXAiLCJzZXQiLCJ2YWx1ZSIsIk1vY2tQcm92aWRlciIsImdldFByb3ZpZGVyRnJvbUNvbnN1bWVyIiwiaGFzIiwiZ2V0IiwiTW9ja0NvbnN1bWVyIiwiaXNTdGF0ZWZ1bCIsInByb3RvdHlwZSIsImlzUmVhY3RDb21wb25lbnQiLCJfX3JlYWN0QXV0b0JpbmRQYWlycyIsImNvbnRleHRUeXBlcyIsIklubmVyQ29tcCIsImVtcHR5U3RhdGVWYWx1ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwib3V0cHV0IiwiZ2V0UmVuZGVyT3V0cHV0IiwiY29uY2F0IiwiYXJncyIsImhhbmRsZXIiLCJjaGVja1Byb3BUeXBlcyIsInR5cGVTcGVjcyIsInZhbHVlcyIsImxvY2F0aW9uIiwiaGllcmFyY2h5IiwiY2hpbGRDb250ZXh0VHlwZXMiLCJDb250ZXh0V3JhcHBlciIsIlJlYWN0RE9NU2VydmVyIiwicmVuZGVyVG9TdGF0aWNNYXJrdXAiLCJtb2RlIiwiRW56eW1lQWRhcHRlciIsIk1PREVTIiwiTU9VTlQiLCJjcmVhdGVNb3VudFJlbmRlcmVyIiwiU0hBTExPVyIsImNyZWF0ZVNoYWxsb3dSZW5kZXJlciIsIlNUUklORyIsImNyZWF0ZVN0cmluZ1JlbmRlcmVyIiwiZWxlbWVudCIsInN1cHBvcnRzQXJyYXkiLCJub2RlcyIsIkNvbmN1cnJlbnRNb2RlIiwiQXN5bmNNb2RlIiwiTmFOIiwiU3RyaWN0TW9kZSIsIiQkdHlwZW9mVHlwZSIsIk1lbW8iLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJvYmplY3QiLCJmcmFnbWVudCIsImZha2VFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJDb25zdW1lciIsIlJvb3RGaW5kZXIiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBRUE7Ozs7QUFDQTs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBcUJBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OzsrZUF4REE7O0FBR0E7O0FBRUE7O0FBR0E7OztBQWtEQSxJQUFNQSxRQUFRLENBQUMsQ0FBQ0MsdUJBQVVDLFFBQVYsQ0FBbUJDLFVBQW5DLEMsQ0FBK0M7QUFDL0MsSUFBTUMsUUFBUSxDQUFDLENBQUNILHVCQUFVQyxRQUFWLENBQW1CRyxRQUFuQyxDLENBQTZDO0FBQzdDLElBQU1DLFFBQVFGLFNBQVMsQ0FBQ0csbUJBQU1DLGtCQUE5QixDLENBQWtEO0FBQ2xELElBQU1DLFFBQVFILFNBQVMsT0FBT0wsdUJBQVVTLEdBQWpCLEtBQXlCLFVBQWhEOztBQUVBLElBQU1DLDhCQUE4QkMsb0JBQU9DLFNBQVAsQ0FBaUJDLGdCQUFqQixFQUFzQyxRQUF0QyxDQUFwQzs7QUFFQTtBQUNBLElBQUlDLFlBQVksSUFBaEI7O0FBRUEsU0FBU0Msb0JBQVQsQ0FBOEJDLGVBQTlCLEVBQStDO0FBQzdD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cUNBQVA7QUFDRDs7Ozs7Ozt5Q0FFeUJuRSxJLEVBQU1tRixPLEVBQVM7QUFDdkMsZUFBTztBQUNMd0gsb0RBREs7QUFFTDNNLGdCQUFNLG1EQUEwQlosbUJBQU0rRSxhQUFoQyxFQUErQ25FLElBQS9DLEVBQXFEbUYsT0FBckQ7QUFGRCxTQUFQO0FBSUQ7Ozs7Ozs7RUFsYitCZ0cscUI7O0FBcWJsQ3lCLE9BQU9DLE9BQVAsR0FBaUI1SCxtQkFBakIiLCJmaWxlIjoiUmVhY3RTaXh0ZWVuQWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby11c2UtYmVmb3JlLWRlZmluZTogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgUmVhY3RET01TZXJ2ZXIgZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCBTaGFsbG93UmVuZGVyZXIgZnJvbSAncmVhY3QtdGVzdC1yZW5kZXJlci9zaGFsbG93JztcbmltcG9ydCB7IHZlcnNpb24gYXMgdGVzdFJlbmRlcmVyVmVyc2lvbiB9IGZyb20gJ3JlYWN0LXRlc3QtcmVuZGVyZXIvcGFja2FnZS5qc29uJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IFRlc3RVdGlscyBmcm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgY2hlY2tQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcyc7XG5pbXBvcnQge1xuICBBc3luY01vZGUsXG4gIENvbmN1cnJlbnRNb2RlLFxuICBDb250ZXh0Q29uc3VtZXIsXG4gIENvbnRleHRQcm92aWRlcixcbiAgRWxlbWVudCxcbiAgRm9yd2FyZFJlZixcbiAgRnJhZ21lbnQsXG4gIGlzQ29udGV4dENvbnN1bWVyLFxuICBpc0NvbnRleHRQcm92aWRlcixcbiAgaXNFbGVtZW50LFxuICBpc0ZvcndhcmRSZWYsXG4gIGlzTWVtbyxcbiAgaXNQb3J0YWwsXG4gIGlzVmFsaWRFbGVtZW50VHlwZSxcbiAgTWVtbyxcbiAgUG9ydGFsLFxuICBQcm9maWxlcixcbiAgU3RyaWN0TW9kZSxcbn0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IHsgRW56eW1lQWRhcHRlciB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgeyB0eXBlT2ZOb2RlIH0gZnJvbSAnZW56eW1lL2J1aWxkL1V0aWxzJztcbmltcG9ydCB7XG4gIGRpc3BsYXlOYW1lT2ZOb2RlLFxuICBlbGVtZW50VG9UcmVlIGFzIHV0aWxFbGVtZW50VG9UcmVlLFxuICBub2RlVHlwZUZyb21UeXBlIGFzIHV0aWxOb2RlVHlwZUZyb21UeXBlLFxuICBtYXBOYXRpdmVFdmVudE5hbWVzLFxuICBwcm9wRnJvbUV2ZW50LFxuICBhc3NlcnREb21BdmFpbGFibGUsXG4gIHdpdGhTZXRTdGF0ZUFsbG93ZWQsXG4gIGNyZWF0ZVJlbmRlcldyYXBwZXIsXG4gIGNyZWF0ZU1vdW50V3JhcHBlcixcbiAgcHJvcHNXaXRoS2V5c0FuZFJlZixcbiAgZW5zdXJlS2V5T3JVbmRlZmluZWQsXG4gIHNpbXVsYXRlRXJyb3IsXG4gIHdyYXAsXG4gIGdldE1hc2tlZENvbnRleHQsXG4gIGdldENvbXBvbmVudFN0YWNrLFxuICBSb290RmluZGVyLFxuICBnZXROb2RlRnJvbVJvb3RGaW5kZXIsXG4gIHdyYXBXaXRoV3JhcHBpbmdDb21wb25lbnQsXG4gIGdldFdyYXBwaW5nQ29tcG9uZW50TW91bnRSZW5kZXJlcixcbn0gZnJvbSAnZW56eW1lLWFkYXB0ZXItdXRpbHMnO1xuaW1wb3J0IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIGZyb20gJy4vZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgnO1xuaW1wb3J0IGRldGVjdEZpYmVyVGFncyBmcm9tICcuL2RldGVjdEZpYmVyVGFncyc7XG5cbmNvbnN0IGlzMTY0ID0gISFUZXN0VXRpbHMuU2ltdWxhdGUudG91Y2hTdGFydDsgLy8gMTYuNCtcbmNvbnN0IGlzMTY1ID0gISFUZXN0VXRpbHMuU2ltdWxhdGUuYXV4Q2xpY2s7IC8vIDE2LjUrXG5jb25zdCBpczE2NiA9IGlzMTY1ICYmICFSZWFjdC51bnN0YWJsZV9Bc3luY01vZGU7IC8vIDE2LjYrXG5jb25zdCBpczE2OCA9IGlzMTY2ICYmIHR5cGVvZiBUZXN0VXRpbHMuYWN0ID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBoYXNTaG91bGRDb21wb25lbnRVcGRhdGVCdWcgPSBzZW12ZXIuc2F0aXNmaWVzKHRlc3RSZW5kZXJlclZlcnNpb24sICc8IDE2LjgnKTtcblxuLy8gTGF6aWx5IHBvcHVsYXRlZCBpZiBET00gaXMgYXZhaWxhYmxlLlxubGV0IEZpYmVyVGFncyA9IG51bGw7XG5cbmZ1bmN0aW9uIG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGVXaXRoU2libGluZykge1xuICBjb25zdCBhcnJheSA9IFtdO1xuICBsZXQgbm9kZSA9IG5vZGVXaXRoU2libGluZztcbiAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgIGFycmF5LnB1c2gobm9kZSk7XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBzdGFjayA9IFt7IGk6IDAsIGFycmF5OiBhcnIgfV07XG4gIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICBjb25zdCBuID0gc3RhY2sucG9wKCk7XG4gICAgd2hpbGUgKG4uaSA8IG4uYXJyYXkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbCA9IG4uYXJyYXlbbi5pXTtcbiAgICAgIG4uaSArPSAxO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwpKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobik7XG4gICAgICAgIHN0YWNrLnB1c2goeyBpOiAwLCBhcnJheTogZWwgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goZWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IFBvcnRhbCkge1xuICAgIHJldHVybiAncG9ydGFsJztcbiAgfVxuXG4gIHJldHVybiB1dGlsTm9kZVR5cGVGcm9tVHlwZSh0eXBlKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFRvVHJlZShlbCkge1xuICBpZiAoIWlzUG9ydGFsKGVsKSkge1xuICAgIHJldHVybiB1dGlsRWxlbWVudFRvVHJlZShlbCwgZWxlbWVudFRvVHJlZSk7XG4gIH1cblxuICBjb25zdCB7IGNoaWxkcmVuLCBjb250YWluZXJJbmZvIH0gPSBlbDtcbiAgY29uc3QgcHJvcHMgPSB7IGNoaWxkcmVuLCBjb250YWluZXJJbmZvIH07XG5cbiAgcmV0dXJuIHtcbiAgICBub2RlVHlwZTogJ3BvcnRhbCcsXG4gICAgdHlwZTogUG9ydGFsLFxuICAgIHByb3BzLFxuICAgIGtleTogZW5zdXJlS2V5T3JVbmRlZmluZWQoZWwua2V5KSxcbiAgICByZWY6IGVsLnJlZiB8fCBudWxsLFxuICAgIGluc3RhbmNlOiBudWxsLFxuICAgIHJlbmRlcmVkOiBlbGVtZW50VG9UcmVlKGVsLmNoaWxkcmVuKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9UcmVlKHZub2RlKSB7XG4gIGlmICh2bm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVE9ETyhsbXIpOiBJJ20gbm90IHJlYWxseSBzdXJlIEkgdW5kZXJzdGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHdoYXRcbiAgLy8gaSBzaG91bGQgYmUgZG9pbmcsIG9yIGlmIHRoaXMgaXMgYSBoYWNrIGZvciBzb21ldGhpbmcgaSdtIGRvaW5nIHdyb25nXG4gIC8vIHNvbWV3aGVyZSBlbHNlLiBTaG91bGQgdGFsayB0byBzZWJhc3RpYW4gYWJvdXQgdGhpcyBwZXJoYXBzXG4gIGNvbnN0IG5vZGUgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aCh2bm9kZSk7XG4gIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICBjYXNlIEZpYmVyVGFncy5Ib3N0Um9vdDpcbiAgICAgIHJldHVybiBjaGlsZHJlblRvVHJlZShub2RlLmNoaWxkKTtcbiAgICBjYXNlIEZpYmVyVGFncy5Ib3N0UG9ydGFsOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXRlTm9kZTogeyBjb250YWluZXJJbmZvIH0sXG4gICAgICAgIG1lbW9pemVkUHJvcHM6IGNoaWxkcmVuLFxuICAgICAgfSA9IG5vZGU7XG4gICAgICBjb25zdCBwcm9wcyA9IHsgY29udGFpbmVySW5mbywgY2hpbGRyZW4gfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAncG9ydGFsJyxcbiAgICAgICAgdHlwZTogUG9ydGFsLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEZpYmVyVGFncy5DbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAnY2xhc3MnLFxuICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLkZ1bmN0aW9uYWxDb21wb25lbnQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgdHlwZTogbm9kZS50eXBlLFxuICAgICAgICBwcm9wczogeyAuLi5ub2RlLm1lbW9pemVkUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLk1lbW9DbGFzczpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAnY2xhc3MnLFxuICAgICAgICB0eXBlOiBub2RlLmVsZW1lbnRUeXBlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZC5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLk1lbW9TRkM6IHtcbiAgICAgIGxldCByZW5kZXJlZE5vZGVzID0gZmxhdHRlbihub2RlQW5kU2libGluZ3NBcnJheShub2RlLmNoaWxkKS5tYXAodG9UcmVlKSk7XG4gICAgICBpZiAocmVuZGVyZWROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVuZGVyZWROb2RlcyA9IFtub2RlLm1lbW9pemVkUHJvcHMuY2hpbGRyZW5dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IG5vZGUuZWxlbWVudFR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgIHJlbmRlcmVkOiByZW5kZXJlZE5vZGVzLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBGaWJlclRhZ3MuSG9zdENvbXBvbmVudDoge1xuICAgICAgbGV0IHJlbmRlcmVkTm9kZXMgPSBmbGF0dGVuKG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGUuY2hpbGQpLm1hcCh0b1RyZWUpKTtcbiAgICAgIGlmIChyZW5kZXJlZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW5kZXJlZE5vZGVzID0gW25vZGUubWVtb2l6ZWRQcm9wcy5jaGlsZHJlbl07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogJ2hvc3QnLFxuICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogcmVuZGVyZWROb2RlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgRmliZXJUYWdzLkhvc3RUZXh0OlxuICAgICAgcmV0dXJuIG5vZGUubWVtb2l6ZWRQcm9wcztcbiAgICBjYXNlIEZpYmVyVGFncy5GcmFnbWVudDpcbiAgICBjYXNlIEZpYmVyVGFncy5Nb2RlOlxuICAgIGNhc2UgRmliZXJUYWdzLkNvbnRleHRQcm92aWRlcjpcbiAgICBjYXNlIEZpYmVyVGFncy5Db250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCk7XG4gICAgY2FzZSBGaWJlclRhZ3MuUHJvZmlsZXI6XG4gICAgY2FzZSBGaWJlclRhZ3MuRm9yd2FyZFJlZjoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgcHJvcHM6IHsgLi4ubm9kZS5wZW5kaW5nUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnp5bWUgSW50ZXJuYWwgRXJyb3I6IHVua25vd24gbm9kZSB3aXRoIHRhZyAke25vZGUudGFnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuVG9UcmVlKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlQW5kU2libGluZ3NBcnJheShub2RlKTtcbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdG9UcmVlKGNoaWxkcmVuWzBdKTtcbiAgfVxuICByZXR1cm4gZmxhdHRlbihjaGlsZHJlbi5tYXAodG9UcmVlKSk7XG59XG5cbmZ1bmN0aW9uIG5vZGVUb0hvc3ROb2RlKF9ub2RlKSB7XG4gIC8vIE5PVEUobG1yKTogbm9kZSBjb3VsZCBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAvLyB3aGljaCB3b250IGhhdmUgYW4gaW5zdGFuY2UgcHJvcCwgYnV0IHdlIGNhbiBnZXQgdGhlXG4gIC8vIGhvc3Qgbm9kZSBhc3NvY2lhdGVkIHdpdGggaXRzIHJldHVybiB2YWx1ZSBhdCB0aGF0IHBvaW50LlxuICAvLyBBbHRob3VnaCB0aGlzIGJyZWFrcyBkb3duIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXksXG4gIC8vIGFzIGlzIHBvc3NpYmxlIHdpdGggUmVhY3QgMTYuXG4gIGxldCBub2RlID0gX25vZGU7XG4gIHdoaWxlIChub2RlICYmICFBcnJheS5pc0FycmF5KG5vZGUpICYmIG5vZGUuaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBub2RlID0gbm9kZS5yZW5kZXJlZDtcbiAgfVxuICAvLyBpZiB0aGUgU0ZDIHJldHVybmVkIG51bGwgZWZmZWN0aXZlbHksIHRoZXJlIGlzIG5vIGhvc3Qgbm9kZS5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXBwZXIgPSAoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtICYmIGl0ZW0uaW5zdGFuY2UpIHJldHVybiBSZWFjdERPTS5maW5kRE9NTm9kZShpdGVtLmluc3RhbmNlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5tYXAobWFwcGVyKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlLnJlbmRlcmVkKSAmJiBub2RlLm5vZGVUeXBlID09PSAnY2xhc3MnKSB7XG4gICAgcmV0dXJuIG5vZGUucmVuZGVyZWQubWFwKG1hcHBlcik7XG4gIH1cbiAgcmV0dXJuIG1hcHBlcihub2RlKTtcbn1cblxuY29uc3QgZXZlbnRPcHRpb25zID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIHBvaW50ZXJFdmVudHM6IGlzMTY0LFxuICBhdXhDbGljazogaXMxNjUsXG59O1xuXG5mdW5jdGlvbiBnZXRFbXB0eVN0YXRlVmFsdWUoKSB7XG4gIC8vIHRoaXMgaGFuZGxlcyBhIGJ1ZyBpbiBSZWFjdCAxNi4wIC0gMTYuMlxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2NvbW1pdC8zOWJlODM1NjVjNjVmOWM1MjIxNTBlNTIzNzUxNjc1NjhhMmExNDU5XG4gIC8vIGFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExOTY1XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3ByZWZlci1zdGF0ZWxlc3MtZnVuY3Rpb25cbiAgY2xhc3MgRW1wdHlTdGF0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRlc3RSZW5kZXJlciA9IG5ldyBTaGFsbG93UmVuZGVyZXIoKTtcbiAgdGVzdFJlbmRlcmVyLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KEVtcHR5U3RhdGUpKTtcbiAgcmV0dXJuIHRlc3RSZW5kZXJlci5faW5zdGFuY2Uuc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHdyYXBBY3QoZm4pIHtcbiAgaWYgKCFpczE2OCkge1xuICAgIHJldHVybiBmbigpO1xuICB9XG4gIGxldCByZXR1cm5WYWw7XG4gIFRlc3RVdGlscy5hY3QoKCkgPT4geyByZXR1cm5WYWwgPSBmbigpOyB9KTtcbiAgcmV0dXJuIHJldHVyblZhbDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvdmlkZXJEZWZhdWx0VmFsdWUoUHJvdmlkZXIpIHtcbiAgLy8gUmVhY3Qgc3RvcmVzIHJlZmVyZW5jZXMgdG8gdGhlIFByb3ZpZGVyJ3MgZGVmYXVsdFZhbHVlIGRpZmZlcmVudGx5IGFjcm9zcyB2ZXJzaW9ucy5cbiAgaWYgKCdfZGVmYXVsdFZhbHVlJyBpbiBQcm92aWRlci5fY29udGV4dCkge1xuICAgIHJldHVybiBQcm92aWRlci5fY29udGV4dC5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmICgnX2N1cnJlbnRWYWx1ZScgaW4gUHJvdmlkZXIuX2NvbnRleHQpIHtcbiAgICByZXR1cm4gUHJvdmlkZXIuX2NvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0VuenltZSBJbnRlcm5hbCBFcnJvcjogY2Fu4oCZdCBmaWd1cmUgb3V0IGhvdyB0byBnZXQgUHJvdmlkZXLigJlzIGRlZmF1bHQgdmFsdWUnKTtcbn1cblxuZnVuY3Rpb24gbWFrZUZha2VFbGVtZW50KHR5cGUpIHtcbiAgcmV0dXJuIHsgJCR0eXBlb2Y6IEVsZW1lbnQsIHR5cGUgfTtcbn1cblxuY2xhc3MgUmVhY3RTaXh0ZWVuQWRhcHRlciBleHRlbmRzIEVuenltZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgbGlmZWN5Y2xlcyB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIGVuYWJsZUNvbXBvbmVudERpZFVwZGF0ZU9uU2V0U3RhdGU6IHRydWUsIC8vIFRPRE86IHJlbW92ZSwgc2VtdmVyLW1ham9yXG4gICAgICBsZWdhY3lDb250ZXh0TW9kZTogJ3BhcmVudCcsXG4gICAgICBsaWZlY3ljbGVzOiB7XG4gICAgICAgIC4uLmxpZmVjeWNsZXMsXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZToge1xuICAgICAgICAgIG9uU2V0U3RhdGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczoge1xuICAgICAgICAgIGhhc1Nob3VsZENvbXBvbmVudFVwZGF0ZUJ1ZyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU6IHRydWUsXG4gICAgICAgIHNldFN0YXRlOiB7XG4gICAgICAgICAgc2tpcHNDb21wb25lbnREaWRVcGRhdGVPbk51bGxpc2g6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdldENoaWxkQ29udGV4dDoge1xuICAgICAgICAgIGNhbGxlZEJ5UmVuZGVyZXI6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IGlzMTY2LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlTW91bnRSZW5kZXJlcihvcHRpb25zKSB7XG4gICAgYXNzZXJ0RG9tQXZhaWxhYmxlKCdtb3VudCcpO1xuICAgIGlmIChGaWJlclRhZ3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFJlcXVpcmVzIERPTS5cbiAgICAgIEZpYmVyVGFncyA9IGRldGVjdEZpYmVyVGFncygpO1xuICAgIH1cbiAgICBjb25zdCB7IGF0dGFjaFRvLCBoeWRyYXRlSW4sIHdyYXBwaW5nQ29tcG9uZW50UHJvcHMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZG9tTm9kZSA9IGh5ZHJhdGVJbiB8fCBhdHRhY2hUbyB8fCBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbGV0IGluc3RhbmNlID0gbnVsbDtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyKGVsLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gd3JhcEFjdCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCByZWYgfSA9IGVsO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlclByb3BzID0ge1xuICAgICAgICAgICAgICBDb21wb25lbnQ6IHR5cGUsXG4gICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICB3cmFwcGluZ0NvbXBvbmVudFByb3BzLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAuLi4ocmVmICYmIHsgcmVmIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFJlYWN0V3JhcHBlckNvbXBvbmVudCA9IGNyZWF0ZU1vdW50V3JhcHBlcihlbCwgeyAuLi5vcHRpb25zLCBhZGFwdGVyIH0pO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZEVsID0gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdFdyYXBwZXJDb21wb25lbnQsIHdyYXBwZXJQcm9wcyk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IGh5ZHJhdGVJblxuICAgICAgICAgICAgICA/IFJlYWN0RE9NLmh5ZHJhdGUod3JhcHBlZEVsLCBkb21Ob2RlKVxuICAgICAgICAgICAgICA6IFJlYWN0RE9NLnJlbmRlcih3cmFwcGVkRWwsIGRvbU5vZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRDaGlsZFByb3BzKGVsLnByb3BzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB1bm1vdW50KCkge1xuICAgICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvbU5vZGUpO1xuICAgICAgICBpbnN0YW5jZSA9IG51bGw7XG4gICAgICB9LFxuICAgICAgZ2V0Tm9kZSgpIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXROb2RlRnJvbVJvb3RGaW5kZXIoXG4gICAgICAgICAgYWRhcHRlci5pc0N1c3RvbUNvbXBvbmVudCxcbiAgICAgICAgICB0b1RyZWUoaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxGaWJlciksXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUVycm9yKG5vZGVIaWVyYXJjaHksIHJvb3ROb2RlLCBlcnJvcikge1xuICAgICAgICBjb25zdCBpc0Vycm9yQm91bmRhcnkgPSAoeyBpbnN0YW5jZTogZWxJbnN0YW5jZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzMTY2ICYmIHR5cGUgJiYgdHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZWxJbnN0YW5jZSAmJiBlbEluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpbnN0YW5jZTogY2F0Y2hpbmdJbnN0YW5jZSxcbiAgICAgICAgICB0eXBlOiBjYXRjaGluZ1R5cGUsXG4gICAgICAgIH0gPSBub2RlSGllcmFyY2h5LmZpbmQoaXNFcnJvckJvdW5kYXJ5KSB8fCB7fTtcblxuICAgICAgICBzaW11bGF0ZUVycm9yKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNhdGNoaW5nSW5zdGFuY2UsXG4gICAgICAgICAgcm9vdE5vZGUsXG4gICAgICAgICAgbm9kZUhpZXJhcmNoeSxcbiAgICAgICAgICBub2RlVHlwZUZyb21UeXBlLFxuICAgICAgICAgIGFkYXB0ZXIuZGlzcGxheU5hbWVPZk5vZGUsXG4gICAgICAgICAgaXMxNjYgPyBjYXRjaGluZ1R5cGUgOiB1bmRlZmluZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2ltdWxhdGVFdmVudChub2RlLCBldmVudCwgbW9jaykge1xuICAgICAgICBjb25zdCBtYXBwZWRFdmVudCA9IG1hcE5hdGl2ZUV2ZW50TmFtZXMoZXZlbnQsIGV2ZW50T3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGV2ZW50Rm4gPSBUZXN0VXRpbHMuU2ltdWxhdGVbbWFwcGVkRXZlbnRdO1xuICAgICAgICBpZiAoIWV2ZW50Rm4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWFjdFdyYXBwZXI6OnNpbXVsYXRlKCkgZXZlbnQgJyR7ZXZlbnR9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50Rm4obm9kZVRvSG9zdE5vZGUobm9kZSksIG1vY2spO1xuICAgICAgfSxcbiAgICAgIGJhdGNoZWRVcGRhdGVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICAvLyByZXR1cm4gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZm4pO1xuICAgICAgfSxcbiAgICAgIGdldFdyYXBwaW5nQ29tcG9uZW50UmVuZGVyZXIoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAuLi5nZXRXcmFwcGluZ0NvbXBvbmVudE1vdW50UmVuZGVyZXIoe1xuICAgICAgICAgICAgdG9UcmVlOiBpbnN0ID0+IHRvVHJlZShpbnN0Ll9yZWFjdEludGVybmFsRmliZXIpLFxuICAgICAgICAgICAgZ2V0TW91bnRXcmFwcGVySW5zdGFuY2U6ICgpID0+IGluc3RhbmNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlU2hhbGxvd1JlbmRlcmVyKC8qIG9wdGlvbnMgKi8pIHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcztcbiAgICBjb25zdCByZW5kZXJlciA9IG5ldyBTaGFsbG93UmVuZGVyZXIoKTtcbiAgICBsZXQgaXNET00gPSBmYWxzZTtcbiAgICBsZXQgY2FjaGVkTm9kZSA9IG51bGw7XG5cbiAgICBsZXQgbGFzdENvbXBvbmVudCA9IG51bGw7XG4gICAgbGV0IHdyYXBwZWRDb21wb25lbnQgPSBudWxsO1xuXG4gICAgLy8gV3JhcCBmdW5jdGlvbmFsIGNvbXBvbmVudHMgb24gdmVyc2lvbnMgcHJpb3IgdG8gMTYuNSxcbiAgICAvLyB0byBhdm9pZCBpbmFkdmVydGVudGx5IHBhc3MgYSBgdGhpc2AgaW5zdGFuY2UgdG8gaXQuXG4gICAgY29uc3Qgd3JhcEZ1bmN0aW9uYWxDb21wb25lbnQgPSAoQ29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoaXMxNjUpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RDb21wb25lbnQgIT09IENvbXBvbmVudCkge1xuICAgICAgICB3cmFwcGVkQ29tcG9uZW50ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAoLi4uYXJncykgPT4gQ29tcG9uZW50KC4uLmFyZ3MpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICk7XG4gICAgICAgIGxhc3RDb21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlZENvbXBvbmVudDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcihlbCwgdW5tYXNrZWRDb250ZXh0LCB7XG4gICAgICAgIHByb3ZpZGVyVmFsdWVzID0gbmV3IE1hcCgpLFxuICAgICAgfSA9IHt9KSB7XG4gICAgICAgIGNhY2hlZE5vZGUgPSBlbDtcbiAgICAgICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4gICAgICAgIGlmICh0eXBlb2YgZWwudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpc0RPTSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb250ZXh0UHJvdmlkZXIoZWwpKSB7XG4gICAgICAgICAgcHJvdmlkZXJWYWx1ZXMuc2V0KGVsLnR5cGUsIGVsLnByb3BzLnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBNb2NrUHJvdmlkZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcHJvcHMgPT4gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICBlbC50eXBlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHdpdGhTZXRTdGF0ZUFsbG93ZWQoKCkgPT4gcmVuZGVyZXIucmVuZGVyKHsgLi4uZWwsIHR5cGU6IE1vY2tQcm92aWRlciB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb250ZXh0Q29uc3VtZXIoZWwpKSB7XG4gICAgICAgICAgY29uc3QgUHJvdmlkZXIgPSBhZGFwdGVyLmdldFByb3ZpZGVyRnJvbUNvbnN1bWVyKGVsLnR5cGUpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZXJWYWx1ZXMuaGFzKFByb3ZpZGVyKVxuICAgICAgICAgICAgPyBwcm92aWRlclZhbHVlcy5nZXQoUHJvdmlkZXIpXG4gICAgICAgICAgICA6IGdldFByb3ZpZGVyRGVmYXVsdFZhbHVlKFByb3ZpZGVyKTtcbiAgICAgICAgICBjb25zdCBNb2NrQ29uc3VtZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcHJvcHMgPT4gcHJvcHMuY2hpbGRyZW4odmFsdWUpLFxuICAgICAgICAgICAgZWwudHlwZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcih7IC4uLmVsLCB0eXBlOiBNb2NrQ29uc3VtZXIgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzRE9NID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgeyB0eXBlOiBDb21wb25lbnQgfSA9IGVsO1xuXG4gICAgICAgICAgY29uc3QgaXNTdGF0ZWZ1bCA9IENvbXBvbmVudC5wcm90b3R5cGUgJiYgKFxuICAgICAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50XG4gICAgICAgICAgICB8fCBBcnJheS5pc0FycmF5KENvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlycykgLy8gZmFsbGJhY2sgZm9yIGNyZWF0ZUNsYXNzIGNvbXBvbmVudHNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQoQ29tcG9uZW50LmNvbnRleHRUeXBlcywgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgICAgICAgIGlmICghaXNTdGF0ZWZ1bCAmJiBpc01lbW8oZWwudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IElubmVyQ29tcCA9IGVsLnR5cGUudHlwZTtcbiAgICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihcbiAgICAgICAgICAgICAgeyAuLi5lbCwgdHlwZTogd3JhcEZ1bmN0aW9uYWxDb21wb25lbnQoSW5uZXJDb21wKSB9LFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFpc1N0YXRlZnVsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihcbiAgICAgICAgICAgICAgeyAuLi5lbCwgdHlwZTogd3JhcEZ1bmN0aW9uYWxDb21wb25lbnQoQ29tcG9uZW50KSB9LFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RhdGVmdWwpIHtcbiAgICAgICAgICAgIC8vIGZpeCByZWFjdCBidWc7IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0RW1wdHlTdGF0ZVZhbHVlYFxuICAgICAgICAgICAgY29uc3QgZW1wdHlTdGF0ZVZhbHVlID0gZ2V0RW1wdHlTdGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoZW1wdHlTdGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gZW1wdHlTdGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihlbCwgY29udGV4dCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdW5tb3VudCgpIHtcbiAgICAgICAgcmVuZGVyZXIudW5tb3VudCgpO1xuICAgICAgfSxcbiAgICAgIGdldE5vZGUoKSB7XG4gICAgICAgIGlmIChpc0RPTSkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50VG9UcmVlKGNhY2hlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHJlbmRlcmVyLmdldFJlbmRlck91dHB1dCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBub2RlVHlwZUZyb21UeXBlKGNhY2hlZE5vZGUudHlwZSksXG4gICAgICAgICAgdHlwZTogY2FjaGVkTm9kZS50eXBlLFxuICAgICAgICAgIHByb3BzOiBjYWNoZWROb2RlLnByb3BzLFxuICAgICAgICAgIGtleTogZW5zdXJlS2V5T3JVbmRlZmluZWQoY2FjaGVkTm9kZS5rZXkpLFxuICAgICAgICAgIHJlZjogY2FjaGVkTm9kZS5yZWYsXG4gICAgICAgICAgaW5zdGFuY2U6IHJlbmRlcmVyLl9pbnN0YW5jZSxcbiAgICAgICAgICByZW5kZXJlZDogQXJyYXkuaXNBcnJheShvdXRwdXQpXG4gICAgICAgICAgICA/IGZsYXR0ZW4ob3V0cHV0KS5tYXAoZWwgPT4gZWxlbWVudFRvVHJlZShlbCkpXG4gICAgICAgICAgICA6IGVsZW1lbnRUb1RyZWUob3V0cHV0KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUVycm9yKG5vZGVIaWVyYXJjaHksIHJvb3ROb2RlLCBlcnJvcikge1xuICAgICAgICBzaW11bGF0ZUVycm9yKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHJlbmRlcmVyLl9pbnN0YW5jZSxcbiAgICAgICAgICBjYWNoZWROb2RlLFxuICAgICAgICAgIG5vZGVIaWVyYXJjaHkuY29uY2F0KGNhY2hlZE5vZGUpLFxuICAgICAgICAgIG5vZGVUeXBlRnJvbVR5cGUsXG4gICAgICAgICAgYWRhcHRlci5kaXNwbGF5TmFtZU9mTm9kZSxcbiAgICAgICAgICBpczE2NiA/IGNhY2hlZE5vZGUudHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUV2ZW50KG5vZGUsIGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBub2RlLnByb3BzW3Byb3BGcm9tRXZlbnQoZXZlbnQsIGV2ZW50T3B0aW9ucyldO1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIHdpdGhTZXRTdGF0ZUFsbG93ZWQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gVE9ETyhsbXIpOiBjcmVhdGUvdXNlIHN5bnRoZXRpYyBldmVudHNcbiAgICAgICAgICAgIC8vIFRPRE8obG1yKTogZW11bGF0ZSBSZWFjdCdzIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICAvLyBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcygoKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiYXRjaGVkVXBkYXRlcyhmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgLy8gcmV0dXJuIFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZuKTtcbiAgICAgIH0sXG4gICAgICBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGhpZXJhcmNoeSkge1xuICAgICAgICByZXR1cm4gY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgdHlwZVNwZWNzLFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICBkaXNwbGF5TmFtZU9mTm9kZShjYWNoZWROb2RlKSxcbiAgICAgICAgICAoKSA9PiBnZXRDb21wb25lbnRTdGFjayhoaWVyYXJjaHkuY29uY2F0KFtjYWNoZWROb2RlXSkpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlU3RyaW5nUmVuZGVyZXIob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICByZW5kZXIoZWwsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGV4dCAmJiAoZWwudHlwZS5jb250ZXh0VHlwZXMgfHwgb3B0aW9ucy5jaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZENvbnRleHRUeXBlcyA9IHtcbiAgICAgICAgICAgIC4uLihlbC50eXBlLmNvbnRleHRUeXBlcyB8fCB7fSksXG4gICAgICAgICAgICAuLi5vcHRpb25zLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgQ29udGV4dFdyYXBwZXIgPSBjcmVhdGVSZW5kZXJXcmFwcGVyKGVsLCBjb250ZXh0LCBjaGlsZENvbnRleHRUeXBlcyk7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RhdGljTWFya3VwKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dFdyYXBwZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9TdGF0aWNNYXJrdXAoZWwpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJvdmlkZWQgYSBiYWcgb2Ygb3B0aW9ucywgcmV0dXJuIGFuIGBFbnp5bWVSZW5kZXJlcmAuIFNvbWUgb3B0aW9ucyBjYW4gYmUgaW1wbGVtZW50YXRpb25cbiAgLy8gc3BlY2lmaWMsIGxpa2UgYGF0dGFjaGAgZXRjLiBmb3IgUmVhY3QsIGJ1dCBub3QgcGFydCBvZiB0aGlzIGludGVyZmFjZSBleHBsaWNpdGx5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBjcmVhdGVSZW5kZXJlcihvcHRpb25zKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLm1vZGUpIHtcbiAgICAgIGNhc2UgRW56eW1lQWRhcHRlci5NT0RFUy5NT1VOVDogcmV0dXJuIHRoaXMuY3JlYXRlTW91bnRSZW5kZXJlcihvcHRpb25zKTtcbiAgICAgIGNhc2UgRW56eW1lQWRhcHRlci5NT0RFUy5TSEFMTE9XOiByZXR1cm4gdGhpcy5jcmVhdGVTaGFsbG93UmVuZGVyZXIob3B0aW9ucyk7XG4gICAgICBjYXNlIEVuenltZUFkYXB0ZXIuTU9ERVMuU1RSSU5HOiByZXR1cm4gdGhpcy5jcmVhdGVTdHJpbmdSZW5kZXJlcihvcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW56eW1lIEludGVybmFsIEVycm9yOiBVbnJlY29nbml6ZWQgbW9kZTogJHtvcHRpb25zLm1vZGV9YCk7XG4gICAgfVxuICB9XG5cbiAgd3JhcChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHdyYXAoZWxlbWVudCk7XG4gIH1cblxuICAvLyBjb252ZXJ0cyBhbiBSU1ROb2RlIHRvIHRoZSBjb3JyZXNwb25kaW5nIEpTWCBQcmFnbWEgRWxlbWVudC4gVGhpcyB3aWxsIGJlIG5lZWRlZFxuICAvLyBpbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGBXcmFwcGVyLm1vdW50KClgIGFuZCBgV3JhcHBlci5zaGFsbG93KClgIG1ldGhvZHMsIGJ1dCBzaG91bGRcbiAgLy8gYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmb3IgcGVvcGxlIHRvIGltcGxlbWVudC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgbm9kZVRvRWxlbWVudChub2RlKSB7XG4gICAgaWYgKCFub2RlIHx8IHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQobm9kZS50eXBlLCBwcm9wc1dpdGhLZXlzQW5kUmVmKG5vZGUpKTtcbiAgfVxuXG4gIGVsZW1lbnRUb05vZGUoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICB9XG5cbiAgbm9kZVRvSG9zdE5vZGUobm9kZSwgc3VwcG9ydHNBcnJheSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBub2RlVG9Ib3N0Tm9kZShub2RlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlcykgJiYgIXN1cHBvcnRzQXJyYXkpIHtcbiAgICAgIHJldHVybiBub2Rlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgZGlzcGxheU5hbWVPZk5vZGUobm9kZSkge1xuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyB0eXBlLCAkJHR5cGVvZiB9ID0gbm9kZTtcblxuICAgIGNvbnN0IG5vZGVUeXBlID0gdHlwZSB8fCAkJHR5cGVvZjtcblxuICAgIC8vIG5ld2VyIG5vZGUgdHlwZXMgbWF5IGJlIHVuZGVmaW5lZCwgc28gb25seSB0ZXN0IGlmIHRoZSBub2RlVHlwZSBleGlzdHNcbiAgICBpZiAobm9kZVR5cGUpIHtcbiAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSAoaXMxNjYgPyBDb25jdXJyZW50TW9kZSA6IEFzeW5jTW9kZSkgfHwgTmFOOiByZXR1cm4gaXMxNjYgPyAnQ29uY3VycmVudE1vZGUnIDogJ0FzeW5jTW9kZSc7XG4gICAgICAgIGNhc2UgRnJhZ21lbnQgfHwgTmFOOiByZXR1cm4gJ0ZyYWdtZW50JztcbiAgICAgICAgY2FzZSBTdHJpY3RNb2RlIHx8IE5hTjogcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICAgICAgY2FzZSBQcm9maWxlciB8fCBOYU46IHJldHVybiAnUHJvZmlsZXInO1xuICAgICAgICBjYXNlIFBvcnRhbCB8fCBOYU46IHJldHVybiAnUG9ydGFsJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgY2FzZSBDb250ZXh0Q29uc3VtZXIgfHwgTmFOOiByZXR1cm4gJ0NvbnRleHRDb25zdW1lcic7XG4gICAgICBjYXNlIENvbnRleHRQcm92aWRlciB8fCBOYU46IHJldHVybiAnQ29udGV4dFByb3ZpZGVyJztcbiAgICAgIGNhc2UgTWVtbyB8fCBOYU46IHJldHVybiBkaXNwbGF5TmFtZU9mTm9kZSh0eXBlKTtcbiAgICAgIGNhc2UgRm9yd2FyZFJlZiB8fCBOYU46IHtcbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gZGlzcGxheU5hbWVPZk5vZGUoeyB0eXBlOiB0eXBlLnJlbmRlciB9KTtcbiAgICAgICAgcmV0dXJuIG5hbWUgPyBgRm9yd2FyZFJlZigke25hbWV9KWAgOiAnRm9yd2FyZFJlZic7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiByZXR1cm4gZGlzcGxheU5hbWVPZk5vZGUobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBpc1ZhbGlkRWxlbWVudFR5cGUob2JqZWN0KSB7XG4gICAgcmV0dXJuICEhb2JqZWN0ICYmIGlzVmFsaWRFbGVtZW50VHlwZShvYmplY3QpO1xuICB9XG5cbiAgaXNGcmFnbWVudChmcmFnbWVudCkge1xuICAgIHJldHVybiB0eXBlT2ZOb2RlKGZyYWdtZW50KSA9PT0gRnJhZ21lbnQ7XG4gIH1cblxuICBpc0N1c3RvbUNvbXBvbmVudCh0eXBlKSB7XG4gICAgY29uc3QgZmFrZUVsZW1lbnQgPSBtYWtlRmFrZUVsZW1lbnQodHlwZSk7XG4gICAgcmV0dXJuICEhdHlwZSAmJiAoXG4gICAgICB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgfHwgaXNGb3J3YXJkUmVmKGZha2VFbGVtZW50KVxuICAgICAgfHwgaXNDb250ZXh0UHJvdmlkZXIoZmFrZUVsZW1lbnQpXG4gICAgICB8fCBpc0NvbnRleHRDb25zdW1lcihmYWtlRWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgaXNDb250ZXh0Q29uc3VtZXIodHlwZSkge1xuICAgIHJldHVybiAhIXR5cGUgJiYgaXNDb250ZXh0Q29uc3VtZXIobWFrZUZha2VFbGVtZW50KHR5cGUpKTtcbiAgfVxuXG4gIGlzQ3VzdG9tQ29tcG9uZW50RWxlbWVudChpbnN0KSB7XG4gICAgaWYgKCFpbnN0IHx8ICF0aGlzLmlzVmFsaWRFbGVtZW50KGluc3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ3VzdG9tQ29tcG9uZW50KGluc3QudHlwZSk7XG4gIH1cblxuICBnZXRQcm92aWRlckZyb21Db25zdW1lcihDb25zdW1lcikge1xuICAgIC8vIFJlYWN0IHN0b3JlcyByZWZlcmVuY2VzIHRvIHRoZSBQcm92aWRlciBvbiBhIENvbnN1bWVyIGRpZmZlcmVudGx5IGFjcm9zcyB2ZXJzaW9ucy5cbiAgICBpZiAoQ29uc3VtZXIpIHtcbiAgICAgIGxldCBQcm92aWRlcjtcbiAgICAgIGlmIChDb25zdW1lci5Qcm92aWRlcikge1xuICAgICAgICAoeyBQcm92aWRlciB9ID0gQ29uc3VtZXIpO1xuICAgICAgfSBlbHNlIGlmIChDb25zdW1lci5fY29udGV4dCkge1xuICAgICAgICAoeyBQcm92aWRlciB9ID0gQ29uc3VtZXIuX2NvbnRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKFByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBQcm92aWRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbnp5bWUgSW50ZXJuYWwgRXJyb3I6IGNhbuKAmXQgZmlndXJlIG91dCBob3cgdG8gZ2V0IFByb3ZpZGVyIGZyb20gQ29uc3VtZXInKTtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnQoLi4uYXJncykge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KC4uLmFyZ3MpO1xuICB9XG5cbiAgd3JhcFdpdGhXcmFwcGluZ0NvbXBvbmVudChub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFJvb3RGaW5kZXIsXG4gICAgICBub2RlOiB3cmFwV2l0aFdyYXBwaW5nQ29tcG9uZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQsIG5vZGUsIG9wdGlvbnMpLFxuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFNpeHRlZW5BZGFwdGVyO1xuIl19
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9SZWFjdFNpeHRlZW5BZGFwdGVyLmpzIl0sIm5hbWVzIjpbImlzMTY0IiwiVGVzdFV0aWxzIiwiU2ltdWxhdGUiLCJ0b3VjaFN0YXJ0IiwiaXMxNjUiLCJhdXhDbGljayIsImlzMTY2IiwiUmVhY3QiLCJ1bnN0YWJsZV9Bc3luY01vZGUiLCJpczE2OCIsImFjdCIsImhhc1Nob3VsZENvbXBvbmVudFVwZGF0ZUJ1ZyIsInNlbXZlciIsInNhdGlzZmllcyIsInRlc3RSZW5kZXJlclZlcnNpb24iLCJGaWJlclRhZ3MiLCJub2RlQW5kU2libGluZ3NBcnJheSIsIm5vZGVXaXRoU2libGluZyIsImFycmF5Iiwibm9kZSIsInB1c2giLCJzaWJsaW5nIiwiZmxhdHRlbiIsImFyciIsInJlc3VsdCIsInN0YWNrIiwiaSIsImxlbmd0aCIsIm4iLCJwb3AiLCJlbCIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGVUeXBlRnJvbVR5cGUiLCJ0eXBlIiwiUG9ydGFsIiwiZWxlbWVudFRvVHJlZSIsImNoaWxkcmVuIiwiY29udGFpbmVySW5mbyIsInByb3BzIiwibm9kZVR5cGUiLCJrZXkiLCJyZWYiLCJpbnN0YW5jZSIsInJlbmRlcmVkIiwidG9UcmVlIiwidm5vZGUiLCJ0YWciLCJIb3N0Um9vdCIsImNoaWxkcmVuVG9UcmVlIiwiY2hpbGQiLCJIb3N0UG9ydGFsIiwic3RhdGVOb2RlIiwibWVtb2l6ZWRQcm9wcyIsIkNsYXNzQ29tcG9uZW50IiwiRnVuY3Rpb25hbENvbXBvbmVudCIsIk1lbW9DbGFzcyIsImVsZW1lbnRUeXBlIiwiTWVtb1NGQyIsInJlbmRlcmVkTm9kZXMiLCJtYXAiLCJIb3N0Q29tcG9uZW50IiwiSG9zdFRleHQiLCJGcmFnbWVudCIsIk1vZGUiLCJDb250ZXh0UHJvdmlkZXIiLCJDb250ZXh0Q29uc3VtZXIiLCJQcm9maWxlciIsIkZvcndhcmRSZWYiLCJwZW5kaW5nUHJvcHMiLCJTdXNwZW5zZSIsIkxhenkiLCJFcnJvciIsIm5vZGVUb0hvc3ROb2RlIiwiX25vZGUiLCJtYXBwZXIiLCJpdGVtIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsInJlcGxhY2VMYXp5V2l0aEZhbGxiYWNrIiwiZmFsbGJhY2siLCJldmVudE9wdGlvbnMiLCJhbmltYXRpb24iLCJwb2ludGVyRXZlbnRzIiwiZ2V0RW1wdHlTdGF0ZVZhbHVlIiwiRW1wdHlTdGF0ZSIsIkNvbXBvbmVudCIsInRlc3RSZW5kZXJlciIsIlNoYWxsb3dSZW5kZXJlciIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJfaW5zdGFuY2UiLCJzdGF0ZSIsIndyYXBBY3QiLCJmbiIsInJldHVyblZhbCIsImdldFByb3ZpZGVyRGVmYXVsdFZhbHVlIiwiUHJvdmlkZXIiLCJfY29udGV4dCIsIl9kZWZhdWx0VmFsdWUiLCJfY3VycmVudFZhbHVlIiwibWFrZUZha2VFbGVtZW50IiwiJCR0eXBlb2YiLCJFbGVtZW50IiwiaXNTdGF0ZWZ1bCIsInByb3RvdHlwZSIsImlzUmVhY3RDb21wb25lbnQiLCJfX3JlYWN0QXV0b0JpbmRQYWlycyIsIlJlYWN0U2l4dGVlbkFkYXB0ZXIiLCJsaWZlY3ljbGVzIiwib3B0aW9ucyIsImVuYWJsZUNvbXBvbmVudERpZFVwZGF0ZU9uU2V0U3RhdGUiLCJsZWdhY3lDb250ZXh0TW9kZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm9uU2V0U3RhdGUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSIsInNldFN0YXRlIiwic2tpcHNDb21wb25lbnREaWRVcGRhdGVPbk51bGxpc2giLCJnZXRDaGlsZENvbnRleHQiLCJjYWxsZWRCeVJlbmRlcmVyIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiVHlwZUVycm9yIiwiYXR0YWNoVG8iLCJoeWRyYXRlSW4iLCJ3cmFwcGluZ0NvbXBvbmVudFByb3BzIiwiZG9tTm9kZSIsImdsb2JhbCIsImRvY3VtZW50IiwiYWRhcHRlciIsImNvbnRleHQiLCJjYWxsYmFjayIsIndyYXBwZXJQcm9wcyIsIlJlYWN0V3JhcHBlckNvbXBvbmVudCIsIndyYXBwZWRFbCIsImh5ZHJhdGUiLCJzZXRDaGlsZFByb3BzIiwidW5tb3VudCIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJnZXROb2RlIiwiaXNDdXN0b21Db21wb25lbnQiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwic2ltdWxhdGVFcnJvciIsIm5vZGVIaWVyYXJjaHkiLCJyb290Tm9kZSIsImVycm9yIiwiaXNFcnJvckJvdW5kYXJ5IiwiZWxJbnN0YW5jZSIsImNvbXBvbmVudERpZENhdGNoIiwiZmluZCIsImNhdGNoaW5nSW5zdGFuY2UiLCJjYXRjaGluZ1R5cGUiLCJkaXNwbGF5TmFtZU9mTm9kZSIsInVuZGVmaW5lZCIsInNpbXVsYXRlRXZlbnQiLCJldmVudCIsIm1vY2siLCJtYXBwZWRFdmVudCIsImV2ZW50Rm4iLCJiYXRjaGVkVXBkYXRlcyIsImdldFdyYXBwaW5nQ29tcG9uZW50UmVuZGVyZXIiLCJpbnN0IiwiZ2V0TW91bnRXcmFwcGVySW5zdGFuY2UiLCJyZW5kZXJlciIsInN1c3BlbnNlRmFsbGJhY2siLCJpc0RPTSIsImNhY2hlZE5vZGUiLCJsYXN0Q29tcG9uZW50Iiwid3JhcHBlZENvbXBvbmVudCIsInNlbnRpbmVsIiwid3JhcFB1cmVDb21wb25lbnQiLCJjb21wYXJlIiwiUmFuZ2VFcnJvciIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwibWVtb2l6ZWQiLCJwcmV2UHJvcHMiLCJzaG91bGRVcGRhdGUiLCJhcmdzIiwiZGVmYXVsdFByb3BzIiwiZGlzcGxheU5hbWUiLCJ3cmFwRnVuY3Rpb25hbENvbXBvbmVudCIsInVubWFza2VkQ29udGV4dCIsInByb3ZpZGVyVmFsdWVzIiwiTWFwIiwic2V0IiwidmFsdWUiLCJNb2NrUHJvdmlkZXIiLCJnZXRQcm92aWRlckZyb21Db25zdW1lciIsImhhcyIsImdldCIsIk1vY2tDb25zdW1lciIsInJlbmRlcmVkRWwiLCJGYWtlU3VzcGVuc2VXcmFwcGVyIiwiY29udGV4dFR5cGVzIiwiSW5uZXJDb21wIiwiZW1wdHlTdGF0ZVZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJvdXRwdXQiLCJnZXRSZW5kZXJPdXRwdXQiLCJjb25jYXQiLCJoYW5kbGVyIiwiY2hlY2tQcm9wVHlwZXMiLCJ0eXBlU3BlY3MiLCJ2YWx1ZXMiLCJsb2NhdGlvbiIsImhpZXJhcmNoeSIsImNoaWxkQ29udGV4dFR5cGVzIiwiQ29udGV4dFdyYXBwZXIiLCJSZWFjdERPTVNlcnZlciIsInJlbmRlclRvU3RhdGljTWFya3VwIiwibW9kZSIsIkVuenltZUFkYXB0ZXIiLCJNT0RFUyIsIk1PVU5UIiwiY3JlYXRlTW91bnRSZW5kZXJlciIsIlNIQUxMT1ciLCJjcmVhdGVTaGFsbG93UmVuZGVyZXIiLCJTVFJJTkciLCJjcmVhdGVTdHJpbmdSZW5kZXJlciIsImVsZW1lbnQiLCJzdXBwb3J0c0FycmF5Iiwibm9kZXMiLCJDb25jdXJyZW50TW9kZSIsIkFzeW5jTW9kZSIsIk5hTiIsIlN0cmljdE1vZGUiLCIkJHR5cGVvZlR5cGUiLCJNZW1vIiwibm9kZU5hbWUiLCJuYW1lIiwib2JqZWN0IiwiZnJhZ21lbnQiLCJmYWtlRWxlbWVudCIsImlzVmFsaWRFbGVtZW50IiwiQ29uc3VtZXIiLCJSb290RmluZGVyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUVBOzs7O0FBQ0E7O0FBRUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUF3QkE7O0FBQ0E7O0FBQ0E7O0FBcUJBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OzsrZUE3REE7O0FBR0E7O0FBRUE7O0FBR0E7OztBQXVEQSxJQUFNQSxRQUFRLENBQUMsQ0FBQ0MsdUJBQVVDLFFBQVYsQ0FBbUJDLFVBQW5DLEMsQ0FBK0M7QUFDL0Ms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QUNaK0ksUUFEWSxDQUN6Qi9JLFFBRHlCO0FBRTdCO0FBQ0QsY0FBSUEsUUFBSixFQUFjO0FBQ1osbUJBQU9BLFFBQVA7QUFDRDtBQUNGO0FBQ0QsY0FBTSxJQUFJekIsS0FBSixDQUFVLDJFQUFWLENBQU47QUFDRDs7Ozs7OzsrQkFFc0I7QUFDckIsZUFBT2pFLG1CQUFNbUYsYUFBTixxQ0FBUDtBQUNEOzs7Ozs7O3lDQUV5QnZFLEksRUFBTTJGLE8sRUFBUztBQUN2QyxlQUFPO0FBQ0xtSSxvREFESztBQUVMOU4sZ0JBQU0sbURBQTBCWixtQkFBTW1GLGFBQWhDLEVBQStDdkUsSUFBL0MsRUFBcUQyRixPQUFyRDtBQUZELFNBQVA7QUFJRDs7Ozs7OztFQW5nQitCMkcscUI7O0FBc2dCbEN5QixPQUFPQyxPQUFQLEdBQWlCdkksbUJBQWpCIiwiZmlsZSI6IlJlYWN0U2l4dGVlbkFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tdXNlLWJlZm9yZS1kZWZpbmU6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IFJlYWN0RE9NU2VydmVyIGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgU2hhbGxvd1JlbmRlcmVyIGZyb20gJ3JlYWN0LXRlc3QtcmVuZGVyZXIvc2hhbGxvdyc7XG5pbXBvcnQgeyB2ZXJzaW9uIGFzIHRlc3RSZW5kZXJlclZlcnNpb24gfSBmcm9tICdyZWFjdC10ZXN0LXJlbmRlcmVyL3BhY2thZ2UuanNvbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCBUZXN0VXRpbHMgZnJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IGNoZWNrUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMnO1xuaW1wb3J0IGhhcyBmcm9tICdoYXMnO1xuaW1wb3J0IHtcbiAgQXN5bmNNb2RlLFxuICBDb25jdXJyZW50TW9kZSxcbiAgQ29udGV4dENvbnN1bWVyLFxuICBDb250ZXh0UHJvdmlkZXIsXG4gIEVsZW1lbnQsXG4gIEZvcndhcmRSZWYsXG4gIEZyYWdtZW50LFxuICBpc0NvbnRleHRDb25zdW1lcixcbiAgaXNDb250ZXh0UHJvdmlkZXIsXG4gIGlzRWxlbWVudCxcbiAgaXNGb3J3YXJkUmVmLFxuICBpc0xhenksXG4gIGlzTWVtbyxcbiAgaXNQb3J0YWwsXG4gIGlzU3VzcGVuc2UsXG4gIGlzVmFsaWRFbGVtZW50VHlwZSxcbiAgTGF6eSxcbiAgTWVtbyxcbiAgUG9ydGFsLFxuICBQcm9maWxlcixcbiAgU3RyaWN0TW9kZSxcbiAgU3VzcGVuc2UsXG59IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCB7IEVuenltZUFkYXB0ZXIgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IHsgdHlwZU9mTm9kZSwgc2hhbGxvd0VxdWFsIH0gZnJvbSAnZW56eW1lL2J1aWxkL1V0aWxzJztcbmltcG9ydCB7XG4gIGRpc3BsYXlOYW1lT2ZOb2RlLFxuICBlbGVtZW50VG9UcmVlIGFzIHV0aWxFbGVtZW50VG9UcmVlLFxuICBub2RlVHlwZUZyb21UeXBlIGFzIHV0aWxOb2RlVHlwZUZyb21UeXBlLFxuICBtYXBOYXRpdmVFdmVudE5hbWVzLFxuICBwcm9wRnJvbUV2ZW50LFxuICBhc3NlcnREb21BdmFpbGFibGUsXG4gIHdpdGhTZXRTdGF0ZUFsbG93ZWQsXG4gIGNyZWF0ZVJlbmRlcldyYXBwZXIsXG4gIGNyZWF0ZU1vdW50V3JhcHBlcixcbiAgcHJvcHNXaXRoS2V5c0FuZFJlZixcbiAgZW5zdXJlS2V5T3JVbmRlZmluZWQsXG4gIHNpbXVsYXRlRXJyb3IsXG4gIHdyYXAsXG4gIGdldE1hc2tlZENvbnRleHQsXG4gIGdldENvbXBvbmVudFN0YWNrLFxuICBSb290RmluZGVyLFxuICBnZXROb2RlRnJvbVJvb3RGaW5kZXIsXG4gIHdyYXBXaXRoV3JhcHBpbmdDb21wb25lbnQsXG4gIGdldFdyYXBwaW5nQ29tcG9uZW50TW91bnRSZW5kZXJlcixcbn0gZnJvbSAnZW56eW1lLWFkYXB0ZXItdXRpbHMnO1xuaW1wb3J0IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIGZyb20gJy4vZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgnO1xuaW1wb3J0IGRldGVjdEZpYmVyVGFncyBmcm9tICcuL2RldGVjdEZpYmVyVGFncyc7XG5cbmNvbnN0IGlzMTY0ID0gISFUZXN0VXRpbHMuU2ltdWxhdGUudG91Y2hTdGFydDsgLy8gMTYuNCtcbmNvbnN0IGlzMTY1ID0gISFUZXN0VXRpbHMuU2ltdWxhdGUuYXV4Q2xpY2s7IC8vIDE2LjUrXG5jb25zdCBpczE2NiA9IGlzMTY1ICYmICFSZWFjdC51bnN0YWJsZV9Bc3luY01vZGU7IC8vIDE2LjYrXG5jb25zdCBpczE2OCA9IGlzMTY2ICYmIHR5cGVvZiBUZXN0VXRpbHMuYWN0ID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBoYXNTaG91bGRDb21wb25lbnRVcGRhdGVCdWcgPSBzZW12ZXIuc2F0aXNmaWVzKHRlc3RSZW5kZXJlclZlcnNpb24sICc8IDE2LjgnKTtcblxuLy8gTGF6aWx5IHBvcHVsYXRlZCBpZiBET00gaXMgYXZhaWxhYmxlLlxubGV0IEZpYmVyVGFncyA9IG51bGw7XG5cbmZ1bmN0aW9uIG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGVXaXRoU2libGluZykge1xuICBjb25zdCBhcnJheSA9IFtdO1xuICBsZXQgbm9kZSA9IG5vZGVXaXRoU2libGluZztcbiAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgIGFycmF5LnB1c2gobm9kZSk7XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBzdGFjayA9IFt7IGk6IDAsIGFycmF5OiBhcnIgfV07XG4gIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICBjb25zdCBuID0gc3RhY2sucG9wKCk7XG4gICAgd2hpbGUgKG4uaSA8IG4uYXJyYXkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbCA9IG4uYXJyYXlbbi5pXTtcbiAgICAgIG4uaSArPSAxO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwpKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobik7XG4gICAgICAgIHN0YWNrLnB1c2goeyBpOiAwLCBhcnJheTogZWwgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goZWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IFBvcnRhbCkge1xuICAgIHJldHVybiAncG9ydGFsJztcbiAgfVxuXG4gIHJldHVybiB1dGlsTm9kZVR5cGVGcm9tVHlwZSh0eXBlKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFRvVHJlZShlbCkge1xuICBpZiAoIWlzUG9ydGFsKGVsKSkge1xuICAgIHJldHVybiB1dGlsRWxlbWVudFRvVHJlZShlbCwgZWxlbWVudFRvVHJlZSk7XG4gIH1cblxuICBjb25zdCB7IGNoaWxkcmVuLCBjb250YWluZXJJbmZvIH0gPSBlbDtcbiAgY29uc3QgcHJvcHMgPSB7IGNoaWxkcmVuLCBjb250YWluZXJJbmZvIH07XG5cbiAgcmV0dXJuIHtcbiAgICBub2RlVHlwZTogJ3BvcnRhbCcsXG4gICAgdHlwZTogUG9ydGFsLFxuICAgIHByb3BzLFxuICAgIGtleTogZW5zdXJlS2V5T3JVbmRlZmluZWQoZWwua2V5KSxcbiAgICByZWY6IGVsLnJlZiB8fCBudWxsLFxuICAgIGluc3RhbmNlOiBudWxsLFxuICAgIHJlbmRlcmVkOiBlbGVtZW50VG9UcmVlKGVsLmNoaWxkcmVuKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9UcmVlKHZub2RlKSB7XG4gIGlmICh2bm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVE9ETyhsbXIpOiBJJ20gbm90IHJlYWxseSBzdXJlIEkgdW5kZXJzdGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHdoYXRcbiAgLy8gaSBzaG91bGQgYmUgZG9pbmcsIG9yIGlmIHRoaXMgaXMgYSBoYWNrIGZvciBzb21ldGhpbmcgaSdtIGRvaW5nIHdyb25nXG4gIC8vIHNvbWV3aGVyZSBlbHNlLiBTaG91bGQgdGFsayB0byBzZWJhc3RpYW4gYWJvdXQgdGhpcyBwZXJoYXBzXG4gIGNvbnN0IG5vZGUgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aCh2bm9kZSk7XG4gIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICBjYXNlIEZpYmVyVGFncy5Ib3N0Um9vdDpcbiAgICAgIHJldHVybiBjaGlsZHJlblRvVHJlZShub2RlLmNoaWxkKTtcbiAgICBjYXNlIEZpYmVyVGFncy5Ib3N0UG9ydGFsOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXRlTm9kZTogeyBjb250YWluZXJJbmZvIH0sXG4gICAgICAgIG1lbW9pemVkUHJvcHM6IGNoaWxkcmVuLFxuICAgICAgfSA9IG5vZGU7XG4gICAgICBjb25zdCBwcm9wcyA9IHsgY29udGFpbmVySW5mbywgY2hpbGRyZW4gfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAncG9ydGFsJyxcbiAgICAgICAgdHlwZTogUG9ydGFsLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEZpYmVyVGFncy5DbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAnY2xhc3MnLFxuICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLkZ1bmN0aW9uYWxDb21wb25lbnQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgdHlwZTogbm9kZS50eXBlLFxuICAgICAgICBwcm9wczogeyAuLi5ub2RlLm1lbW9pemVkUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLk1lbW9DbGFzczpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAnY2xhc3MnLFxuICAgICAgICB0eXBlOiBub2RlLmVsZW1lbnRUeXBlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZC5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLk1lbW9TRkM6IHtcbiAgICAgIGxldCByZW5kZXJlZE5vZGVzID0gZmxhdHRlbihub2RlQW5kU2libGluZ3NBcnJheShub2RlLmNoaWxkKS5tYXAodG9UcmVlKSk7XG4gICAgICBpZiAocmVuZGVyZWROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVuZGVyZWROb2RlcyA9IFtub2RlLm1lbW9pemVkUHJvcHMuY2hpbGRyZW5dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IG5vZGUuZWxlbWVudFR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgIHJlbmRlcmVkOiByZW5kZXJlZE5vZGVzLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBGaWJlclRhZ3MuSG9zdENvbXBvbmVudDoge1xuICAgICAgbGV0IHJlbmRlcmVkTm9kZXMgPSBmbGF0dGVuKG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGUuY2hpbGQpLm1hcCh0b1RyZWUpKTtcbiAgICAgIGlmIChyZW5kZXJlZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW5kZXJlZE5vZGVzID0gW25vZGUubWVtb2l6ZWRQcm9wcy5jaGlsZHJlbl07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogJ2hvc3QnLFxuICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogcmVuZGVyZWROb2RlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgRmliZXJUYWdzLkhvc3RUZXh0OlxuICAgICAgcmV0dXJuIG5vZGUubWVtb2l6ZWRQcm9wcztcbiAgICBjYXNlIEZpYmVyVGFncy5GcmFnbWVudDpcbiAgICBjYXNlIEZpYmVyVGFncy5Nb2RlOlxuICAgIGNhc2UgRmliZXJUYWdzLkNvbnRleHRQcm92aWRlcjpcbiAgICBjYXNlIEZpYmVyVGFncy5Db250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCk7XG4gICAgY2FzZSBGaWJlclRhZ3MuUHJvZmlsZXI6XG4gICAgY2FzZSBGaWJlclRhZ3MuRm9yd2FyZFJlZjoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgcHJvcHM6IHsgLi4ubm9kZS5wZW5kaW5nUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEZpYmVyVGFncy5TdXNwZW5zZToge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IFN1c3BlbnNlLFxuICAgICAgICBwcm9wczogeyAuLi5ub2RlLm1lbW9pemVkUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEZpYmVyVGFncy5MYXp5OlxuICAgICAgcmV0dXJuIGNoaWxkcmVuVG9UcmVlKG5vZGUuY2hpbGQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuenltZSBJbnRlcm5hbCBFcnJvcjogdW5rbm93biBub2RlIHdpdGggdGFnICR7bm9kZS50YWd9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5Ub1RyZWUobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjaGlsZHJlbiA9IG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGUpO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0b1RyZWUoY2hpbGRyZW5bMF0pO1xuICB9XG4gIHJldHVybiBmbGF0dGVuKGNoaWxkcmVuLm1hcCh0b1RyZWUpKTtcbn1cblxuZnVuY3Rpb24gbm9kZVRvSG9zdE5vZGUoX25vZGUpIHtcbiAgLy8gTk9URShsbXIpOiBub2RlIGNvdWxkIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gIC8vIHdoaWNoIHdvbnQgaGF2ZSBhbiBpbnN0YW5jZSBwcm9wLCBidXQgd2UgY2FuIGdldCB0aGVcbiAgLy8gaG9zdCBub2RlIGFzc29jaWF0ZWQgd2l0aCBpdHMgcmV0dXJuIHZhbHVlIGF0IHRoYXQgcG9pbnQuXG4gIC8vIEFsdGhvdWdoIHRoaXMgYnJlYWtzIGRvd24gaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhcnJheSxcbiAgLy8gYXMgaXMgcG9zc2libGUgd2l0aCBSZWFjdCAxNi5cbiAgbGV0IG5vZGUgPSBfbm9kZTtcbiAgd2hpbGUgKG5vZGUgJiYgIUFycmF5LmlzQXJyYXkobm9kZSkgJiYgbm9kZS5pbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIG5vZGUgPSBub2RlLnJlbmRlcmVkO1xuICB9XG4gIC8vIGlmIHRoZSBTRkMgcmV0dXJuZWQgbnVsbCBlZmZlY3RpdmVseSwgdGhlcmUgaXMgbm8gaG9zdCBub2RlLlxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hcHBlciA9IChpdGVtKSA9PiB7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5pbnN0YW5jZSkgcmV0dXJuIFJlYWN0RE9NLmZpbmRET01Ob2RlKGl0ZW0uaW5zdGFuY2UpO1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIHJldHVybiBub2RlLm1hcChtYXBwZXIpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUucmVuZGVyZWQpICYmIG5vZGUubm9kZVR5cGUgPT09ICdjbGFzcycpIHtcbiAgICByZXR1cm4gbm9kZS5yZW5kZXJlZC5tYXAobWFwcGVyKTtcbiAgfVxuICByZXR1cm4gbWFwcGVyKG5vZGUpO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlTGF6eVdpdGhGYWxsYmFjayhub2RlLCBmYWxsYmFjaykge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIHJldHVybiBub2RlLm1hcChlbCA9PiByZXBsYWNlTGF6eVdpdGhGYWxsYmFjayhlbCwgZmFsbGJhY2spKTtcbiAgfVxuICBpZiAoaXNMYXp5KG5vZGUudHlwZSkpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5ub2RlLFxuICAgIHByb3BzOiB7XG4gICAgICAuLi5ub2RlLnByb3BzLFxuICAgICAgY2hpbGRyZW46IHJlcGxhY2VMYXp5V2l0aEZhbGxiYWNrKG5vZGUucHJvcHMuY2hpbGRyZW4sIGZhbGxiYWNrKSxcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBldmVudE9wdGlvbnMgPSB7XG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgcG9pbnRlckV2ZW50czogaXMxNjQsXG4gIGF1eENsaWNrOiBpczE2NSxcbn07XG5cbmZ1bmN0aW9uIGdldEVtcHR5U3RhdGVWYWx1ZSgpIHtcbiAgLy8gdGhpcyBoYW5kbGVzIGEgYnVnIGluIFJlYWN0IDE2LjAgLSAxNi4yXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvY29tbWl0LzM5YmU4MzU2NWM2NWY5YzUyMjE1MGU1MjM3NTE2NzU2OGEyYTE0NTlcbiAgLy8gYWxzbyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTE5NjVcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJlZmVyLXN0YXRlbGVzcy1mdW5jdGlvblxuICBjbGFzcyBFbXB0eVN0YXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGVzdFJlbmRlcmVyID0gbmV3IFNoYWxsb3dSZW5kZXJlcigpO1xuICB0ZXN0UmVuZGVyZXIucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRW1wdHlTdGF0ZSkpO1xuICByZXR1cm4gdGVzdFJlbmRlcmVyLl9pbnN0YW5jZS5zdGF0ZTtcbn1cblxuZnVuY3Rpb24gd3JhcEFjdChmbikge1xuICBpZiAoIWlzMTY4KSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cbiAgbGV0IHJldHVyblZhbDtcbiAgVGVzdFV0aWxzLmFjdCgoKSA9PiB7IHJldHVyblZhbCA9IGZuKCk7IH0pO1xuICByZXR1cm4gcmV0dXJuVmFsO1xufVxuXG5mdW5jdGlvbiBnZXRQcm92aWRlckRlZmF1bHRWYWx1ZShQcm92aWRlcikge1xuICAvLyBSZWFjdCBzdG9yZXMgcmVmZXJlbmNlcyB0byB0aGUgUHJvdmlkZXIncyBkZWZhdWx0VmFsdWUgZGlmZmVyZW50bHkgYWNyb3NzIHZlcnNpb25zLlxuICBpZiAoJ19kZWZhdWx0VmFsdWUnIGluIFByb3ZpZGVyLl9jb250ZXh0KSB7XG4gICAgcmV0dXJuIFByb3ZpZGVyLl9jb250ZXh0Ll9kZWZhdWx0VmFsdWU7XG4gIH1cbiAgaWYgKCdfY3VycmVudFZhbHVlJyBpbiBQcm92aWRlci5fY29udGV4dCkge1xuICAgIHJldHVybiBQcm92aWRlci5fY29udGV4dC5fY3VycmVudFZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignRW56eW1lIEludGVybmFsIEVycm9yOiBjYW7igJl0IGZpZ3VyZSBvdXQgaG93IHRvIGdldCBQcm92aWRlcuKAmXMgZGVmYXVsdCB2YWx1ZScpO1xufVxuXG5mdW5jdGlvbiBtYWtlRmFrZUVsZW1lbnQodHlwZSkge1xuICByZXR1cm4geyAkJHR5cGVvZjogRWxlbWVudCwgdHlwZSB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRlZnVsKENvbXBvbmVudCkge1xuICByZXR1cm4gQ29tcG9uZW50LnByb3RvdHlwZSAmJiAoXG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50XG4gICAgfHwgQXJyYXkuaXNBcnJheShDb21wb25lbnQuX19yZWFjdEF1dG9CaW5kUGFpcnMpIC8vIGZhbGxiYWNrIGZvciBjcmVhdGVDbGFzcyBjb21wb25lbnRzXG4gICk7XG59XG5cbmNsYXNzIFJlYWN0U2l4dGVlbkFkYXB0ZXIgZXh0ZW5kcyBFbnp5bWVBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGxpZmVjeWNsZXMgfSA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBlbmFibGVDb21wb25lbnREaWRVcGRhdGVPblNldFN0YXRlOiB0cnVlLCAvLyBUT0RPOiByZW1vdmUsIHNlbXZlci1tYWpvclxuICAgICAgbGVnYWN5Q29udGV4dE1vZGU6ICdwYXJlbnQnLFxuICAgICAgbGlmZWN5Y2xlczoge1xuICAgICAgICAuLi5saWZlY3ljbGVzLFxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGU6IHtcbiAgICAgICAgICBvblNldFN0YXRlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHtcbiAgICAgICAgICBoYXNTaG91bGRDb21wb25lbnRVcGRhdGVCdWcsXG4gICAgICAgIH0sXG4gICAgICAgIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlOiB0cnVlLFxuICAgICAgICBzZXRTdGF0ZToge1xuICAgICAgICAgIHNraXBzQ29tcG9uZW50RGlkVXBkYXRlT25OdWxsaXNoOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBnZXRDaGlsZENvbnRleHQ6IHtcbiAgICAgICAgICBjYWxsZWRCeVJlbmRlcmVyOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiBpczE2NixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZU1vdW50UmVuZGVyZXIob3B0aW9ucykge1xuICAgIGFzc2VydERvbUF2YWlsYWJsZSgnbW91bnQnKTtcbiAgICBpZiAoaGFzKG9wdGlvbnMsICdzdXNwZW5zZUZhbGxiYWNrJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BzdXNwZW5zZUZhbGxiYWNrYCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgbW91bnRgIHJlbmRlcmVyJyk7XG4gICAgfVxuICAgIGlmIChGaWJlclRhZ3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFJlcXVpcmVzIERPTS5cbiAgICAgIEZpYmVyVGFncyA9IGRldGVjdEZpYmVyVGFncygpO1xuICAgIH1cbiAgICBjb25zdCB7IGF0dGFjaFRvLCBoeWRyYXRlSW4sIHdyYXBwaW5nQ29tcG9uZW50UHJvcHMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZG9tTm9kZSA9IGh5ZHJhdGVJbiB8fCBhdHRhY2hUbyB8fCBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbGV0IGluc3RhbmNlID0gbnVsbDtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyKGVsLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gd3JhcEFjdCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCByZWYgfSA9IGVsO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlclByb3BzID0ge1xuICAgICAgICAgICAgICBDb21wb25lbnQ6IHR5cGUsXG4gICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICB3cmFwcGluZ0NvbXBvbmVudFByb3BzLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAuLi4ocmVmICYmIHsgcmVmIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFJlYWN0V3JhcHBlckNvbXBvbmVudCA9IGNyZWF0ZU1vdW50V3JhcHBlcihlbCwgeyAuLi5vcHRpb25zLCBhZGFwdGVyIH0pO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZEVsID0gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdFdyYXBwZXJDb21wb25lbnQsIHdyYXBwZXJQcm9wcyk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IGh5ZHJhdGVJblxuICAgICAgICAgICAgICA/IFJlYWN0RE9NLmh5ZHJhdGUod3JhcHBlZEVsLCBkb21Ob2RlKVxuICAgICAgICAgICAgICA6IFJlYWN0RE9NLnJlbmRlcih3cmFwcGVkRWwsIGRvbU5vZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRDaGlsZFByb3BzKGVsLnByb3BzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB1bm1vdW50KCkge1xuICAgICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvbU5vZGUpO1xuICAgICAgICBpbnN0YW5jZSA9IG51bGw7XG4gICAgICB9LFxuICAgICAgZ2V0Tm9kZSgpIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXROb2RlRnJvbVJvb3RGaW5kZXIoXG4gICAgICAgICAgYWRhcHRlci5pc0N1c3RvbUNvbXBvbmVudCxcbiAgICAgICAgICB0b1RyZWUoaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxGaWJlciksXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUVycm9yKG5vZGVIaWVyYXJjaHksIHJvb3ROb2RlLCBlcnJvcikge1xuICAgICAgICBjb25zdCBpc0Vycm9yQm91bmRhcnkgPSAoeyBpbnN0YW5jZTogZWxJbnN0YW5jZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzMTY2ICYmIHR5cGUgJiYgdHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZWxJbnN0YW5jZSAmJiBlbEluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpbnN0YW5jZTogY2F0Y2hpbmdJbnN0YW5jZSxcbiAgICAgICAgICB0eXBlOiBjYXRjaGluZ1R5cGUsXG4gICAgICAgIH0gPSBub2RlSGllcmFyY2h5LmZpbmQoaXNFcnJvckJvdW5kYXJ5KSB8fCB7fTtcblxuICAgICAgICBzaW11bGF0ZUVycm9yKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNhdGNoaW5nSW5zdGFuY2UsXG4gICAgICAgICAgcm9vdE5vZGUsXG4gICAgICAgICAgbm9kZUhpZXJhcmNoeSxcbiAgICAgICAgICBub2RlVHlwZUZyb21UeXBlLFxuICAgICAgICAgIGFkYXB0ZXIuZGlzcGxheU5hbWVPZk5vZGUsXG4gICAgICAgICAgaXMxNjYgPyBjYXRjaGluZ1R5cGUgOiB1bmRlZmluZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2ltdWxhdGVFdmVudChub2RlLCBldmVudCwgbW9jaykge1xuICAgICAgICBjb25zdCBtYXBwZWRFdmVudCA9IG1hcE5hdGl2ZUV2ZW50TmFtZXMoZXZlbnQsIGV2ZW50T3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGV2ZW50Rm4gPSBUZXN0VXRpbHMuU2ltdWxhdGVbbWFwcGVkRXZlbnRdO1xuICAgICAgICBpZiAoIWV2ZW50Rm4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWFjdFdyYXBwZXI6OnNpbXVsYXRlKCkgZXZlbnQgJyR7ZXZlbnR9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBBY3QoKCkgPT4ge1xuICAgICAgICAgIGV2ZW50Rm4oYWRhcHRlci5ub2RlVG9Ib3N0Tm9kZShub2RlKSwgbW9jayk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGJhdGNoZWRVcGRhdGVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICAvLyByZXR1cm4gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZm4pO1xuICAgICAgfSxcbiAgICAgIGdldFdyYXBwaW5nQ29tcG9uZW50UmVuZGVyZXIoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAuLi5nZXRXcmFwcGluZ0NvbXBvbmVudE1vdW50UmVuZGVyZXIoe1xuICAgICAgICAgICAgdG9UcmVlOiBpbnN0ID0+IHRvVHJlZShpbnN0Ll9yZWFjdEludGVybmFsRmliZXIpLFxuICAgICAgICAgICAgZ2V0TW91bnRXcmFwcGVySW5zdGFuY2U6ICgpID0+IGluc3RhbmNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlU2hhbGxvd1JlbmRlcmVyKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzO1xuICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFNoYWxsb3dSZW5kZXJlcigpO1xuICAgIGNvbnN0IHsgc3VzcGVuc2VGYWxsYmFjayB9ID0gb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIHN1c3BlbnNlRmFsbGJhY2sgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzdXNwZW5zZUZhbGxiYWNrICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignYG9wdGlvbnMuc3VzcGVuc2VGYWxsYmFja2Agc2hvdWxkIGJlIGJvb2xlYW4gb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGxldCBpc0RPTSA9IGZhbHNlO1xuICAgIGxldCBjYWNoZWROb2RlID0gbnVsbDtcblxuICAgIGxldCBsYXN0Q29tcG9uZW50ID0gbnVsbDtcbiAgICBsZXQgd3JhcHBlZENvbXBvbmVudCA9IG51bGw7XG4gICAgY29uc3Qgc2VudGluZWwgPSB7fTtcblxuICAgIC8vIHdyYXAgbWVtbyBjb21wb25lbnRzIHdpdGggYSBQdXJlQ29tcG9uZW50LCBvciBhIGNsYXNzIGNvbXBvbmVudCB3aXRoIHNDVVxuICAgIGNvbnN0IHdyYXBQdXJlQ29tcG9uZW50ID0gKENvbXBvbmVudCwgY29tcGFyZSkgPT4ge1xuICAgICAgaWYgKCFpczE2Nikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBSZWFjdCA8IDE2LjYuIFBsZWFzZSByZXBvcnQgdGhpcyEnKTtcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0Q29tcG9uZW50ICE9PSBDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGVmdWwoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHdyYXBwZWRDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIENvbXBvbmVudCB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG4gICAgICAgICAgaWYgKGNvbXBhcmUpIHtcbiAgICAgICAgICAgIHdyYXBwZWRDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IG5leHRQcm9wcyA9PiAhY29tcGFyZSh0aGlzLnByb3BzLCBuZXh0UHJvcHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cmFwcGVkQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBtZW1vaXplZCA9IHNlbnRpbmVsO1xuICAgICAgICAgIGxldCBwcmV2UHJvcHM7XG4gICAgICAgICAgd3JhcHBlZENvbXBvbmVudCA9IGZ1bmN0aW9uIChwcm9wcywgLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlID0gbWVtb2l6ZWQgPT09IHNlbnRpbmVsIHx8IChjb21wYXJlXG4gICAgICAgICAgICAgID8gIWNvbXBhcmUocHJldlByb3BzLCBwcm9wcylcbiAgICAgICAgICAgICAgOiAhc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgcHJvcHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgICAgICAgICBtZW1vaXplZCA9IENvbXBvbmVudCh7IC4uLkNvbXBvbmVudC5kZWZhdWx0UHJvcHMsIC4uLnByb3BzIH0sIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBwcm9wcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgd3JhcHBlZENvbXBvbmVudCxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgeyBkaXNwbGF5TmFtZTogYWRhcHRlci5kaXNwbGF5TmFtZU9mTm9kZSh7IHR5cGU6IENvbXBvbmVudCB9KSB9LFxuICAgICAgICApO1xuICAgICAgICBsYXN0Q29tcG9uZW50ID0gQ29tcG9uZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZWRDb21wb25lbnQ7XG4gICAgfTtcblxuICAgIC8vIFdyYXAgZnVuY3Rpb25hbCBjb21wb25lbnRzIG9uIHZlcnNpb25zIHByaW9yIHRvIDE2LjUsXG4gICAgLy8gdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBwYXNzIGEgYHRoaXNgIGluc3RhbmNlIHRvIGl0LlxuICAgIGNvbnN0IHdyYXBGdW5jdGlvbmFsQ29tcG9uZW50ID0gKENvbXBvbmVudCkgPT4ge1xuICAgICAgaWYgKGlzMTY2ICYmIGhhcyhDb21wb25lbnQsICdkZWZhdWx0UHJvcHMnKSkge1xuICAgICAgICBpZiAobGFzdENvbXBvbmVudCAhPT0gQ29tcG9uZW50KSB7XG4gICAgICAgICAgd3JhcHBlZENvbXBvbmVudCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgICAgICAgKHByb3BzLCAuLi5hcmdzKSA9PiBDb21wb25lbnQoeyAuLi5Db21wb25lbnQuZGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9LCAuLi5hcmdzKSxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHsgZGlzcGxheU5hbWU6IGFkYXB0ZXIuZGlzcGxheU5hbWVPZk5vZGUoeyB0eXBlOiBDb21wb25lbnQgfSkgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGxhc3RDb21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBwZWRDb21wb25lbnQ7XG4gICAgICB9XG4gICAgICBpZiAoaXMxNjUpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RDb21wb25lbnQgIT09IENvbXBvbmVudCkge1xuICAgICAgICB3cmFwcGVkQ29tcG9uZW50ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAoLi4uYXJncykgPT4gQ29tcG9uZW50KC4uLmFyZ3MpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICk7XG4gICAgICAgIGxhc3RDb21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlZENvbXBvbmVudDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcihlbCwgdW5tYXNrZWRDb250ZXh0LCB7XG4gICAgICAgIHByb3ZpZGVyVmFsdWVzID0gbmV3IE1hcCgpLFxuICAgICAgfSA9IHt9KSB7XG4gICAgICAgIGNhY2hlZE5vZGUgPSBlbDtcbiAgICAgICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4gICAgICAgIGlmICh0eXBlb2YgZWwudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpc0RPTSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb250ZXh0UHJvdmlkZXIoZWwpKSB7XG4gICAgICAgICAgcHJvdmlkZXJWYWx1ZXMuc2V0KGVsLnR5cGUsIGVsLnByb3BzLnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBNb2NrUHJvdmlkZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcHJvcHMgPT4gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICBlbC50eXBlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHdpdGhTZXRTdGF0ZUFsbG93ZWQoKCkgPT4gcmVuZGVyZXIucmVuZGVyKHsgLi4uZWwsIHR5cGU6IE1vY2tQcm92aWRlciB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb250ZXh0Q29uc3VtZXIoZWwpKSB7XG4gICAgICAgICAgY29uc3QgUHJvdmlkZXIgPSBhZGFwdGVyLmdldFByb3ZpZGVyRnJvbUNvbnN1bWVyKGVsLnR5cGUpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZXJWYWx1ZXMuaGFzKFByb3ZpZGVyKVxuICAgICAgICAgICAgPyBwcm92aWRlclZhbHVlcy5nZXQoUHJvdmlkZXIpXG4gICAgICAgICAgICA6IGdldFByb3ZpZGVyRGVmYXVsdFZhbHVlKFByb3ZpZGVyKTtcbiAgICAgICAgICBjb25zdCBNb2NrQ29uc3VtZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcHJvcHMgPT4gcHJvcHMuY2hpbGRyZW4odmFsdWUpLFxuICAgICAgICAgICAgZWwudHlwZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcih7IC4uLmVsLCB0eXBlOiBNb2NrQ29uc3VtZXIgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzRE9NID0gZmFsc2U7XG4gICAgICAgICAgbGV0IHJlbmRlcmVkRWwgPSBlbDtcbiAgICAgICAgICBpZiAoaXNMYXp5KHJlbmRlcmVkRWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2BSZWFjdC5sYXp5YCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNoYWxsb3cgcmVuZGVyaW5nLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNTdXNwZW5zZShyZW5kZXJlZEVsKSkge1xuICAgICAgICAgICAgbGV0IHsgY2hpbGRyZW4gfSA9IHJlbmRlcmVkRWwucHJvcHM7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2VGYWxsYmFjaykge1xuICAgICAgICAgICAgICBjb25zdCB7IGZhbGxiYWNrIH0gPSByZW5kZXJlZEVsLnByb3BzO1xuICAgICAgICAgICAgICBjaGlsZHJlbiA9IHJlcGxhY2VMYXp5V2l0aEZhbGxiYWNrKGNoaWxkcmVuLCBmYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBGYWtlU3VzcGVuc2VXcmFwcGVyID0gKCkgPT4gY2hpbGRyZW47XG4gICAgICAgICAgICByZW5kZXJlZEVsID0gUmVhY3QuY3JlYXRlRWxlbWVudChGYWtlU3VzcGVuc2VXcmFwcGVyLCBudWxsLCBjaGlsZHJlbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgdHlwZTogQ29tcG9uZW50IH0gPSByZW5kZXJlZEVsO1xuXG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQoQ29tcG9uZW50LmNvbnRleHRUeXBlcywgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgICAgICAgIGlmIChpc01lbW8oZWwudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZTogSW5uZXJDb21wLCBjb21wYXJlIH0gPSBlbC50eXBlO1xuXG4gICAgICAgICAgICByZXR1cm4gd2l0aFNldFN0YXRlQWxsb3dlZCgoKSA9PiByZW5kZXJlci5yZW5kZXIoXG4gICAgICAgICAgICAgIHsgLi4uZWwsIHR5cGU6IHdyYXBQdXJlQ29tcG9uZW50KElubmVyQ29tcCwgY29tcGFyZSkgfSxcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXNTdGF0ZWZ1bChDb21wb25lbnQpICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihcbiAgICAgICAgICAgICAgeyAuLi5yZW5kZXJlZEVsLCB0eXBlOiB3cmFwRnVuY3Rpb25hbENvbXBvbmVudChDb21wb25lbnQpIH0sXG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNTdGF0ZWZ1bCkge1xuICAgICAgICAgICAgLy8gZml4IHJlYWN0IGJ1Zzsgc2VlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRFbXB0eVN0YXRlVmFsdWVgXG4gICAgICAgICAgICBjb25zdCBlbXB0eVN0YXRlVmFsdWUgPSBnZXRFbXB0eVN0YXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChlbXB0eVN0YXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsICdzdGF0ZScsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBlbXB0eVN0YXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdpdGhTZXRTdGF0ZUFsbG93ZWQoKCkgPT4gcmVuZGVyZXIucmVuZGVyKHJlbmRlcmVkRWwsIGNvbnRleHQpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVubW91bnQoKSB7XG4gICAgICAgIHJlbmRlcmVyLnVubW91bnQoKTtcbiAgICAgIH0sXG4gICAgICBnZXROb2RlKCkge1xuICAgICAgICBpZiAoaXNET00pIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudFRvVHJlZShjYWNoZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXQgPSByZW5kZXJlci5nZXRSZW5kZXJPdXRwdXQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlVHlwZTogbm9kZVR5cGVGcm9tVHlwZShjYWNoZWROb2RlLnR5cGUpLFxuICAgICAgICAgIHR5cGU6IGNhY2hlZE5vZGUudHlwZSxcbiAgICAgICAgICBwcm9wczogY2FjaGVkTm9kZS5wcm9wcyxcbiAgICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKGNhY2hlZE5vZGUua2V5KSxcbiAgICAgICAgICByZWY6IGNhY2hlZE5vZGUucmVmLFxuICAgICAgICAgIGluc3RhbmNlOiByZW5kZXJlci5faW5zdGFuY2UsXG4gICAgICAgICAgcmVuZGVyZWQ6IEFycmF5LmlzQXJyYXkob3V0cHV0KVxuICAgICAgICAgICAgPyBmbGF0dGVuKG91dHB1dCkubWFwKGVsID0+IGVsZW1lbnRUb1RyZWUoZWwpKVxuICAgICAgICAgICAgOiBlbGVtZW50VG9UcmVlKG91dHB1dCksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2ltdWxhdGVFcnJvcihub2RlSGllcmFyY2h5LCByb290Tm9kZSwgZXJyb3IpIHtcbiAgICAgICAgc2ltdWxhdGVFcnJvcihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICByZW5kZXJlci5faW5zdGFuY2UsXG4gICAgICAgICAgY2FjaGVkTm9kZSxcbiAgICAgICAgICBub2RlSGllcmFyY2h5LmNvbmNhdChjYWNoZWROb2RlKSxcbiAgICAgICAgICBub2RlVHlwZUZyb21UeXBlLFxuICAgICAgICAgIGFkYXB0ZXIuZGlzcGxheU5hbWVPZk5vZGUsXG4gICAgICAgICAgaXMxNjYgPyBjYWNoZWROb2RlLnR5cGUgOiB1bmRlZmluZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2ltdWxhdGVFdmVudChub2RlLCBldmVudCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gbm9kZS5wcm9wc1twcm9wRnJvbUV2ZW50KGV2ZW50LCBldmVudE9wdGlvbnMpXTtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE8obG1yKTogY3JlYXRlL3VzZSBzeW50aGV0aWMgZXZlbnRzXG4gICAgICAgICAgICAvLyBUT0RPKGxtcik6IGVtdWxhdGUgUmVhY3QncyBldmVudCBwcm9wYWdhdGlvblxuICAgICAgICAgICAgLy8gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlciguLi5hcmdzKTtcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmF0Y2hlZFVwZGF0ZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIC8vIHJldHVybiBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmbik7XG4gICAgICB9LFxuICAgICAgY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBoaWVyYXJjaHkpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgIHR5cGVTcGVjcyxcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgZGlzcGxheU5hbWVPZk5vZGUoY2FjaGVkTm9kZSksXG4gICAgICAgICAgKCkgPT4gZ2V0Q29tcG9uZW50U3RhY2soaGllcmFyY2h5LmNvbmNhdChbY2FjaGVkTm9kZV0pKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVN0cmluZ1JlbmRlcmVyKG9wdGlvbnMpIHtcbiAgICBpZiAoaGFzKG9wdGlvbnMsICdzdXNwZW5zZUZhbGxiYWNrJykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BzdXNwZW5zZUZhbGxiYWNrYCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpbiBvcHRpb25zIG9mIHN0cmluZyByZW5kZXJlcicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyKGVsLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRleHQgJiYgKGVsLnR5cGUuY29udGV4dFR5cGVzIHx8IG9wdGlvbnMuY2hpbGRDb250ZXh0VHlwZXMpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gICAgICAgICAgICAuLi4oZWwudHlwZS5jb250ZXh0VHlwZXMgfHwge30pLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IENvbnRleHRXcmFwcGVyID0gY3JlYXRlUmVuZGVyV3JhcHBlcihlbCwgY29udGV4dCwgY2hpbGRDb250ZXh0VHlwZXMpO1xuICAgICAgICAgIHJldHVybiBSZWFjdERPTVNlcnZlci5yZW5kZXJUb1N0YXRpY01hcmt1cChSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHRXcmFwcGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RhdGljTWFya3VwKGVsKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByb3ZpZGVkIGEgYmFnIG9mIG9wdGlvbnMsIHJldHVybiBhbiBgRW56eW1lUmVuZGVyZXJgLiBTb21lIG9wdGlvbnMgY2FuIGJlIGltcGxlbWVudGF0aW9uXG4gIC8vIHNwZWNpZmljLCBsaWtlIGBhdHRhY2hgIGV0Yy4gZm9yIFJlYWN0LCBidXQgbm90IHBhcnQgb2YgdGhpcyBpbnRlcmZhY2UgZXhwbGljaXRseS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgY3JlYXRlUmVuZGVyZXIob3B0aW9ucykge1xuICAgIHN3aXRjaCAob3B0aW9ucy5tb2RlKSB7XG4gICAgICBjYXNlIEVuenltZUFkYXB0ZXIuTU9ERVMuTU9VTlQ6IHJldHVybiB0aGlzLmNyZWF0ZU1vdW50UmVuZGVyZXIob3B0aW9ucyk7XG4gICAgICBjYXNlIEVuenltZUFkYXB0ZXIuTU9ERVMuU0hBTExPVzogcmV0dXJuIHRoaXMuY3JlYXRlU2hhbGxvd1JlbmRlcmVyKG9wdGlvbnMpO1xuICAgICAgY2FzZSBFbnp5bWVBZGFwdGVyLk1PREVTLlNUUklORzogcmV0dXJuIHRoaXMuY3JlYXRlU3RyaW5nUmVuZGVyZXIob3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuenltZSBJbnRlcm5hbCBFcnJvcjogVW5yZWNvZ25pemVkIG1vZGU6ICR7b3B0aW9ucy5tb2RlfWApO1xuICAgIH1cbiAgfVxuXG4gIHdyYXAoZWxlbWVudCkge1xuICAgIHJldHVybiB3cmFwKGVsZW1lbnQpO1xuICB9XG5cbiAgLy8gY29udmVydHMgYW4gUlNUTm9kZSB0byB0aGUgY29ycmVzcG9uZGluZyBKU1ggUHJhZ21hIEVsZW1lbnQuIFRoaXMgd2lsbCBiZSBuZWVkZWRcbiAgLy8gaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBgV3JhcHBlci5tb3VudCgpYCBhbmQgYFdyYXBwZXIuc2hhbGxvdygpYCBtZXRob2RzLCBidXQgc2hvdWxkXG4gIC8vIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZm9yIHBlb3BsZSB0byBpbXBsZW1lbnQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIG5vZGVUb0VsZW1lbnQobm9kZSkge1xuICAgIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChpc01lbW8odHlwZSkgPyB0eXBlLnR5cGUgOiB0eXBlLCBwcm9wc1dpdGhLZXlzQW5kUmVmKG5vZGUpKTtcbiAgfVxuXG4gIGVsZW1lbnRUb05vZGUoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICB9XG5cbiAgbm9kZVRvSG9zdE5vZGUobm9kZSwgc3VwcG9ydHNBcnJheSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBub2RlVG9Ib3N0Tm9kZShub2RlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlcykgJiYgIXN1cHBvcnRzQXJyYXkpIHtcbiAgICAgIHJldHVybiBub2Rlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgZGlzcGxheU5hbWVPZk5vZGUobm9kZSkge1xuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyB0eXBlLCAkJHR5cGVvZiB9ID0gbm9kZTtcblxuICAgIGNvbnN0IG5vZGVUeXBlID0gdHlwZSB8fCAkJHR5cGVvZjtcblxuICAgIC8vIG5ld2VyIG5vZGUgdHlwZXMgbWF5IGJlIHVuZGVmaW5lZCwgc28gb25seSB0ZXN0IGlmIHRoZSBub2RlVHlwZSBleGlzdHNcbiAgICBpZiAobm9kZVR5cGUpIHtcbiAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSAoaXMxNjYgPyBDb25jdXJyZW50TW9kZSA6IEFzeW5jTW9kZSkgfHwgTmFOOiByZXR1cm4gaXMxNjYgPyAnQ29uY3VycmVudE1vZGUnIDogJ0FzeW5jTW9kZSc7XG4gICAgICAgIGNhc2UgRnJhZ21lbnQgfHwgTmFOOiByZXR1cm4gJ0ZyYWdtZW50JztcbiAgICAgICAgY2FzZSBTdHJpY3RNb2RlIHx8IE5hTjogcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICAgICAgY2FzZSBQcm9maWxlciB8fCBOYU46IHJldHVybiAnUHJvZmlsZXInO1xuICAgICAgICBjYXNlIFBvcnRhbCB8fCBOYU46IHJldHVybiAnUG9ydGFsJztcbiAgICAgICAgY2FzZSBTdXNwZW5zZSB8fCBOYU46IHJldHVybiAnU3VzcGVuc2UnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0ICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICBjYXNlIENvbnRleHRDb25zdW1lciB8fCBOYU46IHJldHVybiAnQ29udGV4dENvbnN1bWVyJztcbiAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyIHx8IE5hTjogcmV0dXJuICdDb250ZXh0UHJvdmlkZXInO1xuICAgICAgY2FzZSBNZW1vIHx8IE5hTjoge1xuICAgICAgICBjb25zdCBub2RlTmFtZSA9IGRpc3BsYXlOYW1lT2ZOb2RlKG5vZGUpO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG5vZGVOYW1lID09PSAnc3RyaW5nJyA/IG5vZGVOYW1lIDogYE1lbW8oJHtkaXNwbGF5TmFtZU9mTm9kZSh0eXBlKX0pYDtcbiAgICAgIH1cbiAgICAgIGNhc2UgRm9yd2FyZFJlZiB8fCBOYU46IHtcbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gZGlzcGxheU5hbWVPZk5vZGUoeyB0eXBlOiB0eXBlLnJlbmRlciB9KTtcbiAgICAgICAgcmV0dXJuIG5hbWUgPyBgRm9yd2FyZFJlZigke25hbWV9KWAgOiAnRm9yd2FyZFJlZic7XG4gICAgICB9XG4gICAgICBjYXNlIExhenkgfHwgTmFOOiB7XG4gICAgICAgIHJldHVybiAnbGF6eSc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiByZXR1cm4gZGlzcGxheU5hbWVPZk5vZGUobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBpc1ZhbGlkRWxlbWVudFR5cGUob2JqZWN0KSB7XG4gICAgcmV0dXJuICEhb2JqZWN0ICYmIGlzVmFsaWRFbGVtZW50VHlwZShvYmplY3QpO1xuICB9XG5cbiAgaXNGcmFnbWVudChmcmFnbWVudCkge1xuICAgIHJldHVybiB0eXBlT2ZOb2RlKGZyYWdtZW50KSA9PT0gRnJhZ21lbnQ7XG4gIH1cblxuICBpc0N1c3RvbUNvbXBvbmVudCh0eXBlKSB7XG4gICAgY29uc3QgZmFrZUVsZW1lbnQgPSBtYWtlRmFrZUVsZW1lbnQodHlwZSk7XG4gICAgcmV0dXJuICEhdHlwZSAmJiAoXG4gICAgICB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgfHwgaXNGb3J3YXJkUmVmKGZha2VFbGVtZW50KVxuICAgICAgfHwgaXNDb250ZXh0UHJvdmlkZXIoZmFrZUVsZW1lbnQpXG4gICAgICB8fCBpc0NvbnRleHRDb25zdW1lcihmYWtlRWxlbWVudClcbiAgICAgIHx8IGlzU3VzcGVuc2UoZmFrZUVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIGlzQ29udGV4dENvbnN1bWVyKHR5cGUpIHtcbiAgICByZXR1cm4gISF0eXBlICYmIGlzQ29udGV4dENvbnN1bWVyKG1ha2VGYWtlRWxlbWVudCh0eXBlKSk7XG4gIH1cblxuICBpc0N1c3RvbUNvbXBvbmVudEVsZW1lbnQoaW5zdCkge1xuICAgIGlmICghaW5zdCB8fCAhdGhpcy5pc1ZhbGlkRWxlbWVudChpbnN0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pc0N1c3RvbUNvbXBvbmVudChpbnN0LnR5cGUpO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJGcm9tQ29uc3VtZXIoQ29uc3VtZXIpIHtcbiAgICAvLyBSZWFjdCBzdG9yZXMgcmVmZXJlbmNlcyB0byB0aGUgUHJvdmlkZXIgb24gYSBDb25zdW1lciBkaWZmZXJlbnRseSBhY3Jvc3MgdmVyc2lvbnMuXG4gICAgaWYgKENvbnN1bWVyKSB7XG4gICAgICBsZXQgUHJvdmlkZXI7XG4gICAgICBpZiAoQ29uc3VtZXIuX2NvbnRleHQpIHsgLy8gY2hlY2sgdGhpcyBmaXJzdCwgdG8gYXZvaWQgYSBkZXByZWNhdGlvbiB3YXJuaW5nXG4gICAgICAgICh7IFByb3ZpZGVyIH0gPSBDb25zdW1lci5fY29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKENvbnN1bWVyLlByb3ZpZGVyKSB7XG4gICAgICAgICh7IFByb3ZpZGVyIH0gPSBDb25zdW1lcik7XG4gICAgICB9XG4gICAgICBpZiAoUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb3ZpZGVyO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuenltZSBJbnRlcm5hbCBFcnJvcjogY2Fu4oCZdCBmaWd1cmUgb3V0IGhvdyB0byBnZXQgUHJvdmlkZXIgZnJvbSBDb25zdW1lcicpO1xuICB9XG5cbiAgY3JlYXRlRWxlbWVudCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoLi4uYXJncyk7XG4gIH1cblxuICB3cmFwV2l0aFdyYXBwaW5nQ29tcG9uZW50KG5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgUm9vdEZpbmRlcixcbiAgICAgIG5vZGU6IHdyYXBXaXRoV3JhcHBpbmdDb21wb25lbnQoUmVhY3QuY3JlYXRlRWxlbWVudCwgbm9kZSwgb3B0aW9ucyksXG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0U2l4dGVlbkFkYXB0ZXI7XG4iXX0=
//# sourceMappingURL=ReactSixteenAdapter.js.map
\ No newline at end of file

build/ReactSixteenAdapter.js.map

@@ -1 +1 @@
-{"version":3,"sources":["../src/ReactSixteenAdapter.js"],"names":["is164","TestUtils","Simulate","touchStart","is165","auxClick","is166","React","unstable_AsyncMode","is168","act","hasShouldComponentUpdateBug","semver","satisfies","testRendererVersion","FiberTags","nodeAndSiblingsArray","nodeWithSibling","array","node","push","sibling","flatten","arr","result","stack","i","length","n","pop","el","Array","isArray","nodeTypeFromType","type","Portal","elementToTree","children","containerInfo","props","nodeType","key","ref","instance","rendered","toTree","vnode","tag","HostRoot","childrenToTree","child","HostPortal","stateNode","memoizedProps","ClassComponent","FunctionalComponent","MemoClass","elementType","MemoSFC","renderedNodes","map","HostComponent","HostText","Fragment","Mode","ContextProvider","ContextConsumer","Profiler","ForwardRef","pendingProps","Error","nodeToHostNode","_node","mapper","item","ReactDOM","findDOMNode","eventOptions","animation","pointerEvents","getEmptyStateValue","EmptyState","Component","testRenderer","ShallowRenderer","render","createElement","_instance","state","wrapAct","fn","returnVal","getProviderDefaultValue","Provider","_context","_defaultValue","_currentValue","makeFakeElement","$$typeof","Element","ReactSixteenAdapter","lifecycles","options","enableComponentDidUpdateOnSetState","legacyContextMode","componentDidUpdate","onSetState","getDerivedStateFromProps","getSnapshotBeforeUpdate","setState","skipsComponentDidUpdateOnNullish","getChildContext","calledByRenderer","getDerivedStateFromError","attachTo","hydrateIn","wrappingComponentProps","domNode","global","document","adapter","context","callback","wrapperProps","ReactWrapperComponent","wrappedEl","hydrate","setChildProps","unmount","unmountComponentAtNode","getNode","isCustomComponent","_reactInternalFiber","simulateError","nodeHierarchy","rootNode","error","isErrorBoundary","elInstance","componentDidCatch","find","catchingInstance","catchingType","displayNameOfNode","undefined","simulateEvent","event","mock","mappedEvent","eventFn","TypeError","batchedUpdates","getWrappingComponentRenderer","inst","getMountWrapperInstance","renderer","isDOM","cachedNode","lastComponent","wrappedComponent","wrapFunctionalComponent","unmaskedContext","providerValues","Map","set","value","MockProvider","getProviderFromConsumer","has","get","MockConsumer","isStateful","prototype","isReactComponent","__reactAutoBindPairs","contextTypes","InnerComp","emptyStateValue","Object","defineProperty","configurable","enumerable","writable","output","getRenderOutput","concat","args","handler","checkPropTypes","typeSpecs","values","location","hierarchy","childContextTypes","ContextWrapper","ReactDOMServer","renderToStaticMarkup","mode","EnzymeAdapter","MODES","MOUNT","createMountRenderer","SHALLOW","createShallowRenderer","STRING","createStringRenderer","element","supportsArray","nodes","ConcurrentMode","AsyncMode","NaN","StrictMode","$$typeofType","Memo","displayName","name","object","fragment","fakeElement","isValidElement","Consumer","RootFinder","module","exports"],"mappings":"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","file":"ReactSixteenAdapter.js","sourcesContent":["/* eslint no-use-before-define: 0 */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n// eslint-disable-next-line import/no-unresolved\nimport ReactDOMServer from 'react-dom/server';\n// eslint-disable-next-line import/no-unresolved\nimport ShallowRenderer from 'react-test-renderer/shallow';\nimport { version as testRendererVersion } from 'react-test-renderer/package.json';\n// eslint-disable-next-line import/no-unresolved\nimport TestUtils from 'react-dom/test-utils';\nimport semver from 'semver';\nimport checkPropTypes from 'prop-types/checkPropTypes';\nimport {\n AsyncMode,\n ConcurrentMode,\n ContextConsumer,\n ContextProvider,\n Element,\n ForwardRef,\n Fragment,\n isContextConsumer,\n isContextProvider,\n isElement,\n isForwardRef,\n isMemo,\n isPortal,\n isValidElementType,\n Memo,\n Portal,\n Profiler,\n StrictMode,\n} from 'react-is';\nimport { EnzymeAdapter } from 'enzyme';\nimport { typeOfNode } from 'enzyme/build/Utils';\nimport {\n displayNameOfNode,\n elementToTree as utilElementToTree,\n nodeTypeFromType as utilNodeTypeFromType,\n mapNativeEventNames,\n propFromEvent,\n assertDomAvailable,\n withSetStateAllowed,\n createRenderWrapper,\n createMountWrapper,\n propsWithKeysAndRef,\n ensureKeyOrUndefined,\n simulateError,\n wrap,\n getMaskedContext,\n getComponentStack,\n RootFinder,\n getNodeFromRootFinder,\n wrapWithWrappingComponent,\n getWrappingComponentMountRenderer,\n} from 'enzyme-adapter-utils';\nimport findCurrentFiberUsingSlowPath from './findCurrentFiberUsingSlowPath';\nimport detectFiberTags from './detectFiberTags';\n\nconst is164 = !!TestUtils.Simulate.touchStart; // 16.4+\nconst is165 = !!TestUtils.Simulate.auxClick; // 16.5+\nconst is166 = is165 && !React.unstable_AsyncMode; // 16.6+\nconst is168 = is166 && typeof TestUtils.act === 'function';\n\nconst hasShouldComponentUpdateBug = semver.satisfies(testRendererVersion, '< 16.8');\n\n// Lazily populated if DOM is available.\nlet FiberTags = null;\n\nfunction nodeAndSiblingsArray(nodeWithSibling) {\n const array = [];\n let node = nodeWithSibling;\n while (node != null) {\n array.push(node);\n node = node.sibling;\n }\n return array;\n}\n\nfunction flatten(arr) {\n const result = [];\n const stack = [{ i: 0, array: arr }];\n while (stack.length) {\n const n = stack.pop();\n while (n.i < n.array.length) {\n const el = n.array[n.i];\n n.i += 1;\n if (Array.isArray(el)) {\n stack.push(n);\n stack.push({ i: 0, array: el });\n break;\n }\n result.push(el);\n }\n }\n return result;\n}\n\nfunction nodeTypeFromType(type) {\n if (type === Portal) {\n return 'portal';\n }\n\n return utilNodeTypeFromType(type);\n}\n\nfunction elementToTree(el) {\n if (!isPortal(el)) {\n return utilElementToTree(el, elementToTree);\n }\n\n const { children, containerInfo } = el;\n const props = { children, containerInfo };\n\n return {\n nodeType: 'portal',\n type: Portal,\n props,\n key: ensureKeyOrUndefined(el.key),\n ref: el.ref || null,\n instance: null,\n rendered: elementToTree(el.children),\n };\n}\n\nfunction toTree(vnode) {\n if (vnode == null) {\n return null;\n }\n // TODO(lmr): I'm not really sure I understand whether or not this is what\n // i should be doing, or if this is a hack for something i'm doing wrong\n // somewhere else. Should talk to sebastian about this perhaps\n const node = findCurrentFiberUsingSlowPath(vnode);\n switch (node.tag) {\n case FiberTags.HostRoot:\n return childrenToTree(node.child);\n case FiberTags.HostPortal: {\n const {\n stateNode: { containerInfo },\n memoizedProps: children,\n } = node;\n const props = { containerInfo, children };\n return {\n nodeType: 'portal',\n type: Portal,\n props,\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n }\n case FiberTags.ClassComponent:\n return {\n nodeType: 'class',\n type: node.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: node.stateNode,\n rendered: childrenToTree(node.child),\n };\n case FiberTags.FunctionalComponent:\n return {\n nodeType: 'function',\n type: node.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n case FiberTags.MemoClass:\n return {\n nodeType: 'class',\n type: node.elementType.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: node.stateNode,\n rendered: childrenToTree(node.child.child),\n };\n case FiberTags.MemoSFC: {\n let renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));\n if (renderedNodes.length === 0) {\n renderedNodes = [node.memoizedProps.children];\n }\n return {\n nodeType: 'function',\n type: node.elementType,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: renderedNodes,\n };\n }\n case FiberTags.HostComponent: {\n let renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));\n if (renderedNodes.length === 0) {\n renderedNodes = [node.memoizedProps.children];\n }\n return {\n nodeType: 'host',\n type: node.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: node.stateNode,\n rendered: renderedNodes,\n };\n }\n case FiberTags.HostText:\n return node.memoizedProps;\n case FiberTags.Fragment:\n case FiberTags.Mode:\n case FiberTags.ContextProvider:\n case FiberTags.ContextConsumer:\n return childrenToTree(node.child);\n case FiberTags.Profiler:\n case FiberTags.ForwardRef: {\n return {\n nodeType: 'function',\n type: node.type,\n props: { ...node.pendingProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n }\n default:\n throw new Error(`Enzyme Internal Error: unknown node with tag ${node.tag}`);\n }\n}\n\nfunction childrenToTree(node) {\n if (!node) {\n return null;\n }\n const children = nodeAndSiblingsArray(node);\n if (children.length === 0) {\n return null;\n }\n if (children.length === 1) {\n return toTree(children[0]);\n }\n return flatten(children.map(toTree));\n}\n\nfunction nodeToHostNode(_node) {\n // NOTE(lmr): node could be a function component\n // which wont have an instance prop, but we can get the\n // host node associated with its return value at that point.\n // Although this breaks down if the return value is an array,\n // as is possible with React 16.\n let node = _node;\n while (node && !Array.isArray(node) && node.instance === null) {\n node = node.rendered;\n }\n // if the SFC returned null effectively, there is no host node.\n if (!node) {\n return null;\n }\n\n const mapper = (item) => {\n if (item && item.instance) return ReactDOM.findDOMNode(item.instance);\n return null;\n };\n if (Array.isArray(node)) {\n return node.map(mapper);\n }\n if (Array.isArray(node.rendered) && node.nodeType === 'class') {\n return node.rendered.map(mapper);\n }\n return mapper(node);\n}\n\nconst eventOptions = {\n animation: true,\n pointerEvents: is164,\n auxClick: is165,\n};\n\nfunction getEmptyStateValue() {\n // this handles a bug in React 16.0 - 16.2\n // see https://github.com/facebook/react/commit/39be83565c65f9c522150e52375167568a2a1459\n // also see https://github.com/facebook/react/pull/11965\n\n // eslint-disable-next-line react/prefer-stateless-function\n class EmptyState extends React.Component {\n render() {\n return null;\n }\n }\n const testRenderer = new ShallowRenderer();\n testRenderer.render(React.createElement(EmptyState));\n return testRenderer._instance.state;\n}\n\nfunction wrapAct(fn) {\n if (!is168) {\n return fn();\n }\n let returnVal;\n TestUtils.act(() => { returnVal = fn(); });\n return returnVal;\n}\n\nfunction getProviderDefaultValue(Provider) {\n // React stores references to the Provider's defaultValue differently across versions.\n if ('_defaultValue' in Provider._context) {\n return Provider._context._defaultValue;\n }\n if ('_currentValue' in Provider._context) {\n return Provider._context._currentValue;\n }\n throw new Error('Enzyme Internal Error: can’t figure out how to get Provider’s default value');\n}\n\nfunction makeFakeElement(type) {\n return { $$typeof: Element, type };\n}\n\nclass ReactSixteenAdapter extends EnzymeAdapter {\n constructor() {\n super();\n const { lifecycles } = this.options;\n this.options = {\n ...this.options,\n enableComponentDidUpdateOnSetState: true, // TODO: remove, semver-major\n legacyContextMode: 'parent',\n lifecycles: {\n ...lifecycles,\n componentDidUpdate: {\n onSetState: true,\n },\n getDerivedStateFromProps: {\n hasShouldComponentUpdateBug,\n },\n getSnapshotBeforeUpdate: true,\n setState: {\n skipsComponentDidUpdateOnNullish: true,\n },\n getChildContext: {\n calledByRenderer: false,\n },\n getDerivedStateFromError: is166,\n },\n };\n }\n\n createMountRenderer(options) {\n assertDomAvailable('mount');\n if (FiberTags === null) {\n // Requires DOM.\n FiberTags = detectFiberTags();\n }\n const { attachTo, hydrateIn, wrappingComponentProps } = options;\n const domNode = hydrateIn || attachTo || global.document.createElement('div');\n let instance = null;\n const adapter = this;\n return {\n render(el, context, callback) {\n return wrapAct(() => {\n if (instance === null) {\n const { type, props, ref } = el;\n const wrapperProps = {\n Component: type,\n props,\n wrappingComponentProps,\n context,\n ...(ref && { ref }),\n };\n const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });\n const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);\n instance = hydrateIn\n ? ReactDOM.hydrate(wrappedEl, domNode)\n : ReactDOM.render(wrappedEl, domNode);\n if (typeof callback === 'function') {\n callback();\n }\n } else {\n instance.setChildProps(el.props, context, callback);\n }\n });\n },\n unmount() {\n ReactDOM.unmountComponentAtNode(domNode);\n instance = null;\n },\n getNode() {\n if (!instance) {\n return null;\n }\n return getNodeFromRootFinder(\n adapter.isCustomComponent,\n toTree(instance._reactInternalFiber),\n options,\n );\n },\n simulateError(nodeHierarchy, rootNode, error) {\n const isErrorBoundary = ({ instance: elInstance, type }) => {\n if (is166 && type && type.getDerivedStateFromError) {\n return true;\n }\n return elInstance && elInstance.componentDidCatch;\n };\n\n const {\n instance: catchingInstance,\n type: catchingType,\n } = nodeHierarchy.find(isErrorBoundary) || {};\n\n simulateError(\n error,\n catchingInstance,\n rootNode,\n nodeHierarchy,\n nodeTypeFromType,\n adapter.displayNameOfNode,\n is166 ? catchingType : undefined,\n );\n },\n simulateEvent(node, event, mock) {\n const mappedEvent = mapNativeEventNames(event, eventOptions);\n const eventFn = TestUtils.Simulate[mappedEvent];\n if (!eventFn) {\n throw new TypeError(`ReactWrapper::simulate() event '${event}' does not exist`);\n }\n eventFn(nodeToHostNode(node), mock);\n },\n batchedUpdates(fn) {\n return fn();\n // return ReactDOM.unstable_batchedUpdates(fn);\n },\n getWrappingComponentRenderer() {\n return {\n ...this,\n ...getWrappingComponentMountRenderer({\n toTree: inst => toTree(inst._reactInternalFiber),\n getMountWrapperInstance: () => instance,\n }),\n };\n },\n };\n }\n\n createShallowRenderer(/* options */) {\n const adapter = this;\n const renderer = new ShallowRenderer();\n let isDOM = false;\n let cachedNode = null;\n\n let lastComponent = null;\n let wrappedComponent = null;\n\n // Wrap functional components on versions prior to 16.5,\n // to avoid inadvertently pass a `this` instance to it.\n const wrapFunctionalComponent = (Component) => {\n if (is165) {\n return Component;\n }\n\n if (lastComponent !== Component) {\n wrappedComponent = Object.assign(\n (...args) => Component(...args), // eslint-disable-line new-cap\n Component,\n );\n lastComponent = Component;\n }\n return wrappedComponent;\n };\n\n return {\n render(el, unmaskedContext, {\n providerValues = new Map(),\n } = {}) {\n cachedNode = el;\n /* eslint consistent-return: 0 */\n if (typeof el.type === 'string') {\n isDOM = true;\n } else if (isContextProvider(el)) {\n providerValues.set(el.type, el.props.value);\n const MockProvider = Object.assign(\n props => props.children,\n el.type,\n );\n return withSetStateAllowed(() => renderer.render({ ...el, type: MockProvider }));\n } else if (isContextConsumer(el)) {\n const Provider = adapter.getProviderFromConsumer(el.type);\n const value = providerValues.has(Provider)\n ? providerValues.get(Provider)\n : getProviderDefaultValue(Provider);\n const MockConsumer = Object.assign(\n props => props.children(value),\n el.type,\n );\n return withSetStateAllowed(() => renderer.render({ ...el, type: MockConsumer }));\n } else {\n isDOM = false;\n const { type: Component } = el;\n\n const isStateful = Component.prototype && (\n Component.prototype.isReactComponent\n || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components\n );\n\n const context = getMaskedContext(Component.contextTypes, unmaskedContext);\n\n if (!isStateful && isMemo(el.type)) {\n const InnerComp = el.type.type;\n return withSetStateAllowed(() => renderer.render(\n { ...el, type: wrapFunctionalComponent(InnerComp) },\n context,\n ));\n }\n\n if (!isStateful && typeof Component === 'function') {\n return withSetStateAllowed(() => renderer.render(\n { ...el, type: wrapFunctionalComponent(Component) },\n context,\n ));\n }\n\n if (isStateful) {\n // fix react bug; see implementation of `getEmptyStateValue`\n const emptyStateValue = getEmptyStateValue();\n if (emptyStateValue) {\n Object.defineProperty(Component.prototype, 'state', {\n configurable: true,\n enumerable: true,\n get() {\n return null;\n },\n set(value) {\n if (value !== emptyStateValue) {\n Object.defineProperty(this, 'state', {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n }\n return true;\n },\n });\n }\n }\n return withSetStateAllowed(() => renderer.render(el, context));\n }\n },\n unmount() {\n renderer.unmount();\n },\n getNode() {\n if (isDOM) {\n return elementToTree(cachedNode);\n }\n const output = renderer.getRenderOutput();\n return {\n nodeType: nodeTypeFromType(cachedNode.type),\n type: cachedNode.type,\n props: cachedNode.props,\n key: ensureKeyOrUndefined(cachedNode.key),\n ref: cachedNode.ref,\n instance: renderer._instance,\n rendered: Array.isArray(output)\n ? flatten(output).map(el => elementToTree(el))\n : elementToTree(output),\n };\n },\n simulateError(nodeHierarchy, rootNode, error) {\n simulateError(\n error,\n renderer._instance,\n cachedNode,\n nodeHierarchy.concat(cachedNode),\n nodeTypeFromType,\n adapter.displayNameOfNode,\n is166 ? cachedNode.type : undefined,\n );\n },\n simulateEvent(node, event, ...args) {\n const handler = node.props[propFromEvent(event, eventOptions)];\n if (handler) {\n withSetStateAllowed(() => {\n // TODO(lmr): create/use synthetic events\n // TODO(lmr): emulate React's event propagation\n // ReactDOM.unstable_batchedUpdates(() => {\n handler(...args);\n // });\n });\n }\n },\n batchedUpdates(fn) {\n return fn();\n // return ReactDOM.unstable_batchedUpdates(fn);\n },\n checkPropTypes(typeSpecs, values, location, hierarchy) {\n return checkPropTypes(\n typeSpecs,\n values,\n location,\n displayNameOfNode(cachedNode),\n () => getComponentStack(hierarchy.concat([cachedNode])),\n );\n },\n };\n }\n\n createStringRenderer(options) {\n return {\n render(el, context) {\n if (options.context && (el.type.contextTypes || options.childContextTypes)) {\n const childContextTypes = {\n ...(el.type.contextTypes || {}),\n ...options.childContextTypes,\n };\n const ContextWrapper = createRenderWrapper(el, context, childContextTypes);\n return ReactDOMServer.renderToStaticMarkup(React.createElement(ContextWrapper));\n }\n return ReactDOMServer.renderToStaticMarkup(el);\n },\n };\n }\n\n // Provided a bag of options, return an `EnzymeRenderer`. Some options can be implementation\n // specific, like `attach` etc. for React, but not part of this interface explicitly.\n // eslint-disable-next-line class-methods-use-this\n createRenderer(options) {\n switch (options.mode) {\n case EnzymeAdapter.MODES.MOUNT: return this.createMountRenderer(options);\n case EnzymeAdapter.MODES.SHALLOW: return this.createShallowRenderer(options);\n case EnzymeAdapter.MODES.STRING: return this.createStringRenderer(options);\n default:\n throw new Error(`Enzyme Internal Error: Unrecognized mode: ${options.mode}`);\n }\n }\n\n wrap(element) {\n return wrap(element);\n }\n\n // converts an RSTNode to the corresponding JSX Pragma Element. This will be needed\n // in order to implement the `Wrapper.mount()` and `Wrapper.shallow()` methods, but should\n // be pretty straightforward for people to implement.\n // eslint-disable-next-line class-methods-use-this\n nodeToElement(node) {\n if (!node || typeof node !== 'object') return null;\n return React.createElement(node.type, propsWithKeysAndRef(node));\n }\n\n elementToNode(element) {\n return elementToTree(element);\n }\n\n nodeToHostNode(node, supportsArray = false) {\n const nodes = nodeToHostNode(node);\n if (Array.isArray(nodes) && !supportsArray) {\n return nodes[0];\n }\n return nodes;\n }\n\n displayNameOfNode(node) {\n if (!node) return null;\n const { type, $$typeof } = node;\n\n const nodeType = type || $$typeof;\n\n // newer node types may be undefined, so only test if the nodeType exists\n if (nodeType) {\n switch (nodeType) {\n case (is166 ? ConcurrentMode : AsyncMode) || NaN: return is166 ? 'ConcurrentMode' : 'AsyncMode';\n case Fragment || NaN: return 'Fragment';\n case StrictMode || NaN: return 'StrictMode';\n case Profiler || NaN: return 'Profiler';\n case Portal || NaN: return 'Portal';\n default:\n }\n }\n\n const $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case ContextConsumer || NaN: return 'ContextConsumer';\n case ContextProvider || NaN: return 'ContextProvider';\n case Memo || NaN: return displayNameOfNode(type);\n case ForwardRef || NaN: {\n if (type.displayName) {\n return type.displayName;\n }\n const name = displayNameOfNode({ type: type.render });\n return name ? `ForwardRef(${name})` : 'ForwardRef';\n }\n default: return displayNameOfNode(node);\n }\n }\n\n isValidElement(element) {\n return isElement(element);\n }\n\n isValidElementType(object) {\n return !!object && isValidElementType(object);\n }\n\n isFragment(fragment) {\n return typeOfNode(fragment) === Fragment;\n }\n\n isCustomComponent(type) {\n const fakeElement = makeFakeElement(type);\n return !!type && (\n typeof type === 'function'\n || isForwardRef(fakeElement)\n || isContextProvider(fakeElement)\n || isContextConsumer(fakeElement)\n );\n }\n\n isContextConsumer(type) {\n return !!type && isContextConsumer(makeFakeElement(type));\n }\n\n isCustomComponentElement(inst) {\n if (!inst || !this.isValidElement(inst)) {\n return false;\n }\n return this.isCustomComponent(inst.type);\n }\n\n getProviderFromConsumer(Consumer) {\n // React stores references to the Provider on a Consumer differently across versions.\n if (Consumer) {\n let Provider;\n if (Consumer.Provider) {\n ({ Provider } = Consumer);\n } else if (Consumer._context) {\n ({ Provider } = Consumer._context);\n }\n if (Provider) {\n return Provider;\n }\n }\n throw new Error('Enzyme Internal Error: can’t figure out how to get Provider from Consumer');\n }\n\n createElement(...args) {\n return React.createElement(...args);\n }\n\n wrapWithWrappingComponent(node, options) {\n return {\n RootFinder,\n node: wrapWithWrappingComponent(React.createElement, node, options),\n };\n }\n}\n\nmodule.exports = ReactSixteenAdapter;\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/ReactSixteenAdapter.js"],"names":["is164","TestUtils","Simulate","touchStart","is165","auxClick","is166","React","unstable_AsyncMode","is168","act","hasShouldComponentUpdateBug","semver","satisfies","testRendererVersion","FiberTags","nodeAndSiblingsArray","nodeWithSibling","array","node","push","sibling","flatten","arr","result","stack","i","length","n","pop","el","Array","isArray","nodeTypeFromType","type","Portal","elementToTree","children","containerInfo","props","nodeType","key","ref","instance","rendered","toTree","vnode","tag","HostRoot","childrenToTree","child","HostPortal","stateNode","memoizedProps","ClassComponent","FunctionalComponent","MemoClass","elementType","MemoSFC","renderedNodes","map","HostComponent","HostText","Fragment","Mode","ContextProvider","ContextConsumer","Profiler","ForwardRef","pendingProps","Suspense","Lazy","Error","nodeToHostNode","_node","mapper","item","ReactDOM","findDOMNode","replaceLazyWithFallback","fallback","eventOptions","animation","pointerEvents","getEmptyStateValue","EmptyState","Component","testRenderer","ShallowRenderer","render","createElement","_instance","state","wrapAct","fn","returnVal","getProviderDefaultValue","Provider","_context","_defaultValue","_currentValue","makeFakeElement","$$typeof","Element","isStateful","prototype","isReactComponent","__reactAutoBindPairs","ReactSixteenAdapter","lifecycles","options","enableComponentDidUpdateOnSetState","legacyContextMode","componentDidUpdate","onSetState","getDerivedStateFromProps","getSnapshotBeforeUpdate","setState","skipsComponentDidUpdateOnNullish","getChildContext","calledByRenderer","getDerivedStateFromError","TypeError","attachTo","hydrateIn","wrappingComponentProps","domNode","global","document","adapter","context","callback","wrapperProps","ReactWrapperComponent","wrappedEl","hydrate","setChildProps","unmount","unmountComponentAtNode","getNode","isCustomComponent","_reactInternalFiber","simulateError","nodeHierarchy","rootNode","error","isErrorBoundary","elInstance","componentDidCatch","find","catchingInstance","catchingType","displayNameOfNode","undefined","simulateEvent","event","mock","mappedEvent","eventFn","batchedUpdates","getWrappingComponentRenderer","inst","getMountWrapperInstance","renderer","suspenseFallback","isDOM","cachedNode","lastComponent","wrappedComponent","sentinel","wrapPureComponent","compare","RangeError","shouldComponentUpdate","nextProps","isPureReactComponent","memoized","prevProps","shouldUpdate","args","defaultProps","displayName","wrapFunctionalComponent","unmaskedContext","providerValues","Map","set","value","MockProvider","getProviderFromConsumer","has","get","MockConsumer","renderedEl","FakeSuspenseWrapper","contextTypes","InnerComp","emptyStateValue","Object","defineProperty","configurable","enumerable","writable","output","getRenderOutput","concat","handler","checkPropTypes","typeSpecs","values","location","hierarchy","childContextTypes","ContextWrapper","ReactDOMServer","renderToStaticMarkup","mode","EnzymeAdapter","MODES","MOUNT","createMountRenderer","SHALLOW","createShallowRenderer","STRING","createStringRenderer","element","supportsArray","nodes","ConcurrentMode","AsyncMode","NaN","StrictMode","$$typeofType","Memo","nodeName","name","object","fragment","fakeElement","isValidElement","Consumer","RootFinder","module","exports"],"mappings":"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","file":"ReactSixteenAdapter.js","sourcesContent":["/* eslint no-use-before-define: 0 */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n// eslint-disable-next-line import/no-unresolved\nimport ReactDOMServer from 'react-dom/server';\n// eslint-disable-next-line import/no-unresolved\nimport ShallowRenderer from 'react-test-renderer/shallow';\nimport { version as testRendererVersion } from 'react-test-renderer/package.json';\n// eslint-disable-next-line import/no-unresolved\nimport TestUtils from 'react-dom/test-utils';\nimport semver from 'semver';\nimport checkPropTypes from 'prop-types/checkPropTypes';\nimport has from 'has';\nimport {\n AsyncMode,\n ConcurrentMode,\n ContextConsumer,\n ContextProvider,\n Element,\n ForwardRef,\n Fragment,\n isContextConsumer,\n isContextProvider,\n isElement,\n isForwardRef,\n isLazy,\n isMemo,\n isPortal,\n isSuspense,\n isValidElementType,\n Lazy,\n Memo,\n Portal,\n Profiler,\n StrictMode,\n Suspense,\n} from 'react-is';\nimport { EnzymeAdapter } from 'enzyme';\nimport { typeOfNode, shallowEqual } from 'enzyme/build/Utils';\nimport {\n displayNameOfNode,\n elementToTree as utilElementToTree,\n nodeTypeFromType as utilNodeTypeFromType,\n mapNativeEventNames,\n propFromEvent,\n assertDomAvailable,\n withSetStateAllowed,\n createRenderWrapper,\n createMountWrapper,\n propsWithKeysAndRef,\n ensureKeyOrUndefined,\n simulateError,\n wrap,\n getMaskedContext,\n getComponentStack,\n RootFinder,\n getNodeFromRootFinder,\n wrapWithWrappingComponent,\n getWrappingComponentMountRenderer,\n} from 'enzyme-adapter-utils';\nimport findCurrentFiberUsingSlowPath from './findCurrentFiberUsingSlowPath';\nimport detectFiberTags from './detectFiberTags';\n\nconst is164 = !!TestUtils.Simulate.touchStart; // 16.4+\nconst is165 = !!TestUtils.Simulate.auxClick; // 16.5+\nconst is166 = is165 && !React.unstable_AsyncMode; // 16.6+\nconst is168 = is166 && typeof TestUtils.act === 'function';\n\nconst hasShouldComponentUpdateBug = semver.satisfies(testRendererVersion, '< 16.8');\n\n// Lazily populated if DOM is available.\nlet FiberTags = null;\n\nfunction nodeAndSiblingsArray(nodeWithSibling) {\n const array = [];\n let node = nodeWithSibling;\n while (node != null) {\n array.push(node);\n node = node.sibling;\n }\n return array;\n}\n\nfunction flatten(arr) {\n const result = [];\n const stack = [{ i: 0, array: arr }];\n while (stack.length) {\n const n = stack.pop();\n while (n.i < n.array.length) {\n const el = n.array[n.i];\n n.i += 1;\n if (Array.isArray(el)) {\n stack.push(n);\n stack.push({ i: 0, array: el });\n break;\n }\n result.push(el);\n }\n }\n return result;\n}\n\nfunction nodeTypeFromType(type) {\n if (type === Portal) {\n return 'portal';\n }\n\n return utilNodeTypeFromType(type);\n}\n\nfunction elementToTree(el) {\n if (!isPortal(el)) {\n return utilElementToTree(el, elementToTree);\n }\n\n const { children, containerInfo } = el;\n const props = { children, containerInfo };\n\n return {\n nodeType: 'portal',\n type: Portal,\n props,\n key: ensureKeyOrUndefined(el.key),\n ref: el.ref || null,\n instance: null,\n rendered: elementToTree(el.children),\n };\n}\n\nfunction toTree(vnode) {\n if (vnode == null) {\n return null;\n }\n // TODO(lmr): I'm not really sure I understand whether or not this is what\n // i should be doing, or if this is a hack for something i'm doing wrong\n // somewhere else. Should talk to sebastian about this perhaps\n const node = findCurrentFiberUsingSlowPath(vnode);\n switch (node.tag) {\n case FiberTags.HostRoot:\n return childrenToTree(node.child);\n case FiberTags.HostPortal: {\n const {\n stateNode: { containerInfo },\n memoizedProps: children,\n } = node;\n const props = { containerInfo, children };\n return {\n nodeType: 'portal',\n type: Portal,\n props,\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n }\n case FiberTags.ClassComponent:\n return {\n nodeType: 'class',\n type: node.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: node.stateNode,\n rendered: childrenToTree(node.child),\n };\n case FiberTags.FunctionalComponent:\n return {\n nodeType: 'function',\n type: node.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n case FiberTags.MemoClass:\n return {\n nodeType: 'class',\n type: node.elementType.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: node.stateNode,\n rendered: childrenToTree(node.child.child),\n };\n case FiberTags.MemoSFC: {\n let renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));\n if (renderedNodes.length === 0) {\n renderedNodes = [node.memoizedProps.children];\n }\n return {\n nodeType: 'function',\n type: node.elementType,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: renderedNodes,\n };\n }\n case FiberTags.HostComponent: {\n let renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));\n if (renderedNodes.length === 0) {\n renderedNodes = [node.memoizedProps.children];\n }\n return {\n nodeType: 'host',\n type: node.type,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: node.stateNode,\n rendered: renderedNodes,\n };\n }\n case FiberTags.HostText:\n return node.memoizedProps;\n case FiberTags.Fragment:\n case FiberTags.Mode:\n case FiberTags.ContextProvider:\n case FiberTags.ContextConsumer:\n return childrenToTree(node.child);\n case FiberTags.Profiler:\n case FiberTags.ForwardRef: {\n return {\n nodeType: 'function',\n type: node.type,\n props: { ...node.pendingProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n }\n case FiberTags.Suspense: {\n return {\n nodeType: 'function',\n type: Suspense,\n props: { ...node.memoizedProps },\n key: ensureKeyOrUndefined(node.key),\n ref: node.ref,\n instance: null,\n rendered: childrenToTree(node.child),\n };\n }\n case FiberTags.Lazy:\n return childrenToTree(node.child);\n default:\n throw new Error(`Enzyme Internal Error: unknown node with tag ${node.tag}`);\n }\n}\n\nfunction childrenToTree(node) {\n if (!node) {\n return null;\n }\n const children = nodeAndSiblingsArray(node);\n if (children.length === 0) {\n return null;\n }\n if (children.length === 1) {\n return toTree(children[0]);\n }\n return flatten(children.map(toTree));\n}\n\nfunction nodeToHostNode(_node) {\n // NOTE(lmr): node could be a function component\n // which wont have an instance prop, but we can get the\n // host node associated with its return value at that point.\n // Although this breaks down if the return value is an array,\n // as is possible with React 16.\n let node = _node;\n while (node && !Array.isArray(node) && node.instance === null) {\n node = node.rendered;\n }\n // if the SFC returned null effectively, there is no host node.\n if (!node) {\n return null;\n }\n\n const mapper = (item) => {\n if (item && item.instance) return ReactDOM.findDOMNode(item.instance);\n return null;\n };\n if (Array.isArray(node)) {\n return node.map(mapper);\n }\n if (Array.isArray(node.rendered) && node.nodeType === 'class') {\n return node.rendered.map(mapper);\n }\n return mapper(node);\n}\n\nfunction replaceLazyWithFallback(node, fallback) {\n if (!node) {\n return null;\n }\n if (Array.isArray(node)) {\n return node.map(el => replaceLazyWithFallback(el, fallback));\n }\n if (isLazy(node.type)) {\n return fallback;\n }\n return {\n ...node,\n props: {\n ...node.props,\n children: replaceLazyWithFallback(node.props.children, fallback),\n },\n };\n}\n\nconst eventOptions = {\n animation: true,\n pointerEvents: is164,\n auxClick: is165,\n};\n\nfunction getEmptyStateValue() {\n // this handles a bug in React 16.0 - 16.2\n // see https://github.com/facebook/react/commit/39be83565c65f9c522150e52375167568a2a1459\n // also see https://github.com/facebook/react/pull/11965\n\n // eslint-disable-next-line react/prefer-stateless-function\n class EmptyState extends React.Component {\n render() {\n return null;\n }\n }\n const testRenderer = new ShallowRenderer();\n testRenderer.render(React.createElement(EmptyState));\n return testRenderer._instance.state;\n}\n\nfunction wrapAct(fn) {\n if (!is168) {\n return fn();\n }\n let returnVal;\n TestUtils.act(() => { returnVal = fn(); });\n return returnVal;\n}\n\nfunction getProviderDefaultValue(Provider) {\n // React stores references to the Provider's defaultValue differently across versions.\n if ('_defaultValue' in Provider._context) {\n return Provider._context._defaultValue;\n }\n if ('_currentValue' in Provider._context) {\n return Provider._context._currentValue;\n }\n throw new Error('Enzyme Internal Error: can’t figure out how to get Provider’s default value');\n}\n\nfunction makeFakeElement(type) {\n return { $$typeof: Element, type };\n}\n\nfunction isStateful(Component) {\n return Component.prototype && (\n Component.prototype.isReactComponent\n || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components\n );\n}\n\nclass ReactSixteenAdapter extends EnzymeAdapter {\n constructor() {\n super();\n const { lifecycles } = this.options;\n this.options = {\n ...this.options,\n enableComponentDidUpdateOnSetState: true, // TODO: remove, semver-major\n legacyContextMode: 'parent',\n lifecycles: {\n ...lifecycles,\n componentDidUpdate: {\n onSetState: true,\n },\n getDerivedStateFromProps: {\n hasShouldComponentUpdateBug,\n },\n getSnapshotBeforeUpdate: true,\n setState: {\n skipsComponentDidUpdateOnNullish: true,\n },\n getChildContext: {\n calledByRenderer: false,\n },\n getDerivedStateFromError: is166,\n },\n };\n }\n\n createMountRenderer(options) {\n assertDomAvailable('mount');\n if (has(options, 'suspenseFallback')) {\n throw new TypeError('`suspenseFallback` is not supported by the `mount` renderer');\n }\n if (FiberTags === null) {\n // Requires DOM.\n FiberTags = detectFiberTags();\n }\n const { attachTo, hydrateIn, wrappingComponentProps } = options;\n const domNode = hydrateIn || attachTo || global.document.createElement('div');\n let instance = null;\n const adapter = this;\n return {\n render(el, context, callback) {\n return wrapAct(() => {\n if (instance === null) {\n const { type, props, ref } = el;\n const wrapperProps = {\n Component: type,\n props,\n wrappingComponentProps,\n context,\n ...(ref && { ref }),\n };\n const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });\n const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);\n instance = hydrateIn\n ? ReactDOM.hydrate(wrappedEl, domNode)\n : ReactDOM.render(wrappedEl, domNode);\n if (typeof callback === 'function') {\n callback();\n }\n } else {\n instance.setChildProps(el.props, context, callback);\n }\n });\n },\n unmount() {\n ReactDOM.unmountComponentAtNode(domNode);\n instance = null;\n },\n getNode() {\n if (!instance) {\n return null;\n }\n return getNodeFromRootFinder(\n adapter.isCustomComponent,\n toTree(instance._reactInternalFiber),\n options,\n );\n },\n simulateError(nodeHierarchy, rootNode, error) {\n const isErrorBoundary = ({ instance: elInstance, type }) => {\n if (is166 && type && type.getDerivedStateFromError) {\n return true;\n }\n return elInstance && elInstance.componentDidCatch;\n };\n\n const {\n instance: catchingInstance,\n type: catchingType,\n } = nodeHierarchy.find(isErrorBoundary) || {};\n\n simulateError(\n error,\n catchingInstance,\n rootNode,\n nodeHierarchy,\n nodeTypeFromType,\n adapter.displayNameOfNode,\n is166 ? catchingType : undefined,\n );\n },\n simulateEvent(node, event, mock) {\n const mappedEvent = mapNativeEventNames(event, eventOptions);\n const eventFn = TestUtils.Simulate[mappedEvent];\n if (!eventFn) {\n throw new TypeError(`ReactWrapper::simulate() event '${event}' does not exist`);\n }\n wrapAct(() => {\n eventFn(adapter.nodeToHostNode(node), mock);\n });\n },\n batchedUpdates(fn) {\n return fn();\n // return ReactDOM.unstable_batchedUpdates(fn);\n },\n getWrappingComponentRenderer() {\n return {\n ...this,\n ...getWrappingComponentMountRenderer({\n toTree: inst => toTree(inst._reactInternalFiber),\n getMountWrapperInstance: () => instance,\n }),\n };\n },\n };\n }\n\n createShallowRenderer(options = {}) {\n const adapter = this;\n const renderer = new ShallowRenderer();\n const { suspenseFallback } = options;\n if (typeof suspenseFallback !== 'undefined' && typeof suspenseFallback !== 'boolean') {\n throw TypeError('`options.suspenseFallback` should be boolean or undefined');\n }\n let isDOM = false;\n let cachedNode = null;\n\n let lastComponent = null;\n let wrappedComponent = null;\n const sentinel = {};\n\n // wrap memo components with a PureComponent, or a class component with sCU\n const wrapPureComponent = (Component, compare) => {\n if (!is166) {\n throw new RangeError('this function should not be called in React < 16.6. Please report this!');\n }\n if (lastComponent !== Component) {\n if (isStateful(Component)) {\n wrappedComponent = class extends Component {}; // eslint-disable-line react/prefer-stateless-function\n if (compare) {\n wrappedComponent.prototype.shouldComponentUpdate = nextProps => !compare(this.props, nextProps);\n } else {\n wrappedComponent.prototype.isPureReactComponent = true;\n }\n } else {\n let memoized = sentinel;\n let prevProps;\n wrappedComponent = function (props, ...args) {\n const shouldUpdate = memoized === sentinel || (compare\n ? !compare(prevProps, props)\n : !shallowEqual(prevProps, props)\n );\n if (shouldUpdate) {\n memoized = Component({ ...Component.defaultProps, ...props }, ...args);\n prevProps = props;\n }\n return memoized;\n };\n }\n Object.assign(\n wrappedComponent,\n Component,\n { displayName: adapter.displayNameOfNode({ type: Component }) },\n );\n lastComponent = Component;\n }\n return wrappedComponent;\n };\n\n // Wrap functional components on versions prior to 16.5,\n // to avoid inadvertently pass a `this` instance to it.\n const wrapFunctionalComponent = (Component) => {\n if (is166 && has(Component, 'defaultProps')) {\n if (lastComponent !== Component) {\n wrappedComponent = Object.assign(\n // eslint-disable-next-line new-cap\n (props, ...args) => Component({ ...Component.defaultProps, ...props }, ...args),\n Component,\n { displayName: adapter.displayNameOfNode({ type: Component }) },\n );\n lastComponent = Component;\n }\n return wrappedComponent;\n }\n if (is165) {\n return Component;\n }\n\n if (lastComponent !== Component) {\n wrappedComponent = Object.assign(\n (...args) => Component(...args), // eslint-disable-line new-cap\n Component,\n );\n lastComponent = Component;\n }\n return wrappedComponent;\n };\n\n return {\n render(el, unmaskedContext, {\n providerValues = new Map(),\n } = {}) {\n cachedNode = el;\n /* eslint consistent-return: 0 */\n if (typeof el.type === 'string') {\n isDOM = true;\n } else if (isContextProvider(el)) {\n providerValues.set(el.type, el.props.value);\n const MockProvider = Object.assign(\n props => props.children,\n el.type,\n );\n return withSetStateAllowed(() => renderer.render({ ...el, type: MockProvider }));\n } else if (isContextConsumer(el)) {\n const Provider = adapter.getProviderFromConsumer(el.type);\n const value = providerValues.has(Provider)\n ? providerValues.get(Provider)\n : getProviderDefaultValue(Provider);\n const MockConsumer = Object.assign(\n props => props.children(value),\n el.type,\n );\n return withSetStateAllowed(() => renderer.render({ ...el, type: MockConsumer }));\n } else {\n isDOM = false;\n let renderedEl = el;\n if (isLazy(renderedEl)) {\n throw TypeError('`React.lazy` is not supported by shallow rendering.');\n }\n if (isSuspense(renderedEl)) {\n let { children } = renderedEl.props;\n if (suspenseFallback) {\n const { fallback } = renderedEl.props;\n children = replaceLazyWithFallback(children, fallback);\n }\n const FakeSuspenseWrapper = () => children;\n renderedEl = React.createElement(FakeSuspenseWrapper, null, children);\n }\n const { type: Component } = renderedEl;\n\n const context = getMaskedContext(Component.contextTypes, unmaskedContext);\n\n if (isMemo(el.type)) {\n const { type: InnerComp, compare } = el.type;\n\n return withSetStateAllowed(() => renderer.render(\n { ...el, type: wrapPureComponent(InnerComp, compare) },\n context,\n ));\n }\n\n if (!isStateful(Component) && typeof Component === 'function') {\n return withSetStateAllowed(() => renderer.render(\n { ...renderedEl, type: wrapFunctionalComponent(Component) },\n context,\n ));\n }\n\n if (isStateful) {\n // fix react bug; see implementation of `getEmptyStateValue`\n const emptyStateValue = getEmptyStateValue();\n if (emptyStateValue) {\n Object.defineProperty(Component.prototype, 'state', {\n configurable: true,\n enumerable: true,\n get() {\n return null;\n },\n set(value) {\n if (value !== emptyStateValue) {\n Object.defineProperty(this, 'state', {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n }\n return true;\n },\n });\n }\n }\n return withSetStateAllowed(() => renderer.render(renderedEl, context));\n }\n },\n unmount() {\n renderer.unmount();\n },\n getNode() {\n if (isDOM) {\n return elementToTree(cachedNode);\n }\n const output = renderer.getRenderOutput();\n return {\n nodeType: nodeTypeFromType(cachedNode.type),\n type: cachedNode.type,\n props: cachedNode.props,\n key: ensureKeyOrUndefined(cachedNode.key),\n ref: cachedNode.ref,\n instance: renderer._instance,\n rendered: Array.isArray(output)\n ? flatten(output).map(el => elementToTree(el))\n : elementToTree(output),\n };\n },\n simulateError(nodeHierarchy, rootNode, error) {\n simulateError(\n error,\n renderer._instance,\n cachedNode,\n nodeHierarchy.concat(cachedNode),\n nodeTypeFromType,\n adapter.displayNameOfNode,\n is166 ? cachedNode.type : undefined,\n );\n },\n simulateEvent(node, event, ...args) {\n const handler = node.props[propFromEvent(event, eventOptions)];\n if (handler) {\n withSetStateAllowed(() => {\n // TODO(lmr): create/use synthetic events\n // TODO(lmr): emulate React's event propagation\n // ReactDOM.unstable_batchedUpdates(() => {\n handler(...args);\n // });\n });\n }\n },\n batchedUpdates(fn) {\n return fn();\n // return ReactDOM.unstable_batchedUpdates(fn);\n },\n checkPropTypes(typeSpecs, values, location, hierarchy) {\n return checkPropTypes(\n typeSpecs,\n values,\n location,\n displayNameOfNode(cachedNode),\n () => getComponentStack(hierarchy.concat([cachedNode])),\n );\n },\n };\n }\n\n createStringRenderer(options) {\n if (has(options, 'suspenseFallback')) {\n throw new TypeError('`suspenseFallback` should not be specified in options of string renderer');\n }\n return {\n render(el, context) {\n if (options.context && (el.type.contextTypes || options.childContextTypes)) {\n const childContextTypes = {\n ...(el.type.contextTypes || {}),\n ...options.childContextTypes,\n };\n const ContextWrapper = createRenderWrapper(el, context, childContextTypes);\n return ReactDOMServer.renderToStaticMarkup(React.createElement(ContextWrapper));\n }\n return ReactDOMServer.renderToStaticMarkup(el);\n },\n };\n }\n\n // Provided a bag of options, return an `EnzymeRenderer`. Some options can be implementation\n // specific, like `attach` etc. for React, but not part of this interface explicitly.\n // eslint-disable-next-line class-methods-use-this\n createRenderer(options) {\n switch (options.mode) {\n case EnzymeAdapter.MODES.MOUNT: return this.createMountRenderer(options);\n case EnzymeAdapter.MODES.SHALLOW: return this.createShallowRenderer(options);\n case EnzymeAdapter.MODES.STRING: return this.createStringRenderer(options);\n default:\n throw new Error(`Enzyme Internal Error: Unrecognized mode: ${options.mode}`);\n }\n }\n\n wrap(element) {\n return wrap(element);\n }\n\n // converts an RSTNode to the corresponding JSX Pragma Element. This will be needed\n // in order to implement the `Wrapper.mount()` and `Wrapper.shallow()` methods, but should\n // be pretty straightforward for people to implement.\n // eslint-disable-next-line class-methods-use-this\n nodeToElement(node) {\n if (!node || typeof node !== 'object') return null;\n const { type } = node;\n return React.createElement(isMemo(type) ? type.type : type, propsWithKeysAndRef(node));\n }\n\n elementToNode(element) {\n return elementToTree(element);\n }\n\n nodeToHostNode(node, supportsArray = false) {\n const nodes = nodeToHostNode(node);\n if (Array.isArray(nodes) && !supportsArray) {\n return nodes[0];\n }\n return nodes;\n }\n\n displayNameOfNode(node) {\n if (!node) return null;\n const { type, $$typeof } = node;\n\n const nodeType = type || $$typeof;\n\n // newer node types may be undefined, so only test if the nodeType exists\n if (nodeType) {\n switch (nodeType) {\n case (is166 ? ConcurrentMode : AsyncMode) || NaN: return is166 ? 'ConcurrentMode' : 'AsyncMode';\n case Fragment || NaN: return 'Fragment';\n case StrictMode || NaN: return 'StrictMode';\n case Profiler || NaN: return 'Profiler';\n case Portal || NaN: return 'Portal';\n case Suspense || NaN: return 'Suspense';\n default:\n }\n }\n\n const $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case ContextConsumer || NaN: return 'ContextConsumer';\n case ContextProvider || NaN: return 'ContextProvider';\n case Memo || NaN: {\n const nodeName = displayNameOfNode(node);\n return typeof nodeName === 'string' ? nodeName : `Memo(${displayNameOfNode(type)})`;\n }\n case ForwardRef || NaN: {\n if (type.displayName) {\n return type.displayName;\n }\n const name = displayNameOfNode({ type: type.render });\n return name ? `ForwardRef(${name})` : 'ForwardRef';\n }\n case Lazy || NaN: {\n return 'lazy';\n }\n default: return displayNameOfNode(node);\n }\n }\n\n isValidElement(element) {\n return isElement(element);\n }\n\n isValidElementType(object) {\n return !!object && isValidElementType(object);\n }\n\n isFragment(fragment) {\n return typeOfNode(fragment) === Fragment;\n }\n\n isCustomComponent(type) {\n const fakeElement = makeFakeElement(type);\n return !!type && (\n typeof type === 'function'\n || isForwardRef(fakeElement)\n || isContextProvider(fakeElement)\n || isContextConsumer(fakeElement)\n || isSuspense(fakeElement)\n );\n }\n\n isContextConsumer(type) {\n return !!type && isContextConsumer(makeFakeElement(type));\n }\n\n isCustomComponentElement(inst) {\n if (!inst || !this.isValidElement(inst)) {\n return false;\n }\n return this.isCustomComponent(inst.type);\n }\n\n getProviderFromConsumer(Consumer) {\n // React stores references to the Provider on a Consumer differently across versions.\n if (Consumer) {\n let Provider;\n if (Consumer._context) { // check this first, to avoid a deprecation warning\n ({ Provider } = Consumer._context);\n } else if (Consumer.Provider) {\n ({ Provider } = Consumer);\n }\n if (Provider) {\n return Provider;\n }\n }\n throw new Error('Enzyme Internal Error: can’t figure out how to get Provider from Consumer');\n }\n\n createElement(...args) {\n return React.createElement(...args);\n }\n\n wrapWithWrappingComponent(node, options) {\n return {\n RootFinder,\n node: wrapWithWrappingComponent(React.createElement, node, options),\n };\n }\n}\n\nmodule.exports = ReactSixteenAdapter;\n"]}
\ No newline at end of file

.eslintrc

@@ -3,9 +3,9 @@
"root": true,
"rules": {
"max-len": 0,
- "import/no-extraneous-dependencies": 0,
- "import/no-unresolved": 0,
- "import/extensions": 0,
+ "import/no-extraneous-dependencies": 2,
+ "import/no-unresolved": 2,
+ "import/extensions": 2,
"react/no-deprecated": 0,
"react/no-find-dom-node": 0,
"react/no-multi-comp": 0,

package.json

@@ -1,6 +1,6 @@
{
"name": "enzyme-adapter-react-16",
- "version": "1.12.1",
+ "version": "1.13.2",
"description": "JavaScript Testing utilities for React",
"homepage": "http://airbnb.io/enzyme/",
"main": "build",
@@ -35,13 +35,14 @@
"author": "Leland Richardson <leland.richardson@airbnb.com>",
"license": "MIT",
"dependencies": {
- "enzyme-adapter-utils": "^1.11.0",
+ "enzyme-adapter-utils": "^1.12.0",
+ "has": "^1.0.3",
"object.assign": "^4.1.0",
"object.values": "^1.1.0",
"prop-types": "^15.7.2",
"react-is": "^16.8.6",
"react-test-renderer": "^16.0.0-0",
- "semver": "^5.6.0"
+ "semver": "^5.7.0"
},
"peerDependencies": {
"enzyme": "^3.0.0",
@@ -55,9 +56,9 @@
"enzyme": "^3.0.0",
"eslint": "^5.16.0",
"eslint-config-airbnb": "^17.1.0",
- "eslint-plugin-import": "^2.16.0",
+ "eslint-plugin-import": "^2.17.3",
"eslint-plugin-jsx-a11y": "^6.2.1",
- "eslint-plugin-react": "^7.12.4",
+ "eslint-plugin-react": "^7.13.0",
"in-publish": "^2.0.0",
"rimraf": "^2.6.3",
"safe-publish-latest": "^1.1.2"

README.md

@@ -68,7 +68,7 @@
| Adapter Package | For Library | Status |
| --- | --- | --- |
-| [`preact-enzyme-adapter`](https://github.com/aweary/preact-enzyme-adapater) | [`preact`](https://github.com/developit/preact) | (work in progress) |
+| [`enzyme-adapter-preact-pure`](https://github.com/preactjs/enzyme-adapter-preact-pure) | [`preact`](https://github.com/developit/preact) | (stable) |
|[`enzyme-adapter-inferno`](https://github.com/bbc/enzyme-adapter-inferno)|[`inferno`](https://github.com/infernojs/inferno)|(work in progress)|
Running Enzyme Tests

src/detectFiberTags.js

@@ -1,5 +1,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
+import { fakeDynamicImport } from 'enzyme-adapter-utils';
function getFiber(element) {
const container = global.document.createElement('div');
@@ -14,12 +15,38 @@
return inst._reactInternalFiber.child;
}
+function getLazyFiber(LazyComponent) {
+ const container = global.document.createElement('div');
+ let inst = null;
+ // eslint-disable-next-line react/prefer-stateless-function
+ class Tester extends React.Component {
+ render() {
+ inst = this;
+ return React.createElement(LazyComponent);
+ }
+ }
+ // eslint-disable-next-line react/prefer-stateless-function
+ class SuspenseWrapper extends React.Component {
+ render() {
+ return React.createElement(
+ React.Suspense,
+ { fallback: false },
+ React.createElement(Tester),
+ );
+ }
+ }
+ ReactDOM.render(React.createElement(SuspenseWrapper), container);
+ return inst._reactInternalFiber.child;
+}
+
module.exports = function detectFiberTags() {
const supportsMode = typeof React.StrictMode !== 'undefined';
const supportsContext = typeof React.createContext !== 'undefined';
const supportsForwardRef = typeof React.forwardRef !== 'undefined';
const supportsMemo = typeof React.memo !== 'undefined';
const supportsProfiler = typeof React.unstable_Profiler !== 'undefined';
+ const supportsSuspense = typeof React.Suspense !== 'undefined';
+ const supportsLazy = typeof React.lazy !== 'undefined';
function Fn() {
return null;
@@ -32,6 +59,7 @@
}
let Ctx = null;
let FwdRef = null;
+ let LazyComponent = null;
if (supportsContext) {
Ctx = React.createContext();
}
@@ -40,6 +68,9 @@
// eslint-disable-next-line no-unused-vars
FwdRef = React.forwardRef((props, ref) => null);
}
+ if (supportsLazy) {
+ LazyComponent = React.lazy(() => fakeDynamicImport(() => null));
+ }
return {
HostRoot: getFiber('test').return.return.tag, // Go two levels above to find the root
@@ -70,5 +101,11 @@
Profiler: supportsProfiler
? getFiber(React.createElement(React.unstable_Profiler, { id: 'mock', onRender() {} })).tag
: -1,
+ Suspense: supportsSuspense
+ ? getFiber(React.createElement(React.Suspense, { fallback: false })).tag
+ : -1,
+ Lazy: supportsLazy
+ ? getLazyFiber(LazyComponent).tag
+ : -1,
};
};

src/ReactSixteenAdapter.js

@@ -10,6 +10,7 @@
import TestUtils from 'react-dom/test-utils';
import semver from 'semver';
import checkPropTypes from 'prop-types/checkPropTypes';
+import has from 'has';
import {
AsyncMode,
ConcurrentMode,
@@ -22,16 +23,20 @@
isContextProvider,
isElement,
isForwardRef,
+ isLazy,
isMemo,
isPortal,
+ isSuspense,
isValidElementType,
+ Lazy,
Memo,
Portal,
Profiler,
StrictMode,
+ Suspense,
} from 'react-is';
import { EnzymeAdapter } from 'enzyme';
-import { typeOfNode } from 'enzyme/build/Utils';
+import { typeOfNode, shallowEqual } from 'enzyme/build/Utils';
import {
displayNameOfNode,
elementToTree as utilElementToTree,
@@ -228,6 +233,19 @@
rendered: childrenToTree(node.child),
};
}
+ case FiberTags.Suspense: {
+ return {
+ nodeType: 'function',
+ type: Suspense,
+ props: { ...node.memoizedProps },
+ key: ensureKeyOrUndefined(node.key),
+ ref: node.ref,
+ instance: null,
+ rendered: childrenToTree(node.child),
+ };
+ }
+ case FiberTags.Lazy:
+ return childrenToTree(node.child);
default:
throw new Error(`Enzyme Internal Error: unknown node with tag ${node.tag}`);
}
@@ -275,6 +293,25 @@
return mapper(node);
}
+function replaceLazyWithFallback(node, fallback) {
+ if (!node) {
+ return null;
+ }
+ if (Array.isArray(node)) {
+ return node.map(el => replaceLazyWithFallback(el, fallback));
+ }
+ if (isLazy(node.type)) {
+ return fallback;
+ }
+ return {
+ ...node,
+ props: {
+ ...node.props,
+ children: replaceLazyWithFallback(node.props.children, fallback),
+ },
+ };
+}
+
const eventOptions = {
animation: true,
pointerEvents: is164,
@@ -321,6 +358,13 @@
return { $$typeof: Element, type };
}
+function isStateful(Component) {
+ return Component.prototype && (
+ Component.prototype.isReactComponent
+ || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components
+ );
+}
+
class ReactSixteenAdapter extends EnzymeAdapter {
constructor() {
super();
@@ -351,6 +395,9 @@
createMountRenderer(options) {
assertDomAvailable('mount');
+ if (has(options, 'suspenseFallback')) {
+ throw new TypeError('`suspenseFallback` is not supported by the `mount` renderer');
+ }
if (FiberTags === null) {
// Requires DOM.
FiberTags = detectFiberTags();
@@ -427,7 +474,9 @@
if (!eventFn) {
throw new TypeError(`ReactWrapper::simulate() event '${event}' does not exist`);
}
- eventFn(nodeToHostNode(node), mock);
+ wrapAct(() => {
+ eventFn(adapter.nodeToHostNode(node), mock);
+ });
},
batchedUpdates(fn) {
return fn();
@@ -445,18 +494,73 @@
};
}
- createShallowRenderer(/* options */) {
+ createShallowRenderer(options = {}) {
const adapter = this;
const renderer = new ShallowRenderer();
+ const { suspenseFallback } = options;
+ if (typeof suspenseFallback !== 'undefined' && typeof suspenseFallback !== 'boolean') {
+ throw TypeError('`options.suspenseFallback` should be boolean or undefined');
+ }
let isDOM = false;
let cachedNode = null;
let lastComponent = null;
let wrappedComponent = null;
+ const sentinel = {};
+
+ // wrap memo components with a PureComponent, or a class component with sCU
+ const wrapPureComponent = (Component, compare) => {
+ if (!is166) {
+ throw new RangeError('this function should not be called in React < 16.6. Please report this!');
+ }
+ if (lastComponent !== Component) {
+ if (isStateful(Component)) {
+ wrappedComponent = class extends Component {}; // eslint-disable-line react/prefer-stateless-function
+ if (compare) {
+ wrappedComponent.prototype.shouldComponentUpdate = nextProps => !compare(this.props, nextProps);
+ } else {
+ wrappedComponent.prototype.isPureReactComponent = true;
+ }
+ } else {
+ let memoized = sentinel;
+ let prevProps;
+ wrappedComponent = function (props, ...args) {
+ const shouldUpdate = memoized === sentinel || (compare
+ ? !compare(prevProps, props)
+ : !shallowEqual(prevProps, props)
+ );
+ if (shouldUpdate) {
+ memoized = Component({ ...Component.defaultProps, ...props }, ...args);
+ prevProps = props;
+ }
+ return memoized;
+ };
+ }
+ Object.assign(
+ wrappedComponent,
+ Component,
+ { displayName: adapter.displayNameOfNode({ type: Component }) },
+ );
+ lastComponent = Component;
+ }
+ return wrappedComponent;
+ };
// Wrap functional components on versions prior to 16.5,
// to avoid inadvertently pass a `this` instance to it.
const wrapFunctionalComponent = (Component) => {
+ if (is166 && has(Component, 'defaultProps')) {
+ if (lastComponent !== Component) {
+ wrappedComponent = Object.assign(
+ // eslint-disable-next-line new-cap
+ (props, ...args) => Component({ ...Component.defaultProps, ...props }, ...args),
+ Component,
+ { displayName: adapter.displayNameOfNode({ type: Component }) },
+ );
+ lastComponent = Component;
+ }
+ return wrappedComponent;
+ }
if (is165) {
return Component;
}
@@ -498,26 +602,35 @@
return withSetStateAllowed(() => renderer.render({ ...el, type: MockConsumer }));
} else {
isDOM = false;
- const { type: Component } = el;
-
- const isStateful = Component.prototype && (
- Component.prototype.isReactComponent
- || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components
- );
+ let renderedEl = el;
+ if (isLazy(renderedEl)) {
+ throw TypeError('`React.lazy` is not supported by shallow rendering.');
+ }
+ if (isSuspense(renderedEl)) {
+ let { children } = renderedEl.props;
+ if (suspenseFallback) {
+ const { fallback } = renderedEl.props;
+ children = replaceLazyWithFallback(children, fallback);
+ }
+ const FakeSuspenseWrapper = () => children;
+ renderedEl = React.createElement(FakeSuspenseWrapper, null, children);
+ }
+ const { type: Component } = renderedEl;
const context = getMaskedContext(Component.contextTypes, unmaskedContext);
- if (!isStateful && isMemo(el.type)) {
- const InnerComp = el.type.type;
+ if (isMemo(el.type)) {
+ const { type: InnerComp, compare } = el.type;
+
return withSetStateAllowed(() => renderer.render(
- { ...el, type: wrapFunctionalComponent(InnerComp) },
+ { ...el, type: wrapPureComponent(InnerComp, compare) },
context,
));
}
- if (!isStateful && typeof Component === 'function') {
+ if (!isStateful(Component) && typeof Component === 'function') {
return withSetStateAllowed(() => renderer.render(
- { ...el, type: wrapFunctionalComponent(Component) },
+ { ...renderedEl, type: wrapFunctionalComponent(Component) },
context,
));
}
@@ -546,7 +659,7 @@
});
}
}
- return withSetStateAllowed(() => renderer.render(el, context));
+ return withSetStateAllowed(() => renderer.render(renderedEl, context));
}
},
unmount() {
@@ -609,6 +722,9 @@
}
createStringRenderer(options) {
+ if (has(options, 'suspenseFallback')) {
+ throw new TypeError('`suspenseFallback` should not be specified in options of string renderer');
+ }
return {
render(el, context) {
if (options.context && (el.type.contextTypes || options.childContextTypes)) {
@@ -647,7 +763,8 @@
// eslint-disable-next-line class-methods-use-this
nodeToElement(node) {
if (!node || typeof node !== 'object') return null;
- return React.createElement(node.type, propsWithKeysAndRef(node));
+ const { type } = node;
+ return React.createElement(isMemo(type) ? type.type : type, propsWithKeysAndRef(node));
}
elementToNode(element) {
@@ -676,6 +793,7 @@
case StrictMode || NaN: return 'StrictMode';
case Profiler || NaN: return 'Profiler';
case Portal || NaN: return 'Portal';
+ case Suspense || NaN: return 'Suspense';
default:
}
}
@@ -685,7 +803,10 @@
switch ($$typeofType) {
case ContextConsumer || NaN: return 'ContextConsumer';
case ContextProvider || NaN: return 'ContextProvider';
- case Memo || NaN: return displayNameOfNode(type);
+ case Memo || NaN: {
+ const nodeName = displayNameOfNode(node);
+ return typeof nodeName === 'string' ? nodeName : `Memo(${displayNameOfNode(type)})`;
+ }
case ForwardRef || NaN: {
if (type.displayName) {
return type.displayName;
@@ -693,6 +814,9 @@
const name = displayNameOfNode({ type: type.render });
return name ? `ForwardRef(${name})` : 'ForwardRef';
}
+ case Lazy || NaN: {
+ return 'lazy';
+ }
default: return displayNameOfNode(node);
}
}
@@ -716,6 +840,7 @@
|| isForwardRef(fakeElement)
|| isContextProvider(fakeElement)
|| isContextConsumer(fakeElement)
+ || isSuspense(fakeElement)
);
}
@@ -734,10 +859,10 @@
// React stores references to the Provider on a Consumer differently across versions.
if (Consumer) {
let Provider;
- if (Consumer.Provider) {
- ({ Provider } = Consumer);
- } else if (Consumer._context) {
+ if (Consumer._context) { // check this first, to avoid a deprecation warning
({ Provider } = Consumer._context);
+ } else if (Consumer.Provider) {
+ ({ Provider } = Consumer);
}
if (Provider) {
return Provider;