Files

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

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

build/detectFiberTags.js

@@ -56,6 +56,7 @@
var supportsContext = typeof _react2['default'].createContext !== 'undefined';
var supportsForwardRef = typeof _react2['default'].forwardRef !== 'undefined';
var supportsMemo = typeof _react2['default'].memo !== 'undefined';
+ var supportsProfiler = typeof _react2['default'].unstable_Profiler !== 'undefined';
function Fn() {
return null;
@@ -112,10 +113,18 @@
ContextConsumer: supportsContext ? getFiber(_react2['default'].createElement(Ctx.Consumer, null, function () {
return null;
})).tag : -1,
- ContextProvider: supportsContext ? getFiber(_react2['default'].createElement(Ctx.Provider, { value: null })).tag : -1,
- ForwardRef: supportsForwardRef ? getFiber(_react2['default'].createElement(FwdRef)).tag : -1
+ ContextProvider: supportsContext ? getFiber(_react2['default'].createElement(Ctx.Provider, { value: null }, null)).tag : -1,
+ ForwardRef: supportsForwardRef ? getFiber(_react2['default'].createElement(FwdRef)).tag : -1,
+ Profiler: supportsProfiler ? getFiber(_react2['default'].createElement(_react2['default'].unstable_Profiler, { id: 'mock', onRender: function () {
+ function onRender() {}
+
+ return onRender;
+ }()
+ })).tag : -1
};
}
return detectFiberTags;
}();
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXRlY3RGaWJlclRhZ3MuanMiXSwibmFtZXMiOlsiZ2V0RmliZXIiLCJlbGVtZW50IiwiY29udGFpbmVyIiwiZ2xvYmFsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5zdCIsIlRlc3RlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUmVhY3RET00iLCJyZW5kZXIiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwiY2hpbGQiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGV0ZWN0RmliZXJUYWdzIiwic3VwcG9ydHNNb2RlIiwiU3RyaWN0TW9kZSIsInN1cHBvcnRzQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJzdXBwb3J0c0ZvcndhcmRSZWYiLCJmb3J3YXJkUmVmIiwic3VwcG9ydHNNZW1vIiwibWVtbyIsInN1cHBvcnRzUHJvZmlsZXIiLCJ1bnN0YWJsZV9Qcm9maWxlciIsIkZuIiwiQ2xzIiwiQ3R4IiwiRndkUmVmIiwicHJvcHMiLCJyZWYiLCJIb3N0Um9vdCIsInRhZyIsIkNsYXNzQ29tcG9uZW50IiwiRnJhZ21lbnQiLCJGdW5jdGlvbmFsQ29tcG9uZW50IiwiTWVtb1NGQyIsIk1lbW9DbGFzcyIsIkhvc3RQb3J0YWwiLCJjcmVhdGVQb3J0YWwiLCJIb3N0Q29tcG9uZW50IiwiSG9zdFRleHQiLCJNb2RlIiwiQ29udGV4dENvbnN1bWVyIiwiQ29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJQcm92aWRlciIsInZhbHVlIiwiRm9yd2FyZFJlZiIsIlByb2ZpbGVyIiwiaWQiLCJvblJlbmRlciJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLFNBQVNBLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQTJCO0FBQ3pCLE1BQU1DLFlBQVlDLE9BQU9DLFFBQVAsQ0FBZ0JDLGFBQWhCLENBQThCLEtBQTlCLENBQWxCO0FBQ0EsTUFBSUMsT0FBTyxJQUFYOztBQUZ5QixNQUduQkMsTUFIbUI7QUFBQTs7QUFBQTtBQUFB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QUFOO0FBQUEsT0FBeEMsQ0FBVCxFQUE4RFosR0FEakQsR0FFYixDQUFDLENBbkJBO0FBb0JMYSx1QkFBaUI1QixrQkFDYm5CLFNBQVNRLG1CQUFNSCxhQUFOLENBQW9Cd0IsSUFBSW1CLFFBQXhCLEVBQWtDLEVBQUVDLE9BQU8sSUFBVCxFQUFsQyxFQUFtRCxJQUFuRCxDQUFULEVBQW1FZixHQUR0RCxHQUViLENBQUMsQ0F0QkE7QUF1QkxnQixrQkFBWTdCLHFCQUNSckIsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0J5QixNQUFwQixDQUFULEVBQXNDSSxHQUQ5QixHQUVSLENBQUMsQ0F6QkE7QUEwQkxpQixnQkFBVTFCLG1CQUNOekIsU0FBU1EsbUJBQU1ILGFBQU4sQ0FBb0JHLG1CQUFNa0IsaUJBQTFCLEVBQTZDLEVBQUUwQixJQUFJLE1BQU4sRUFBY0MsUUFBZDtBQUFBLDhCQUF5QixDQUFFOztBQUEzQjtBQUFBO0FBQUEsT0FBN0MsQ0FBVCxFQUFzRm5CLEdBRGhGLEdBRU4sQ0FBQztBQTVCQSxLQUFQO0FBOEJEOztBQXpERCxTQUEwQmxCLGVBQTFCO0FBQUEiLCJmaWxlIjoiZGV0ZWN0RmliZXJUYWdzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG5mdW5jdGlvbiBnZXRGaWJlcihlbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbGV0IGluc3QgPSBudWxsO1xuICBjbGFzcyBUZXN0ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGluc3QgPSB0aGlzO1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIFJlYWN0RE9NLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RlciksIGNvbnRhaW5lcik7XG4gIHJldHVybiBpbnN0Ll9yZWFjdEludGVybmFsRmliZXIuY2hpbGQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGV0ZWN0RmliZXJUYWdzKCkge1xuICBjb25zdCBzdXBwb3J0c01vZGUgPSB0eXBlb2YgUmVhY3QuU3RyaWN0TW9kZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIGNvbnN0IHN1cHBvcnRzQ29udGV4dCA9IHR5cGVvZiBSZWFjdC5jcmVhdGVDb250ZXh0ICE9PSAndW5kZWZpbmVkJztcbiAgY29uc3Qgc3VwcG9ydHNGb3J3YXJkUmVmID0gdHlwZW9mIFJlYWN0LmZvcndhcmRSZWYgIT09ICd1bmRlZmluZWQnO1xuICBjb25zdCBzdXBwb3J0c01lbW8gPSB0eXBlb2YgUmVhY3QubWVtbyAhPT0gJ3VuZGVmaW5lZCc7XG4gIGNvbnN0IHN1cHBvcnRzUHJvZmlsZXIgPSB0eXBlb2YgUmVhY3QudW5zdGFibGVfUHJvZmlsZXIgIT09ICd1bmRlZmluZWQnO1xuXG4gIGZ1bmN0aW9uIEZuKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG4gIGNsYXNzIENscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGxldCBDdHggPSBudWxsO1xuICBsZXQgRndkUmVmID0gbnVsbDtcbiAgaWYgKHN1cHBvcnRzQ29udGV4dCkge1xuICAgIEN0eCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbiAgfVxuICBpZiAoc3VwcG9ydHNGb3J3YXJkUmVmKSB7XG4gICAgLy8gUmVhY3Qgd2lsbCB3YXJuIGlmIHdlIGRvbid0IGhhdmUgYm90aCBhcmd1bWVudHMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgRndkUmVmID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4gbnVsbCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEhvc3RSb290OiBnZXRGaWJlcigndGVzdCcpLnJldHVybi5yZXR1cm4udGFnLCAvLyBHbyB0d28gbGV2ZWxzIGFib3ZlIHRvIGZpbmQgdGhlIHJvb3RcbiAgICBDbGFzc0NvbXBvbmVudDogZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChDbHMpKS50YWcsXG4gICAgRnJhZ21lbnQ6IGdldEZpYmVyKFtbJ25lc3RlZCddXSkudGFnLFxuICAgIEZ1bmN0aW9uYWxDb21wb25lbnQ6IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm4pKS50YWcsXG4gICAgTWVtb1NGQzogc3VwcG9ydHNNZW1vXG4gICAgICA/IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QubWVtbyhGbikpKS50YWdcbiAgICAgIDogLTEsXG4gICAgTWVtb0NsYXNzOiBzdXBwb3J0c01lbW9cbiAgICAgID8gZ2V0RmliZXIoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5tZW1vKENscykpKS50YWdcbiAgICAgIDogLTEsXG4gICAgSG9zdFBvcnRhbDogZ2V0RmliZXIoUmVhY3RET00uY3JlYXRlUG9ydGFsKG51bGwsIGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkpLnRhZyxcbiAgICBIb3N0Q29tcG9uZW50OiBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KCdzcGFuJykpLnRhZyxcbiAgICBIb3N0VGV4dDogZ2V0RmliZXIoJ3RleHQnKS50YWcsXG4gICAgTW9kZTogc3VwcG9ydHNNb2RlXG4gICAgICA/IGdldEZpYmVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuU3RyaWN0TW9kZSkpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBDb250ZXh0Q29uc3VtZXI6IHN1cHBvcnRzQ29udGV4dFxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEN0eC5Db25zdW1lciwgbnVsbCwgKCkgPT4gbnVsbCkpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBDb250ZXh0UHJvdmlkZXI6IHN1cHBvcnRzQ29udGV4dFxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEN0eC5Qcm92aWRlciwgeyB2YWx1ZTogbnVsbCB9LCBudWxsKSkudGFnXG4gICAgICA6IC0xLFxuICAgIEZvcndhcmRSZWY6IHN1cHBvcnRzRm9yd2FyZFJlZlxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KEZ3ZFJlZikpLnRhZ1xuICAgICAgOiAtMSxcbiAgICBQcm9maWxlcjogc3VwcG9ydHNQcm9maWxlclxuICAgICAgPyBnZXRGaWJlcihSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LnVuc3RhYmxlX1Byb2ZpbGVyLCB7IGlkOiAnbW9jaycsIG9uUmVuZGVyKCkge30gfSkpLnRhZ1xuICAgICAgOiAtMSxcbiAgfTtcbn07XG4iXX0=
+//# sourceMappingURL=detectFiberTags.js.map
\ No newline at end of file

build/detectFiberTags.js.map

@@ -0,0 +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

build/findCurrentFiberUsingSlowPath.js

@@ -108,3 +108,5 @@
}
module.exports = findCurrentFiberUsingSlowPath;
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aC5qcyJdLCJuYW1lcyI6WyJmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aCIsImZpYmVyIiwiYWx0ZXJuYXRlIiwiYSIsImIiLCJwYXJlbnRBIiwicGFyZW50QiIsImNoaWxkIiwic2libGluZyIsIkVycm9yIiwiZGlkRmluZENoaWxkIiwic3RhdGVOb2RlIiwiY3VycmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxTQUFTQSw2QkFBVCxDQUF1Q0MsS0FBdkMsRUFBOEM7QUFBQSxNQUNwQ0MsU0FEb0MsR0FDdEJELEtBRHNCLENBQ3BDQyxTQURvQzs7QUFFNUMsTUFBSSxDQUFDQSxTQUFMLEVBQWdCO0FBQ2QsV0FBT0QsS0FBUDtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsTUFBSUUsSUFBSUYsS0FBUjtBQUNBLE1BQUlHLElBQUlGLFNBQVI7QUFDQSxTQUFPLElBQVAsRUFBYTtBQUFFO0FBQ2IsUUFBTUcsVUFBVUYsV0FBaEI7QUFDQSxRQUFNRyxVQUFVRCxVQUFVQSxRQUFRSCxTQUFsQixHQUE4QixJQUE5QztBQUNBLFFBQUksQ0FBQ0csT0FBRCxJQUFZLENBQUNDLE9BQWpCLEVBQTBCO0FBQ3hCO0FBQ0E7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxRQUFJRCxRQUFRRSxLQUFSLEtBQWtCRCxRQUFRQyxLQUE5QixFQUFxQztBQUFBLFVBQzdCQSxLQUQ2QixHQUNuQkYsT0FEbUIsQ0FDN0JFLEtBRDZCOztBQUVuQyxhQUFPQSxLQUFQLEVBQWM7QUFDWixZQUFJQSxVQUFVSixDQUFkLEVBQWlCO0FBQ2Y7QUFDQSxpQkFBT0YsS0FBUDtBQUNEO0FBQ0QsWUFBSU0sVUFBVUgsQ0FBZCxFQUFpQjtBQUNmO0FBQ0EsaUJBQU9GLFNBQVA7QUFDRDtBQUNESyxnQkFBUUEsTUFBTUMsT0FBZDtBQUNEO0FBQ0Q7QUFDQTtBQUNBLFlBQU0sSUFBSUMsS0FBSixDQUFVLGdEQUFWLENBQU47QUFDRDs7QUFFRCxRQUFJTixnQkFBYUMsV0FBakIsRUFBMkI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQUQsVUFBSUUsT0FBSjtBQUNBRCxVQUFJRSxPQUFKO0FBQ0QsS0FQRCxNQU9PO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQUlJLGVBQWUsS0FBbkI7QUFOSyxVQU9DSCxNQVBELEdBT1dGLE9BUFgsQ0FPQ0UsS0FQRDs7QUFRTCxhQUFPQSxNQUFQLEVBQWM7QUFDWixZQUFJQSxXQUFVSixDQUFkLEVBQWlCO0FBQ2ZPLHlCQUFlLElBQWY7QUFDQVAsY0FBSUUsT0FBSjtBQUNBRCxjQUFJRSxPQUFKO0FBQ0E7QUFDRDtBQUNELFlBQUlDLFdBQVVILENBQWQsRUFBaUI7QUFDZk0seUJBQWUsSUFBZjtBQUNBTixjQUFJQyxPQUFKO0FBQ0FGLGNBQUlHLE9BQUo7QUFDQTtBQUNEO0FBQ0RDLGlCQUFRQSxPQUFNQyxPQUFkO0FBQ0Q7QUFDRCxVQUFJLENBQUNFLFlBQUwsRUFBbUI7QUFFZEgsY0FGYyxHQUVKRCxPQUZJLENBRWRDLEtBRmM7QUFDakI7O0FBRUEsZUFBT0EsTUFBUCxFQUFjO0FBQ1osY0FBSUEsV0FBVUosQ0FBZCxFQUFpQjtBQUNmTywyQkFBZSxJQUFmO0FBQ0FQLGdCQUFJRyxPQUFKO0FBQ0FGLGdCQUFJQyxPQUFKO0FBQ0E7QUFDRDtBQUNELGNBQUlFLFdBQVVILENBQWQsRUFBaUI7QUFDZk0sMkJBQWUsSUFBZjtBQUNBTixnQkFBSUUsT0FBSjtBQUNBSCxnQkFBSUUsT0FBSjtBQUNBO0FBQ0Q7QUFDREUsbUJBQVFBLE9BQU1DLE9BQWQ7QUFDRDtBQUNELFlBQUksQ0FBQ0UsWUFBTCxFQUFtQjtBQUNqQixnQkFBTSxJQUFJRCxLQUFKLENBQVUsb0VBQ1osK0RBREUsQ0FBTjtBQUVEO0FBQ0Y7QUFDRjtBQUNGO0FBQ0QsTUFBSU4sRUFBRVEsU0FBRixDQUFZQyxPQUFaLEtBQXdCVCxDQUE1QixFQUErQjtBQUM3QjtBQUNBLFdBQU9GLEtBQVA7QUFDRDtBQUNEO0FBQ0EsU0FBT0MsU0FBUDtBQUNEOztBQUVEVyxPQUFPQyxPQUFQLEdBQWlCZCw2QkFBakIiLCJmaWxlIjoiZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFeHRyYWN0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi83YmRmOTNiMTdhMzVhNWQ4ZmNmMGNlYWUwYmY0OGVkNWU2YjE2Njg4L3NyYy9yZW5kZXJlcnMvc2hhcmVkL2ZpYmVyL1JlYWN0RmliZXJUcmVlUmVmbGVjdGlvbi5qcyNMMTA0LUwyMjhcbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIGNvbnN0IHsgYWx0ZXJuYXRlIH0gPSBmaWJlcjtcbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICByZXR1cm4gZmliZXI7XG4gIH1cbiAgLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cbiAgbGV0IGEgPSBmaWJlcjtcbiAgbGV0IGIgPSBhbHRlcm5hdGU7XG4gIHdoaWxlICh0cnVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBjb25zdCBwYXJlbnRBID0gYS5yZXR1cm47XG4gICAgY29uc3QgcGFyZW50QiA9IHBhcmVudEEgPyBwYXJlbnRBLmFsdGVybmF0ZSA6IG51bGw7XG4gICAgaWYgKCFwYXJlbnRBIHx8ICFwYXJlbnRCKSB7XG4gICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgIC8vIHByaW9yaXR5OiB0aGUgYmFpbGVkIG91dCBmaWJlcidzIGNoaWxkIHJldXNlcyB0aGUgY3VycmVudCBjaGlsZC5cbiAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgbGV0IHsgY2hpbGQgfSA9IHBhcmVudEE7XG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgLy8gd2F5IHRoaXMgY291bGQgcG9zc2libHkgaGFwcGVuIGlzIGlmIHRoaXMgd2FzIHVubW91bnRlZCwgaWYgYXQgYWxsLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICBsZXQgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICBsZXQgeyBjaGlsZCB9ID0gcGFyZW50QTtcbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgICh7IGNoaWxkIH0gPSBwYXJlbnRCKTtcbiAgICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgJ1xuICAgICAgICAgICAgKyAnaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgIHJldHVybiBmaWJlcjtcbiAgfVxuICAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGg7XG4iXX0=
+//# sourceMappingURL=findCurrentFiberUsingSlowPath.js.map
\ No newline at end of file

build/findCurrentFiberUsingSlowPath.js.map

@@ -0,0 +1 @@
+{"version":3,"sources":["../src/findCurrentFiberUsingSlowPath.js"],"names":["findCurrentFiberUsingSlowPath","fiber","alternate","a","b","parentA","parentB","child","sibling","Error","didFindChild","stateNode","current","module","exports"],"mappings":";;AAAA;AACA,SAASA,6BAAT,CAAuCC,KAAvC,EAA8C;AAAA,MACpCC,SADoC,GACtBD,KADsB,CACpCC,SADoC;;AAE5C,MAAI,CAACA,SAAL,EAAgB;AACd,WAAOD,KAAP;AACD;AACD;AACA;AACA;AACA,MAAIE,IAAIF,KAAR;AACA,MAAIG,IAAIF,SAAR;AACA,SAAO,IAAP,EAAa;AAAE;AACb,QAAMG,UAAUF,WAAhB;AACA,QAAMG,UAAUD,UAAUA,QAAQH,SAAlB,GAA8B,IAA9C;AACA,QAAI,CAACG,OAAD,IAAY,CAACC,OAAjB,EAA0B;AACxB;AACA;AACD;;AAED;AACA;AACA;AACA,QAAID,QAAQE,KAAR,KAAkBD,QAAQC,KAA9B,EAAqC;AAAA,UAC7BA,KAD6B,GACnBF,OADmB,CAC7BE,KAD6B;;AAEnC,aAAOA,KAAP,EAAc;AACZ,YAAIA,UAAUJ,CAAd,EAAiB;AACf;AACA,iBAAOF,KAAP;AACD;AACD,YAAIM,UAAUH,CAAd,EAAiB;AACf;AACA,iBAAOF,SAAP;AACD;AACDK,gBAAQA,MAAMC,OAAd;AACD;AACD;AACA;AACA,YAAM,IAAIC,KAAJ,CAAU,gDAAV,CAAN;AACD;;AAED,QAAIN,gBAAaC,WAAjB,EAA2B;AACzB;AACA;AACA;AACA;AACAD,UAAIE,OAAJ;AACAD,UAAIE,OAAJ;AACD,KAPD,MAOO;AACL;AACA;AACA;AACA;AACA;AACA,UAAII,eAAe,KAAnB;AANK,UAOCH,MAPD,GAOWF,OAPX,CAOCE,KAPD;;AAQL,aAAOA,MAAP,EAAc;AACZ,YAAIA,WAAUJ,CAAd,EAAiB;AACfO,yBAAe,IAAf;AACAP,cAAIE,OAAJ;AACAD,cAAIE,OAAJ;AACA;AACD;AACD,YAAIC,WAAUH,CAAd,EAAiB;AACfM,yBAAe,IAAf;AACAN,cAAIC,OAAJ;AACAF,cAAIG,OAAJ;AACA;AACD;AACDC,iBAAQA,OAAMC,OAAd;AACD;AACD,UAAI,CAACE,YAAL,EAAmB;AAEdH,cAFc,GAEJD,OAFI,CAEdC,KAFc;AACjB;;AAEA,eAAOA,MAAP,EAAc;AACZ,cAAIA,WAAUJ,CAAd,EAAiB;AACfO,2BAAe,IAAf;AACAP,gBAAIG,OAAJ;AACAF,gBAAIC,OAAJ;AACA;AACD;AACD,cAAIE,WAAUH,CAAd,EAAiB;AACfM,2BAAe,IAAf;AACAN,gBAAIE,OAAJ;AACAH,gBAAIE,OAAJ;AACA;AACD;AACDE,mBAAQA,OAAMC,OAAd;AACD;AACD,YAAI,CAACE,YAAL,EAAmB;AACjB,gBAAM,IAAID,KAAJ,CAAU,oEACZ,+DADE,CAAN;AAED;AACF;AACF;AACF;AACD,MAAIN,EAAEQ,SAAF,CAAYC,OAAZ,KAAwBT,CAA5B,EAA+B;AAC7B;AACA,WAAOF,KAAP;AACD;AACD;AACA,SAAOC,SAAP;AACD;;AAEDW,OAAOC,OAAP,GAAiBd,6BAAjB","file":"findCurrentFiberUsingSlowPath.js","sourcesContent":["// Extracted from https://github.com/facebook/react/blob/7bdf93b17a35a5d8fcf0ceae0bf48ed5e6b16688/src/renderers/shared/fiber/ReactFiberTreeReflection.js#L104-L228\nfunction findCurrentFiberUsingSlowPath(fiber) {\n const { alternate } = fiber;\n if (!alternate) {\n return fiber;\n }\n // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n let a = fiber;\n let b = alternate;\n while (true) { // eslint-disable-line\n const parentA = a.return;\n const parentB = parentA ? parentA.alternate : null;\n if (!parentA || !parentB) {\n // We're at the root.\n break;\n }\n\n // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n if (parentA.child === parentB.child) {\n let { child } = parentA;\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n return fiber;\n }\n if (child === b) {\n // We've determined that B is the current branch.\n return alternate;\n }\n child = child.sibling;\n }\n // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (a.return !== b.return) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n let didFindChild = false;\n let { child } = parentA;\n while (child) {\n if (child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n if (child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n child = child.sibling;\n }\n if (!didFindChild) {\n // Search parent B's child set\n ({ child } = parentB);\n while (child) {\n if (child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n if (child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n child = child.sibling;\n }\n if (!didFindChild) {\n throw new Error('Child was not found in either parent set. This indicates a bug '\n + 'in React related to the return pointer. Please file an issue.');\n }\n }\n }\n }\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n }\n // Otherwise B has to be current branch.\n return alternate;\n}\n\nmodule.exports = findCurrentFiberUsingSlowPath;\n"]}
\ No newline at end of file

build/index.js

@@ -2,3 +2,5 @@
/* eslint global-require: 0 */
module.exports = require('./ReactSixteenAdapter');
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSxPQUFPQyxPQUFQLEdBQWlCQyxRQUFRLHVCQUFSLENBQWpCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiAwICovXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vUmVhY3RTaXh0ZWVuQWRhcHRlcicpO1xuIl19
+//# sourceMappingURL=index.js.map
\ No newline at end of file

build/index.js.map

@@ -0,0 +1 @@
+{"version":3,"sources":["../src/index.js"],"names":["module","exports","require"],"mappings":";;AAAA;AACAA,OAAOC,OAAP,GAAiBC,QAAQ,uBAAR,CAAjB","file":"index.js","sourcesContent":["/* eslint global-require: 0 */\nmodule.exports = require('./ReactSixteenAdapter');\n"]}
\ No newline at end of file

build/ReactSixteenAdapter.js

@@ -139,7 +139,7 @@
};
}
-function toTree(vnode) {
+function _toTree(vnode) {
if (vnode == null) {
return null;
}
@@ -197,20 +197,26 @@
rendered: childrenToTree(node.child.child)
};
case FiberTags.MemoSFC:
+ {
+ var renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(_toTree));
+ if (renderedNodes.length === 0) {
+ renderedNodes = [node.memoizedProps.children];
+ }
return {
nodeType: 'function',
- type: node.elementType.type,
+ type: node.elementType,
props: (0, _object2['default'])({}, node.memoizedProps),
key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key),
ref: node.ref,
instance: null,
- rendered: childrenToTree(node.child.child)
+ rendered: renderedNodes
};
+ }
case FiberTags.HostComponent:
{
- var renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));
- if (renderedNodes.length === 0) {
- renderedNodes = [node.memoizedProps.children];
+ var _renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(_toTree));
+ if (_renderedNodes.length === 0) {
+ _renderedNodes = [node.memoizedProps.children];
}
return {
nodeType: 'host',
@@ -219,7 +225,7 @@
key: (0, _enzymeAdapterUtils.ensureKeyOrUndefined)(node.key),
ref: node.ref,
instance: node.stateNode,
- rendered: renderedNodes
+ rendered: _renderedNodes
};
}
case FiberTags.HostText:
@@ -229,6 +235,7 @@
case FiberTags.ContextProvider:
case FiberTags.ContextConsumer:
return childrenToTree(node.child);
+ case FiberTags.Profiler:
case FiberTags.ForwardRef:
{
return {
@@ -255,9 +262,9 @@
return null;
}
if (children.length === 1) {
- return toTree(children[0]);
+ return _toTree(children[0]);
}
- return flatten(children.map(toTree));
+ return flatten(children.map(_toTree));
}
function _nodeToHostNode(_node) {
@@ -339,6 +346,21 @@
return returnVal;
}
+function getProviderDefaultValue(Provider) {
+ // React stores references to the Provider's defaultValue differently across versions.
+ if ('_defaultValue' in Provider._context) {
+ return Provider._context._defaultValue;
+ }
+ if ('_currentValue' in Provider._context) {
+ return Provider._context._currentValue;
+ }
+ throw new Error('Enzyme Internal Error: can’t figure out how to get Provider’s default value');
+}
+
+function makeFakeElement(type) {
+ return { $$typeof: _reactIs.Element, type: type };
+}
+
var ReactSixteenAdapter = function (_EnzymeAdapter) {
_inherits(ReactSixteenAdapter, _EnzymeAdapter);
@@ -365,7 +387,8 @@
},
getChildContext: {
calledByRenderer: false
- }
+ },
+ getDerivedStateFromError: is166
})
});
return _this2;
@@ -381,7 +404,8 @@
FiberTags = (0, _detectFiberTags2['default'])();
}
var attachTo = options.attachTo,
- hydrateIn = options.hydrateIn;
+ hydrateIn = options.hydrateIn,
+ wrappingComponentProps = options.wrappingComponentProps;
var domNode = hydrateIn || attachTo || global.document.createElement('div');
var instance = null;
@@ -398,6 +422,7 @@
var wrapperProps = (0, _object2['default'])({
Component: type,
props: props,
+ wrappingComponentProps: wrappingComponentProps,
context: context
}, ref && { ref: ref });
var ReactWrapperComponent = (0, _enzymeAdapterUtils.createMountWrapper)(el, (0, _object2['default'])({}, options, { adapter: adapter }));
@@ -424,19 +449,35 @@
}(),
getNode: function () {
function getNode() {
- return instance ? toTree(instance._reactInternalFiber).rendered : null;
+ if (!instance) {
+ return null;
+ }
+ return (0, _enzymeAdapterUtils.getNodeFromRootFinder)(adapter.isCustomComponent, _toTree(instance._reactInternalFiber), options);
}
return getNode;
}(),
simulateError: function () {
function simulateError(nodeHierarchy, rootNode, error) {
- var _ref = nodeHierarchy.find(function (x) {
- return x.instance && x.instance.componentDidCatch;
- }) || {},
- catchingInstance = _ref.instance;
+ var isErrorBoundary = function () {
+ function isErrorBoundary(_ref) {
+ var elInstance = _ref.instance,
+ type = _ref.type;
- (0, _enzymeAdapterUtils.simulateError)(error, catchingInstance, rootNode, nodeHierarchy, nodeTypeFromType, adapter.displayNameOfNode);
+ if (is166 && type && type.getDerivedStateFromError) {
+ return true;
+ }
+ return elInstance && elInstance.componentDidCatch;
+ }
+
+ return isErrorBoundary;
+ }();
+
+ var _ref2 = nodeHierarchy.find(isErrorBoundary) || {},
+ catchingInstance = _ref2.instance,
+ catchingType = _ref2.type;
+
+ (0, _enzymeAdapterUtils.simulateError)(error, catchingInstance, rootNode, nodeHierarchy, nodeTypeFromType, adapter.displayNameOfNode, is166 ? catchingType : undefined);
}
return simulateError;
@@ -460,6 +501,28 @@
}
return batchedUpdates;
+ }(),
+ getWrappingComponentRenderer: function () {
+ function getWrappingComponentRenderer() {
+ return (0, _object2['default'])({}, this, (0, _enzymeAdapterUtils.getWrappingComponentMountRenderer)({
+ toTree: function () {
+ function toTree(inst) {
+ return _toTree(inst._reactInternalFiber);
+ }
+
+ return toTree;
+ }(),
+ getMountWrapperInstance: function () {
+ function getMountWrapperInstance() {
+ return instance;
+ }
+
+ return getMountWrapperInstance;
+ }()
+ }));
+ }
+
+ return getWrappingComponentRenderer;
}()
};
}
@@ -474,13 +537,59 @@
var renderer = new _shallow2['default']();
var isDOM = false;
var cachedNode = null;
+
+ var lastComponent = null;
+ var wrappedComponent = null;
+
+ // 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 (is165) {
+ return Component;
+ }
+
+ if (lastComponent !== Component) {
+ wrappedComponent = (0, _object2['default'])(function () {
+ return Component.apply(undefined, arguments);
+ }, // eslint-disable-line new-cap
+ Component);
+ lastComponent = Component;
+ }
+ return wrappedComponent;
+ }
+
+ return wrapFunctionalComponent;
+ }();
+
return {
render: function () {
function render(el, unmaskedContext) {
+ var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
+ _ref3$providerValues = _ref3.providerValues,
+ providerValues = _ref3$providerValues === undefined ? new Map() : _ref3$providerValues;
+
cachedNode = el;
/* eslint consistent-return: 0 */
if (typeof el.type === 'string') {
isDOM = true;
+ } else if ((0, _reactIs.isContextProvider)(el)) {
+ providerValues.set(el.type, el.props.value);
+ var MockProvider = (0, _object2['default'])(function (props) {
+ return props.children;
+ }, el.type);
+ return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
+ return renderer.render((0, _object2['default'])({}, el, { type: MockProvider }));
+ });
+ } else if ((0, _reactIs.isContextConsumer)(el)) {
+ var Provider = adapter.getProviderFromConsumer(el.type);
+ var value = providerValues.has(Provider) ? providerValues.get(Provider) : getProviderDefaultValue(Provider);
+ var MockConsumer = (0, _object2['default'])(function (props) {
+ return props.children(value);
+ }, el.type);
+ return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
+ return renderer.render((0, _object2['default'])({}, el, { type: MockConsumer }));
+ });
} else {
isDOM = false;
var Component = el.type;
@@ -493,24 +602,17 @@
if (!isStateful && (0, _reactIs.isMemo)(el.type)) {
var InnerComp = el.type.type;
- var wrappedEl = (0, _object2['default'])(function () {
- return InnerComp.apply(undefined, arguments);
- }, // eslint-disable-line new-cap
- InnerComp);
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
- return renderer.render((0, _object2['default'])({}, el, { type: wrappedEl }), context);
+ return renderer.render((0, _object2['default'])({}, el, { type: wrapFunctionalComponent(InnerComp) }), context);
});
}
if (!isStateful && typeof Component === 'function') {
- var _wrappedEl = (0, _object2['default'])(function () {
- return Component.apply(undefined, arguments);
- }, // eslint-disable-line new-cap
- Component);
return (0, _enzymeAdapterUtils.withSetStateAllowed)(function () {
- return renderer.render((0, _object2['default'])({}, el, { type: _wrappedEl }), context);
+ return renderer.render((0, _object2['default'])({}, el, { type: wrapFunctionalComponent(Component) }), context);
});
}
+
if (isStateful) {
// fix react bug; see implementation of `getEmptyStateValue`
var emptyStateValue = getEmptyStateValue();
@@ -581,7 +683,7 @@
}(),
simulateError: function () {
function simulateError(nodeHierarchy, rootNode, error) {
- (0, _enzymeAdapterUtils.simulateError)(error, renderer._instance, cachedNode, nodeHierarchy.concat(cachedNode), nodeTypeFromType, adapter.displayNameOfNode);
+ (0, _enzymeAdapterUtils.simulateError)(error, renderer._instance, cachedNode, nodeHierarchy.concat(cachedNode), nodeTypeFromType, adapter.displayNameOfNode, is166 ? cachedNode.type : undefined);
}
return simulateError;
@@ -758,7 +860,7 @@
case _reactIs.ContextProvider || NaN:
return 'ContextProvider';
case _reactIs.Memo || NaN:
- return (0, _enzymeAdapterUtils.displayNameOfNode)(type.type);
+ return (0, _enzymeAdapterUtils.displayNameOfNode)(type);
case _reactIs.ForwardRef || NaN:
{
if (type.displayName) {
@@ -802,18 +904,58 @@
return isFragment;
}()
}, {
+ key: 'isCustomComponent',
+ 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 isCustomComponent;
+ }()
+ }, {
+ key: 'isContextConsumer',
+ value: function () {
+ function isContextConsumer(type) {
+ return !!type && (0, _reactIs.isContextConsumer)(makeFakeElement(type));
+ }
+
+ return isContextConsumer;
+ }()
+ }, {
key: 'isCustomComponentElement',
value: function () {
function isCustomComponentElement(inst) {
if (!inst || !this.isValidElement(inst)) {
return false;
}
- return typeof inst.type === 'function' || (0, _reactIs.isForwardRef)(inst);
+ return this.isCustomComponent(inst.type);
}
return isCustomComponentElement;
}()
}, {
+ key: 'getProviderFromConsumer',
+ value: function () {
+ function getProviderFromConsumer(Consumer) {
+ // React stores references to the Provider on a Consumer differently across versions.
+ if (Consumer) {
+ var Provider = void 0;
+ if (Consumer.Provider) {
+ Provider = Consumer.Provider;
+ } else if (Consumer._context) {
+ Provider = Consumer._context.Provider;
+ }
+ if (Provider) {
+ return Provider;
+ }
+ }
+ throw new Error('Enzyme Internal Error: can’t figure out how to get Provider from Consumer');
+ }
+
+ return getProviderFromConsumer;
+ }()
+ }, {
key: 'createElement',
value: function () {
function createElement() {
@@ -822,9 +964,23 @@
return createElement;
}()
+ }, {
+ key: 'wrapWithWrappingComponent',
+ value: function () {
+ function wrapWithWrappingComponent(node, options) {
+ return {
+ RootFinder: _enzymeAdapterUtils.RootFinder,
+ node: (0, _enzymeAdapterUtils.wrapWithWrappingComponent)(_react2['default'].createElement, node, options)
+ };
+ }
+
+ return wrapWithWrappingComponent;
+ }()
}]);
return ReactSixteenAdapter;
}(_enzyme.EnzymeAdapter);
module.exports = ReactSixteenAdapter;
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9SZWFjdFNpeHRlZW5BZGFwdGVyLmpzIl0sIm5hbWVzIjpbImlzMTY0IiwiVGVzdFV0aWxzIiwiU2ltdWxhdGUiLCJ0b3VjaFN0YXJ0IiwiaXMxNjUiLCJhdXhDbGljayIsImlzMTY2IiwiUmVhY3QiLCJ1bnN0YWJsZV9Bc3luY01vZGUiLCJpczE2OCIsImFjdCIsImhhc1Nob3VsZENvbXBvbmVudFVwZGF0ZUJ1ZyIsInNlbXZlciIsInNhdGlzZmllcyIsInRlc3RSZW5kZXJlclZlcnNpb24iLCJGaWJlclRhZ3MiLCJub2RlQW5kU2libGluZ3NBcnJheSIsIm5vZGVXaXRoU2libGluZyIsImFycmF5Iiwibm9kZSIsInB1c2giLCJzaWJsaW5nIiwiZmxhdHRlbiIsImFyciIsInJlc3VsdCIsInN0YWNrIiwiaSIsImxlbmd0aCIsIm4iLCJwb3AiLCJlbCIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGVUeXBlRnJvbVR5cGUiLCJ0eXBlIiwiUG9ydGFsIiwiZWxlbWVudFRvVHJlZSIsImNoaWxkcmVuIiwiY29udGFpbmVySW5mbyIsInByb3BzIiwibm9kZVR5cGUiLCJrZXkiLCJyZWYiLCJpbnN0YW5jZSIsInJlbmRlcmVkIiwidG9UcmVlIiwidm5vZGUiLCJ0YWciLCJIb3N0Um9vdCIsImNoaWxkcmVuVG9UcmVlIiwiY2hpbGQiLCJIb3N0UG9ydGFsIiwic3RhdGVOb2RlIiwibWVtb2l6ZWRQcm9wcyIsIkNsYXNzQ29tcG9uZW50IiwiRnVuY3Rpb25hbENvbXBvbmVudCIsIk1lbW9DbGFzcyIsImVsZW1lbnRUeXBlIiwiTWVtb1NGQyIsInJlbmRlcmVkTm9kZXMiLCJtYXAiLCJIb3N0Q29tcG9uZW50IiwiSG9zdFRleHQiLCJGcmFnbWVudCIsIk1vZGUiLCJDb250ZXh0UHJvdmlkZXIiLCJDb250ZXh0Q29uc3VtZXIiLCJQcm9maWxlciIsIkZvcndhcmRSZWYiLCJwZW5kaW5nUHJvcHMiLCJFcnJvciIsIm5vZGVUb0hvc3ROb2RlIiwiX25vZGUiLCJtYXBwZXIiLCJpdGVtIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsImV2ZW50T3B0aW9ucyIsImFuaW1hdGlvbiIsInBvaW50ZXJFdmVudHMiLCJnZXRFbXB0eVN0YXRlVmFsdWUiLCJFbXB0eVN0YXRlIiwiQ29tcG9uZW50IiwidGVzdFJlbmRlcmVyIiwiU2hhbGxvd1JlbmRlcmVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIl9pbnN0YW5jZSIsInN0YXRlIiwid3JhcEFjdCIsImZuIiwicmV0dXJuVmFsIiwiZ2V0UHJvdmlkZXJEZWZhdWx0VmFsdWUiLCJQcm92aWRlciIsIl9jb250ZXh0IiwiX2RlZmF1bHRWYWx1ZSIsIl9jdXJyZW50VmFsdWUiLCJtYWtlRmFrZUVsZW1lbnQiLCIkJHR5cGVvZiIsIkVsZW1lbnQiLCJSZWFjdFNpeHRlZW5BZGFwdGVyIiwibGlmZWN5Y2xlcyIsIm9wdGlvbnMiLCJlbmFibGVDb21wb25lbnREaWRVcGRhdGVPblNldFN0YXRlIiwibGVnYWN5Q29udGV4dE1vZGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJvblNldFN0YXRlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUiLCJzZXRTdGF0ZSIsInNraXBzQ29tcG9uZW50RGlkVXBkYXRlT25OdWxsaXNoIiwiZ2V0Q2hpbGRDb250ZXh0IiwiY2FsbGVkQnlSZW5kZXJlciIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImF0dGFjaFRvIiwiaHlkcmF0ZUluIiwid3JhcHBpbmdDb21wb25lbnRQcm9wcyIsImRvbU5vZGUiLCJnbG9iYWwiLCJkb2N1bWVudCIsImFkYXB0ZXIiLCJjb250ZXh0IiwiY2FsbGJhY2siLCJ3cmFwcGVyUHJvcHMiLCJSZWFjdFdyYXBwZXJDb21wb25lbnQiLCJ3cmFwcGVkRWwiLCJoeWRyYXRlIiwic2V0Q2hpbGRQcm9wcyIsInVubW91bnQiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiZ2V0Tm9kZSIsImlzQ3VzdG9tQ29tcG9uZW50IiwiX3JlYWN0SW50ZXJuYWxGaWJlciIsInNpbXVsYXRlRXJyb3IiLCJub2RlSGllcmFyY2h5Iiwicm9vdE5vZGUiLCJlcnJvciIsImlzRXJyb3JCb3VuZGFyeSIsImVsSW5zdGFuY2UiLCJjb21wb25lbnREaWRDYXRjaCIsImZpbmQiLCJjYXRjaGluZ0luc3RhbmNlIiwiY2F0Y2hpbmdUeXBlIiwiZGlzcGxheU5hbWVPZk5vZGUiLCJ1bmRlZmluZWQiLCJzaW11bGF0ZUV2ZW50IiwiZXZlbnQiLCJtb2NrIiwibWFwcGVkRXZlbnQiLCJldmVudEZuIiwiVHlwZUVycm9yIiwiYmF0Y2hlZFVwZGF0ZXMiLCJnZXRXcmFwcGluZ0NvbXBvbmVudFJlbmRlcmVyIiwiaW5zdCIsImdldE1vdW50V3JhcHBlckluc3RhbmNlIiwicmVuZGVyZXIiLCJpc0RPTSIsImNhY2hlZE5vZGUiLCJsYXN0Q29tcG9uZW50Iiwid3JhcHBlZENvbXBvbmVudCIsIndyYXBGdW5jdGlvbmFsQ29tcG9uZW50IiwidW5tYXNrZWRDb250ZXh0IiwicHJvdmlkZXJWYWx1ZXMiLCJNYXAiLCJzZXQiLCJ2YWx1ZSIsIk1vY2tQcm92aWRlciIsImdldFByb3ZpZGVyRnJvbUNvbnN1bWVyIiwiaGFzIiwiZ2V0IiwiTW9ja0NvbnN1bWVyIiwiaXNTdGF0ZWZ1bCIsInByb3RvdHlwZSIsImlzUmVhY3RDb21wb25lbnQiLCJfX3JlYWN0QXV0b0JpbmRQYWlycyIsImNvbnRleHRUeXBlcyIsIklubmVyQ29tcCIsImVtcHR5U3RhdGVWYWx1ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwib3V0cHV0IiwiZ2V0UmVuZGVyT3V0cHV0IiwiY29uY2F0IiwiYXJncyIsImhhbmRsZXIiLCJjaGVja1Byb3BUeXBlcyIsInR5cGVTcGVjcyIsInZhbHVlcyIsImxvY2F0aW9uIiwiaGllcmFyY2h5IiwiY2hpbGRDb250ZXh0VHlwZXMiLCJDb250ZXh0V3JhcHBlciIsIlJlYWN0RE9NU2VydmVyIiwicmVuZGVyVG9TdGF0aWNNYXJrdXAiLCJtb2RlIiwiRW56eW1lQWRhcHRlciIsIk1PREVTIiwiTU9VTlQiLCJjcmVhdGVNb3VudFJlbmRlcmVyIiwiU0hBTExPVyIsImNyZWF0ZVNoYWxsb3dSZW5kZXJlciIsIlNUUklORyIsImNyZWF0ZVN0cmluZ1JlbmRlcmVyIiwiZWxlbWVudCIsInN1cHBvcnRzQXJyYXkiLCJub2RlcyIsIkNvbmN1cnJlbnRNb2RlIiwiQXN5bmNNb2RlIiwiTmFOIiwiU3RyaWN0TW9kZSIsIiQkdHlwZW9mVHlwZSIsIk1lbW8iLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJvYmplY3QiLCJmcmFnbWVudCIsImZha2VFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJDb25zdW1lciIsIlJvb3RGaW5kZXIiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBRUE7Ozs7QUFDQTs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBcUJBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OzsrZUF4REE7O0FBR0E7O0FBRUE7O0FBR0E7OztBQWtEQSxJQUFNQSxRQUFRLENBQUMsQ0FBQ0MsdUJBQVVDLFFBQVYsQ0FBbUJDLFVBQW5DLEMsQ0FBK0M7QUFDL0MsSUFBTUMsUUFBUSxDQUFDLENBQUNILHVCQUFVQyxRQUFWLENBQW1CRyxRQUFuQyxDLENBQTZDO0FBQzdDLElBQU1DLFFBQVFGLFNBQVMsQ0FBQ0csbUJBQU1DLGtCQUE5QixDLENBQWtEO0FBQ2xELElBQU1DLFFBQVFILFNBQVMsT0FBT0wsdUJBQVVTLEdBQWpCLEtBQXlCLFVBQWhEOztBQUVBLElBQU1DLDhCQUE4QkMsb0JBQU9DLFNBQVAsQ0FBaUJDLGdCQUFqQixFQUFzQyxRQUF0QyxDQUFwQzs7QUFFQTtBQUNBLElBQUlDLFlBQVksSUFBaEI7O0FBRUEsU0FBU0Msb0JBQVQsQ0FBOEJDLGVBQTlCLEVBQStDO0FBQzdD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cUNBQVA7QUFDRDs7Ozs7Ozt5Q0FFeUJuRSxJLEVBQU1tRixPLEVBQVM7QUFDdkMsZUFBTztBQUNMd0gsb0RBREs7QUFFTDNNLGdCQUFNLG1EQUEwQlosbUJBQU0rRSxhQUFoQyxFQUErQ25FLElBQS9DLEVBQXFEbUYsT0FBckQ7QUFGRCxTQUFQO0FBSUQ7Ozs7Ozs7RUFsYitCZ0cscUI7O0FBcWJsQ3lCLE9BQU9DLE9BQVAsR0FBaUI1SCxtQkFBakIiLCJmaWxlIjoiUmVhY3RTaXh0ZWVuQWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby11c2UtYmVmb3JlLWRlZmluZTogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgUmVhY3RET01TZXJ2ZXIgZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCBTaGFsbG93UmVuZGVyZXIgZnJvbSAncmVhY3QtdGVzdC1yZW5kZXJlci9zaGFsbG93JztcbmltcG9ydCB7IHZlcnNpb24gYXMgdGVzdFJlbmRlcmVyVmVyc2lvbiB9IGZyb20gJ3JlYWN0LXRlc3QtcmVuZGVyZXIvcGFja2FnZS5qc29uJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IFRlc3RVdGlscyBmcm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgY2hlY2tQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcyc7XG5pbXBvcnQge1xuICBBc3luY01vZGUsXG4gIENvbmN1cnJlbnRNb2RlLFxuICBDb250ZXh0Q29uc3VtZXIsXG4gIENvbnRleHRQcm92aWRlcixcbiAgRWxlbWVudCxcbiAgRm9yd2FyZFJlZixcbiAgRnJhZ21lbnQsXG4gIGlzQ29udGV4dENvbnN1bWVyLFxuICBpc0NvbnRleHRQcm92aWRlcixcbiAgaXNFbGVtZW50LFxuICBpc0ZvcndhcmRSZWYsXG4gIGlzTWVtbyxcbiAgaXNQb3J0YWwsXG4gIGlzVmFsaWRFbGVtZW50VHlwZSxcbiAgTWVtbyxcbiAgUG9ydGFsLFxuICBQcm9maWxlcixcbiAgU3RyaWN0TW9kZSxcbn0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IHsgRW56eW1lQWRhcHRlciB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgeyB0eXBlT2ZOb2RlIH0gZnJvbSAnZW56eW1lL2J1aWxkL1V0aWxzJztcbmltcG9ydCB7XG4gIGRpc3BsYXlOYW1lT2ZOb2RlLFxuICBlbGVtZW50VG9UcmVlIGFzIHV0aWxFbGVtZW50VG9UcmVlLFxuICBub2RlVHlwZUZyb21UeXBlIGFzIHV0aWxOb2RlVHlwZUZyb21UeXBlLFxuICBtYXBOYXRpdmVFdmVudE5hbWVzLFxuICBwcm9wRnJvbUV2ZW50LFxuICBhc3NlcnREb21BdmFpbGFibGUsXG4gIHdpdGhTZXRTdGF0ZUFsbG93ZWQsXG4gIGNyZWF0ZVJlbmRlcldyYXBwZXIsXG4gIGNyZWF0ZU1vdW50V3JhcHBlcixcbiAgcHJvcHNXaXRoS2V5c0FuZFJlZixcbiAgZW5zdXJlS2V5T3JVbmRlZmluZWQsXG4gIHNpbXVsYXRlRXJyb3IsXG4gIHdyYXAsXG4gIGdldE1hc2tlZENvbnRleHQsXG4gIGdldENvbXBvbmVudFN0YWNrLFxuICBSb290RmluZGVyLFxuICBnZXROb2RlRnJvbVJvb3RGaW5kZXIsXG4gIHdyYXBXaXRoV3JhcHBpbmdDb21wb25lbnQsXG4gIGdldFdyYXBwaW5nQ29tcG9uZW50TW91bnRSZW5kZXJlcixcbn0gZnJvbSAnZW56eW1lLWFkYXB0ZXItdXRpbHMnO1xuaW1wb3J0IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoIGZyb20gJy4vZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgnO1xuaW1wb3J0IGRldGVjdEZpYmVyVGFncyBmcm9tICcuL2RldGVjdEZpYmVyVGFncyc7XG5cbmNvbnN0IGlzMTY0ID0gISFUZXN0VXRpbHMuU2ltdWxhdGUudG91Y2hTdGFydDsgLy8gMTYuNCtcbmNvbnN0IGlzMTY1ID0gISFUZXN0VXRpbHMuU2ltdWxhdGUuYXV4Q2xpY2s7IC8vIDE2LjUrXG5jb25zdCBpczE2NiA9IGlzMTY1ICYmICFSZWFjdC51bnN0YWJsZV9Bc3luY01vZGU7IC8vIDE2LjYrXG5jb25zdCBpczE2OCA9IGlzMTY2ICYmIHR5cGVvZiBUZXN0VXRpbHMuYWN0ID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBoYXNTaG91bGRDb21wb25lbnRVcGRhdGVCdWcgPSBzZW12ZXIuc2F0aXNmaWVzKHRlc3RSZW5kZXJlclZlcnNpb24sICc8IDE2LjgnKTtcblxuLy8gTGF6aWx5IHBvcHVsYXRlZCBpZiBET00gaXMgYXZhaWxhYmxlLlxubGV0IEZpYmVyVGFncyA9IG51bGw7XG5cbmZ1bmN0aW9uIG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGVXaXRoU2libGluZykge1xuICBjb25zdCBhcnJheSA9IFtdO1xuICBsZXQgbm9kZSA9IG5vZGVXaXRoU2libGluZztcbiAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgIGFycmF5LnB1c2gobm9kZSk7XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBzdGFjayA9IFt7IGk6IDAsIGFycmF5OiBhcnIgfV07XG4gIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICBjb25zdCBuID0gc3RhY2sucG9wKCk7XG4gICAgd2hpbGUgKG4uaSA8IG4uYXJyYXkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbCA9IG4uYXJyYXlbbi5pXTtcbiAgICAgIG4uaSArPSAxO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwpKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobik7XG4gICAgICAgIHN0YWNrLnB1c2goeyBpOiAwLCBhcnJheTogZWwgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goZWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IFBvcnRhbCkge1xuICAgIHJldHVybiAncG9ydGFsJztcbiAgfVxuXG4gIHJldHVybiB1dGlsTm9kZVR5cGVGcm9tVHlwZSh0eXBlKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFRvVHJlZShlbCkge1xuICBpZiAoIWlzUG9ydGFsKGVsKSkge1xuICAgIHJldHVybiB1dGlsRWxlbWVudFRvVHJlZShlbCwgZWxlbWVudFRvVHJlZSk7XG4gIH1cblxuICBjb25zdCB7IGNoaWxkcmVuLCBjb250YWluZXJJbmZvIH0gPSBlbDtcbiAgY29uc3QgcHJvcHMgPSB7IGNoaWxkcmVuLCBjb250YWluZXJJbmZvIH07XG5cbiAgcmV0dXJuIHtcbiAgICBub2RlVHlwZTogJ3BvcnRhbCcsXG4gICAgdHlwZTogUG9ydGFsLFxuICAgIHByb3BzLFxuICAgIGtleTogZW5zdXJlS2V5T3JVbmRlZmluZWQoZWwua2V5KSxcbiAgICByZWY6IGVsLnJlZiB8fCBudWxsLFxuICAgIGluc3RhbmNlOiBudWxsLFxuICAgIHJlbmRlcmVkOiBlbGVtZW50VG9UcmVlKGVsLmNoaWxkcmVuKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9UcmVlKHZub2RlKSB7XG4gIGlmICh2bm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVE9ETyhsbXIpOiBJJ20gbm90IHJlYWxseSBzdXJlIEkgdW5kZXJzdGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHdoYXRcbiAgLy8gaSBzaG91bGQgYmUgZG9pbmcsIG9yIGlmIHRoaXMgaXMgYSBoYWNrIGZvciBzb21ldGhpbmcgaSdtIGRvaW5nIHdyb25nXG4gIC8vIHNvbWV3aGVyZSBlbHNlLiBTaG91bGQgdGFsayB0byBzZWJhc3RpYW4gYWJvdXQgdGhpcyBwZXJoYXBzXG4gIGNvbnN0IG5vZGUgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aCh2bm9kZSk7XG4gIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICBjYXNlIEZpYmVyVGFncy5Ib3N0Um9vdDpcbiAgICAgIHJldHVybiBjaGlsZHJlblRvVHJlZShub2RlLmNoaWxkKTtcbiAgICBjYXNlIEZpYmVyVGFncy5Ib3N0UG9ydGFsOiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXRlTm9kZTogeyBjb250YWluZXJJbmZvIH0sXG4gICAgICAgIG1lbW9pemVkUHJvcHM6IGNoaWxkcmVuLFxuICAgICAgfSA9IG5vZGU7XG4gICAgICBjb25zdCBwcm9wcyA9IHsgY29udGFpbmVySW5mbywgY2hpbGRyZW4gfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAncG9ydGFsJyxcbiAgICAgICAgdHlwZTogUG9ydGFsLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEZpYmVyVGFncy5DbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAnY2xhc3MnLFxuICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLkZ1bmN0aW9uYWxDb21wb25lbnQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgdHlwZTogbm9kZS50eXBlLFxuICAgICAgICBwcm9wczogeyAuLi5ub2RlLm1lbW9pemVkUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLk1lbW9DbGFzczpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiAnY2xhc3MnLFxuICAgICAgICB0eXBlOiBub2RlLmVsZW1lbnRUeXBlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZC5jaGlsZCksXG4gICAgICB9O1xuICAgIGNhc2UgRmliZXJUYWdzLk1lbW9TRkM6IHtcbiAgICAgIGxldCByZW5kZXJlZE5vZGVzID0gZmxhdHRlbihub2RlQW5kU2libGluZ3NBcnJheShub2RlLmNoaWxkKS5tYXAodG9UcmVlKSk7XG4gICAgICBpZiAocmVuZGVyZWROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVuZGVyZWROb2RlcyA9IFtub2RlLm1lbW9pemVkUHJvcHMuY2hpbGRyZW5dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IG5vZGUuZWxlbWVudFR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgIHJlbmRlcmVkOiByZW5kZXJlZE5vZGVzLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBGaWJlclRhZ3MuSG9zdENvbXBvbmVudDoge1xuICAgICAgbGV0IHJlbmRlcmVkTm9kZXMgPSBmbGF0dGVuKG5vZGVBbmRTaWJsaW5nc0FycmF5KG5vZGUuY2hpbGQpLm1hcCh0b1RyZWUpKTtcbiAgICAgIGlmIChyZW5kZXJlZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW5kZXJlZE5vZGVzID0gW25vZGUubWVtb2l6ZWRQcm9wcy5jaGlsZHJlbl07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogJ2hvc3QnLFxuICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgIHByb3BzOiB7IC4uLm5vZGUubWVtb2l6ZWRQcm9wcyB9LFxuICAgICAgICBrZXk6IGVuc3VyZUtleU9yVW5kZWZpbmVkKG5vZGUua2V5KSxcbiAgICAgICAgcmVmOiBub2RlLnJlZixcbiAgICAgICAgaW5zdGFuY2U6IG5vZGUuc3RhdGVOb2RlLFxuICAgICAgICByZW5kZXJlZDogcmVuZGVyZWROb2RlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgRmliZXJUYWdzLkhvc3RUZXh0OlxuICAgICAgcmV0dXJuIG5vZGUubWVtb2l6ZWRQcm9wcztcbiAgICBjYXNlIEZpYmVyVGFncy5GcmFnbWVudDpcbiAgICBjYXNlIEZpYmVyVGFncy5Nb2RlOlxuICAgIGNhc2UgRmliZXJUYWdzLkNvbnRleHRQcm92aWRlcjpcbiAgICBjYXNlIEZpYmVyVGFncy5Db250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCk7XG4gICAgY2FzZSBGaWJlclRhZ3MuUHJvZmlsZXI6XG4gICAgY2FzZSBGaWJlclRhZ3MuRm9yd2FyZFJlZjoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgIHR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgcHJvcHM6IHsgLi4ubm9kZS5wZW5kaW5nUHJvcHMgfSxcbiAgICAgICAga2V5OiBlbnN1cmVLZXlPclVuZGVmaW5lZChub2RlLmtleSksXG4gICAgICAgIHJlZjogbm9kZS5yZWYsXG4gICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICByZW5kZXJlZDogY2hpbGRyZW5Ub1RyZWUobm9kZS5jaGlsZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnp5bWUgSW50ZXJuYWwgRXJyb3I6IHVua25vd24gbm9kZSB3aXRoIHRhZyAke25vZGUudGFnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuVG9UcmVlKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlQW5kU2libGluZ3NBcnJheShub2RlKTtcbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdG9UcmVlKGNoaWxkcmVuWzBdKTtcbiAgfVxuICByZXR1cm4gZmxhdHRlbihjaGlsZHJlbi5tYXAodG9UcmVlKSk7XG59XG5cbmZ1bmN0aW9uIG5vZGVUb0hvc3ROb2RlKF9ub2RlKSB7XG4gIC8vIE5PVEUobG1yKTogbm9kZSBjb3VsZCBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAvLyB3aGljaCB3b250IGhhdmUgYW4gaW5zdGFuY2UgcHJvcCwgYnV0IHdlIGNhbiBnZXQgdGhlXG4gIC8vIGhvc3Qgbm9kZSBhc3NvY2lhdGVkIHdpdGggaXRzIHJldHVybiB2YWx1ZSBhdCB0aGF0IHBvaW50LlxuICAvLyBBbHRob3VnaCB0aGlzIGJyZWFrcyBkb3duIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXksXG4gIC8vIGFzIGlzIHBvc3NpYmxlIHdpdGggUmVhY3QgMTYuXG4gIGxldCBub2RlID0gX25vZGU7XG4gIHdoaWxlIChub2RlICYmICFBcnJheS5pc0FycmF5KG5vZGUpICYmIG5vZGUuaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBub2RlID0gbm9kZS5yZW5kZXJlZDtcbiAgfVxuICAvLyBpZiB0aGUgU0ZDIHJldHVybmVkIG51bGwgZWZmZWN0aXZlbHksIHRoZXJlIGlzIG5vIGhvc3Qgbm9kZS5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXBwZXIgPSAoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtICYmIGl0ZW0uaW5zdGFuY2UpIHJldHVybiBSZWFjdERPTS5maW5kRE9NTm9kZShpdGVtLmluc3RhbmNlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5tYXAobWFwcGVyKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlLnJlbmRlcmVkKSAmJiBub2RlLm5vZGVUeXBlID09PSAnY2xhc3MnKSB7XG4gICAgcmV0dXJuIG5vZGUucmVuZGVyZWQubWFwKG1hcHBlcik7XG4gIH1cbiAgcmV0dXJuIG1hcHBlcihub2RlKTtcbn1cblxuY29uc3QgZXZlbnRPcHRpb25zID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIHBvaW50ZXJFdmVudHM6IGlzMTY0LFxuICBhdXhDbGljazogaXMxNjUsXG59O1xuXG5mdW5jdGlvbiBnZXRFbXB0eVN0YXRlVmFsdWUoKSB7XG4gIC8vIHRoaXMgaGFuZGxlcyBhIGJ1ZyBpbiBSZWFjdCAxNi4wIC0gMTYuMlxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2NvbW1pdC8zOWJlODM1NjVjNjVmOWM1MjIxNTBlNTIzNzUxNjc1NjhhMmExNDU5XG4gIC8vIGFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExOTY1XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3ByZWZlci1zdGF0ZWxlc3MtZnVuY3Rpb25cbiAgY2xhc3MgRW1wdHlTdGF0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRlc3RSZW5kZXJlciA9IG5ldyBTaGFsbG93UmVuZGVyZXIoKTtcbiAgdGVzdFJlbmRlcmVyLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KEVtcHR5U3RhdGUpKTtcbiAgcmV0dXJuIHRlc3RSZW5kZXJlci5faW5zdGFuY2Uuc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHdyYXBBY3QoZm4pIHtcbiAgaWYgKCFpczE2OCkge1xuICAgIHJldHVybiBmbigpO1xuICB9XG4gIGxldCByZXR1cm5WYWw7XG4gIFRlc3RVdGlscy5hY3QoKCkgPT4geyByZXR1cm5WYWwgPSBmbigpOyB9KTtcbiAgcmV0dXJuIHJldHVyblZhbDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvdmlkZXJEZWZhdWx0VmFsdWUoUHJvdmlkZXIpIHtcbiAgLy8gUmVhY3Qgc3RvcmVzIHJlZmVyZW5jZXMgdG8gdGhlIFByb3ZpZGVyJ3MgZGVmYXVsdFZhbHVlIGRpZmZlcmVudGx5IGFjcm9zcyB2ZXJzaW9ucy5cbiAgaWYgKCdfZGVmYXVsdFZhbHVlJyBpbiBQcm92aWRlci5fY29udGV4dCkge1xuICAgIHJldHVybiBQcm92aWRlci5fY29udGV4dC5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmICgnX2N1cnJlbnRWYWx1ZScgaW4gUHJvdmlkZXIuX2NvbnRleHQpIHtcbiAgICByZXR1cm4gUHJvdmlkZXIuX2NvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0VuenltZSBJbnRlcm5hbCBFcnJvcjogY2Fu4oCZdCBmaWd1cmUgb3V0IGhvdyB0byBnZXQgUHJvdmlkZXLigJlzIGRlZmF1bHQgdmFsdWUnKTtcbn1cblxuZnVuY3Rpb24gbWFrZUZha2VFbGVtZW50KHR5cGUpIHtcbiAgcmV0dXJuIHsgJCR0eXBlb2Y6IEVsZW1lbnQsIHR5cGUgfTtcbn1cblxuY2xhc3MgUmVhY3RTaXh0ZWVuQWRhcHRlciBleHRlbmRzIEVuenltZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgbGlmZWN5Y2xlcyB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIGVuYWJsZUNvbXBvbmVudERpZFVwZGF0ZU9uU2V0U3RhdGU6IHRydWUsIC8vIFRPRE86IHJlbW92ZSwgc2VtdmVyLW1ham9yXG4gICAgICBsZWdhY3lDb250ZXh0TW9kZTogJ3BhcmVudCcsXG4gICAgICBsaWZlY3ljbGVzOiB7XG4gICAgICAgIC4uLmxpZmVjeWNsZXMsXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZToge1xuICAgICAgICAgIG9uU2V0U3RhdGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczoge1xuICAgICAgICAgIGhhc1Nob3VsZENvbXBvbmVudFVwZGF0ZUJ1ZyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU6IHRydWUsXG4gICAgICAgIHNldFN0YXRlOiB7XG4gICAgICAgICAgc2tpcHNDb21wb25lbnREaWRVcGRhdGVPbk51bGxpc2g6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdldENoaWxkQ29udGV4dDoge1xuICAgICAgICAgIGNhbGxlZEJ5UmVuZGVyZXI6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IGlzMTY2LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlTW91bnRSZW5kZXJlcihvcHRpb25zKSB7XG4gICAgYXNzZXJ0RG9tQXZhaWxhYmxlKCdtb3VudCcpO1xuICAgIGlmIChGaWJlclRhZ3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFJlcXVpcmVzIERPTS5cbiAgICAgIEZpYmVyVGFncyA9IGRldGVjdEZpYmVyVGFncygpO1xuICAgIH1cbiAgICBjb25zdCB7IGF0dGFjaFRvLCBoeWRyYXRlSW4sIHdyYXBwaW5nQ29tcG9uZW50UHJvcHMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZG9tTm9kZSA9IGh5ZHJhdGVJbiB8fCBhdHRhY2hUbyB8fCBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbGV0IGluc3RhbmNlID0gbnVsbDtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyKGVsLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gd3JhcEFjdCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCByZWYgfSA9IGVsO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlclByb3BzID0ge1xuICAgICAgICAgICAgICBDb21wb25lbnQ6IHR5cGUsXG4gICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICB3cmFwcGluZ0NvbXBvbmVudFByb3BzLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAuLi4ocmVmICYmIHsgcmVmIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFJlYWN0V3JhcHBlckNvbXBvbmVudCA9IGNyZWF0ZU1vdW50V3JhcHBlcihlbCwgeyAuLi5vcHRpb25zLCBhZGFwdGVyIH0pO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZEVsID0gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdFdyYXBwZXJDb21wb25lbnQsIHdyYXBwZXJQcm9wcyk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IGh5ZHJhdGVJblxuICAgICAgICAgICAgICA/IFJlYWN0RE9NLmh5ZHJhdGUod3JhcHBlZEVsLCBkb21Ob2RlKVxuICAgICAgICAgICAgICA6IFJlYWN0RE9NLnJlbmRlcih3cmFwcGVkRWwsIGRvbU5vZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRDaGlsZFByb3BzKGVsLnByb3BzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB1bm1vdW50KCkge1xuICAgICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvbU5vZGUpO1xuICAgICAgICBpbnN0YW5jZSA9IG51bGw7XG4gICAgICB9LFxuICAgICAgZ2V0Tm9kZSgpIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXROb2RlRnJvbVJvb3RGaW5kZXIoXG4gICAgICAgICAgYWRhcHRlci5pc0N1c3RvbUNvbXBvbmVudCxcbiAgICAgICAgICB0b1RyZWUoaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxGaWJlciksXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUVycm9yKG5vZGVIaWVyYXJjaHksIHJvb3ROb2RlLCBlcnJvcikge1xuICAgICAgICBjb25zdCBpc0Vycm9yQm91bmRhcnkgPSAoeyBpbnN0YW5jZTogZWxJbnN0YW5jZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzMTY2ICYmIHR5cGUgJiYgdHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZWxJbnN0YW5jZSAmJiBlbEluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpbnN0YW5jZTogY2F0Y2hpbmdJbnN0YW5jZSxcbiAgICAgICAgICB0eXBlOiBjYXRjaGluZ1R5cGUsXG4gICAgICAgIH0gPSBub2RlSGllcmFyY2h5LmZpbmQoaXNFcnJvckJvdW5kYXJ5KSB8fCB7fTtcblxuICAgICAgICBzaW11bGF0ZUVycm9yKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNhdGNoaW5nSW5zdGFuY2UsXG4gICAgICAgICAgcm9vdE5vZGUsXG4gICAgICAgICAgbm9kZUhpZXJhcmNoeSxcbiAgICAgICAgICBub2RlVHlwZUZyb21UeXBlLFxuICAgICAgICAgIGFkYXB0ZXIuZGlzcGxheU5hbWVPZk5vZGUsXG4gICAgICAgICAgaXMxNjYgPyBjYXRjaGluZ1R5cGUgOiB1bmRlZmluZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2ltdWxhdGVFdmVudChub2RlLCBldmVudCwgbW9jaykge1xuICAgICAgICBjb25zdCBtYXBwZWRFdmVudCA9IG1hcE5hdGl2ZUV2ZW50TmFtZXMoZXZlbnQsIGV2ZW50T3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGV2ZW50Rm4gPSBUZXN0VXRpbHMuU2ltdWxhdGVbbWFwcGVkRXZlbnRdO1xuICAgICAgICBpZiAoIWV2ZW50Rm4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWFjdFdyYXBwZXI6OnNpbXVsYXRlKCkgZXZlbnQgJyR7ZXZlbnR9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50Rm4obm9kZVRvSG9zdE5vZGUobm9kZSksIG1vY2spO1xuICAgICAgfSxcbiAgICAgIGJhdGNoZWRVcGRhdGVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICAvLyByZXR1cm4gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZm4pO1xuICAgICAgfSxcbiAgICAgIGdldFdyYXBwaW5nQ29tcG9uZW50UmVuZGVyZXIoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAuLi5nZXRXcmFwcGluZ0NvbXBvbmVudE1vdW50UmVuZGVyZXIoe1xuICAgICAgICAgICAgdG9UcmVlOiBpbnN0ID0+IHRvVHJlZShpbnN0Ll9yZWFjdEludGVybmFsRmliZXIpLFxuICAgICAgICAgICAgZ2V0TW91bnRXcmFwcGVySW5zdGFuY2U6ICgpID0+IGluc3RhbmNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlU2hhbGxvd1JlbmRlcmVyKC8qIG9wdGlvbnMgKi8pIHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcztcbiAgICBjb25zdCByZW5kZXJlciA9IG5ldyBTaGFsbG93UmVuZGVyZXIoKTtcbiAgICBsZXQgaXNET00gPSBmYWxzZTtcbiAgICBsZXQgY2FjaGVkTm9kZSA9IG51bGw7XG5cbiAgICBsZXQgbGFzdENvbXBvbmVudCA9IG51bGw7XG4gICAgbGV0IHdyYXBwZWRDb21wb25lbnQgPSBudWxsO1xuXG4gICAgLy8gV3JhcCBmdW5jdGlvbmFsIGNvbXBvbmVudHMgb24gdmVyc2lvbnMgcHJpb3IgdG8gMTYuNSxcbiAgICAvLyB0byBhdm9pZCBpbmFkdmVydGVudGx5IHBhc3MgYSBgdGhpc2AgaW5zdGFuY2UgdG8gaXQuXG4gICAgY29uc3Qgd3JhcEZ1bmN0aW9uYWxDb21wb25lbnQgPSAoQ29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoaXMxNjUpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RDb21wb25lbnQgIT09IENvbXBvbmVudCkge1xuICAgICAgICB3cmFwcGVkQ29tcG9uZW50ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAoLi4uYXJncykgPT4gQ29tcG9uZW50KC4uLmFyZ3MpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICk7XG4gICAgICAgIGxhc3RDb21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlZENvbXBvbmVudDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcihlbCwgdW5tYXNrZWRDb250ZXh0LCB7XG4gICAgICAgIHByb3ZpZGVyVmFsdWVzID0gbmV3IE1hcCgpLFxuICAgICAgfSA9IHt9KSB7XG4gICAgICAgIGNhY2hlZE5vZGUgPSBlbDtcbiAgICAgICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4gICAgICAgIGlmICh0eXBlb2YgZWwudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpc0RPTSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb250ZXh0UHJvdmlkZXIoZWwpKSB7XG4gICAgICAgICAgcHJvdmlkZXJWYWx1ZXMuc2V0KGVsLnR5cGUsIGVsLnByb3BzLnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBNb2NrUHJvdmlkZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcHJvcHMgPT4gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICBlbC50eXBlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHdpdGhTZXRTdGF0ZUFsbG93ZWQoKCkgPT4gcmVuZGVyZXIucmVuZGVyKHsgLi4uZWwsIHR5cGU6IE1vY2tQcm92aWRlciB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb250ZXh0Q29uc3VtZXIoZWwpKSB7XG4gICAgICAgICAgY29uc3QgUHJvdmlkZXIgPSBhZGFwdGVyLmdldFByb3ZpZGVyRnJvbUNvbnN1bWVyKGVsLnR5cGUpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZXJWYWx1ZXMuaGFzKFByb3ZpZGVyKVxuICAgICAgICAgICAgPyBwcm92aWRlclZhbHVlcy5nZXQoUHJvdmlkZXIpXG4gICAgICAgICAgICA6IGdldFByb3ZpZGVyRGVmYXVsdFZhbHVlKFByb3ZpZGVyKTtcbiAgICAgICAgICBjb25zdCBNb2NrQ29uc3VtZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcHJvcHMgPT4gcHJvcHMuY2hpbGRyZW4odmFsdWUpLFxuICAgICAgICAgICAgZWwudHlwZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcih7IC4uLmVsLCB0eXBlOiBNb2NrQ29uc3VtZXIgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzRE9NID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgeyB0eXBlOiBDb21wb25lbnQgfSA9IGVsO1xuXG4gICAgICAgICAgY29uc3QgaXNTdGF0ZWZ1bCA9IENvbXBvbmVudC5wcm90b3R5cGUgJiYgKFxuICAgICAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50XG4gICAgICAgICAgICB8fCBBcnJheS5pc0FycmF5KENvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlycykgLy8gZmFsbGJhY2sgZm9yIGNyZWF0ZUNsYXNzIGNvbXBvbmVudHNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQoQ29tcG9uZW50LmNvbnRleHRUeXBlcywgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgICAgICAgIGlmICghaXNTdGF0ZWZ1bCAmJiBpc01lbW8oZWwudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IElubmVyQ29tcCA9IGVsLnR5cGUudHlwZTtcbiAgICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihcbiAgICAgICAgICAgICAgeyAuLi5lbCwgdHlwZTogd3JhcEZ1bmN0aW9uYWxDb21wb25lbnQoSW5uZXJDb21wKSB9LFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFpc1N0YXRlZnVsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihcbiAgICAgICAgICAgICAgeyAuLi5lbCwgdHlwZTogd3JhcEZ1bmN0aW9uYWxDb21wb25lbnQoQ29tcG9uZW50KSB9LFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RhdGVmdWwpIHtcbiAgICAgICAgICAgIC8vIGZpeCByZWFjdCBidWc7IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0RW1wdHlTdGF0ZVZhbHVlYFxuICAgICAgICAgICAgY29uc3QgZW1wdHlTdGF0ZVZhbHVlID0gZ2V0RW1wdHlTdGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoZW1wdHlTdGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gZW1wdHlTdGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3aXRoU2V0U3RhdGVBbGxvd2VkKCgpID0+IHJlbmRlcmVyLnJlbmRlcihlbCwgY29udGV4dCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdW5tb3VudCgpIHtcbiAgICAgICAgcmVuZGVyZXIudW5tb3VudCgpO1xuICAgICAgfSxcbiAgICAgIGdldE5vZGUoKSB7XG4gICAgICAgIGlmIChpc0RPTSkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50VG9UcmVlKGNhY2hlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHJlbmRlcmVyLmdldFJlbmRlck91dHB1dCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBub2RlVHlwZUZyb21UeXBlKGNhY2hlZE5vZGUudHlwZSksXG4gICAgICAgICAgdHlwZTogY2FjaGVkTm9kZS50eXBlLFxuICAgICAgICAgIHByb3BzOiBjYWNoZWROb2RlLnByb3BzLFxuICAgICAgICAgIGtleTogZW5zdXJlS2V5T3JVbmRlZmluZWQoY2FjaGVkTm9kZS5rZXkpLFxuICAgICAgICAgIHJlZjogY2FjaGVkTm9kZS5yZWYsXG4gICAgICAgICAgaW5zdGFuY2U6IHJlbmRlcmVyLl9pbnN0YW5jZSxcbiAgICAgICAgICByZW5kZXJlZDogQXJyYXkuaXNBcnJheShvdXRwdXQpXG4gICAgICAgICAgICA/IGZsYXR0ZW4ob3V0cHV0KS5tYXAoZWwgPT4gZWxlbWVudFRvVHJlZShlbCkpXG4gICAgICAgICAgICA6IGVsZW1lbnRUb1RyZWUob3V0cHV0KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUVycm9yKG5vZGVIaWVyYXJjaHksIHJvb3ROb2RlLCBlcnJvcikge1xuICAgICAgICBzaW11bGF0ZUVycm9yKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHJlbmRlcmVyLl9pbnN0YW5jZSxcbiAgICAgICAgICBjYWNoZWROb2RlLFxuICAgICAgICAgIG5vZGVIaWVyYXJjaHkuY29uY2F0KGNhY2hlZE5vZGUpLFxuICAgICAgICAgIG5vZGVUeXBlRnJvbVR5cGUsXG4gICAgICAgICAgYWRhcHRlci5kaXNwbGF5TmFtZU9mTm9kZSxcbiAgICAgICAgICBpczE2NiA/IGNhY2hlZE5vZGUudHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaW11bGF0ZUV2ZW50KG5vZGUsIGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBub2RlLnByb3BzW3Byb3BGcm9tRXZlbnQoZXZlbnQsIGV2ZW50T3B0aW9ucyldO1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIHdpdGhTZXRTdGF0ZUFsbG93ZWQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gVE9ETyhsbXIpOiBjcmVhdGUvdXNlIHN5bnRoZXRpYyBldmVudHNcbiAgICAgICAgICAgIC8vIFRPRE8obG1yKTogZW11bGF0ZSBSZWFjdCdzIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICAvLyBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcygoKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiYXRjaGVkVXBkYXRlcyhmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgLy8gcmV0dXJuIFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZuKTtcbiAgICAgIH0sXG4gICAgICBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGhpZXJhcmNoeSkge1xuICAgICAgICByZXR1cm4gY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgdHlwZVNwZWNzLFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICBkaXNwbGF5TmFtZU9mTm9kZShjYWNoZWROb2RlKSxcbiAgICAgICAgICAoKSA9PiBnZXRDb21wb25lbnRTdGFjayhoaWVyYXJjaHkuY29uY2F0KFtjYWNoZWROb2RlXSkpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlU3RyaW5nUmVuZGVyZXIob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICByZW5kZXIoZWwsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGV4dCAmJiAoZWwudHlwZS5jb250ZXh0VHlwZXMgfHwgb3B0aW9ucy5jaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZENvbnRleHRUeXBlcyA9IHtcbiAgICAgICAgICAgIC4uLihlbC50eXBlLmNvbnRleHRUeXBlcyB8fCB7fSksXG4gICAgICAgICAgICAuLi5vcHRpb25zLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgQ29udGV4dFdyYXBwZXIgPSBjcmVhdGVSZW5kZXJXcmFwcGVyKGVsLCBjb250ZXh0LCBjaGlsZENvbnRleHRUeXBlcyk7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RhdGljTWFya3VwKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dFdyYXBwZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVhY3RET01TZXJ2ZXIucmVuZGVyVG9TdGF0aWNNYXJrdXAoZWwpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJvdmlkZWQgYSBiYWcgb2Ygb3B0aW9ucywgcmV0dXJuIGFuIGBFbnp5bWVSZW5kZXJlcmAuIFNvbWUgb3B0aW9ucyBjYW4gYmUgaW1wbGVtZW50YXRpb25cbiAgLy8gc3BlY2lmaWMsIGxpa2UgYGF0dGFjaGAgZXRjLiBmb3IgUmVhY3QsIGJ1dCBub3QgcGFydCBvZiB0aGlzIGludGVyZmFjZSBleHBsaWNpdGx5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBjcmVhdGVSZW5kZXJlcihvcHRpb25zKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLm1vZGUpIHtcbiAgICAgIGNhc2UgRW56eW1lQWRhcHRlci5NT0RFUy5NT1VOVDogcmV0dXJuIHRoaXMuY3JlYXRlTW91bnRSZW5kZXJlcihvcHRpb25zKTtcbiAgICAgIGNhc2UgRW56eW1lQWRhcHRlci5NT0RFUy5TSEFMTE9XOiByZXR1cm4gdGhpcy5jcmVhdGVTaGFsbG93UmVuZGVyZXIob3B0aW9ucyk7XG4gICAgICBjYXNlIEVuenltZUFkYXB0ZXIuTU9ERVMuU1RSSU5HOiByZXR1cm4gdGhpcy5jcmVhdGVTdHJpbmdSZW5kZXJlcihvcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW56eW1lIEludGVybmFsIEVycm9yOiBVbnJlY29nbml6ZWQgbW9kZTogJHtvcHRpb25zLm1vZGV9YCk7XG4gICAgfVxuICB9XG5cbiAgd3JhcChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHdyYXAoZWxlbWVudCk7XG4gIH1cblxuICAvLyBjb252ZXJ0cyBhbiBSU1ROb2RlIHRvIHRoZSBjb3JyZXNwb25kaW5nIEpTWCBQcmFnbWEgRWxlbWVudC4gVGhpcyB3aWxsIGJlIG5lZWRlZFxuICAvLyBpbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGBXcmFwcGVyLm1vdW50KClgIGFuZCBgV3JhcHBlci5zaGFsbG93KClgIG1ldGhvZHMsIGJ1dCBzaG91bGRcbiAgLy8gYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmb3IgcGVvcGxlIHRvIGltcGxlbWVudC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgbm9kZVRvRWxlbWVudChub2RlKSB7XG4gICAgaWYgKCFub2RlIHx8IHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQobm9kZS50eXBlLCBwcm9wc1dpdGhLZXlzQW5kUmVmKG5vZGUpKTtcbiAgfVxuXG4gIGVsZW1lbnRUb05vZGUoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICB9XG5cbiAgbm9kZVRvSG9zdE5vZGUobm9kZSwgc3VwcG9ydHNBcnJheSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBub2RlVG9Ib3N0Tm9kZShub2RlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlcykgJiYgIXN1cHBvcnRzQXJyYXkpIHtcbiAgICAgIHJldHVybiBub2Rlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgZGlzcGxheU5hbWVPZk5vZGUobm9kZSkge1xuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyB0eXBlLCAkJHR5cGVvZiB9ID0gbm9kZTtcblxuICAgIGNvbnN0IG5vZGVUeXBlID0gdHlwZSB8fCAkJHR5cGVvZjtcblxuICAgIC8vIG5ld2VyIG5vZGUgdHlwZXMgbWF5IGJlIHVuZGVmaW5lZCwgc28gb25seSB0ZXN0IGlmIHRoZSBub2RlVHlwZSBleGlzdHNcbiAgICBpZiAobm9kZVR5cGUpIHtcbiAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSAoaXMxNjYgPyBDb25jdXJyZW50TW9kZSA6IEFzeW5jTW9kZSkgfHwgTmFOOiByZXR1cm4gaXMxNjYgPyAnQ29uY3VycmVudE1vZGUnIDogJ0FzeW5jTW9kZSc7XG4gICAgICAgIGNhc2UgRnJhZ21lbnQgfHwgTmFOOiByZXR1cm4gJ0ZyYWdtZW50JztcbiAgICAgICAgY2FzZSBTdHJpY3RNb2RlIHx8IE5hTjogcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICAgICAgY2FzZSBQcm9maWxlciB8fCBOYU46IHJldHVybiAnUHJvZmlsZXInO1xuICAgICAgICBjYXNlIFBvcnRhbCB8fCBOYU46IHJldHVybiAnUG9ydGFsJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgY2FzZSBDb250ZXh0Q29uc3VtZXIgfHwgTmFOOiByZXR1cm4gJ0NvbnRleHRDb25zdW1lcic7XG4gICAgICBjYXNlIENvbnRleHRQcm92aWRlciB8fCBOYU46IHJldHVybiAnQ29udGV4dFByb3ZpZGVyJztcbiAgICAgIGNhc2UgTWVtbyB8fCBOYU46IHJldHVybiBkaXNwbGF5TmFtZU9mTm9kZSh0eXBlKTtcbiAgICAgIGNhc2UgRm9yd2FyZFJlZiB8fCBOYU46IHtcbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gZGlzcGxheU5hbWVPZk5vZGUoeyB0eXBlOiB0eXBlLnJlbmRlciB9KTtcbiAgICAgICAgcmV0dXJuIG5hbWUgPyBgRm9yd2FyZFJlZigke25hbWV9KWAgOiAnRm9yd2FyZFJlZic7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiByZXR1cm4gZGlzcGxheU5hbWVPZk5vZGUobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBpc1ZhbGlkRWxlbWVudFR5cGUob2JqZWN0KSB7XG4gICAgcmV0dXJuICEhb2JqZWN0ICYmIGlzVmFsaWRFbGVtZW50VHlwZShvYmplY3QpO1xuICB9XG5cbiAgaXNGcmFnbWVudChmcmFnbWVudCkge1xuICAgIHJldHVybiB0eXBlT2ZOb2RlKGZyYWdtZW50KSA9PT0gRnJhZ21lbnQ7XG4gIH1cblxuICBpc0N1c3RvbUNvbXBvbmVudCh0eXBlKSB7XG4gICAgY29uc3QgZmFrZUVsZW1lbnQgPSBtYWtlRmFrZUVsZW1lbnQodHlwZSk7XG4gICAgcmV0dXJuICEhdHlwZSAmJiAoXG4gICAgICB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgfHwgaXNGb3J3YXJkUmVmKGZha2VFbGVtZW50KVxuICAgICAgfHwgaXNDb250ZXh0UHJvdmlkZXIoZmFrZUVsZW1lbnQpXG4gICAgICB8fCBpc0NvbnRleHRDb25zdW1lcihmYWtlRWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgaXNDb250ZXh0Q29uc3VtZXIodHlwZSkge1xuICAgIHJldHVybiAhIXR5cGUgJiYgaXNDb250ZXh0Q29uc3VtZXIobWFrZUZha2VFbGVtZW50KHR5cGUpKTtcbiAgfVxuXG4gIGlzQ3VzdG9tQ29tcG9uZW50RWxlbWVudChpbnN0KSB7XG4gICAgaWYgKCFpbnN0IHx8ICF0aGlzLmlzVmFsaWRFbGVtZW50KGluc3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ3VzdG9tQ29tcG9uZW50KGluc3QudHlwZSk7XG4gIH1cblxuICBnZXRQcm92aWRlckZyb21Db25zdW1lcihDb25zdW1lcikge1xuICAgIC8vIFJlYWN0IHN0b3JlcyByZWZlcmVuY2VzIHRvIHRoZSBQcm92aWRlciBvbiBhIENvbnN1bWVyIGRpZmZlcmVudGx5IGFjcm9zcyB2ZXJzaW9ucy5cbiAgICBpZiAoQ29uc3VtZXIpIHtcbiAgICAgIGxldCBQcm92aWRlcjtcbiAgICAgIGlmIChDb25zdW1lci5Qcm92aWRlcikge1xuICAgICAgICAoeyBQcm92aWRlciB9ID0gQ29uc3VtZXIpO1xuICAgICAgfSBlbHNlIGlmIChDb25zdW1lci5fY29udGV4dCkge1xuICAgICAgICAoeyBQcm92aWRlciB9ID0gQ29uc3VtZXIuX2NvbnRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKFByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBQcm92aWRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbnp5bWUgSW50ZXJuYWwgRXJyb3I6IGNhbuKAmXQgZmlndXJlIG91dCBob3cgdG8gZ2V0IFByb3ZpZGVyIGZyb20gQ29uc3VtZXInKTtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnQoLi4uYXJncykge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KC4uLmFyZ3MpO1xuICB9XG5cbiAgd3JhcFdpdGhXcmFwcGluZ0NvbXBvbmVudChub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFJvb3RGaW5kZXIsXG4gICAgICBub2RlOiB3cmFwV2l0aFdyYXBwaW5nQ29tcG9uZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQsIG5vZGUsIG9wdGlvbnMpLFxuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFNpeHRlZW5BZGFwdGVyO1xuIl19
+//# sourceMappingURL=ReactSixteenAdapter.js.map
\ No newline at end of file

build/ReactSixteenAdapter.js.map

@@ -0,0 +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

package.json

@@ -1,6 +1,6 @@
{
"name": "enzyme-adapter-react-16",
- "version": "1.11.2",
+ "version": "1.12.1",
"description": "JavaScript Testing utilities for React",
"homepage": "http://airbnb.io/enzyme/",
"main": "build",
@@ -9,7 +9,7 @@
"lint": "eslint --ext js,jsx .",
"pretest": "npm run lint",
"prebuild": "npm run clean",
- "build": "babel src --out-dir build",
+ "build": "babel --source-maps=both src --out-dir build",
"watch": "npm run build -- -w",
"prepublish": "npm run build && safe-publish-latest && (not-in-publish || cp ../../{LICENSE,README}.md ./)"
},
@@ -35,11 +35,11 @@
"author": "Leland Richardson <leland.richardson@airbnb.com>",
"license": "MIT",
"dependencies": {
- "enzyme-adapter-utils": "^1.10.1",
+ "enzyme-adapter-utils": "^1.11.0",
"object.assign": "^4.1.0",
"object.values": "^1.1.0",
"prop-types": "^15.7.2",
- "react-is": "^16.8.4",
+ "react-is": "^16.8.6",
"react-test-renderer": "^16.0.0-0",
"semver": "^5.6.0"
},
@@ -53,7 +53,7 @@
"babel-plugin-transform-replace-object-assign": "^1.0.0",
"babel-preset-airbnb": "^2.6.0",
"enzyme": "^3.0.0",
- "eslint": "^5.15.1",
+ "eslint": "^5.16.0",
"eslint-config-airbnb": "^17.1.0",
"eslint-plugin-import": "^2.16.0",
"eslint-plugin-jsx-a11y": "^6.2.1",

src/detectFiberTags.js

@@ -19,6 +19,7 @@
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';
function Fn() {
return null;
@@ -61,10 +62,13 @@
? getFiber(React.createElement(Ctx.Consumer, null, () => null)).tag
: -1,
ContextProvider: supportsContext
- ? getFiber(React.createElement(Ctx.Provider, { value: null })).tag
+ ? getFiber(React.createElement(Ctx.Provider, { value: null }, null)).tag
: -1,
ForwardRef: supportsForwardRef
? getFiber(React.createElement(FwdRef)).tag
: -1,
+ Profiler: supportsProfiler
+ ? getFiber(React.createElement(React.unstable_Profiler, { id: 'mock', onRender() {} })).tag
+ : -1,
};
};

src/ReactSixteenAdapter.js

@@ -11,21 +11,24 @@
import semver from 'semver';
import checkPropTypes from 'prop-types/checkPropTypes';
import {
- isElement,
- isPortal,
- isForwardRef,
- isValidElementType,
AsyncMode,
ConcurrentMode,
- Fragment,
ContextConsumer,
ContextProvider,
- StrictMode,
+ Element,
ForwardRef,
- Profiler,
- Portal,
+ Fragment,
+ isContextConsumer,
+ isContextProvider,
+ isElement,
+ isForwardRef,
isMemo,
+ isPortal,
+ isValidElementType,
Memo,
+ Portal,
+ Profiler,
+ StrictMode,
} from 'react-is';
import { EnzymeAdapter } from 'enzyme';
import { typeOfNode } from 'enzyme/build/Utils';
@@ -45,6 +48,10 @@
wrap,
getMaskedContext,
getComponentStack,
+ RootFinder,
+ getNodeFromRootFinder,
+ wrapWithWrappingComponent,
+ getWrappingComponentMountRenderer,
} from 'enzyme-adapter-utils';
import findCurrentFiberUsingSlowPath from './findCurrentFiberUsingSlowPath';
import detectFiberTags from './detectFiberTags';
@@ -172,16 +179,21 @@
instance: node.stateNode,
rendered: childrenToTree(node.child.child),
};
- case FiberTags.MemoSFC:
+ case FiberTags.MemoSFC: {
+ let renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));
+ if (renderedNodes.length === 0) {
+ renderedNodes = [node.memoizedProps.children];
+ }
return {
nodeType: 'function',
- type: node.elementType.type,
+ type: node.elementType,
props: { ...node.memoizedProps },
key: ensureKeyOrUndefined(node.key),
ref: node.ref,
instance: null,
- rendered: childrenToTree(node.child.child),
+ rendered: renderedNodes,
};
+ }
case FiberTags.HostComponent: {
let renderedNodes = flatten(nodeAndSiblingsArray(node.child).map(toTree));
if (renderedNodes.length === 0) {
@@ -204,6 +216,7 @@
case FiberTags.ContextProvider:
case FiberTags.ContextConsumer:
return childrenToTree(node.child);
+ case FiberTags.Profiler:
case FiberTags.ForwardRef: {
return {
nodeType: 'function',
@@ -293,6 +306,21 @@
return returnVal;
}
+function getProviderDefaultValue(Provider) {
+ // React stores references to the Provider's defaultValue differently across versions.
+ if ('_defaultValue' in Provider._context) {
+ return Provider._context._defaultValue;
+ }
+ if ('_currentValue' in Provider._context) {
+ return Provider._context._currentValue;
+ }
+ throw new Error('Enzyme Internal Error: can’t figure out how to get Provider’s default value');
+}
+
+function makeFakeElement(type) {
+ return { $$typeof: Element, type };
+}
+
class ReactSixteenAdapter extends EnzymeAdapter {
constructor() {
super();
@@ -316,6 +344,7 @@
getChildContext: {
calledByRenderer: false,
},
+ getDerivedStateFromError: is166,
},
};
}
@@ -326,7 +355,7 @@
// Requires DOM.
FiberTags = detectFiberTags();
}
- const { attachTo, hydrateIn } = options;
+ const { attachTo, hydrateIn, wrappingComponentProps } = options;
const domNode = hydrateIn || attachTo || global.document.createElement('div');
let instance = null;
const adapter = this;
@@ -338,6 +367,7 @@
const wrapperProps = {
Component: type,
props,
+ wrappingComponentProps,
context,
...(ref && { ref }),
};
@@ -359,11 +389,27 @@
instance = null;
},
getNode() {
- return instance ? toTree(instance._reactInternalFiber).rendered : null;
+ if (!instance) {
+ return null;
+ }
+ return getNodeFromRootFinder(
+ adapter.isCustomComponent,
+ toTree(instance._reactInternalFiber),
+ options,
+ );
},
simulateError(nodeHierarchy, rootNode, error) {
- const { instance: catchingInstance } = nodeHierarchy
- .find(x => x.instance && x.instance.componentDidCatch) || {};
+ const isErrorBoundary = ({ instance: elInstance, type }) => {
+ if (is166 && type && type.getDerivedStateFromError) {
+ return true;
+ }
+ return elInstance && elInstance.componentDidCatch;
+ };
+
+ const {
+ instance: catchingInstance,
+ type: catchingType,
+ } = nodeHierarchy.find(isErrorBoundary) || {};
simulateError(
error,
@@ -372,6 +418,7 @@
nodeHierarchy,
nodeTypeFromType,
adapter.displayNameOfNode,
+ is166 ? catchingType : undefined,
);
},
simulateEvent(node, event, mock) {
@@ -386,6 +433,15 @@
return fn();
// return ReactDOM.unstable_batchedUpdates(fn);
},
+ getWrappingComponentRenderer() {
+ return {
+ ...this,
+ ...getWrappingComponentMountRenderer({
+ toTree: inst => toTree(inst._reactInternalFiber),
+ getMountWrapperInstance: () => instance,
+ }),
+ };
+ },
};
}
@@ -394,12 +450,52 @@
const renderer = new ShallowRenderer();
let isDOM = false;
let cachedNode = null;
+
+ let lastComponent = null;
+ let wrappedComponent = null;
+
+ // Wrap functional components on versions prior to 16.5,
+ // to avoid inadvertently pass a `this` instance to it.
+ const wrapFunctionalComponent = (Component) => {
+ if (is165) {
+ return Component;
+ }
+
+ if (lastComponent !== Component) {
+ wrappedComponent = Object.assign(
+ (...args) => Component(...args), // eslint-disable-line new-cap
+ Component,
+ );
+ lastComponent = Component;
+ }
+ return wrappedComponent;
+ };
+
return {
- render(el, unmaskedContext) {
+ render(el, unmaskedContext, {
+ providerValues = new Map(),
+ } = {}) {
cachedNode = el;
/* eslint consistent-return: 0 */
if (typeof el.type === 'string') {
isDOM = true;
+ } else if (isContextProvider(el)) {
+ providerValues.set(el.type, el.props.value);
+ const MockProvider = Object.assign(
+ props => props.children,
+ el.type,
+ );
+ return withSetStateAllowed(() => renderer.render({ ...el, type: MockProvider }));
+ } else if (isContextConsumer(el)) {
+ const Provider = adapter.getProviderFromConsumer(el.type);
+ const value = providerValues.has(Provider)
+ ? providerValues.get(Provider)
+ : getProviderDefaultValue(Provider);
+ const MockConsumer = Object.assign(
+ props => props.children(value),
+ el.type,
+ );
+ return withSetStateAllowed(() => renderer.render({ ...el, type: MockConsumer }));
} else {
isDOM = false;
const { type: Component } = el;
@@ -413,20 +509,19 @@
if (!isStateful && isMemo(el.type)) {
const InnerComp = el.type.type;
- const wrappedEl = Object.assign(
- (...args) => InnerComp(...args), // eslint-disable-line new-cap
- InnerComp,
- );
- return withSetStateAllowed(() => renderer.render({ ...el, type: wrappedEl }, context));
+ return withSetStateAllowed(() => renderer.render(
+ { ...el, type: wrapFunctionalComponent(InnerComp) },
+ context,
+ ));
}
if (!isStateful && typeof Component === 'function') {
- const wrappedEl = Object.assign(
- (...args) => Component(...args), // eslint-disable-line new-cap
- Component,
- );
- return withSetStateAllowed(() => renderer.render({ ...el, type: wrappedEl }, context));
+ return withSetStateAllowed(() => renderer.render(
+ { ...el, type: wrapFunctionalComponent(Component) },
+ context,
+ ));
}
+
if (isStateful) {
// fix react bug; see implementation of `getEmptyStateValue`
const emptyStateValue = getEmptyStateValue();
@@ -482,6 +577,7 @@
nodeHierarchy.concat(cachedNode),
nodeTypeFromType,
adapter.displayNameOfNode,
+ is166 ? cachedNode.type : undefined,
);
},
simulateEvent(node, event, ...args) {
@@ -589,7 +685,7 @@
switch ($$typeofType) {
case ContextConsumer || NaN: return 'ContextConsumer';
case ContextProvider || NaN: return 'ContextProvider';
- case Memo || NaN: return displayNameOfNode(type.type);
+ case Memo || NaN: return displayNameOfNode(type);
case ForwardRef || NaN: {
if (type.displayName) {
return type.displayName;
@@ -613,16 +709,53 @@
return typeOfNode(fragment) === Fragment;
}
+ isCustomComponent(type) {
+ const fakeElement = makeFakeElement(type);
+ return !!type && (
+ typeof type === 'function'
+ || isForwardRef(fakeElement)
+ || isContextProvider(fakeElement)
+ || isContextConsumer(fakeElement)
+ );
+ }
+
+ isContextConsumer(type) {
+ return !!type && isContextConsumer(makeFakeElement(type));
+ }
+
isCustomComponentElement(inst) {
if (!inst || !this.isValidElement(inst)) {
return false;
}
- return typeof inst.type === 'function' || isForwardRef(inst);
+ return this.isCustomComponent(inst.type);
+ }
+
+ getProviderFromConsumer(Consumer) {
+ // 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) {
+ ({ Provider } = Consumer._context);
+ }
+ if (Provider) {
+ return Provider;
+ }
+ }
+ throw new Error('Enzyme Internal Error: can’t figure out how to get Provider from Consumer');
}
createElement(...args) {
return React.createElement(...args);
}
+
+ wrapWithWrappingComponent(node, options) {
+ return {
+ RootFinder,
+ node: wrapWithWrappingComponent(React.createElement, node, options),
+ };
+ }
}
module.exports = ReactSixteenAdapter;