{"version":3,"sources":["../src/createMountWrapper.jsx"],"names":["createMountWrapper","stringOrFunction","PropTypes","oneOfType","func","string","makeValidElementType","adapter","validElementType","props","propName","isValidElementType","args","propValue","TypeError","isRequired","validElementTypeRequired","node","options","WrappingComponent","wrappingComponent","WrapperComponent","wrappingComponentProps","context","state","mount","newProps","newContext","callback","undefined","oldProps","oldContext","setState","Component","refProp","component","React","propTypes","object","defaultProps","type","contextTypes","childContextTypes","prototype","getChildContext"],"mappings":";;;;;;;;;;qBA4CwBA,kB;;;;;;AA5CxB;;;;AACA;;;;AACA;;AACA;;;;;;;;;;;;AAEA;;AAEA,IAAMC,mBAAmBC,uBAAUC,SAAV,CAAoB,CAACD,uBAAUE,IAAX,EAAiBF,uBAAUG,MAA3B,CAApB,CAAzB;AACA,IAAMC,uBAAuB,SAAvBA,oBAAuB,CAACC,OAAD,EAAa;AACxC,MAAI,CAACA,OAAL,EAAc;AACZ,WAAON,gBAAP;AACD;;AAED,WAASO,gBAAT,CAA0BC,KAA1B,EAAiCC,QAAjC,EAAoD;AAClD,QAAI,CAACH,QAAQI,kBAAb,EAAiC;AAAA,wCADWC,IACX;AADWA,YACX;AAAA;;AAC/B,aAAOX,mCAAiBQ,KAAjB,EAAwBC,QAAxB,SAAqCE,IAArC,EAAP;AACD;AACD,QAAMC,YAAYJ,MAAMC,QAAN,CAAlB;AACA,QAAIG,aAAa,IAAb,IAAqBN,QAAQI,kBAAR,CAA2BE,SAA3B,CAAzB,EAAgE;AAC9D,aAAO,IAAP;AACD;AACD,WAAO,IAAIC,SAAJ,QAAiBJ,QAAjB,qCAAP;AACD;AACDF,mBAAiBO,UAAjB;AAA8B,aAASC,wBAAT,CAAkCP,KAAlC,EAAyCC,QAAzC,EAA4D;AACxF,UAAI,CAACH,QAAQI,kBAAb,EAAiC;AAAA,2CADiDC,IACjD;AADiDA,cACjD;AAAA;;AAC/B,eAAOX,iBAAiBc,UAAjB,0BAA4BN,KAA5B,EAAmCC,QAAnC,SAAgDE,IAAhD,EAAP;AACD;AACD,UAAMC,YAAYJ,MAAMC,QAAN,CAAlB,CAJwF,CAIrD;AACnC,UAAIH,QAAQI,kBAAR,CAA2BE,SAA3B,CAAJ,EAA2C;AACzC,eAAO,IAAP;AACD;AACD,aAAO,IAAIC,SAAJ,QAAiBJ,QAAjB,qCAAP;AACD;;AATD,WAAuCM,wBAAvC;AAAA;AAUA,SAAOR,gBAAP;AACD,CA1BD;;AA4BA;;;;;;;;AAQe,SAASR,kBAAT,CAA4BiB,IAA5B,EAAgD;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AAAA,MACrDX,OADqD,GACHW,OADG,CACrDX,OADqD;AAAA,MACzBY,iBADyB,GACHD,OADG,CAC5CE,iBAD4C;;AAAA,MAGvDC,gBAHuD;AAAA;;AAI3D,gCAAqB;AAAA;;AAAA;;AAAA,yCAANT,IAAM;AAANA,YAAM;AAAA;;AAAA,iKACVA,IADU;;AAAA,wBAEgC,MAAKH,KAFrC;AAAA,UAEXA,KAFW,eAEXA,KAFW;AAAA,UAEJa,sBAFI,eAEJA,sBAFI;AAAA,UAEoBC,OAFpB,eAEoBA,OAFpB;;AAGnB,YAAKC,KAAL,GAAa;AACXC,eAAO,IADI;AAEXhB,oBAFW;AAGXa,sDAHW;AAIXC;AAJW,OAAb;AAHmB;AASpB;;AAb0D;AAAA;AAAA;AAAA,+BAe7CG,QAf6C,EAenCC,UAfmC,EAeD;AAAA,cAAtBC,QAAsB,uEAAXC,SAAW;AAAA,uBACP,KAAKL,KADE;AAAA,cACzCM,QADyC,UAChDrB,KADgD;AAAA,cACtBsB,UADsB,UAC/BR,OAD+B;;AAExD,cAAMd,qCAAaqB,QAAb,EAA0BJ,QAA1B,CAAN;AACA,cAAMH,uCAAeQ,UAAf,EAA8BJ,UAA9B,CAAN;AACA,eAAKK,QAAL,CAAc,EAAEvB,YAAF,EAASc,gBAAT,EAAd,EAAkCK,QAAlC;AACD;;AApB0D;AAAA;AAAA;AAAA;AAAA;AAAA,2CAsBjCnB,KAtBiC,EAsBJ;AAAA,cAAtBmB,QAAsB,uEAAXC,SAAW;;AACrD,eAAKG,QAAL,CAAc,EAAEV,wBAAwBb,KAA1B,EAAd,EAAiDmB,QAAjD;AACD;;AAxB0D;AAAA;AAAA;AAAA;AAAA;AAAA,0BA0BlD;AAAA,uBACwB,KAAKnB,KAD7B;AAAA,cACCwB,SADD,UACCA,SADD;AAAA,cACYC,OADZ,UACYA,OADZ;AAAA,wBAE0C,KAAKV,KAF/C;AAAA,cAECC,KAFD,WAECA,KAFD;AAAA,cAEQhB,KAFR,WAEQA,KAFR;AAAA,cAEea,sBAFf,WAEeA,sBAFf;;AAGP,cAAI,CAACG,KAAL,EAAY,OAAO,IAAP;AACZ;AACA,cAAMU,YAAY,iCAAC,SAAD,aAAW,KAAKD,OAAhB,IAA6BzB,KAA7B,EAAlB;AACA,cAAIU,iBAAJ,EAAuB;AACrB;AACE;AACA;AAAC,iCAAD;AAAuBG,sCAAvB;AACE;AAAC,yCAAD;AAAA;AAAaa;AAAb;AADF;AAFF;AAMD;AACD,iBAAOA,SAAP;AACD;;AAzC0D;AAAA;AAAA;;AAAA;AAAA,IAG9BC,mBAAMH,SAHwB;;AA2C7DZ,mBAAiBgB,SAAjB,GAA6B;AAC3BJ,eAAW3B,qBAAqBC,OAArB,EAA8BQ,UADd;AAE3BmB,aAAShC,uBAAUC,SAAV,CAAoB,CAACD,uBAAUG,MAAX,EAAmB,2BAAnB,CAApB,CAFkB;AAG3BI,WAAOP,uBAAUoC,MAAV,CAAiBvB,UAHG;AAI3BO,4BAAwBpB,uBAAUoC,MAJP;AAK3Bf,aAASrB,uBAAUoC;AALQ,GAA7B;AAOAjB,mBAAiBkB,YAAjB,GAAgC;AAC9BL,aAAS,IADqB;AAE9BX,aAAS,IAFqB;AAG9BD,4BAAwB;AAHM,GAAhC;;AAMA,MAAIJ,QAAQK,OAAR,KAAoBN,KAAKuB,IAAL,CAAUC,YAAV,IAA0BvB,QAAQwB,iBAAtD,CAAJ,EAA8E;AAC5E;AACA;AACA;AACA;AACA;AACA,QAAMA,iDACDzB,KAAKuB,IAAL,CAAUC,YADT,EAEDvB,QAAQwB,iBAFP,CAAN;;AAKArB,qBAAiBsB,SAAjB,CAA2BC,eAA3B;AAA6C,eAASA,eAAT,GAA2B;AACtE,eAAO,KAAKpB,KAAL,CAAWD,OAAlB;AACD;;AAFD,aAAsDqB,eAAtD;AAAA;AAGAvB,qBAAiBqB,iBAAjB,GAAqCA,iBAArC;AACD;AACD,SAAOrB,gBAAP;AACD","file":"createMountWrapper.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ref } from 'airbnb-prop-types';\nimport RootFinder from './RootFinder';\n\n/* eslint react/forbid-prop-types: 0 */\n\nconst stringOrFunction = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\nconst makeValidElementType = (adapter) => {\n if (!adapter) {\n return stringOrFunction;\n }\n\n function validElementType(props, propName, ...args) {\n if (!adapter.isValidElementType) {\n return stringOrFunction(props, propName, ...args);\n }\n const propValue = props[propName];\n if (propValue == null || adapter.isValidElementType(propValue)) {\n return null;\n }\n return new TypeError(`${propName} must be a valid element type!`);\n }\n validElementType.isRequired = function validElementTypeRequired(props, propName, ...args) {\n if (!adapter.isValidElementType) {\n return stringOrFunction.isRequired(props, propName, ...args);\n }\n const propValue = props[propName]; // eslint-disable-line react/destructuring-assignment\n if (adapter.isValidElementType(propValue)) {\n return null;\n }\n return new TypeError(`${propName} must be a valid element type!`);\n };\n return validElementType;\n};\n\n/**\n * This is a utility component to wrap around the nodes we are\n * passing in to `mount()`. Theoretically, you could do everything\n * we are doing without this, but this makes it easier since\n * `renderIntoDocument()` doesn't really pass back a reference to\n * the DOM node it rendered to, so we can't really \"re-render\" to\n * pass new props in.\n */\nexport default function createMountWrapper(node, options = {}) {\n const { adapter, wrappingComponent: WrappingComponent } = options;\n\n class WrapperComponent extends React.Component {\n constructor(...args) {\n super(...args);\n const { props, wrappingComponentProps, context } = this.props;\n this.state = {\n mount: true,\n props,\n wrappingComponentProps,\n context,\n };\n }\n\n setChildProps(newProps, newContext, callback = undefined) {\n const { props: oldProps, context: oldContext } = this.state;\n const props = { ...oldProps, ...newProps };\n const context = { ...oldContext, ...newContext };\n this.setState({ props, context }, callback);\n }\n\n setWrappingComponentProps(props, callback = undefined) {\n this.setState({ wrappingComponentProps: props }, callback);\n }\n\n render() {\n const { Component, refProp } = this.props;\n const { mount, props, wrappingComponentProps } = this.state;\n if (!mount) return null;\n // eslint-disable-next-line react/jsx-props-no-spreading\n const component = ;\n if (WrappingComponent) {\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n \n {component}\n \n );\n }\n return component;\n }\n }\n WrapperComponent.propTypes = {\n Component: makeValidElementType(adapter).isRequired,\n refProp: PropTypes.oneOfType([PropTypes.string, ref()]),\n props: PropTypes.object.isRequired,\n wrappingComponentProps: PropTypes.object,\n context: PropTypes.object,\n };\n WrapperComponent.defaultProps = {\n refProp: null,\n context: null,\n wrappingComponentProps: null,\n };\n\n if (options.context && (node.type.contextTypes || options.childContextTypes)) {\n // For full rendering, we are using this wrapper component to provide context if it is\n // specified in both the options AND the child component defines `contextTypes` statically\n // OR the merged context types for all children (the node component or deeper children) are\n // specified in options parameter under childContextTypes.\n // In that case, we define both a `getChildContext()` function and a `childContextTypes` prop.\n const childContextTypes = {\n ...node.type.contextTypes,\n ...options.childContextTypes,\n };\n\n WrapperComponent.prototype.getChildContext = function getChildContext() {\n return this.state.context;\n };\n WrapperComponent.childContextTypes = childContextTypes;\n }\n return WrapperComponent;\n}\n"]}