UNPKG

react-tree-walker

Version:

Walk a React element tree, executing a provided function against each node.

3 lines (2 loc) 3.31 kB
"use strict";var defaultOptions={componentWillUnmount:!1},forwardRefSymbol=Symbol.for("react.forward_ref"),pReduce=function(e,p,t){return new Promise(function(r,o){var i=e[Symbol.iterator](),u=0;!function t(e){var n=i.next();n.done?r(e):Promise.all([e,n.value]).then(function(e){t(p(e[0],e[1],u++))}).catch(o)}(t)})},pMapSeries=function(e,r){var o=[];return pReduce(e,function(e,t,n){return Promise.resolve(r(t,n)).then(function(e){o.push(e)})}).then(function(){return o})},ensureChild=function e(t){return t&&"function"==typeof t.render?e(t.render()):t},getChildren=function(e){return e.props&&e.props.children?e.props.children:e.children?e.children:void 0},getType=function(e){return e.type||e.nodeName},getProps=function(e){return e.props||e.attributes},isReactElement=function(e){return!!getType(e)},isClassComponent=function(e){return e.prototype&&(e.prototype.render||e.prototype.isReactComponent||e.prototype.isPureReactComponent)},isForwardRef=function(e){return e.type&&e.type.$$typeof===forwardRefSymbol},providesChildContext=function(e){return!!e.getChildContext};function reactTreeWalker(t,n,r){var f=3<arguments.length&&void 0!==arguments[3]?arguments[3]:defaultOptions;return new Promise(function(e,l){var a=function(){try{return n.apply(void 0,arguments)}catch(e){l(e)}};(function p(s,c){if(Array.isArray(s))return Promise.all(s.map(function(e){return p(e,c)}));if(!s)return Promise.resolve();if("string"==typeof s||"number"==typeof s)return a(s,null,c),Promise.resolve();if(s.type&&(s.type._context&&(s.type._context._currentValue=s.props.value),s.type.Provider&&s.type.Consumer)){var e=s.props.children(s.type.Provider._context._currentValue);return p(e,c)}return isReactElement(s)?new Promise(function(i){var e=function(r,e,t,o){return Promise.resolve(a(s,e,t,o)).then(function(e){if(!1!==e){var t=r(),n=ensureChild(t);if(n)return Array.isArray(n)?pMapSeries(n,function(e){return e?p(e,o):Promise.resolve()}).then(i,l).catch(l):p(n,o).then(i,l).catch(l)}}).catch(l)};if("function"==typeof getType(s)||isForwardRef(s)){var t=getType(s),n=Object.assign({},t.defaultProps,getProps(s),{children:getChildren(s)});if(isForwardRef(s))e(function(){return s.type.render(n)},null,c,c).then(i);else if(isClassComponent(t)){var r=new t(n,c);if(Object.defineProperty(r,"props",{value:r.props||n}),r.context=r.context||c,r.state=r.state||null,r.setState=function(e){"function"==typeof e&&(e=e(r.state,r.props,r.context)),r.state=Object.assign({},r.state,e)},t.getDerivedStateFromProps){var o=t.getDerivedStateFromProps(r.props,r.state);null!==o&&(r.state=Object.assign({},r.state,o))}else r.UNSAFE_componentWillMount?r.UNSAFE_componentWillMount():r.componentWillMount&&r.componentWillMount();var u=providesChildContext(r)?Object.assign({},c,r.getChildContext()):c;e(function(){return r.render(r.props,r.state)},r,c,u).then(function(){f.componentWillUnmount&&r.componentWillUnmount&&r.componentWillUnmount()}).then(i)}else e(function(){return t(n,c)},null,c,c).then(i)}else e(function(){return getChildren(s)},null,c,c).then(i)}):s.containerInfo&&s.children&&s.children.props&&Array.isArray(s.children.props.children)?Promise.all(s.children.props.children.map(function(e){return p(e,c)})):Promise.resolve()})(t,r).then(e,l)})}module.exports=reactTreeWalker; //# sourceMappingURL=react-tree-walker.min.js.map